1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Samsung s5h1432 VSB/QAM demodulator driver 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 2009 Bill Liu <Bill.Liu@Conexant.com> 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef __S5H1432_H__ 9*4882a593Smuzhiyun #define __S5H1432_H__ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <linux/dvb/frontend.h> 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun #define S5H1432_I2C_TOP_ADDR (0x02 >> 1) 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define TAIWAN_HI_IF_FREQ_44_MHZ 44000000 16*4882a593Smuzhiyun #define EUROPE_HI_IF_FREQ_36_MHZ 36000000 17*4882a593Smuzhiyun #define IF_FREQ_6_MHZ 6000000 18*4882a593Smuzhiyun #define IF_FREQ_3point3_MHZ 3300000 19*4882a593Smuzhiyun #define IF_FREQ_3point5_MHZ 3500000 20*4882a593Smuzhiyun #define IF_FREQ_4_MHZ 4000000 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun struct s5h1432_config { 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun /* serial/parallel output */ 25*4882a593Smuzhiyun #define S5H1432_PARALLEL_OUTPUT 0 26*4882a593Smuzhiyun #define S5H1432_SERIAL_OUTPUT 1 27*4882a593Smuzhiyun u8 output_mode; 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun /* GPIO Setting */ 30*4882a593Smuzhiyun #define S5H1432_GPIO_OFF 0 31*4882a593Smuzhiyun #define S5H1432_GPIO_ON 1 32*4882a593Smuzhiyun u8 gpio; 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun /* MPEG signal timing */ 35*4882a593Smuzhiyun #define S5H1432_MPEGTIMING_CONTINUOUS_INVERTING_CLOCK 0 36*4882a593Smuzhiyun #define S5H1432_MPEGTIMING_CONTINUOUS_NONINVERTING_CLOCK 1 37*4882a593Smuzhiyun #define S5H1432_MPEGTIMING_NONCONTINUOUS_INVERTING_CLOCK 2 38*4882a593Smuzhiyun #define S5H1432_MPEGTIMING_NONCONTINUOUS_NONINVERTING_CLOCK 3 39*4882a593Smuzhiyun u16 mpeg_timing; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* IF Freq for QAM and VSB in KHz */ 42*4882a593Smuzhiyun #define S5H1432_IF_3250 3250 43*4882a593Smuzhiyun #define S5H1432_IF_3500 3500 44*4882a593Smuzhiyun #define S5H1432_IF_4000 4000 45*4882a593Smuzhiyun #define S5H1432_IF_5380 5380 46*4882a593Smuzhiyun #define S5H1432_IF_44000 44000 47*4882a593Smuzhiyun #define S5H1432_VSB_IF_DEFAULT s5h1432_IF_44000 48*4882a593Smuzhiyun #define S5H1432_QAM_IF_DEFAULT s5h1432_IF_44000 49*4882a593Smuzhiyun u16 qam_if; 50*4882a593Smuzhiyun u16 vsb_if; 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun /* Spectral Inversion */ 53*4882a593Smuzhiyun #define S5H1432_INVERSION_OFF 0 54*4882a593Smuzhiyun #define S5H1432_INVERSION_ON 1 55*4882a593Smuzhiyun u8 inversion; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun /* Return lock status based on tuner lock, or demod lock */ 58*4882a593Smuzhiyun #define S5H1432_TUNERLOCKING 0 59*4882a593Smuzhiyun #define S5H1432_DEMODLOCKING 1 60*4882a593Smuzhiyun u8 status_mode; 61*4882a593Smuzhiyun }; 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun #if IS_REACHABLE(CONFIG_DVB_S5H1432) 64*4882a593Smuzhiyun extern struct dvb_frontend *s5h1432_attach(const struct s5h1432_config *config, 65*4882a593Smuzhiyun struct i2c_adapter *i2c); 66*4882a593Smuzhiyun #else s5h1432_attach(const struct s5h1432_config * config,struct i2c_adapter * i2c)67*4882a593Smuzhiyunstatic inline struct dvb_frontend *s5h1432_attach(const struct s5h1432_config 68*4882a593Smuzhiyun *config, 69*4882a593Smuzhiyun struct i2c_adapter *i2c) 70*4882a593Smuzhiyun { 71*4882a593Smuzhiyun printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 72*4882a593Smuzhiyun return NULL; 73*4882a593Smuzhiyun } 74*4882a593Smuzhiyun #endif /* CONFIG_DVB_s5h1432 */ 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun #endif /* __s5h1432_H__ */ 77