| 
									
										
										
										
											2007-10-22 09:56:38 -03:00
										 |  |  | /*
 | 
					
						
							|  |  |  |     tda18271.h - header for the Philips / NXP TDA18271 silicon tuner | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-02 01:58:26 -03:00
										 |  |  |     Copyright (C) 2007, 2008 Michael Krufky <mkrufky@linuxtv.org> | 
					
						
							| 
									
										
										
										
											2007-10-22 09:56:38 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     This program is free software; you can redistribute it and/or modify | 
					
						
							|  |  |  |     it under the terms of the GNU General Public License as published by | 
					
						
							|  |  |  |     the Free Software Foundation; either version 2 of the License, or | 
					
						
							|  |  |  |     (at your option) any later version. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  |     but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  |     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  |     GNU General Public License for more details. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  |     along with this program; if not, write to the Free Software | 
					
						
							|  |  |  |     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef __TDA18271_H__
 | 
					
						
							|  |  |  | #define __TDA18271_H__
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <linux/i2c.h>
 | 
					
						
							|  |  |  | #include "dvb_frontend.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-02 03:01:54 -03:00
										 |  |  | struct tda18271_std_map_item { | 
					
						
							| 
									
										
										
										
											2008-01-03 01:17:45 -03:00
										 |  |  | 	u16 if_freq; | 
					
						
							| 
									
										
										
										
											2008-04-22 14:46:06 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* EP3[4:3] */ | 
					
						
							|  |  |  | 	unsigned int agc_mode:2; | 
					
						
							|  |  |  | 	/* EP3[2:0] */ | 
					
						
							|  |  |  | 	unsigned int std:3; | 
					
						
							|  |  |  | 	/* EP4[7] */ | 
					
						
							| 
									
										
										
										
											2008-04-22 14:46:06 -03:00
										 |  |  | 	unsigned int fm_rfn:1; | 
					
						
							| 
									
										
										
										
											2008-04-22 14:46:21 -03:00
										 |  |  | 	/* EP4[4:2] */ | 
					
						
							|  |  |  | 	unsigned int if_lvl:3; | 
					
						
							| 
									
										
										
										
											2008-04-22 14:46:22 -03:00
										 |  |  | 	/* EB22[6:0] */ | 
					
						
							|  |  |  | 	unsigned int rfagc_top:7; | 
					
						
							| 
									
										
										
										
											2008-01-02 03:01:54 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct tda18271_std_map { | 
					
						
							| 
									
										
										
										
											2008-01-08 10:38:10 -03:00
										 |  |  | 	struct tda18271_std_map_item fm_radio; | 
					
						
							| 
									
										
										
										
											2008-01-02 03:01:54 -03:00
										 |  |  | 	struct tda18271_std_map_item atv_b; | 
					
						
							|  |  |  | 	struct tda18271_std_map_item atv_dk; | 
					
						
							|  |  |  | 	struct tda18271_std_map_item atv_gh; | 
					
						
							|  |  |  | 	struct tda18271_std_map_item atv_i; | 
					
						
							|  |  |  | 	struct tda18271_std_map_item atv_l; | 
					
						
							|  |  |  | 	struct tda18271_std_map_item atv_lc; | 
					
						
							|  |  |  | 	struct tda18271_std_map_item atv_mn; | 
					
						
							|  |  |  | 	struct tda18271_std_map_item atsc_6; | 
					
						
							|  |  |  | 	struct tda18271_std_map_item dvbt_6; | 
					
						
							|  |  |  | 	struct tda18271_std_map_item dvbt_7; | 
					
						
							|  |  |  | 	struct tda18271_std_map_item dvbt_8; | 
					
						
							|  |  |  | 	struct tda18271_std_map_item qam_6; | 
					
						
							| 
									
										
										
										
											2011-12-21 08:07:52 -03:00
										 |  |  | 	struct tda18271_std_map_item qam_7; | 
					
						
							| 
									
										
										
										
											2008-01-02 03:01:54 -03:00
										 |  |  | 	struct tda18271_std_map_item qam_8; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-22 14:46:23 -03:00
										 |  |  | enum tda18271_role { | 
					
						
							|  |  |  | 	TDA18271_MASTER = 0, | 
					
						
							|  |  |  | 	TDA18271_SLAVE, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-12-09 22:23:30 -03:00
										 |  |  | enum tda18271_i2c_gate { | 
					
						
							|  |  |  | 	TDA18271_GATE_AUTO = 0, | 
					
						
							|  |  |  | 	TDA18271_GATE_ANALOG, | 
					
						
							|  |  |  | 	TDA18271_GATE_DIGITAL, | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-29 16:25:37 -03:00
										 |  |  | enum tda18271_output_options { | 
					
						
							|  |  |  | 	/* slave tuner output & loop thru & xtal oscillator always on */ | 
					
						
							|  |  |  | 	TDA18271_OUTPUT_LT_XT_ON = 0, | 
					
						
							| 
									
										
										
										
											2008-05-11 12:46:52 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-29 16:25:37 -03:00
										 |  |  | 	/* slave tuner output loop thru off */ | 
					
						
							|  |  |  | 	TDA18271_OUTPUT_LT_OFF = 1, | 
					
						
							| 
									
										
										
										
											2008-05-11 12:46:52 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-29 16:25:37 -03:00
										 |  |  | 	/* xtal oscillator off */ | 
					
						
							|  |  |  | 	TDA18271_OUTPUT_XT_OFF = 2, | 
					
						
							| 
									
										
										
										
											2008-05-11 12:46:52 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-23 02:47:49 -03:00
										 |  |  | enum tda18271_small_i2c { | 
					
						
							|  |  |  | 	TDA18271_39_BYTE_CHUNK_INIT = 0, | 
					
						
							| 
									
										
										
										
											2010-09-26 22:58:28 -03:00
										 |  |  | 	TDA18271_16_BYTE_CHUNK_INIT = 16, | 
					
						
							|  |  |  | 	TDA18271_08_BYTE_CHUNK_INIT = 8, | 
					
						
							|  |  |  | 	TDA18271_03_BYTE_CHUNK_INIT = 3, | 
					
						
							| 
									
										
										
										
											2009-10-23 02:47:49 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-02 03:01:54 -03:00
										 |  |  | struct tda18271_config { | 
					
						
							| 
									
										
										
										
											2008-01-03 01:40:47 -03:00
										 |  |  | 	/* override default if freq / std settings (optional) */ | 
					
						
							| 
									
										
										
										
											2008-01-02 03:01:54 -03:00
										 |  |  | 	struct tda18271_std_map *std_map; | 
					
						
							| 
									
										
										
										
											2008-01-03 01:40:47 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-22 14:46:23 -03:00
										 |  |  | 	/* master / slave tuner: master uses main pll, slave uses cal pll */ | 
					
						
							|  |  |  | 	enum tda18271_role role; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-03 01:40:47 -03:00
										 |  |  | 	/* use i2c gate provided by analog or digital demod */ | 
					
						
							| 
									
										
										
										
											2008-01-02 03:01:54 -03:00
										 |  |  | 	enum tda18271_i2c_gate gate; | 
					
						
							| 
									
										
										
										
											2008-04-22 14:46:06 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-29 16:25:37 -03:00
										 |  |  | 	/* output options that can be disabled */ | 
					
						
							|  |  |  | 	enum tda18271_output_options output_opt; | 
					
						
							| 
									
										
										
										
											2008-05-11 12:46:52 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-30 22:57:33 -03:00
										 |  |  | 	/* some i2c providers can't write all 39 registers at once */ | 
					
						
							| 
									
										
										
										
											2009-10-23 02:47:49 -03:00
										 |  |  | 	enum tda18271_small_i2c small_i2c; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-08-27 16:58:06 -03:00
										 |  |  | 	/* force rf tracking filter calibration on startup */ | 
					
						
							|  |  |  | 	unsigned int rf_cal_on_startup:1; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-10-01 23:50:37 -03:00
										 |  |  | 	/* prevent any register access during attach(),
 | 
					
						
							|  |  |  | 	 * delaying both IR & RF calibration until init() | 
					
						
							|  |  |  | 	 * module option 'cal' overrides this delay */ | 
					
						
							|  |  |  | 	unsigned int delay_cal:1; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-04 19:42:06 -03:00
										 |  |  | 	/* interface to saa713x / tda829x */ | 
					
						
							|  |  |  | 	unsigned int config; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define TDA18271_CALLBACK_CMD_AGC_ENABLE 0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | enum tda18271_mode { | 
					
						
							|  |  |  | 	TDA18271_ANALOG = 0, | 
					
						
							|  |  |  | 	TDA18271_DIGITAL, | 
					
						
							| 
									
										
										
										
											2008-01-02 03:01:54 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-20 01:32:56 -03:00
										 |  |  | #if IS_ENABLED(CONFIG_MEDIA_TUNER_TDA18271)
 | 
					
						
							| 
									
										
										
										
											2007-10-22 09:56:38 -03:00
										 |  |  | extern struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, | 
					
						
							| 
									
										
										
										
											2007-12-09 22:23:30 -03:00
										 |  |  | 					    struct i2c_adapter *i2c, | 
					
						
							| 
									
										
										
										
											2008-01-02 03:01:54 -03:00
										 |  |  | 					    struct tda18271_config *cfg); | 
					
						
							| 
									
										
										
										
											2007-10-22 09:56:38 -03:00
										 |  |  | #else
 | 
					
						
							|  |  |  | static inline struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, | 
					
						
							|  |  |  | 						   u8 addr, | 
					
						
							| 
									
										
										
										
											2007-12-09 22:23:30 -03:00
										 |  |  | 						   struct i2c_adapter *i2c, | 
					
						
							| 
									
										
										
										
											2008-01-02 03:01:54 -03:00
										 |  |  | 						   struct tda18271_config *cfg) | 
					
						
							| 
									
										
										
										
											2007-10-22 09:56:38 -03:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2008-04-08 23:20:00 -03:00
										 |  |  | 	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); | 
					
						
							| 
									
										
										
										
											2007-10-22 09:56:38 -03:00
										 |  |  | 	return NULL; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif /* __TDA18271_H__ */
 |