root/drivers/media/dvb-frontends/stv090x_priv.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0-or-later */
   2 /*
   3         STV0900/0903 Multistandard Broadcast Frontend driver
   4         Copyright (C) Manu Abraham <abraham.manu@gmail.com>
   5 
   6         Copyright (C) ST Microelectronics
   7 
   8 */
   9 
  10 #ifndef __STV090x_PRIV_H
  11 #define __STV090x_PRIV_H
  12 
  13 #include <media/dvb_frontend.h>
  14 
  15 #define FE_ERROR                                0
  16 #define FE_NOTICE                               1
  17 #define FE_INFO                                 2
  18 #define FE_DEBUG                                3
  19 #define FE_DEBUGREG                             4
  20 
  21 #define dprintk(__y, __z, format, arg...) do {                                          \
  22         if (__z) {                                                                      \
  23                 if      ((verbose > FE_ERROR) && (verbose > __y))                       \
  24                         printk(KERN_ERR "%s: " format "\n", __func__ , ##arg);          \
  25                 else if ((verbose > FE_NOTICE) && (verbose > __y))                      \
  26                         printk(KERN_NOTICE "%s: " format "\n", __func__ , ##arg);       \
  27                 else if ((verbose > FE_INFO) && (verbose > __y))                        \
  28                         printk(KERN_INFO "%s: " format "\n", __func__ , ##arg);         \
  29                 else if ((verbose > FE_DEBUG) && (verbose > __y))                       \
  30                         printk(KERN_DEBUG "%s: " format "\n", __func__ , ##arg);        \
  31         } else {                                                                        \
  32                 if (verbose > __y)                                                      \
  33                         printk(format, ##arg);                                          \
  34         }                                                                               \
  35 } while (0)
  36 
  37 #define STV090x_READ_DEMOD(__state, __reg) ((                   \
  38         (__state)->demod == STV090x_DEMODULATOR_1)      ?       \
  39         stv090x_read_reg(__state, STV090x_P2_##__reg) :         \
  40         stv090x_read_reg(__state, STV090x_P1_##__reg))
  41 
  42 #define STV090x_WRITE_DEMOD(__state, __reg, __data) ((          \
  43         (__state)->demod == STV090x_DEMODULATOR_1)      ?       \
  44         stv090x_write_reg(__state, STV090x_P2_##__reg, __data) :\
  45         stv090x_write_reg(__state, STV090x_P1_##__reg, __data))
  46 
  47 #define STV090x_ADDR_OFFST(__state, __x) ((                     \
  48         (__state->demod) == STV090x_DEMODULATOR_1)      ?       \
  49                 STV090x_P1_##__x :                              \
  50                 STV090x_P2_##__x)
  51 
  52 
  53 #define STV090x_SETFIELD(mask, bitf, val)       (mask = (mask & (~(((1 << STV090x_WIDTH_##bitf) - 1) <<\
  54                                                          STV090x_OFFST_##bitf))) | \
  55                                                          (val << STV090x_OFFST_##bitf))
  56 
  57 #define STV090x_GETFIELD(val, bitf)             ((val >> STV090x_OFFST_##bitf) & ((1 << STV090x_WIDTH_##bitf) - 1))
  58 
  59 
  60 #define STV090x_SETFIELD_Px(mask, bitf, val)    (mask = (mask & (~(((1 << STV090x_WIDTH_Px_##bitf) - 1) <<\
  61                                                          STV090x_OFFST_Px_##bitf))) | \
  62                                                          (val << STV090x_OFFST_Px_##bitf))
  63 
  64 #define STV090x_GETFIELD_Px(val, bitf)          ((val >> STV090x_OFFST_Px_##bitf) & ((1 << STV090x_WIDTH_Px_##bitf) - 1))
  65 
  66 #define MAKEWORD16(__a, __b)                    (((__a) << 8) | (__b))
  67 
  68 #define MSB(__x)                                ((__x >> 8) & 0xff)
  69 #define LSB(__x)                                (__x & 0xff)
  70 
  71 
  72 #define STV090x_IQPOWER_THRESHOLD         30
  73 #define STV090x_SEARCH_AGC2_TH_CUT20     700
  74 #define STV090x_SEARCH_AGC2_TH_CUT30    1400
  75 
  76 #define STV090x_SEARCH_AGC2_TH(__ver)   \
  77         ((__ver <= 0x20) ?              \
  78         STV090x_SEARCH_AGC2_TH_CUT20 :  \
  79         STV090x_SEARCH_AGC2_TH_CUT30)
  80 
  81 enum stv090x_signal_state {
  82         STV090x_NOAGC1,
  83         STV090x_NOCARRIER,
  84         STV090x_NODATA,
  85         STV090x_DATAOK,
  86         STV090x_RANGEOK,
  87         STV090x_OUTOFRANGE
  88 };
  89 
  90 enum stv090x_fec {
  91         STV090x_PR12 = 0,
  92         STV090x_PR23,
  93         STV090x_PR34,
  94         STV090x_PR45,
  95         STV090x_PR56,
  96         STV090x_PR67,
  97         STV090x_PR78,
  98         STV090x_PR89,
  99         STV090x_PR910,
 100         STV090x_PRERR
 101 };
 102 
 103 enum stv090x_modulation {
 104         STV090x_QPSK,
 105         STV090x_8PSK,
 106         STV090x_16APSK,
 107         STV090x_32APSK,
 108         STV090x_UNKNOWN
 109 };
 110 
 111 enum stv090x_frame {
 112         STV090x_LONG_FRAME,
 113         STV090x_SHORT_FRAME
 114 };
 115 
 116 enum stv090x_pilot {
 117         STV090x_PILOTS_OFF,
 118         STV090x_PILOTS_ON
 119 };
 120 
 121 enum stv090x_rolloff {
 122         STV090x_RO_35,
 123         STV090x_RO_25,
 124         STV090x_RO_20
 125 };
 126 
 127 enum stv090x_inversion {
 128         STV090x_IQ_AUTO,
 129         STV090x_IQ_NORMAL,
 130         STV090x_IQ_SWAP
 131 };
 132 
 133 enum stv090x_modcod {
 134         STV090x_DUMMY_PLF = 0,
 135         STV090x_QPSK_14,
 136         STV090x_QPSK_13,
 137         STV090x_QPSK_25,
 138         STV090x_QPSK_12,
 139         STV090x_QPSK_35,
 140         STV090x_QPSK_23,
 141         STV090x_QPSK_34,
 142         STV090x_QPSK_45,
 143         STV090x_QPSK_56,
 144         STV090x_QPSK_89,
 145         STV090x_QPSK_910,
 146         STV090x_8PSK_35,
 147         STV090x_8PSK_23,
 148         STV090x_8PSK_34,
 149         STV090x_8PSK_56,
 150         STV090x_8PSK_89,
 151         STV090x_8PSK_910,
 152         STV090x_16APSK_23,
 153         STV090x_16APSK_34,
 154         STV090x_16APSK_45,
 155         STV090x_16APSK_56,
 156         STV090x_16APSK_89,
 157         STV090x_16APSK_910,
 158         STV090x_32APSK_34,
 159         STV090x_32APSK_45,
 160         STV090x_32APSK_56,
 161         STV090x_32APSK_89,
 162         STV090x_32APSK_910,
 163         STV090x_MODCODE_UNKNOWN
 164 };
 165 
 166 enum stv090x_search {
 167         STV090x_SEARCH_DSS = 0,
 168         STV090x_SEARCH_DVBS1,
 169         STV090x_SEARCH_DVBS2,
 170         STV090x_SEARCH_AUTO
 171 };
 172 
 173 enum stv090x_algo {
 174         STV090x_BLIND_SEARCH,
 175         STV090x_COLD_SEARCH,
 176         STV090x_WARM_SEARCH
 177 };
 178 
 179 enum stv090x_delsys {
 180         STV090x_ERROR = 0,
 181         STV090x_DVBS1 = 1,
 182         STV090x_DVBS2,
 183         STV090x_DSS
 184 };
 185 
 186 struct stv090x_long_frame_crloop {
 187         enum stv090x_modcod     modcod;
 188 
 189         u8 crl_pilots_on_2;
 190         u8 crl_pilots_off_2;
 191         u8 crl_pilots_on_5;
 192         u8 crl_pilots_off_5;
 193         u8 crl_pilots_on_10;
 194         u8 crl_pilots_off_10;
 195         u8 crl_pilots_on_20;
 196         u8 crl_pilots_off_20;
 197         u8 crl_pilots_on_30;
 198         u8 crl_pilots_off_30;
 199 };
 200 
 201 struct stv090x_short_frame_crloop {
 202         enum stv090x_modulation modulation;
 203 
 204         u8 crl_2;  /*      SR <   3M */
 205         u8 crl_5;  /*  3 < SR <=  7M */
 206         u8 crl_10; /*  7 < SR <= 15M */
 207         u8 crl_20; /* 10 < SR <= 25M */
 208         u8 crl_30; /* 10 < SR <= 45M */
 209 };
 210 
 211 struct stv090x_reg {
 212         u16 addr;
 213         u8  data;
 214 };
 215 
 216 struct stv090x_tab {
 217         s32 real;
 218         s32 read;
 219 };
 220 
 221 struct stv090x_internal {
 222         struct i2c_adapter      *i2c_adap;
 223         u8                      i2c_addr;
 224 
 225         struct mutex            demod_lock; /* Lock access to shared register */
 226         struct mutex            tuner_lock; /* Lock access to tuners */
 227         s32                     mclk; /* Masterclock Divider factor */
 228         u32                     dev_ver;
 229 
 230         int                     num_used;
 231 };
 232 
 233 struct stv090x_state {
 234         enum stv090x_device             device;
 235         enum stv090x_demodulator        demod;
 236         enum stv090x_mode               demod_mode;
 237         struct stv090x_internal         *internal;
 238 
 239         struct i2c_adapter              *i2c;
 240         struct stv090x_config   *config;
 241         struct dvb_frontend             frontend;
 242 
 243         u32                             *verbose; /* Cached module verbosity */
 244 
 245         enum stv090x_delsys             delsys;
 246         enum stv090x_fec                fec;
 247         enum stv090x_modulation         modulation;
 248         enum stv090x_modcod             modcod;
 249         enum stv090x_search             search_mode;
 250         enum stv090x_frame              frame_len;
 251         enum stv090x_pilot              pilots;
 252         enum stv090x_rolloff            rolloff;
 253         enum stv090x_inversion          inversion;
 254         enum stv090x_algo               algo;
 255 
 256         u32                             frequency;
 257         u32                             srate;
 258 
 259         s32                             tuner_bw;
 260 
 261         s32                             search_range;
 262 
 263         s32                             DemodTimeout;
 264         s32                             FecTimeout;
 265 };
 266 
 267 #endif /* __STV090x_PRIV_H */

/* [<][>][^][v][top][bottom][index][help] */