xref: /openbmc/linux/drivers/media/tuners/xc5000.h (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
1*c942fddfSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
2ccae7af2SMauro Carvalho Chehab /*
3ccae7af2SMauro Carvalho Chehab  *  Driver for Xceive XC5000 "QAM/8VSB single chip tuner"
4ccae7af2SMauro Carvalho Chehab  *
5ccae7af2SMauro Carvalho Chehab  *  Copyright (c) 2007 Steven Toth <stoth@linuxtv.org>
6ccae7af2SMauro Carvalho Chehab  */
7ccae7af2SMauro Carvalho Chehab 
8ccae7af2SMauro Carvalho Chehab #ifndef __XC5000_H__
9ccae7af2SMauro Carvalho Chehab #define __XC5000_H__
10ccae7af2SMauro Carvalho Chehab 
11ccae7af2SMauro Carvalho Chehab #include <linux/firmware.h>
12ccae7af2SMauro Carvalho Chehab 
13ccae7af2SMauro Carvalho Chehab struct dvb_frontend;
14ccae7af2SMauro Carvalho Chehab struct i2c_adapter;
15ccae7af2SMauro Carvalho Chehab 
16ccae7af2SMauro Carvalho Chehab #define XC5000A 1
17ccae7af2SMauro Carvalho Chehab #define XC5000C 2
18ccae7af2SMauro Carvalho Chehab 
19ccae7af2SMauro Carvalho Chehab struct xc5000_config {
20ccae7af2SMauro Carvalho Chehab 	u8   i2c_address;
21ccae7af2SMauro Carvalho Chehab 	u32  if_khz;
22ccae7af2SMauro Carvalho Chehab 	u8   radio_input;
23ccae7af2SMauro Carvalho Chehab 	u16  xtal_khz;
2452e269b1SRichard Vollkommer 	u16  output_amp;
25ccae7af2SMauro Carvalho Chehab 
26ccae7af2SMauro Carvalho Chehab 	int chip_id;
27ccae7af2SMauro Carvalho Chehab };
28ccae7af2SMauro Carvalho Chehab 
29ccae7af2SMauro Carvalho Chehab /* xc5000 callback command */
30ccae7af2SMauro Carvalho Chehab #define XC5000_TUNER_RESET		0
31ccae7af2SMauro Carvalho Chehab 
32ccae7af2SMauro Carvalho Chehab /* Possible Radio inputs */
33ccae7af2SMauro Carvalho Chehab #define XC5000_RADIO_NOT_CONFIGURED		0
34ccae7af2SMauro Carvalho Chehab #define XC5000_RADIO_FM1			1
35ccae7af2SMauro Carvalho Chehab #define XC5000_RADIO_FM2			2
36ccae7af2SMauro Carvalho Chehab #define XC5000_RADIO_FM1_MONO			3
37ccae7af2SMauro Carvalho Chehab 
38ccae7af2SMauro Carvalho Chehab /* For each bridge framework, when it attaches either analog or digital,
39ccae7af2SMauro Carvalho Chehab  * it has to store a reference back to its _core equivalent structure,
40ccae7af2SMauro Carvalho Chehab  * so that it can service the hardware by steering gpio's etc.
41ccae7af2SMauro Carvalho Chehab  * Each bridge implementation is different so cast devptr accordingly.
42ccae7af2SMauro Carvalho Chehab  * The xc5000 driver cares not for this value, other than ensuring
43ccae7af2SMauro Carvalho Chehab  * it's passed back to a bridge during tuner_callback().
44ccae7af2SMauro Carvalho Chehab  */
45ccae7af2SMauro Carvalho Chehab 
469b174527SArnd Bergmann #if IS_REACHABLE(CONFIG_MEDIA_TUNER_XC5000)
47ccae7af2SMauro Carvalho Chehab extern struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe,
48ccae7af2SMauro Carvalho Chehab 					  struct i2c_adapter *i2c,
49ccae7af2SMauro Carvalho Chehab 					  const struct xc5000_config *cfg);
50ccae7af2SMauro Carvalho Chehab #else
xc5000_attach(struct dvb_frontend * fe,struct i2c_adapter * i2c,const struct xc5000_config * cfg)51ccae7af2SMauro Carvalho Chehab static inline struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe,
52ccae7af2SMauro Carvalho Chehab 						 struct i2c_adapter *i2c,
53ccae7af2SMauro Carvalho Chehab 						 const struct xc5000_config *cfg)
54ccae7af2SMauro Carvalho Chehab {
55ccae7af2SMauro Carvalho Chehab 	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
56ccae7af2SMauro Carvalho Chehab 	return NULL;
57ccae7af2SMauro Carvalho Chehab }
58ccae7af2SMauro Carvalho Chehab #endif
59ccae7af2SMauro Carvalho Chehab 
60ccae7af2SMauro Carvalho Chehab #endif
61