1c942fddfSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
29a0bf528SMauro Carvalho Chehab /*
39a0bf528SMauro Carvalho Chehab  *    Support for AltoBeam GB20600 (a.k.a DMB-TH) demodulator
49a0bf528SMauro Carvalho Chehab  *    ATBM8830, ATBM8831
59a0bf528SMauro Carvalho Chehab  *
69a0bf528SMauro Carvalho Chehab  *    Copyright (C) 2009 David T.L. Wong <davidtlwong@gmail.com>
79a0bf528SMauro Carvalho Chehab  */
89a0bf528SMauro Carvalho Chehab 
99a0bf528SMauro Carvalho Chehab #ifndef __ATBM8830_H__
109a0bf528SMauro Carvalho Chehab #define __ATBM8830_H__
119a0bf528SMauro Carvalho Chehab 
129a0bf528SMauro Carvalho Chehab #include <linux/dvb/frontend.h>
139a0bf528SMauro Carvalho Chehab #include <linux/i2c.h>
149a0bf528SMauro Carvalho Chehab 
159a0bf528SMauro Carvalho Chehab #define ATBM8830_PROD_8830 0
169a0bf528SMauro Carvalho Chehab #define ATBM8830_PROD_8831 1
179a0bf528SMauro Carvalho Chehab 
189a0bf528SMauro Carvalho Chehab struct atbm8830_config {
199a0bf528SMauro Carvalho Chehab 
209a0bf528SMauro Carvalho Chehab 	/* product type */
219a0bf528SMauro Carvalho Chehab 	u8 prod;
229a0bf528SMauro Carvalho Chehab 
239a0bf528SMauro Carvalho Chehab 	/* the demodulator's i2c address */
249a0bf528SMauro Carvalho Chehab 	u8 demod_address;
259a0bf528SMauro Carvalho Chehab 
269a0bf528SMauro Carvalho Chehab 	/* parallel or serial transport stream */
279a0bf528SMauro Carvalho Chehab 	u8 serial_ts;
289a0bf528SMauro Carvalho Chehab 
299a0bf528SMauro Carvalho Chehab 	/* transport stream clock output only when receiving valid stream */
309a0bf528SMauro Carvalho Chehab 	u8 ts_clk_gated;
319a0bf528SMauro Carvalho Chehab 
329a0bf528SMauro Carvalho Chehab 	/* Decoder sample TS data at rising edge of clock */
339a0bf528SMauro Carvalho Chehab 	u8 ts_sampling_edge;
349a0bf528SMauro Carvalho Chehab 
359a0bf528SMauro Carvalho Chehab 	/* Oscillator clock frequency */
369a0bf528SMauro Carvalho Chehab 	u32 osc_clk_freq; /* in kHz */
379a0bf528SMauro Carvalho Chehab 
389a0bf528SMauro Carvalho Chehab 	/* IF frequency */
399a0bf528SMauro Carvalho Chehab 	u32 if_freq; /* in kHz */
409a0bf528SMauro Carvalho Chehab 
419a0bf528SMauro Carvalho Chehab 	/* Swap I/Q for zero IF */
429a0bf528SMauro Carvalho Chehab 	u8 zif_swap_iq;
439a0bf528SMauro Carvalho Chehab 
449a0bf528SMauro Carvalho Chehab 	/* Tuner AGC settings */
459a0bf528SMauro Carvalho Chehab 	u8 agc_min;
469a0bf528SMauro Carvalho Chehab 	u8 agc_max;
479a0bf528SMauro Carvalho Chehab 	u8 agc_hold_loop;
489a0bf528SMauro Carvalho Chehab };
499a0bf528SMauro Carvalho Chehab 
509b174527SArnd Bergmann #if IS_REACHABLE(CONFIG_DVB_ATBM8830)
519a0bf528SMauro Carvalho Chehab extern struct dvb_frontend *atbm8830_attach(const struct atbm8830_config *config,
529a0bf528SMauro Carvalho Chehab 		struct i2c_adapter *i2c);
539a0bf528SMauro Carvalho Chehab #else
549a0bf528SMauro Carvalho Chehab static inline
atbm8830_attach(const struct atbm8830_config * config,struct i2c_adapter * i2c)559a0bf528SMauro Carvalho Chehab struct dvb_frontend *atbm8830_attach(const struct atbm8830_config *config,
569a0bf528SMauro Carvalho Chehab 		struct i2c_adapter *i2c) {
579a0bf528SMauro Carvalho Chehab 	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
589a0bf528SMauro Carvalho Chehab 	return NULL;
599a0bf528SMauro Carvalho Chehab }
609a0bf528SMauro Carvalho Chehab #endif /* CONFIG_DVB_ATBM8830 */
619a0bf528SMauro Carvalho Chehab 
629a0bf528SMauro Carvalho Chehab #endif /* __ATBM8830_H__ */
63