Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^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)     tda18271-priv.h - private header for the NXP TDA18271 silicon tuner
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)     Copyright (C) 2007, 2008 Michael Krufky <mkrufky@linuxtv.org>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) 
^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) #ifndef __TDA18271_PRIV_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #define __TDA18271_PRIV_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #include <linux/kernel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #include <linux/mutex.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) #include "tuner-i2c.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #include "tda18271.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define R_ID     0x00	/* ID byte                */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) #define R_TM     0x01	/* Thermo byte            */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #define R_PL     0x02	/* Power level byte       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #define R_EP1    0x03	/* Easy Prog byte 1       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) #define R_EP2    0x04	/* Easy Prog byte 2       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #define R_EP3    0x05	/* Easy Prog byte 3       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #define R_EP4    0x06	/* Easy Prog byte 4       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) #define R_EP5    0x07	/* Easy Prog byte 5       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) #define R_CPD    0x08	/* Cal Post-Divider byte  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) #define R_CD1    0x09	/* Cal Divider byte 1     */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) #define R_CD2    0x0a	/* Cal Divider byte 2     */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) #define R_CD3    0x0b	/* Cal Divider byte 3     */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) #define R_MPD    0x0c	/* Main Post-Divider byte */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) #define R_MD1    0x0d	/* Main Divider byte 1    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) #define R_MD2    0x0e	/* Main Divider byte 2    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) #define R_MD3    0x0f	/* Main Divider byte 3    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) #define R_EB1    0x10	/* Extended byte 1        */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define R_EB2    0x11	/* Extended byte 2        */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) #define R_EB3    0x12	/* Extended byte 3        */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #define R_EB4    0x13	/* Extended byte 4        */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) #define R_EB5    0x14	/* Extended byte 5        */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) #define R_EB6    0x15	/* Extended byte 6        */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) #define R_EB7    0x16	/* Extended byte 7        */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) #define R_EB8    0x17	/* Extended byte 8        */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) #define R_EB9    0x18	/* Extended byte 9        */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) #define R_EB10   0x19	/* Extended byte 10       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) #define R_EB11   0x1a	/* Extended byte 11       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) #define R_EB12   0x1b	/* Extended byte 12       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) #define R_EB13   0x1c	/* Extended byte 13       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #define R_EB14   0x1d	/* Extended byte 14       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) #define R_EB15   0x1e	/* Extended byte 15       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) #define R_EB16   0x1f	/* Extended byte 16       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) #define R_EB17   0x20	/* Extended byte 17       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) #define R_EB18   0x21	/* Extended byte 18       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) #define R_EB19   0x22	/* Extended byte 19       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) #define R_EB20   0x23	/* Extended byte 20       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) #define R_EB21   0x24	/* Extended byte 21       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) #define R_EB22   0x25	/* Extended byte 22       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) #define R_EB23   0x26	/* Extended byte 23       */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) #define TDA18271_NUM_REGS 39
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) /*---------------------------------------------------------------------*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) struct tda18271_rf_tracking_filter_cal {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	u32 rfmax;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	u8  rfband;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	u32 rf1_def;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	u32 rf2_def;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	u32 rf3_def;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	u32 rf1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) 	u32 rf2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	u32 rf3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 	s32 rf_a1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	s32 rf_b1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 	s32 rf_a2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	s32 rf_b2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) enum tda18271_pll {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	TDA18271_MAIN_PLL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	TDA18271_CAL_PLL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) struct tda18271_map_layout;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) enum tda18271_ver {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	TDA18271HDC1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	TDA18271HDC2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) struct tda18271_priv {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	unsigned char tda18271_regs[TDA18271_NUM_REGS];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	struct list_head	hybrid_tuner_instance_list;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	struct tuner_i2c_props	i2c_props;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	enum tda18271_mode mode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	enum tda18271_role role;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	enum tda18271_i2c_gate gate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	enum tda18271_ver id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 	enum tda18271_output_options output_opt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	enum tda18271_small_i2c small_i2c;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	unsigned int config; /* interface to saa713x / tda829x */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	unsigned int cal_initialized:1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	u8 tm_rfcal;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	struct tda18271_map_layout *maps;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 	struct tda18271_std_map std;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	struct tda18271_rf_tracking_filter_cal rf_cal_state[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	struct mutex lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 	u16 if_freq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	u32 frequency;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	u32 bandwidth;
^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) /*---------------------------------------------------------------------*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) extern int tda18271_debug;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) #define DBG_INFO 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define DBG_MAP  2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define DBG_REG  4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define DBG_ADV  8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define DBG_CAL  16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) __attribute__((format(printf, 4, 5)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) void _tda_printk(struct tda18271_priv *state, const char *level,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) 		 const char *func, const char *fmt, ...);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define tda_printk(st, lvl, fmt, arg...)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 	_tda_printk(st, lvl, __func__, fmt, ##arg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define tda_dprintk(st, lvl, fmt, arg...)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) do {								\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 	if (tda18271_debug & lvl)				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 		tda_printk(st, KERN_DEBUG, fmt, ##arg);		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define tda_info(fmt, arg...)	pr_info(fmt, ##arg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #define tda_warn(fmt, arg...)	tda_printk(priv, KERN_WARNING, fmt, ##arg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) #define tda_err(fmt, arg...)	tda_printk(priv, KERN_ERR,     fmt, ##arg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) #define tda_dbg(fmt, arg...)	tda_dprintk(priv, DBG_INFO,    fmt, ##arg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #define tda_map(fmt, arg...)	tda_dprintk(priv, DBG_MAP,     fmt, ##arg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) #define tda_reg(fmt, arg...)	tda_dprintk(priv, DBG_REG,     fmt, ##arg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) #define tda_cal(fmt, arg...)	tda_dprintk(priv, DBG_CAL,     fmt, ##arg)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) #define tda_fail(ret)							     \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) ({									     \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	int __ret;							     \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 	__ret = (ret < 0);						     \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	if (__ret)							     \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 		tda_printk(priv, KERN_ERR,				     \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 			   "error %d on line %d\n", ret, __LINE__);	     \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 	__ret;								     \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) /*---------------------------------------------------------------------*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) enum tda18271_map_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	/* tda18271_pll_map */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	MAIN_PLL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 	CAL_PLL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 	/* tda18271_map */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	RF_CAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	RF_CAL_KMCO,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	RF_CAL_DC_OVER_DT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	BP_FILTER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	RF_BAND,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	GAIN_TAPER,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	IR_MEASURE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) extern int tda18271_lookup_pll_map(struct dvb_frontend *fe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 				   enum tda18271_map_type map_type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 				   u32 *freq, u8 *post_div, u8 *div);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) extern int tda18271_lookup_map(struct dvb_frontend *fe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 			       enum tda18271_map_type map_type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) 			       u32 *freq, u8 *val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) extern int tda18271_lookup_thermometer(struct dvb_frontend *fe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) extern int tda18271_lookup_rf_band(struct dvb_frontend *fe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 				   u32 *freq, u8 *rf_band);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) extern int tda18271_lookup_cid_target(struct dvb_frontend *fe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 				      u32 *freq, u8 *cid_target,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 				      u16 *count_limit);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) extern int tda18271_assign_map_layout(struct dvb_frontend *fe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) /*---------------------------------------------------------------------*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) extern int tda18271_read_regs(struct dvb_frontend *fe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) extern int tda18271_read_extended(struct dvb_frontend *fe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) extern int tda18271_write_regs(struct dvb_frontend *fe, int idx, int len);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) extern int tda18271_init_regs(struct dvb_frontend *fe);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) extern int tda18271_charge_pump_source(struct dvb_frontend *fe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 				       enum tda18271_pll pll, int force);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) extern int tda18271_set_standby_mode(struct dvb_frontend *fe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 				     int sm, int sm_lt, int sm_xt);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) extern int tda18271_calc_main_pll(struct dvb_frontend *fe, u32 freq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) extern int tda18271_calc_cal_pll(struct dvb_frontend *fe, u32 freq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) extern int tda18271_calc_bp_filter(struct dvb_frontend *fe, u32 *freq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) extern int tda18271_calc_km(struct dvb_frontend *fe, u32 *freq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) extern int tda18271_calc_rf_band(struct dvb_frontend *fe, u32 *freq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) extern int tda18271_calc_gain_taper(struct dvb_frontend *fe, u32 *freq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) extern int tda18271_calc_ir_measure(struct dvb_frontend *fe, u32 *freq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) extern int tda18271_calc_rf_cal(struct dvb_frontend *fe, u32 *freq);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) #endif /* __TDA18271_PRIV_H__ */