xref: /linux/drivers/media/dvb-frontends/dib7000m.h (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
291bb9be6SPatrick Boettcher #ifndef DIB7000M_H
391bb9be6SPatrick Boettcher #define DIB7000M_H
491bb9be6SPatrick Boettcher 
591bb9be6SPatrick Boettcher #include "dibx000_common.h"
691bb9be6SPatrick Boettcher 
791bb9be6SPatrick Boettcher struct dib7000m_config {
891bb9be6SPatrick Boettcher 	u8 dvbt_mode;
991bb9be6SPatrick Boettcher 	u8 output_mpeg2_in_188_bytes;
1091bb9be6SPatrick Boettcher 	u8 hostbus_diversity;
1191bb9be6SPatrick Boettcher 	u8 tuner_is_baseband;
1291bb9be6SPatrick Boettcher 	u8 mobile_mode;
1391bb9be6SPatrick Boettcher 	int (*update_lna) (struct dvb_frontend *, u16 agc_global);
1491bb9be6SPatrick Boettcher 
1591bb9be6SPatrick Boettcher 	u8 agc_config_count;
1691bb9be6SPatrick Boettcher 	struct dibx000_agc_config *agc;
1791bb9be6SPatrick Boettcher 
1891bb9be6SPatrick Boettcher 	struct dibx000_bandwidth_config *bw;
1991bb9be6SPatrick Boettcher 
2091bb9be6SPatrick Boettcher #define DIB7000M_GPIO_DEFAULT_DIRECTIONS 0xffff
2191bb9be6SPatrick Boettcher 	u16 gpio_dir;
2291bb9be6SPatrick Boettcher #define DIB7000M_GPIO_DEFAULT_VALUES     0x0000
2391bb9be6SPatrick Boettcher 	u16 gpio_val;
2491bb9be6SPatrick Boettcher #define DIB7000M_GPIO_PWM_POS0(v)        ((v & 0xf) << 12)
2591bb9be6SPatrick Boettcher #define DIB7000M_GPIO_PWM_POS1(v)        ((v & 0xf) << 8 )
2691bb9be6SPatrick Boettcher #define DIB7000M_GPIO_PWM_POS2(v)        ((v & 0xf) << 4 )
2791bb9be6SPatrick Boettcher #define DIB7000M_GPIO_PWM_POS3(v)         (v & 0xf)
2891bb9be6SPatrick Boettcher #define DIB7000M_GPIO_DEFAULT_PWM_POS    0xffff
2991bb9be6SPatrick Boettcher 	u16 gpio_pwm_pos;
3091bb9be6SPatrick Boettcher 
3191bb9be6SPatrick Boettcher 	u16 pwm_freq_div;
3291bb9be6SPatrick Boettcher 
3391bb9be6SPatrick Boettcher 	u8 quartz_direct;
3491bb9be6SPatrick Boettcher 
3591bb9be6SPatrick Boettcher 	u8 input_clk_is_div_2;
3669ea31e7SPatrick Boettcher 
3769ea31e7SPatrick Boettcher 	int (*agc_control) (struct dvb_frontend *, u8 before);
3891bb9be6SPatrick Boettcher };
3991bb9be6SPatrick Boettcher 
4091bb9be6SPatrick Boettcher #define DEFAULT_DIB7000M_I2C_ADDRESS 18
4191bb9be6SPatrick Boettcher 
429b174527SArnd Bergmann #if IS_REACHABLE(CONFIG_DVB_DIB7000M)
437991704dSMichael Krufky extern struct dvb_frontend *dib7000m_attach(struct i2c_adapter *i2c_adap,
447991704dSMichael Krufky 					    u8 i2c_addr,
457991704dSMichael Krufky 					    struct dib7000m_config *cfg);
467991704dSMichael Krufky extern struct i2c_adapter *dib7000m_get_i2c_master(struct dvb_frontend *,
477991704dSMichael Krufky 						   enum dibx000_i2c_interface,
487991704dSMichael Krufky 						   int);
49e192a7cfSOlivier Grenie extern int dib7000m_pid_filter(struct dvb_frontend *, u8 id, u16 pid, u8 onoff);
50e192a7cfSOlivier Grenie extern int dib7000m_pid_filter_ctrl(struct dvb_frontend *fe, u8 onoff);
51181bc8d9SMichael Krufky #else
52181bc8d9SMichael Krufky static inline
53181bc8d9SMichael Krufky struct dvb_frontend *dib7000m_attach(struct i2c_adapter *i2c_adap,
54181bc8d9SMichael Krufky 				     u8 i2c_addr, struct dib7000m_config *cfg)
55181bc8d9SMichael Krufky {
56181bc8d9SMichael Krufky 	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
57181bc8d9SMichael Krufky 	return NULL;
58181bc8d9SMichael Krufky }
59181bc8d9SMichael Krufky 
60181bc8d9SMichael Krufky static inline
61181bc8d9SMichael Krufky struct i2c_adapter *dib7000m_get_i2c_master(struct dvb_frontend *demod,
62181bc8d9SMichael Krufky 					    enum dibx000_i2c_interface intf,
63181bc8d9SMichael Krufky 					    int gating)
64181bc8d9SMichael Krufky {
65181bc8d9SMichael Krufky 	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
66181bc8d9SMichael Krufky 	return NULL;
67181bc8d9SMichael Krufky }
68e192a7cfSOlivier Grenie static inline int dib7000m_pid_filter(struct dvb_frontend *fe, u8 id,
69e192a7cfSOlivier Grenie 						u16 pid, u8 onoff)
70e192a7cfSOlivier Grenie {
71e192a7cfSOlivier Grenie 	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
72e192a7cfSOlivier Grenie 	return -ENODEV;
73e192a7cfSOlivier Grenie }
74e192a7cfSOlivier Grenie 
75e192a7cfSOlivier Grenie static inline int dib7000m_pid_filter_ctrl(struct dvb_frontend *fe,
76e192a7cfSOlivier Grenie 						uint8_t onoff)
77e192a7cfSOlivier Grenie {
78e192a7cfSOlivier Grenie 	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
79e192a7cfSOlivier Grenie 	return -ENODEV;
80e192a7cfSOlivier Grenie }
81181bc8d9SMichael Krufky #endif
8291bb9be6SPatrick Boettcher 
8391bb9be6SPatrick Boettcher /* TODO
8491bb9be6SPatrick Boettcher extern INT dib7000m_set_gpio(struct dibDemod *demod, UCHAR num, UCHAR dir, UCHAR val);
8591bb9be6SPatrick Boettcher extern INT dib7000m_enable_vbg_voltage(struct dibDemod *demod);
8691bb9be6SPatrick Boettcher extern void dib7000m_set_hostbus_diversity(struct dibDemod *demod, UCHAR onoff);
8791bb9be6SPatrick Boettcher extern USHORT dib7000m_get_current_agc_global(struct dibDemod *demod);
8891bb9be6SPatrick Boettcher */
8991bb9be6SPatrick Boettcher 
9091bb9be6SPatrick Boettcher #endif
91