xref: /OK3568_Linux_fs/kernel/drivers/media/dvb-frontends/lg2160.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  *    Support for LG2160 - ATSC/MH
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  *    Copyright (C) 2010 Michael Krufky <mkrufky@linuxtv.org>
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #ifndef _LG2160_H_
9*4882a593Smuzhiyun #define _LG2160_H_
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include <linux/i2c.h>
12*4882a593Smuzhiyun #include <media/dvb_frontend.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun enum lg_chip_type {
15*4882a593Smuzhiyun 	LG2160 = 0,
16*4882a593Smuzhiyun 	LG2161 = 1,
17*4882a593Smuzhiyun };
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #define LG2161_1019 LG2161
20*4882a593Smuzhiyun #define LG2161_1040 LG2161
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun enum lg2160_spi_clock {
23*4882a593Smuzhiyun 	LG2160_SPI_3_125_MHZ = 0,
24*4882a593Smuzhiyun 	LG2160_SPI_6_25_MHZ = 1,
25*4882a593Smuzhiyun 	LG2160_SPI_12_5_MHZ = 2,
26*4882a593Smuzhiyun };
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun #if 0
29*4882a593Smuzhiyun enum lg2161_oif {
30*4882a593Smuzhiyun 	LG2161_OIF_EBI2_SLA  = 1,
31*4882a593Smuzhiyun 	LG2161_OIF_SDIO_SLA  = 2,
32*4882a593Smuzhiyun 	LG2161_OIF_SPI_SLA   = 3,
33*4882a593Smuzhiyun 	LG2161_OIF_SPI_MAS   = 4,
34*4882a593Smuzhiyun 	LG2161_OIF_SERIAL_TS = 7,
35*4882a593Smuzhiyun };
36*4882a593Smuzhiyun #endif
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun struct lg2160_config {
39*4882a593Smuzhiyun 	u8 i2c_addr;
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun 	/* user defined IF frequency in KHz */
42*4882a593Smuzhiyun 	u16 if_khz;
43*4882a593Smuzhiyun 
44*4882a593Smuzhiyun 	/* disable i2c repeater - 0:repeater enabled 1:repeater disabled */
45*4882a593Smuzhiyun 	unsigned int deny_i2c_rptr:1;
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun 	/* spectral inversion - 0:disabled 1:enabled */
48*4882a593Smuzhiyun 	unsigned int spectral_inversion:1;
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun 	unsigned int output_if;
51*4882a593Smuzhiyun 	enum lg2160_spi_clock spi_clock;
52*4882a593Smuzhiyun 	enum lg_chip_type lg_chip;
53*4882a593Smuzhiyun };
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun #if IS_REACHABLE(CONFIG_DVB_LG2160)
56*4882a593Smuzhiyun extern
57*4882a593Smuzhiyun struct dvb_frontend *lg2160_attach(const struct lg2160_config *config,
58*4882a593Smuzhiyun 				     struct i2c_adapter *i2c_adap);
59*4882a593Smuzhiyun #else
60*4882a593Smuzhiyun static inline
lg2160_attach(const struct lg2160_config * config,struct i2c_adapter * i2c_adap)61*4882a593Smuzhiyun struct dvb_frontend *lg2160_attach(const struct lg2160_config *config,
62*4882a593Smuzhiyun 				     struct i2c_adapter *i2c_adap)
63*4882a593Smuzhiyun {
64*4882a593Smuzhiyun 	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
65*4882a593Smuzhiyun 	return NULL;
66*4882a593Smuzhiyun }
67*4882a593Smuzhiyun #endif /* CONFIG_DVB_LG2160 */
68*4882a593Smuzhiyun 
69*4882a593Smuzhiyun #endif /* _LG2160_H_ */
70