1  /* SPDX-License-Identifier: GPL-2.0-or-later */
2  /*
3      Samsung S5H1411 VSB/QAM demodulator driver
4  
5      Copyright (C) 2008 Steven Toth <stoth@linuxtv.org>
6  
7  
8  */
9  
10  #ifndef __S5H1411_H__
11  #define __S5H1411_H__
12  
13  #include <linux/dvb/frontend.h>
14  
15  #define S5H1411_I2C_TOP_ADDR (0x32 >> 1)
16  #define S5H1411_I2C_QAM_ADDR (0x34 >> 1)
17  
18  struct s5h1411_config {
19  
20  	/* serial/parallel output */
21  #define S5H1411_PARALLEL_OUTPUT 0
22  #define S5H1411_SERIAL_OUTPUT   1
23  	u8 output_mode;
24  
25  	/* GPIO Setting */
26  #define S5H1411_GPIO_OFF 0
27  #define S5H1411_GPIO_ON  1
28  	u8 gpio;
29  
30  	/* MPEG signal timing */
31  #define S5H1411_MPEGTIMING_CONTINUOUS_INVERTING_CLOCK       0
32  #define S5H1411_MPEGTIMING_CONTINUOUS_NONINVERTING_CLOCK    1
33  #define S5H1411_MPEGTIMING_NONCONTINUOUS_INVERTING_CLOCK    2
34  #define S5H1411_MPEGTIMING_NONCONTINUOUS_NONINVERTING_CLOCK 3
35  	u16 mpeg_timing;
36  
37  	/* IF Freq for QAM and VSB in KHz */
38  #define S5H1411_IF_3250  3250
39  #define S5H1411_IF_3500  3500
40  #define S5H1411_IF_4000  4000
41  #define S5H1411_IF_5380  5380
42  #define S5H1411_IF_44000 44000
43  #define S5H1411_VSB_IF_DEFAULT S5H1411_IF_44000
44  #define S5H1411_QAM_IF_DEFAULT S5H1411_IF_44000
45  	u16 qam_if;
46  	u16 vsb_if;
47  
48  	/* Spectral Inversion */
49  #define S5H1411_INVERSION_OFF 0
50  #define S5H1411_INVERSION_ON  1
51  	u8 inversion;
52  
53  	/* Return lock status based on tuner lock, or demod lock */
54  #define S5H1411_TUNERLOCKING 0
55  #define S5H1411_DEMODLOCKING 1
56  	u8 status_mode;
57  };
58  
59  #if IS_REACHABLE(CONFIG_DVB_S5H1411)
60  extern struct dvb_frontend *s5h1411_attach(const struct s5h1411_config *config,
61  					   struct i2c_adapter *i2c);
62  #else
s5h1411_attach(const struct s5h1411_config * config,struct i2c_adapter * i2c)63  static inline struct dvb_frontend *s5h1411_attach(
64  	const struct s5h1411_config *config,
65  	struct i2c_adapter *i2c)
66  {
67  	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
68  	return NULL;
69  }
70  #endif /* CONFIG_DVB_S5H1411 */
71  
72  #endif /* __S5H1411_H__ */
73