brintos

brintos / linux-shallow public Read only

0
0
Text · 5.7 KiB · f8ece89 Raw
268 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3	STV0900/0903 Multistandard Broadcast Frontend driver4	Copyright (C) Manu Abraham <abraham.manu@gmail.com>5 6	Copyright (C) ST Microelectronics7 8*/9 10#ifndef __STV090x_PRIV_H11#define __STV090x_PRIV_H12 13#include <media/dvb_frontend.h>14 15#define FE_ERROR				016#define FE_NOTICE				117#define FE_INFO					218#define FE_DEBUG				319#define FE_DEBUGREG				420 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	  3073#define STV090x_SEARCH_AGC2_TH_CUT20	 70074#define STV090x_SEARCH_AGC2_TH_CUT30	140075 76#define STV090x_SEARCH_AGC2_TH(__ver)	\77	((__ver <= 0x20) ?		\78	STV090x_SEARCH_AGC2_TH_CUT20 :	\79	STV090x_SEARCH_AGC2_TH_CUT30)80 81enum stv090x_signal_state {82	STV090x_NOAGC1,83	STV090x_NOCARRIER,84	STV090x_NODATA,85	STV090x_DATAOK,86	STV090x_RANGEOK,87	STV090x_OUTOFRANGE88};89 90enum 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_PRERR101};102 103enum stv090x_modulation {104	STV090x_QPSK,105	STV090x_8PSK,106	STV090x_16APSK,107	STV090x_32APSK,108	STV090x_UNKNOWN109};110 111enum stv090x_frame {112	STV090x_LONG_FRAME,113	STV090x_SHORT_FRAME114};115 116enum stv090x_pilot {117	STV090x_PILOTS_OFF,118	STV090x_PILOTS_ON119};120 121enum stv090x_rolloff {122	STV090x_RO_35,123	STV090x_RO_25,124	STV090x_RO_20125};126 127enum stv090x_inversion {128	STV090x_IQ_AUTO,129	STV090x_IQ_NORMAL,130	STV090x_IQ_SWAP131};132 133enum 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_UNKNOWN164};165 166enum stv090x_search {167	STV090x_SEARCH_DSS = 0,168	STV090x_SEARCH_DVBS1,169	STV090x_SEARCH_DVBS2,170	STV090x_SEARCH_AUTO171};172 173enum stv090x_algo {174	STV090x_BLIND_SEARCH,175	STV090x_COLD_SEARCH,176	STV090x_WARM_SEARCH177};178 179enum stv090x_delsys {180	STV090x_ERROR = 0,181	STV090x_DVBS1 = 1,182	STV090x_DVBS2,183	STV090x_DSS184};185 186struct 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 201struct 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 211struct stv090x_reg {212	u16 addr;213	u8  data;214};215 216struct stv090x_tab {217	s32 real;218	s32 read;219};220 221struct 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 233struct 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 */268