0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef __STV090x_PRIV_H
0011 #define __STV090x_PRIV_H
0012
0013 #include <media/dvb_frontend.h>
0014
0015 #define FE_ERROR 0
0016 #define FE_NOTICE 1
0017 #define FE_INFO 2
0018 #define FE_DEBUG 3
0019 #define FE_DEBUGREG 4
0020
0021 #define dprintk(__y, __z, format, arg...) do { \
0022 if (__z) { \
0023 if ((verbose > FE_ERROR) && (verbose > __y)) \
0024 printk(KERN_ERR "%s: " format "\n", __func__ , ##arg); \
0025 else if ((verbose > FE_NOTICE) && (verbose > __y)) \
0026 printk(KERN_NOTICE "%s: " format "\n", __func__ , ##arg); \
0027 else if ((verbose > FE_INFO) && (verbose > __y)) \
0028 printk(KERN_INFO "%s: " format "\n", __func__ , ##arg); \
0029 else if ((verbose > FE_DEBUG) && (verbose > __y)) \
0030 printk(KERN_DEBUG "%s: " format "\n", __func__ , ##arg); \
0031 } else { \
0032 if (verbose > __y) \
0033 printk(format, ##arg); \
0034 } \
0035 } while (0)
0036
0037 #define STV090x_READ_DEMOD(__state, __reg) (( \
0038 (__state)->demod == STV090x_DEMODULATOR_1) ? \
0039 stv090x_read_reg(__state, STV090x_P2_##__reg) : \
0040 stv090x_read_reg(__state, STV090x_P1_##__reg))
0041
0042 #define STV090x_WRITE_DEMOD(__state, __reg, __data) (( \
0043 (__state)->demod == STV090x_DEMODULATOR_1) ? \
0044 stv090x_write_reg(__state, STV090x_P2_##__reg, __data) :\
0045 stv090x_write_reg(__state, STV090x_P1_##__reg, __data))
0046
0047 #define STV090x_ADDR_OFFST(__state, __x) (( \
0048 (__state->demod) == STV090x_DEMODULATOR_1) ? \
0049 STV090x_P1_##__x : \
0050 STV090x_P2_##__x)
0051
0052
0053 #define STV090x_SETFIELD(mask, bitf, val) (mask = (mask & (~(((1 << STV090x_WIDTH_##bitf) - 1) <<\
0054 STV090x_OFFST_##bitf))) | \
0055 (val << STV090x_OFFST_##bitf))
0056
0057 #define STV090x_GETFIELD(val, bitf) ((val >> STV090x_OFFST_##bitf) & ((1 << STV090x_WIDTH_##bitf) - 1))
0058
0059
0060 #define STV090x_SETFIELD_Px(mask, bitf, val) (mask = (mask & (~(((1 << STV090x_WIDTH_Px_##bitf) - 1) <<\
0061 STV090x_OFFST_Px_##bitf))) | \
0062 (val << STV090x_OFFST_Px_##bitf))
0063
0064 #define STV090x_GETFIELD_Px(val, bitf) ((val >> STV090x_OFFST_Px_##bitf) & ((1 << STV090x_WIDTH_Px_##bitf) - 1))
0065
0066 #define MAKEWORD16(__a, __b) (((__a) << 8) | (__b))
0067
0068 #define MSB(__x) ((__x >> 8) & 0xff)
0069 #define LSB(__x) (__x & 0xff)
0070
0071
0072 #define STV090x_IQPOWER_THRESHOLD 30
0073 #define STV090x_SEARCH_AGC2_TH_CUT20 700
0074 #define STV090x_SEARCH_AGC2_TH_CUT30 1400
0075
0076 #define STV090x_SEARCH_AGC2_TH(__ver) \
0077 ((__ver <= 0x20) ? \
0078 STV090x_SEARCH_AGC2_TH_CUT20 : \
0079 STV090x_SEARCH_AGC2_TH_CUT30)
0080
0081 enum stv090x_signal_state {
0082 STV090x_NOAGC1,
0083 STV090x_NOCARRIER,
0084 STV090x_NODATA,
0085 STV090x_DATAOK,
0086 STV090x_RANGEOK,
0087 STV090x_OUTOFRANGE
0088 };
0089
0090 enum stv090x_fec {
0091 STV090x_PR12 = 0,
0092 STV090x_PR23,
0093 STV090x_PR34,
0094 STV090x_PR45,
0095 STV090x_PR56,
0096 STV090x_PR67,
0097 STV090x_PR78,
0098 STV090x_PR89,
0099 STV090x_PR910,
0100 STV090x_PRERR
0101 };
0102
0103 enum stv090x_modulation {
0104 STV090x_QPSK,
0105 STV090x_8PSK,
0106 STV090x_16APSK,
0107 STV090x_32APSK,
0108 STV090x_UNKNOWN
0109 };
0110
0111 enum stv090x_frame {
0112 STV090x_LONG_FRAME,
0113 STV090x_SHORT_FRAME
0114 };
0115
0116 enum stv090x_pilot {
0117 STV090x_PILOTS_OFF,
0118 STV090x_PILOTS_ON
0119 };
0120
0121 enum stv090x_rolloff {
0122 STV090x_RO_35,
0123 STV090x_RO_25,
0124 STV090x_RO_20
0125 };
0126
0127 enum stv090x_inversion {
0128 STV090x_IQ_AUTO,
0129 STV090x_IQ_NORMAL,
0130 STV090x_IQ_SWAP
0131 };
0132
0133 enum stv090x_modcod {
0134 STV090x_DUMMY_PLF = 0,
0135 STV090x_QPSK_14,
0136 STV090x_QPSK_13,
0137 STV090x_QPSK_25,
0138 STV090x_QPSK_12,
0139 STV090x_QPSK_35,
0140 STV090x_QPSK_23,
0141 STV090x_QPSK_34,
0142 STV090x_QPSK_45,
0143 STV090x_QPSK_56,
0144 STV090x_QPSK_89,
0145 STV090x_QPSK_910,
0146 STV090x_8PSK_35,
0147 STV090x_8PSK_23,
0148 STV090x_8PSK_34,
0149 STV090x_8PSK_56,
0150 STV090x_8PSK_89,
0151 STV090x_8PSK_910,
0152 STV090x_16APSK_23,
0153 STV090x_16APSK_34,
0154 STV090x_16APSK_45,
0155 STV090x_16APSK_56,
0156 STV090x_16APSK_89,
0157 STV090x_16APSK_910,
0158 STV090x_32APSK_34,
0159 STV090x_32APSK_45,
0160 STV090x_32APSK_56,
0161 STV090x_32APSK_89,
0162 STV090x_32APSK_910,
0163 STV090x_MODCODE_UNKNOWN
0164 };
0165
0166 enum stv090x_search {
0167 STV090x_SEARCH_DSS = 0,
0168 STV090x_SEARCH_DVBS1,
0169 STV090x_SEARCH_DVBS2,
0170 STV090x_SEARCH_AUTO
0171 };
0172
0173 enum stv090x_algo {
0174 STV090x_BLIND_SEARCH,
0175 STV090x_COLD_SEARCH,
0176 STV090x_WARM_SEARCH
0177 };
0178
0179 enum stv090x_delsys {
0180 STV090x_ERROR = 0,
0181 STV090x_DVBS1 = 1,
0182 STV090x_DVBS2,
0183 STV090x_DSS
0184 };
0185
0186 struct stv090x_long_frame_crloop {
0187 enum stv090x_modcod modcod;
0188
0189 u8 crl_pilots_on_2;
0190 u8 crl_pilots_off_2;
0191 u8 crl_pilots_on_5;
0192 u8 crl_pilots_off_5;
0193 u8 crl_pilots_on_10;
0194 u8 crl_pilots_off_10;
0195 u8 crl_pilots_on_20;
0196 u8 crl_pilots_off_20;
0197 u8 crl_pilots_on_30;
0198 u8 crl_pilots_off_30;
0199 };
0200
0201 struct stv090x_short_frame_crloop {
0202 enum stv090x_modulation modulation;
0203
0204 u8 crl_2;
0205 u8 crl_5;
0206 u8 crl_10;
0207 u8 crl_20;
0208 u8 crl_30;
0209 };
0210
0211 struct stv090x_reg {
0212 u16 addr;
0213 u8 data;
0214 };
0215
0216 struct stv090x_tab {
0217 s32 real;
0218 s32 read;
0219 };
0220
0221 struct stv090x_internal {
0222 struct i2c_adapter *i2c_adap;
0223 u8 i2c_addr;
0224
0225 struct mutex demod_lock;
0226 struct mutex tuner_lock;
0227 s32 mclk;
0228 u32 dev_ver;
0229
0230 int num_used;
0231 };
0232
0233 struct stv090x_state {
0234 enum stv090x_device device;
0235 enum stv090x_demodulator demod;
0236 enum stv090x_mode demod_mode;
0237 struct stv090x_internal *internal;
0238
0239 struct i2c_adapter *i2c;
0240 struct stv090x_config *config;
0241 struct dvb_frontend frontend;
0242
0243 u32 *verbose;
0244
0245 enum stv090x_delsys delsys;
0246 enum stv090x_fec fec;
0247 enum stv090x_modulation modulation;
0248 enum stv090x_modcod modcod;
0249 enum stv090x_search search_mode;
0250 enum stv090x_frame frame_len;
0251 enum stv090x_pilot pilots;
0252 enum stv090x_rolloff rolloff;
0253 enum stv090x_inversion inversion;
0254 enum stv090x_algo algo;
0255
0256 u32 frequency;
0257 u32 srate;
0258
0259 s32 tuner_bw;
0260
0261 s32 search_range;
0262
0263 s32 DemodTimeout;
0264 s32 FecTimeout;
0265 };
0266
0267 #endif