2006-10-18 08:34:16 -03:00
# ifndef DIB7000P_H
# define DIB7000P_H
2013-03-21 16:11:54 -03:00
# include <linux/kconfig.h>
2006-10-18 08:34:16 -03:00
# include "dibx000_common.h"
struct dib7000p_config {
u8 output_mpeg2_in_188_bytes ;
u8 hostbus_diversity ;
u8 tuner_is_baseband ;
int ( * update_lna ) ( struct dvb_frontend * , u16 agc_global ) ;
2007-07-27 10:08:51 -03:00
u8 agc_config_count ;
2006-10-18 08:34:16 -03:00
struct dibx000_agc_config * agc ;
struct dibx000_bandwidth_config * bw ;
# define DIB7000P_GPIO_DEFAULT_DIRECTIONS 0xffff
u16 gpio_dir ;
# define DIB7000P_GPIO_DEFAULT_VALUES 0x0000
u16 gpio_val ;
# define DIB7000P_GPIO_PWM_POS0(v) ((v & 0xf) << 12)
# define DIB7000P_GPIO_PWM_POS1(v) ((v & 0xf) << 8 )
# define DIB7000P_GPIO_PWM_POS2(v) ((v & 0xf) << 4 )
# define DIB7000P_GPIO_PWM_POS3(v) (v & 0xf)
# define DIB7000P_GPIO_DEFAULT_PWM_POS 0xffff
u16 gpio_pwm_pos ;
u16 pwm_freq_div ;
u8 quartz_direct ;
2007-07-27 10:08:51 -03:00
u8 spur_protect ;
2006-10-18 08:34:16 -03:00
int ( * agc_control ) ( struct dvb_frontend * , u8 before ) ;
2008-04-22 15:37:01 -03:00
u8 output_mode ;
2011-01-04 04:54:31 -03:00
u8 disable_sample_and_hold : 1 ;
2010-09-07 12:50:45 -03:00
2011-01-04 04:54:31 -03:00
u8 enable_current_mirror : 1 ;
u16 diversity_delay ;
2010-09-07 12:50:45 -03:00
2011-01-04 04:54:31 -03:00
u8 default_i2c_addr ;
2011-01-04 13:08:14 -03:00
u8 enMpegOutput : 1 ;
2006-10-18 08:34:16 -03:00
} ;
# define DEFAULT_DIB7000P_I2C_ADDRESS 18
2014-05-29 09:20:15 -03:00
struct dib7000p_ops {
int ( * set_wbd_ref ) ( struct dvb_frontend * demod , u16 value ) ;
int ( * get_agc_values ) ( struct dvb_frontend * fe ,
2011-08-05 13:49:33 -03:00
u16 * agc_global , u16 * agc1 , u16 * agc2 , u16 * wbd ) ;
2014-05-29 09:20:15 -03:00
int ( * set_agc1_min ) ( struct dvb_frontend * fe , u16 v ) ;
int ( * update_pll ) ( struct dvb_frontend * fe , struct dibx000_bandwidth_config * bw ) ;
int ( * set_gpio ) ( struct dvb_frontend * demod , u8 num , u8 dir , u8 val ) ;
u32 ( * ctrl_timf ) ( struct dvb_frontend * fe , u8 op , u32 timf ) ;
int ( * dib7000pc_detection ) ( struct i2c_adapter * i2c_adap ) ;
struct i2c_adapter * ( * get_i2c_master ) ( struct dvb_frontend * demod , enum dibx000_i2c_interface intf , int gating ) ;
int ( * pid_filter_ctrl ) ( struct dvb_frontend * fe , u8 onoff ) ;
int ( * pid_filter ) ( struct dvb_frontend * fe , u8 id , u16 pid , u8 onoff ) ;
int ( * i2c_enumeration ) ( struct i2c_adapter * i2c , int no_of_demods , u8 default_addr , struct dib7000p_config cfg [ ] ) ;
struct i2c_adapter * ( * get_i2c_tuner ) ( struct dvb_frontend * fe ) ;
int ( * tuner_sleep ) ( struct dvb_frontend * fe , int onoff ) ;
int ( * get_adc_power ) ( struct dvb_frontend * fe ) ;
int ( * slave_reset ) ( struct dvb_frontend * fe ) ;
struct dvb_frontend * ( * init ) ( struct i2c_adapter * i2c_adap , u8 i2c_addr , struct dib7000p_config * cfg ) ;
} ;
2011-01-04 04:54:31 -03:00
2015-02-18 14:12:42 -03:00
# if IS_REACHABLE(CONFIG_DVB_DIB7000P)
2014-05-29 09:20:15 -03:00
void * dib7000p_attach ( struct dib7000p_ops * ops ) ;
# else
static inline void * dib7000p_attach ( struct dib7000p_ops * ops )
2011-01-04 04:54:31 -03:00
{
printk ( KERN_WARNING " %s: driver disabled by Kconfig \n " , __func__ ) ;
return NULL ;
}
2009-03-09 00:04:17 -03:00
# endif
2006-10-18 08:34:16 -03:00
# endif