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