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