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