18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci tda18271.h - header for the Philips / NXP TDA18271 silicon tuner 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci Copyright (C) 2007, 2008 Michael Krufky <mkrufky@linuxtv.org> 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_ci*/ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#ifndef __TDA18271_H__ 108c2ecf20Sopenharmony_ci#define __TDA18271_H__ 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include <linux/i2c.h> 138c2ecf20Sopenharmony_ci#include <media/dvb_frontend.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_cistruct tda18271_std_map_item { 168c2ecf20Sopenharmony_ci u16 if_freq; 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci /* EP3[4:3] */ 198c2ecf20Sopenharmony_ci unsigned int agc_mode:2; 208c2ecf20Sopenharmony_ci /* EP3[2:0] */ 218c2ecf20Sopenharmony_ci unsigned int std:3; 228c2ecf20Sopenharmony_ci /* EP4[7] */ 238c2ecf20Sopenharmony_ci unsigned int fm_rfn:1; 248c2ecf20Sopenharmony_ci /* EP4[4:2] */ 258c2ecf20Sopenharmony_ci unsigned int if_lvl:3; 268c2ecf20Sopenharmony_ci /* EB22[6:0] */ 278c2ecf20Sopenharmony_ci unsigned int rfagc_top:7; 288c2ecf20Sopenharmony_ci}; 298c2ecf20Sopenharmony_ci 308c2ecf20Sopenharmony_cistruct tda18271_std_map { 318c2ecf20Sopenharmony_ci struct tda18271_std_map_item fm_radio; 328c2ecf20Sopenharmony_ci struct tda18271_std_map_item atv_b; 338c2ecf20Sopenharmony_ci struct tda18271_std_map_item atv_dk; 348c2ecf20Sopenharmony_ci struct tda18271_std_map_item atv_gh; 358c2ecf20Sopenharmony_ci struct tda18271_std_map_item atv_i; 368c2ecf20Sopenharmony_ci struct tda18271_std_map_item atv_l; 378c2ecf20Sopenharmony_ci struct tda18271_std_map_item atv_lc; 388c2ecf20Sopenharmony_ci struct tda18271_std_map_item atv_mn; 398c2ecf20Sopenharmony_ci struct tda18271_std_map_item atsc_6; 408c2ecf20Sopenharmony_ci struct tda18271_std_map_item dvbt_6; 418c2ecf20Sopenharmony_ci struct tda18271_std_map_item dvbt_7; 428c2ecf20Sopenharmony_ci struct tda18271_std_map_item dvbt_8; 438c2ecf20Sopenharmony_ci struct tda18271_std_map_item qam_6; 448c2ecf20Sopenharmony_ci struct tda18271_std_map_item qam_7; 458c2ecf20Sopenharmony_ci struct tda18271_std_map_item qam_8; 468c2ecf20Sopenharmony_ci}; 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_cienum tda18271_role { 498c2ecf20Sopenharmony_ci TDA18271_MASTER = 0, 508c2ecf20Sopenharmony_ci TDA18271_SLAVE, 518c2ecf20Sopenharmony_ci}; 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_cienum tda18271_i2c_gate { 548c2ecf20Sopenharmony_ci TDA18271_GATE_AUTO = 0, 558c2ecf20Sopenharmony_ci TDA18271_GATE_ANALOG, 568c2ecf20Sopenharmony_ci TDA18271_GATE_DIGITAL, 578c2ecf20Sopenharmony_ci}; 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_cienum tda18271_output_options { 608c2ecf20Sopenharmony_ci /* slave tuner output & loop through & xtal oscillator always on */ 618c2ecf20Sopenharmony_ci TDA18271_OUTPUT_LT_XT_ON = 0, 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ci /* slave tuner output loop through off */ 648c2ecf20Sopenharmony_ci TDA18271_OUTPUT_LT_OFF = 1, 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_ci /* xtal oscillator off */ 678c2ecf20Sopenharmony_ci TDA18271_OUTPUT_XT_OFF = 2, 688c2ecf20Sopenharmony_ci}; 698c2ecf20Sopenharmony_ci 708c2ecf20Sopenharmony_cienum tda18271_small_i2c { 718c2ecf20Sopenharmony_ci TDA18271_39_BYTE_CHUNK_INIT = 0, 728c2ecf20Sopenharmony_ci TDA18271_16_BYTE_CHUNK_INIT = 16, 738c2ecf20Sopenharmony_ci TDA18271_08_BYTE_CHUNK_INIT = 8, 748c2ecf20Sopenharmony_ci TDA18271_03_BYTE_CHUNK_INIT = 3, 758c2ecf20Sopenharmony_ci}; 768c2ecf20Sopenharmony_ci 778c2ecf20Sopenharmony_cistruct tda18271_config { 788c2ecf20Sopenharmony_ci /* override default if freq / std settings (optional) */ 798c2ecf20Sopenharmony_ci struct tda18271_std_map *std_map; 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_ci /* master / slave tuner: master uses main pll, slave uses cal pll */ 828c2ecf20Sopenharmony_ci enum tda18271_role role; 838c2ecf20Sopenharmony_ci 848c2ecf20Sopenharmony_ci /* use i2c gate provided by analog or digital demod */ 858c2ecf20Sopenharmony_ci enum tda18271_i2c_gate gate; 868c2ecf20Sopenharmony_ci 878c2ecf20Sopenharmony_ci /* output options that can be disabled */ 888c2ecf20Sopenharmony_ci enum tda18271_output_options output_opt; 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_ci /* some i2c providers can't write all 39 registers at once */ 918c2ecf20Sopenharmony_ci enum tda18271_small_i2c small_i2c; 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_ci /* force rf tracking filter calibration on startup */ 948c2ecf20Sopenharmony_ci unsigned int rf_cal_on_startup:1; 958c2ecf20Sopenharmony_ci 968c2ecf20Sopenharmony_ci /* prevent any register access during attach(), 978c2ecf20Sopenharmony_ci * delaying both IR & RF calibration until init() 988c2ecf20Sopenharmony_ci * module option 'cal' overrides this delay */ 998c2ecf20Sopenharmony_ci unsigned int delay_cal:1; 1008c2ecf20Sopenharmony_ci 1018c2ecf20Sopenharmony_ci /* interface to saa713x / tda829x */ 1028c2ecf20Sopenharmony_ci unsigned int config; 1038c2ecf20Sopenharmony_ci}; 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_ci#define TDA18271_CALLBACK_CMD_AGC_ENABLE 0 1068c2ecf20Sopenharmony_ci 1078c2ecf20Sopenharmony_cienum tda18271_mode { 1088c2ecf20Sopenharmony_ci TDA18271_ANALOG = 0, 1098c2ecf20Sopenharmony_ci TDA18271_DIGITAL, 1108c2ecf20Sopenharmony_ci}; 1118c2ecf20Sopenharmony_ci 1128c2ecf20Sopenharmony_ci#if IS_REACHABLE(CONFIG_MEDIA_TUNER_TDA18271) 1138c2ecf20Sopenharmony_ciextern struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, 1148c2ecf20Sopenharmony_ci struct i2c_adapter *i2c, 1158c2ecf20Sopenharmony_ci struct tda18271_config *cfg); 1168c2ecf20Sopenharmony_ci#else 1178c2ecf20Sopenharmony_cistatic inline struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, 1188c2ecf20Sopenharmony_ci u8 addr, 1198c2ecf20Sopenharmony_ci struct i2c_adapter *i2c, 1208c2ecf20Sopenharmony_ci struct tda18271_config *cfg) 1218c2ecf20Sopenharmony_ci{ 1228c2ecf20Sopenharmony_ci printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 1238c2ecf20Sopenharmony_ci return NULL; 1248c2ecf20Sopenharmony_ci} 1258c2ecf20Sopenharmony_ci#endif 1268c2ecf20Sopenharmony_ci 1278c2ecf20Sopenharmony_ci#endif /* __TDA18271_H__ */ 128