162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci tda18271.h - header for the Philips / NXP TDA18271 silicon tuner 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci Copyright (C) 2007, 2008 Michael Krufky <mkrufky@linuxtv.org> 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci*/ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef __TDA18271_H__ 1062306a36Sopenharmony_ci#define __TDA18271_H__ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/i2c.h> 1362306a36Sopenharmony_ci#include <media/dvb_frontend.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_cistruct tda18271_std_map_item { 1662306a36Sopenharmony_ci u16 if_freq; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci /* EP3[4:3] */ 1962306a36Sopenharmony_ci unsigned int agc_mode:2; 2062306a36Sopenharmony_ci /* EP3[2:0] */ 2162306a36Sopenharmony_ci unsigned int std:3; 2262306a36Sopenharmony_ci /* EP4[7] */ 2362306a36Sopenharmony_ci unsigned int fm_rfn:1; 2462306a36Sopenharmony_ci /* EP4[4:2] */ 2562306a36Sopenharmony_ci unsigned int if_lvl:3; 2662306a36Sopenharmony_ci /* EB22[6:0] */ 2762306a36Sopenharmony_ci unsigned int rfagc_top:7; 2862306a36Sopenharmony_ci}; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cistruct tda18271_std_map { 3162306a36Sopenharmony_ci struct tda18271_std_map_item fm_radio; 3262306a36Sopenharmony_ci struct tda18271_std_map_item atv_b; 3362306a36Sopenharmony_ci struct tda18271_std_map_item atv_dk; 3462306a36Sopenharmony_ci struct tda18271_std_map_item atv_gh; 3562306a36Sopenharmony_ci struct tda18271_std_map_item atv_i; 3662306a36Sopenharmony_ci struct tda18271_std_map_item atv_l; 3762306a36Sopenharmony_ci struct tda18271_std_map_item atv_lc; 3862306a36Sopenharmony_ci struct tda18271_std_map_item atv_mn; 3962306a36Sopenharmony_ci struct tda18271_std_map_item atsc_6; 4062306a36Sopenharmony_ci struct tda18271_std_map_item dvbt_6; 4162306a36Sopenharmony_ci struct tda18271_std_map_item dvbt_7; 4262306a36Sopenharmony_ci struct tda18271_std_map_item dvbt_8; 4362306a36Sopenharmony_ci struct tda18271_std_map_item qam_6; 4462306a36Sopenharmony_ci struct tda18271_std_map_item qam_7; 4562306a36Sopenharmony_ci struct tda18271_std_map_item qam_8; 4662306a36Sopenharmony_ci}; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_cienum tda18271_role { 4962306a36Sopenharmony_ci TDA18271_MASTER = 0, 5062306a36Sopenharmony_ci TDA18271_SLAVE, 5162306a36Sopenharmony_ci}; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cienum tda18271_i2c_gate { 5462306a36Sopenharmony_ci TDA18271_GATE_AUTO = 0, 5562306a36Sopenharmony_ci TDA18271_GATE_ANALOG, 5662306a36Sopenharmony_ci TDA18271_GATE_DIGITAL, 5762306a36Sopenharmony_ci}; 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_cienum tda18271_output_options { 6062306a36Sopenharmony_ci /* slave tuner output & loop through & xtal oscillator always on */ 6162306a36Sopenharmony_ci TDA18271_OUTPUT_LT_XT_ON = 0, 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci /* slave tuner output loop through off */ 6462306a36Sopenharmony_ci TDA18271_OUTPUT_LT_OFF = 1, 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci /* xtal oscillator off */ 6762306a36Sopenharmony_ci TDA18271_OUTPUT_XT_OFF = 2, 6862306a36Sopenharmony_ci}; 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_cienum tda18271_small_i2c { 7162306a36Sopenharmony_ci TDA18271_39_BYTE_CHUNK_INIT = 0, 7262306a36Sopenharmony_ci TDA18271_16_BYTE_CHUNK_INIT = 16, 7362306a36Sopenharmony_ci TDA18271_08_BYTE_CHUNK_INIT = 8, 7462306a36Sopenharmony_ci TDA18271_03_BYTE_CHUNK_INIT = 3, 7562306a36Sopenharmony_ci}; 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_cistruct tda18271_config { 7862306a36Sopenharmony_ci /* override default if freq / std settings (optional) */ 7962306a36Sopenharmony_ci struct tda18271_std_map *std_map; 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_ci /* master / slave tuner: master uses main pll, slave uses cal pll */ 8262306a36Sopenharmony_ci enum tda18271_role role; 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci /* use i2c gate provided by analog or digital demod */ 8562306a36Sopenharmony_ci enum tda18271_i2c_gate gate; 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci /* output options that can be disabled */ 8862306a36Sopenharmony_ci enum tda18271_output_options output_opt; 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci /* some i2c providers can't write all 39 registers at once */ 9162306a36Sopenharmony_ci enum tda18271_small_i2c small_i2c; 9262306a36Sopenharmony_ci 9362306a36Sopenharmony_ci /* force rf tracking filter calibration on startup */ 9462306a36Sopenharmony_ci unsigned int rf_cal_on_startup:1; 9562306a36Sopenharmony_ci 9662306a36Sopenharmony_ci /* prevent any register access during attach(), 9762306a36Sopenharmony_ci * delaying both IR & RF calibration until init() 9862306a36Sopenharmony_ci * module option 'cal' overrides this delay */ 9962306a36Sopenharmony_ci unsigned int delay_cal:1; 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci /* interface to saa713x / tda829x */ 10262306a36Sopenharmony_ci unsigned int config; 10362306a36Sopenharmony_ci}; 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_ci#define TDA18271_CALLBACK_CMD_AGC_ENABLE 0 10662306a36Sopenharmony_ci 10762306a36Sopenharmony_cienum tda18271_mode { 10862306a36Sopenharmony_ci TDA18271_ANALOG = 0, 10962306a36Sopenharmony_ci TDA18271_DIGITAL, 11062306a36Sopenharmony_ci}; 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci#if IS_REACHABLE(CONFIG_MEDIA_TUNER_TDA18271) 11362306a36Sopenharmony_ciextern struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, u8 addr, 11462306a36Sopenharmony_ci struct i2c_adapter *i2c, 11562306a36Sopenharmony_ci struct tda18271_config *cfg); 11662306a36Sopenharmony_ci#else 11762306a36Sopenharmony_cistatic inline struct dvb_frontend *tda18271_attach(struct dvb_frontend *fe, 11862306a36Sopenharmony_ci u8 addr, 11962306a36Sopenharmony_ci struct i2c_adapter *i2c, 12062306a36Sopenharmony_ci struct tda18271_config *cfg) 12162306a36Sopenharmony_ci{ 12262306a36Sopenharmony_ci printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 12362306a36Sopenharmony_ci return NULL; 12462306a36Sopenharmony_ci} 12562306a36Sopenharmony_ci#endif 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ci#endif /* __TDA18271_H__ */ 128