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