[media] DiB7090: add support for the dib7090 based
This patch adds support for the SoC DiB7090 DVB-T demodulator and its melt-in UHF/VHF RF tuner. Signed-off-by: Olivier Grenie <olivier.grenie@dibcom.fr> Signed-off-by: Patrick Boettcher <patrick.boettcher@dibcom.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Родитель
dd316c6bac
Коммит
713d54a8bd
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -33,59 +33,54 @@ struct dib7000p_config {
|
|||
int (*agc_control) (struct dvb_frontend *, u8 before);
|
||||
|
||||
u8 output_mode;
|
||||
u8 disable_sample_and_hold : 1;
|
||||
u8 disable_sample_and_hold:1;
|
||||
|
||||
u8 enable_current_mirror : 1;
|
||||
u8 diversity_delay;
|
||||
u8 enable_current_mirror:1;
|
||||
u16 diversity_delay;
|
||||
|
||||
u8 default_i2c_addr;
|
||||
u8 enMpegOutput : 1;
|
||||
};
|
||||
|
||||
#define DEFAULT_DIB7000P_I2C_ADDRESS 18
|
||||
|
||||
#if defined(CONFIG_DVB_DIB7000P) || (defined(CONFIG_DVB_DIB7000P_MODULE) && \
|
||||
defined(MODULE))
|
||||
extern struct dvb_frontend *dib7000p_attach(struct i2c_adapter *i2c_adap,
|
||||
u8 i2c_addr,
|
||||
struct dib7000p_config *cfg);
|
||||
extern struct i2c_adapter *dib7000p_get_i2c_master(struct dvb_frontend *,
|
||||
enum dibx000_i2c_interface,
|
||||
int);
|
||||
extern int dib7000p_i2c_enumeration(struct i2c_adapter *i2c,
|
||||
int no_of_demods, u8 default_addr,
|
||||
struct dib7000p_config cfg[]);
|
||||
defined(MODULE))
|
||||
extern struct dvb_frontend *dib7000p_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib7000p_config *cfg);
|
||||
extern struct i2c_adapter *dib7000p_get_i2c_master(struct dvb_frontend *, enum dibx000_i2c_interface, int);
|
||||
extern int dib7000p_i2c_enumeration(struct i2c_adapter *i2c, int no_of_demods, u8 default_addr, struct dib7000p_config cfg[]);
|
||||
extern int dib7000p_set_gpio(struct dvb_frontend *, u8 num, u8 dir, u8 val);
|
||||
extern int dib7000p_set_wbd_ref(struct dvb_frontend *, u16 value);
|
||||
extern int dib7000pc_detection(struct i2c_adapter *i2c_adap);
|
||||
extern int dib7000p_pid_filter(struct dvb_frontend *, u8 id, u16 pid, u8 onoff);
|
||||
extern int dib7000p_pid_filter_ctrl(struct dvb_frontend *fe, u8 onoff);
|
||||
extern int dib7000p_update_pll(struct dvb_frontend *fe, struct dibx000_bandwidth_config *bw);
|
||||
extern u32 dib7000p_ctrl_timf(struct dvb_frontend *fe, u8 op, u32 timf);
|
||||
extern int dib7090_agc_restart(struct dvb_frontend *fe, u8 restart);
|
||||
extern int dib7090_tuner_sleep(struct dvb_frontend *fe, int onoff);
|
||||
extern int dib7090_get_adc_power(struct dvb_frontend *fe);
|
||||
extern struct i2c_adapter *dib7090_get_i2c_tuner(struct dvb_frontend *fe);
|
||||
extern int dib7090_slave_reset(struct dvb_frontend *fe);
|
||||
#else
|
||||
static inline
|
||||
struct dvb_frontend *dib7000p_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr,
|
||||
struct dib7000p_config *cfg)
|
||||
static inline struct dvb_frontend *dib7000p_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib7000p_config *cfg)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline
|
||||
struct i2c_adapter *dib7000p_get_i2c_master(struct dvb_frontend *fe,
|
||||
enum dibx000_i2c_interface i,
|
||||
int x)
|
||||
static inline struct i2c_adapter *dib7000p_get_i2c_master(struct dvb_frontend *fe, enum dibx000_i2c_interface i, int x)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline int dib7000p_i2c_enumeration(struct i2c_adapter *i2c,
|
||||
int no_of_demods, u8 default_addr,
|
||||
struct dib7000p_config cfg[])
|
||||
static inline int dib7000p_i2c_enumeration(struct i2c_adapter *i2c, int no_of_demods, u8 default_addr, struct dib7000p_config cfg[])
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline int dib7000p_set_gpio(struct dvb_frontend *fe,
|
||||
u8 num, u8 dir, u8 val)
|
||||
static inline int dib7000p_set_gpio(struct dvb_frontend *fe, u8 num, u8 dir, u8 val)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return -ENODEV;
|
||||
|
@ -102,16 +97,59 @@ static inline int dib7000pc_detection(struct i2c_adapter *i2c_adap)
|
|||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline int dib7000p_pid_filter(struct dvb_frontend *fe, u8 id, u16 pid, u8 onoff)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return -ENODEV;
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline int dib7000p_pid_filter_ctrl(struct dvb_frontend *fe, uint8_t onoff)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return -ENODEV;
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline int dib7000p_update_pll(struct dvb_frontend *fe, struct dibx000_bandwidth_config *bw)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline u32 dib7000p_ctrl_timf(struct dvb_frontend *fe, u8 op, u32 timf)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int dib7090_agc_restart(struct dvb_frontend *fe, u8 restart)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline int dib7090_tuner_sleep(struct dvb_frontend *fe, int onoff)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline int dib7090_get_adc_power(struct dvb_frontend *fe)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
static inline struct i2c_adapter *dib7090_get_i2c_tuner(struct dvb_frontend *fe)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline int dib7090_slave_reset(struct dvb_frontend *fe)
|
||||
{
|
||||
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
|
||||
return -ENODEV;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -141,8 +141,8 @@ enum dibx000_adc_states {
|
|||
};
|
||||
|
||||
#define BANDWIDTH_TO_KHZ(v) ( (v) == BANDWIDTH_8_MHZ ? 8000 : \
|
||||
(v) == BANDWIDTH_7_MHZ ? 7000 : \
|
||||
(v) == BANDWIDTH_6_MHZ ? 6000 : 8000 )
|
||||
(v) == BANDWIDTH_7_MHZ ? 7000 : \
|
||||
(v) == BANDWIDTH_6_MHZ ? 6000 : 8000 )
|
||||
|
||||
#define BANDWIDTH_TO_INDEX(v) ( \
|
||||
(v) == 8000 ? BANDWIDTH_8_MHZ : \
|
||||
|
@ -158,53 +158,57 @@ enum dibx000_adc_states {
|
|||
#define OUTMODE_MPEG2_FIFO 5
|
||||
#define OUTMODE_ANALOG_ADC 6
|
||||
|
||||
enum frontend_tune_state {
|
||||
CT_TUNER_START = 10,
|
||||
CT_TUNER_STEP_0,
|
||||
CT_TUNER_STEP_1,
|
||||
CT_TUNER_STEP_2,
|
||||
CT_TUNER_STEP_3,
|
||||
CT_TUNER_STEP_4,
|
||||
CT_TUNER_STEP_5,
|
||||
CT_TUNER_STEP_6,
|
||||
CT_TUNER_STEP_7,
|
||||
CT_TUNER_STOP,
|
||||
#define INPUT_MODE_OFF 0x11
|
||||
#define INPUT_MODE_DIVERSITY 0x12
|
||||
#define INPUT_MODE_MPEG 0x13
|
||||
|
||||
CT_AGC_START = 20,
|
||||
CT_AGC_STEP_0,
|
||||
CT_AGC_STEP_1,
|
||||
CT_AGC_STEP_2,
|
||||
CT_AGC_STEP_3,
|
||||
CT_AGC_STEP_4,
|
||||
CT_AGC_STOP,
|
||||
enum frontend_tune_state {
|
||||
CT_TUNER_START = 10,
|
||||
CT_TUNER_STEP_0,
|
||||
CT_TUNER_STEP_1,
|
||||
CT_TUNER_STEP_2,
|
||||
CT_TUNER_STEP_3,
|
||||
CT_TUNER_STEP_4,
|
||||
CT_TUNER_STEP_5,
|
||||
CT_TUNER_STEP_6,
|
||||
CT_TUNER_STEP_7,
|
||||
CT_TUNER_STOP,
|
||||
|
||||
CT_AGC_START = 20,
|
||||
CT_AGC_STEP_0,
|
||||
CT_AGC_STEP_1,
|
||||
CT_AGC_STEP_2,
|
||||
CT_AGC_STEP_3,
|
||||
CT_AGC_STEP_4,
|
||||
CT_AGC_STOP,
|
||||
|
||||
CT_DEMOD_START = 30,
|
||||
CT_DEMOD_STEP_1,
|
||||
CT_DEMOD_STEP_2,
|
||||
CT_DEMOD_STEP_3,
|
||||
CT_DEMOD_STEP_4,
|
||||
CT_DEMOD_STEP_5,
|
||||
CT_DEMOD_STEP_6,
|
||||
CT_DEMOD_STEP_7,
|
||||
CT_DEMOD_STEP_8,
|
||||
CT_DEMOD_STEP_9,
|
||||
CT_DEMOD_STEP_10,
|
||||
CT_DEMOD_SEARCH_NEXT = 41,
|
||||
CT_DEMOD_STEP_LOCKED,
|
||||
CT_DEMOD_STOP,
|
||||
CT_DEMOD_STEP_1,
|
||||
CT_DEMOD_STEP_2,
|
||||
CT_DEMOD_STEP_3,
|
||||
CT_DEMOD_STEP_4,
|
||||
CT_DEMOD_STEP_5,
|
||||
CT_DEMOD_STEP_6,
|
||||
CT_DEMOD_STEP_7,
|
||||
CT_DEMOD_STEP_8,
|
||||
CT_DEMOD_STEP_9,
|
||||
CT_DEMOD_STEP_10,
|
||||
CT_DEMOD_SEARCH_NEXT = 41,
|
||||
CT_DEMOD_STEP_LOCKED,
|
||||
CT_DEMOD_STOP,
|
||||
|
||||
CT_DONE = 100,
|
||||
CT_SHUTDOWN,
|
||||
CT_DONE = 100,
|
||||
CT_SHUTDOWN,
|
||||
|
||||
};
|
||||
|
||||
struct dvb_frontend_parametersContext {
|
||||
#define CHANNEL_STATUS_PARAMETERS_UNKNOWN 0x01
|
||||
#define CHANNEL_STATUS_PARAMETERS_SET 0x02
|
||||
u8 status;
|
||||
u32 tune_time_estimation[2];
|
||||
s32 tps_available;
|
||||
u16 tps[9];
|
||||
u8 status;
|
||||
u32 tune_time_estimation[2];
|
||||
s32 tps_available;
|
||||
u16 tps[9];
|
||||
};
|
||||
|
||||
#define FE_STATUS_TUNE_FAILED 0
|
||||
|
|
Загрузка…
Ссылка в новой задаче