174ba9207SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
29a0bf528SMauro Carvalho Chehab /*
39a0bf528SMauro Carvalho Chehab     TDA10021/TDA10023  - Single Chip Cable Channel Receiver driver module
4*bd012eaaSSlark Xiao 			 used on the Siemens DVB-C cards
59a0bf528SMauro Carvalho Chehab 
69a0bf528SMauro Carvalho Chehab     Copyright (C) 1999 Convergence Integrated Media GmbH <ralph@convergence.de>
79a0bf528SMauro Carvalho Chehab     Copyright (C) 2004 Markus Schulz <msc@antzsystem.de>
89a0bf528SMauro Carvalho Chehab 		   Support for TDA10021
99a0bf528SMauro Carvalho Chehab 
109a0bf528SMauro Carvalho Chehab */
119a0bf528SMauro Carvalho Chehab 
129a0bf528SMauro Carvalho Chehab #ifndef TDA1002x_H
139a0bf528SMauro Carvalho Chehab #define TDA1002x_H
149a0bf528SMauro Carvalho Chehab 
159a0bf528SMauro Carvalho Chehab #include <linux/dvb/frontend.h>
169a0bf528SMauro Carvalho Chehab 
179a0bf528SMauro Carvalho Chehab struct tda1002x_config {
189a0bf528SMauro Carvalho Chehab 	/* the demodulator's i2c address */
199a0bf528SMauro Carvalho Chehab 	u8 demod_address;
209a0bf528SMauro Carvalho Chehab 	u8 invert;
219a0bf528SMauro Carvalho Chehab };
229a0bf528SMauro Carvalho Chehab 
239a0bf528SMauro Carvalho Chehab enum tda10023_output_mode {
249a0bf528SMauro Carvalho Chehab 	TDA10023_OUTPUT_MODE_PARALLEL_A = 0xe0,
259a0bf528SMauro Carvalho Chehab 	TDA10023_OUTPUT_MODE_PARALLEL_B = 0xa1,
269a0bf528SMauro Carvalho Chehab 	TDA10023_OUTPUT_MODE_PARALLEL_C = 0xa0,
279a0bf528SMauro Carvalho Chehab 	TDA10023_OUTPUT_MODE_SERIAL, /* TODO: not implemented */
289a0bf528SMauro Carvalho Chehab };
299a0bf528SMauro Carvalho Chehab 
309a0bf528SMauro Carvalho Chehab struct tda10023_config {
319a0bf528SMauro Carvalho Chehab 	/* the demodulator's i2c address */
329a0bf528SMauro Carvalho Chehab 	u8 demod_address;
339a0bf528SMauro Carvalho Chehab 	u8 invert;
349a0bf528SMauro Carvalho Chehab 
359a0bf528SMauro Carvalho Chehab 	/* clock settings */
369a0bf528SMauro Carvalho Chehab 	u32 xtal; /* defaults: 28920000 */
379a0bf528SMauro Carvalho Chehab 	u8 pll_m; /* defaults: 8 */
389a0bf528SMauro Carvalho Chehab 	u8 pll_p; /* defaults: 4 */
399a0bf528SMauro Carvalho Chehab 	u8 pll_n; /* defaults: 1 */
409a0bf528SMauro Carvalho Chehab 
419a0bf528SMauro Carvalho Chehab 	/* MPEG2 TS output mode */
429a0bf528SMauro Carvalho Chehab 	u8 output_mode;
439a0bf528SMauro Carvalho Chehab 
449a0bf528SMauro Carvalho Chehab 	/* input freq offset + baseband conversion type */
459a0bf528SMauro Carvalho Chehab 	u16 deltaf;
469a0bf528SMauro Carvalho Chehab };
479a0bf528SMauro Carvalho Chehab 
489b174527SArnd Bergmann #if IS_REACHABLE(CONFIG_DVB_TDA10021)
499a0bf528SMauro Carvalho Chehab extern struct dvb_frontend* tda10021_attach(const struct tda1002x_config* config,
509a0bf528SMauro Carvalho Chehab 					    struct i2c_adapter* i2c, u8 pwm);
519a0bf528SMauro Carvalho Chehab #else
tda10021_attach(const struct tda1002x_config * config,struct i2c_adapter * i2c,u8 pwm)529a0bf528SMauro Carvalho Chehab static inline struct dvb_frontend* tda10021_attach(const struct tda1002x_config* config,
539a0bf528SMauro Carvalho Chehab 					    struct i2c_adapter* i2c, u8 pwm)
549a0bf528SMauro Carvalho Chehab {
559a0bf528SMauro Carvalho Chehab 	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
569a0bf528SMauro Carvalho Chehab 	return NULL;
579a0bf528SMauro Carvalho Chehab }
589a0bf528SMauro Carvalho Chehab #endif // CONFIG_DVB_TDA10021
599a0bf528SMauro Carvalho Chehab 
609b174527SArnd Bergmann #if IS_REACHABLE(CONFIG_DVB_TDA10023)
619a0bf528SMauro Carvalho Chehab extern struct dvb_frontend *tda10023_attach(
629a0bf528SMauro Carvalho Chehab 	const struct tda10023_config *config,
639a0bf528SMauro Carvalho Chehab 	struct i2c_adapter *i2c, u8 pwm);
649a0bf528SMauro Carvalho Chehab #else
tda10023_attach(const struct tda10023_config * config,struct i2c_adapter * i2c,u8 pwm)659a0bf528SMauro Carvalho Chehab static inline struct dvb_frontend *tda10023_attach(
669a0bf528SMauro Carvalho Chehab 	const struct tda10023_config *config,
679a0bf528SMauro Carvalho Chehab 	struct i2c_adapter *i2c, u8 pwm)
689a0bf528SMauro Carvalho Chehab {
699a0bf528SMauro Carvalho Chehab 	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
709a0bf528SMauro Carvalho Chehab 	return NULL;
719a0bf528SMauro Carvalho Chehab }
729a0bf528SMauro Carvalho Chehab #endif // CONFIG_DVB_TDA10023
739a0bf528SMauro Carvalho Chehab 
749a0bf528SMauro Carvalho Chehab #endif // TDA1002x_H
75