1 /* 2 tda18271.h - header for the Philips / NXP TDA18271 silicon tuner 3 4 Copyright (C) 2007, 2008 Michael Krufky <mkrufky@linuxtv.org> 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 */ 20 21 #ifndef __TDA18271_H__ 22 #define __TDA18271_H__ 23 24 #include <linux/i2c.h> 25 #include "dvb_frontend.h" 26 27 struct tda18271_std_map_item { 28 u16 if_freq; 29 30 /* EP3[4:3] */ 31 unsigned int agc_mode:2; 32 /* EP3[2:0] */ 33 unsigned int std:3; 34 /* EP4[7] */ 35 unsigned int fm_rfn:1; 36 /* EP4[4:2] */ 37 unsigned int if_lvl:3; 38 /* EB22[6:0] */ 39 unsigned int rfagc_top:7; 40 }; 41 42 struct tda18271_std_map { 43 struct tda18271_std_map_item fm_radio; 44 struct tda18271_std_map_item atv_b; 45 struct tda18271_std_map_item atv_dk; 46 struct tda18271_std_map_item atv_gh; 47 struct tda18271_std_map_item atv_i; 48 struct tda18271_std_map_item atv_l; 49 struct tda18271_std_map_item atv_lc; 50 struct tda18271_std_map_item atv_mn; 51 struct tda18271_std_map_item atsc_6; 52 struct tda18271_std_map_item dvbt_6; 53 struct tda18271_std_map_item dvbt_7; 54 struct tda18271_std_map_item dvbt_8; 55 struct tda18271_std_map_item qam_6; 56 struct tda18271_std_map_item qam_7; 57 struct tda18271_std_map_item qam_8; 58 }; 59 60 enum tda18271_role { 61 TDA18271_MASTER = 0, 62 TDA18271_SLAVE, 63 }; 64 65 enum tda18271_i2c_gate { 66 TDA18271_GATE_AUTO = 0, 67 TDA18271_GATE_ANALOG, 68 TDA18271_GATE_DIGITAL, 69 }; 70 71 enum tda18271_output_options { 72 /* slave tuner output & loop thru & xtal oscillator always on */ 73 TDA18271_OUTPUT_LT_XT_ON = 0, 74 75 /* slave tuner output loop thru off */ 76 TDA18271_OUTPUT_LT_OFF = 1, 77 78 /* xtal oscillator off */ 79 TDA18271_OUTPUT_XT_OFF = 2, 80 }; 81 82 enum tda18271_small_i2c { 83 TDA18271_39_BYTE_CHUNK_INIT = 0, 84 TDA18271_16_BYTE_CHUNK_INIT = 16, 85 TDA18271_08_BYTE_CHUNK_INIT = 8, 86 TDA18271_03_BYTE_CHUNK_INIT = 3, 87 }; 88 89 struct tda18271_config { 90 /* override default if freq / std settings (optional) */ 91 struct tda18271_std_map *std_map; 92 93 /* master / slave tuner: master uses main pll, slave uses cal pll */ 94 enum tda18271_role role; 95 96 /* use i2c gate provided by analog or digital demod */ 97 enum tda18271_i2c_gate gate; 98 99 /* output options that can be disabled */ 100 enum tda18271_output_options output_opt; 101 102 /* some i2c providers can't write all 39 registers at once */ 103 enum tda18271_small_i2c small_i2c; 104 105 /* force rf tracking filter calibration on startup */ 106 unsigned int rf_cal_on_startup:1; 107 108 /* prevent any register access during attach(), 109 * delaying both IR & RF calibration until init() 110 * module option 'cal' overrides this delay */ 111 unsigned int delay_cal:1; 112 113 /* interface to saa713x / tda829x */ 114 unsigned int config; 115 }; 116 117 #define TDA18271_CALLBACK_CMD_AGC_ENABLE 0 118 119 enum tda18271_mode { 120 TDA18271_ANALOG = 0, 121 TDA18271_DIGITAL, 122 }; 123 124 #if IS_REACHABLE(CONFIG_MEDIA_TUNER_TDA18271) 125 extern struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, 126 struct i2c_adapter *i2c, 127 struct tda18271_config *cfg); 128 #else 129 static inline struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, 130 u8 addr, 131 struct i2c_adapter *i2c, 132 struct tda18271_config *cfg) 133 { 134 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 135 return NULL; 136 } 137 #endif 138 139 #endif /* __TDA18271_H__ */ 140