18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci Montage Technology TS2020 - Silicon Tuner driver 48c2ecf20Sopenharmony_ci Copyright (C) 2009-2012 Konstantin Dimitrov <kosio.dimitrov@gmail.com> 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci Copyright (C) 2009-2012 TurboSight.com 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#ifndef TS2020_H 118c2ecf20Sopenharmony_ci#define TS2020_H 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#include <linux/dvb/frontend.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_cistruct ts2020_config { 168c2ecf20Sopenharmony_ci u8 tuner_address; 178c2ecf20Sopenharmony_ci u32 frequency_div; 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci /* 208c2ecf20Sopenharmony_ci * RF loop-through 218c2ecf20Sopenharmony_ci */ 228c2ecf20Sopenharmony_ci bool loop_through:1; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci /* 258c2ecf20Sopenharmony_ci * clock output 268c2ecf20Sopenharmony_ci */ 278c2ecf20Sopenharmony_ci#define TS2020_CLK_OUT_DISABLED 0 288c2ecf20Sopenharmony_ci#define TS2020_CLK_OUT_ENABLED 1 298c2ecf20Sopenharmony_ci#define TS2020_CLK_OUT_ENABLED_XTALOUT 2 308c2ecf20Sopenharmony_ci u8 clk_out:2; 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci /* 338c2ecf20Sopenharmony_ci * clock output divider 348c2ecf20Sopenharmony_ci * 1 - 31 358c2ecf20Sopenharmony_ci */ 368c2ecf20Sopenharmony_ci u8 clk_out_div:5; 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci /* Set to true to suppress stat polling */ 398c2ecf20Sopenharmony_ci bool dont_poll:1; 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci /* 428c2ecf20Sopenharmony_ci * pointer to DVB frontend 438c2ecf20Sopenharmony_ci */ 448c2ecf20Sopenharmony_ci struct dvb_frontend *fe; 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ci /* 478c2ecf20Sopenharmony_ci * driver private, do not set value 488c2ecf20Sopenharmony_ci */ 498c2ecf20Sopenharmony_ci u8 attach_in_use:1; 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci /* Operation to be called by the ts2020 driver to get the value of the 528c2ecf20Sopenharmony_ci * AGC PWM tuner input as theoretically output by the demodulator. 538c2ecf20Sopenharmony_ci */ 548c2ecf20Sopenharmony_ci int (*get_agc_pwm)(struct dvb_frontend *fe, u8 *_agc_pwm); 558c2ecf20Sopenharmony_ci}; 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ci/* Do not add new ts2020_attach() users! Use I2C bindings instead. */ 588c2ecf20Sopenharmony_ci#if IS_REACHABLE(CONFIG_DVB_TS2020) 598c2ecf20Sopenharmony_ciextern struct dvb_frontend *ts2020_attach( 608c2ecf20Sopenharmony_ci struct dvb_frontend *fe, 618c2ecf20Sopenharmony_ci const struct ts2020_config *config, 628c2ecf20Sopenharmony_ci struct i2c_adapter *i2c); 638c2ecf20Sopenharmony_ci#else 648c2ecf20Sopenharmony_cistatic inline struct dvb_frontend *ts2020_attach( 658c2ecf20Sopenharmony_ci struct dvb_frontend *fe, 668c2ecf20Sopenharmony_ci const struct ts2020_config *config, 678c2ecf20Sopenharmony_ci struct i2c_adapter *i2c) 688c2ecf20Sopenharmony_ci{ 698c2ecf20Sopenharmony_ci printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 708c2ecf20Sopenharmony_ci return NULL; 718c2ecf20Sopenharmony_ci} 728c2ecf20Sopenharmony_ci#endif 738c2ecf20Sopenharmony_ci 748c2ecf20Sopenharmony_ci#endif /* TS2020_H */ 75