Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003     STV0900/0903 Multistandard Broadcast Frontend driver
0004     Copyright (C) Manu Abraham <abraham.manu@gmail.com>
0005 
0006     Copyright (C) ST Microelectronics
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;  /*      SR <   3M */
0205     u8 crl_5;  /*  3 < SR <=  7M */
0206     u8 crl_10; /*  7 < SR <= 15M */
0207     u8 crl_20; /* 10 < SR <= 25M */
0208     u8 crl_30; /* 10 < SR <= 45M */
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; /* Lock access to shared register */
0226     struct mutex        tuner_lock; /* Lock access to tuners */
0227     s32         mclk; /* Masterclock Divider factor */
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; /* Cached module verbosity */
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 /* __STV090x_PRIV_H */