2009-04-06 22:45:20 +04:00
/*
STV0900 / 0903 Multistandard Broadcast Frontend driver
Copyright ( C ) Manu Abraham < abraham . manu @ gmail . com >
Copyright ( C ) ST Microelectronics
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*/
# ifndef __STV090x_PRIV_H
# define __STV090x_PRIV_H
# include "dvb_frontend.h"
# define FE_ERROR 0
# define FE_NOTICE 1
# define FE_INFO 2
# define FE_DEBUG 3
# define FE_DEBUGREG 4
# define dprintk(__y, __z, format, arg...) do { \
if ( __z ) { \
if ( ( verbose > FE_ERROR ) & & ( verbose > __y ) ) \
printk ( KERN_ERR " %s: " format " \n " , __func__ , # # arg ) ; \
else if ( ( verbose > FE_NOTICE ) & & ( verbose > __y ) ) \
printk ( KERN_NOTICE " %s: " format " \n " , __func__ , # # arg ) ; \
else if ( ( verbose > FE_INFO ) & & ( verbose > __y ) ) \
printk ( KERN_INFO " %s: " format " \n " , __func__ , # # arg ) ; \
else if ( ( verbose > FE_DEBUG ) & & ( verbose > __y ) ) \
printk ( KERN_DEBUG " %s: " format " \n " , __func__ , # # arg ) ; \
} else { \
if ( verbose > __y ) \
printk ( format , # # arg ) ; \
} \
} while ( 0 )
# define STV090x_READ_DEMOD(__state, __reg) (( \
( __state ) - > demod = = STV090x_DEMODULATOR_1 ) ? \
stv090x_read_reg ( __state , STV090x_P2_ # # __reg ) : \
stv090x_read_reg ( __state , STV090x_P1_ # # __reg ) )
# define STV090x_WRITE_DEMOD(__state, __reg, __data) (( \
( __state ) - > demod = = STV090x_DEMODULATOR_1 ) ? \
stv090x_write_reg ( __state , STV090x_P2_ # # __reg , __data ) : \
stv090x_write_reg ( __state , STV090x_P1_ # # __reg , __data ) )
# define STV090x_ADDR_OFFST(__state, __x) (( \
( __state - > demod ) = = STV090x_DEMODULATOR_1 ) ? \
STV090x_P1_ # # __x : \
STV090x_P2_ # # __x )
# define STV090x_SETFIELD(mask, bitf, val) (mask = (mask & (~(((1 << STV090x_WIDTH_##bitf) - 1) <<\
STV090x_OFFST_ # # bitf ) ) ) | \
( val < < STV090x_OFFST_ # # bitf ) )
# define STV090x_GETFIELD(val, bitf) ((val >> STV090x_OFFST_##bitf) & ((1 << STV090x_WIDTH_##bitf) - 1))
# define STV090x_SETFIELD_Px(mask, bitf, val) (mask = (mask & (~(((1 << STV090x_WIDTH_Px_##bitf) - 1) <<\
STV090x_OFFST_Px_ # # bitf ) ) ) | \
( val < < STV090x_OFFST_Px_ # # bitf ) )
# define STV090x_GETFIELD_Px(val, bitf) ((val >> STV090x_OFFST_Px_##bitf) & ((1 << STV090x_WIDTH_Px_##bitf) - 1))
# define MAKEWORD16(__a, __b) (((__a) << 8) | (__b))
2009-05-03 01:26:58 +04:00
# define MSB(__x) ((__x >> 8) & 0xff)
# define LSB(__x) (__x & 0xff)
# define STV090x_IQPOWER_THRESHOLD 30
# define STV090x_SEARCH_AGC2_TH_CUT20 700
2009-11-14 00:16:44 +03:00
# define STV090x_SEARCH_AGC2_TH_CUT30 1400
2009-05-03 01:26:58 +04:00
# define STV090x_SEARCH_AGC2_TH(__ver) \
( ( __ver < = 0x20 ) ? \
STV090x_SEARCH_AGC2_TH_CUT20 : \
STV090x_SEARCH_AGC2_TH_CUT30 )
2009-04-06 22:45:20 +04:00
enum stv090x_signal_state {
2009-11-14 00:18:53 +03:00
STV090x_NOAGC1 ,
2009-04-06 22:45:20 +04:00
STV090x_NOCARRIER ,
STV090x_NODATA ,
STV090x_DATAOK ,
STV090x_RANGEOK ,
STV090x_OUTOFRANGE
} ;
enum stv090x_fec {
STV090x_PR12 = 0 ,
STV090x_PR23 ,
STV090x_PR34 ,
STV090x_PR45 ,
STV090x_PR56 ,
STV090x_PR67 ,
STV090x_PR78 ,
STV090x_PR89 ,
STV090x_PR910 ,
STV090x_PRERR
} ;
enum stv090x_modulation {
STV090x_QPSK ,
STV090x_8PSK ,
STV090x_16APSK ,
STV090x_32APSK ,
STV090x_UNKNOWN
} ;
enum stv090x_frame {
STV090x_LONG_FRAME ,
STV090x_SHORT_FRAME
} ;
enum stv090x_pilot {
STV090x_PILOTS_OFF ,
STV090x_PILOTS_ON
} ;
enum stv090x_rolloff {
STV090x_RO_35 ,
STV090x_RO_25 ,
STV090x_RO_20
} ;
enum stv090x_inversion {
STV090x_IQ_AUTO ,
STV090x_IQ_NORMAL ,
STV090x_IQ_SWAP
} ;
enum stv090x_modcod {
STV090x_DUMMY_PLF = 0 ,
STV090x_QPSK_14 ,
STV090x_QPSK_13 ,
STV090x_QPSK_25 ,
STV090x_QPSK_12 ,
STV090x_QPSK_35 ,
STV090x_QPSK_23 ,
STV090x_QPSK_34 ,
STV090x_QPSK_45 ,
STV090x_QPSK_56 ,
STV090x_QPSK_89 ,
STV090x_QPSK_910 ,
STV090x_8PSK_35 ,
STV090x_8PSK_23 ,
STV090x_8PSK_34 ,
STV090x_8PSK_56 ,
STV090x_8PSK_89 ,
STV090x_8PSK_910 ,
STV090x_16APSK_23 ,
STV090x_16APSK_34 ,
STV090x_16APSK_45 ,
STV090x_16APSK_56 ,
STV090x_16APSK_89 ,
STV090x_16APSK_910 ,
STV090x_32APSK_34 ,
STV090x_32APSK_45 ,
STV090x_32APSK_56 ,
STV090x_32APSK_89 ,
STV090x_32APSK_910 ,
STV090x_MODCODE_UNKNOWN
} ;
enum stv090x_search {
STV090x_SEARCH_DSS = 0 ,
STV090x_SEARCH_DVBS1 ,
STV090x_SEARCH_DVBS2 ,
STV090x_SEARCH_AUTO
} ;
enum stv090x_algo {
STV090x_BLIND_SEARCH ,
STV090x_COLD_SEARCH ,
STV090x_WARM_SEARCH
} ;
enum stv090x_delsys {
STV090x_ERROR = 0 ,
STV090x_DVBS1 = 1 ,
STV090x_DVBS2 ,
STV090x_DSS
} ;
struct stv090x_long_frame_crloop {
enum stv090x_modcod modcod ;
u8 crl_pilots_on_2 ;
u8 crl_pilots_off_2 ;
u8 crl_pilots_on_5 ;
u8 crl_pilots_off_5 ;
u8 crl_pilots_on_10 ;
u8 crl_pilots_off_10 ;
u8 crl_pilots_on_20 ;
u8 crl_pilots_off_20 ;
u8 crl_pilots_on_30 ;
u8 crl_pilots_off_30 ;
} ;
struct stv090x_short_frame_crloop {
enum stv090x_modulation modulation ;
2009-05-03 01:26:58 +04:00
u8 crl_2 ; /* SR < 3M */
u8 crl_5 ; /* 3 < SR <= 7M */
2009-04-06 22:45:20 +04:00
u8 crl_10 ; /* 7 < SR <= 15M */
u8 crl_20 ; /* 10 < SR <= 25M */
u8 crl_30 ; /* 10 < SR <= 45M */
} ;
struct stv090x_reg {
u16 addr ;
u8 data ;
} ;
struct stv090x_tab {
s32 real ;
s32 read ;
} ;
2010-01-06 01:19:43 +03:00
struct stv090x_internal {
struct i2c_adapter * i2c_adap ;
u8 i2c_addr ;
struct mutex demod_lock ; /* Lock access to shared register */
2010-01-06 01:20:21 +03:00
struct mutex tuner_lock ; /* Lock access to tuners */
2010-01-06 01:19:43 +03:00
s32 mclk ; /* Masterclock Divider factor */
u32 dev_ver ;
int num_used ;
} ;
2009-04-06 22:45:20 +04:00
struct stv090x_state {
enum stv090x_device device ;
enum stv090x_demodulator demod ;
enum stv090x_mode demod_mode ;
2010-01-06 01:19:43 +03:00
struct stv090x_internal * internal ;
2009-04-06 22:45:20 +04:00
struct i2c_adapter * i2c ;
const struct stv090x_config * config ;
struct dvb_frontend frontend ;
u32 * verbose ; /* Cached module verbosity */
enum stv090x_delsys delsys ;
enum stv090x_fec fec ;
enum stv090x_modulation modulation ;
enum stv090x_modcod modcod ;
enum stv090x_search search_mode ;
enum stv090x_frame frame_len ;
enum stv090x_pilot pilots ;
enum stv090x_rolloff rolloff ;
enum stv090x_inversion inversion ;
enum stv090x_algo algo ;
u32 frequency ;
u32 srate ;
s32 tuner_bw ;
s32 search_range ;
s32 DemodTimeout ;
s32 FecTimeout ;
} ;
# endif /* __STV090x_PRIV_H */