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