Commit 713d54a8 authored by Olivier Grenie's avatar Olivier Grenie Committed by Mauro Carvalho Chehab

[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: default avatarOlivier Grenie <olivier.grenie@dibcom.fr>
Signed-off-by: default avatarPatrick Boettcher <patrick.boettcher@dibcom.fr>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent dd316c6b
This diff is collapsed.
...@@ -33,59 +33,54 @@ struct dib7000p_config { ...@@ -33,59 +33,54 @@ struct dib7000p_config {
int (*agc_control) (struct dvb_frontend *, u8 before); int (*agc_control) (struct dvb_frontend *, u8 before);
u8 output_mode; u8 output_mode;
u8 disable_sample_and_hold : 1; u8 disable_sample_and_hold:1;
u8 enable_current_mirror : 1; u8 enable_current_mirror:1;
u8 diversity_delay; u16 diversity_delay;
u8 default_i2c_addr;
u8 enMpegOutput : 1;
}; };
#define DEFAULT_DIB7000P_I2C_ADDRESS 18 #define DEFAULT_DIB7000P_I2C_ADDRESS 18
#if defined(CONFIG_DVB_DIB7000P) || (defined(CONFIG_DVB_DIB7000P_MODULE) && \ #if defined(CONFIG_DVB_DIB7000P) || (defined(CONFIG_DVB_DIB7000P_MODULE) && \
defined(MODULE)) defined(MODULE))
extern struct dvb_frontend *dib7000p_attach(struct i2c_adapter *i2c_adap, extern struct dvb_frontend *dib7000p_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib7000p_config *cfg);
u8 i2c_addr, extern struct i2c_adapter *dib7000p_get_i2c_master(struct dvb_frontend *, enum dibx000_i2c_interface, int);
struct dib7000p_config *cfg); extern int dib7000p_i2c_enumeration(struct i2c_adapter *i2c, int no_of_demods, u8 default_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_gpio(struct dvb_frontend *, u8 num, u8 dir, u8 val);
extern int dib7000p_set_wbd_ref(struct dvb_frontend *, u16 value); extern int dib7000p_set_wbd_ref(struct dvb_frontend *, u16 value);
extern int dib7000pc_detection(struct i2c_adapter *i2c_adap); 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(struct dvb_frontend *, u8 id, u16 pid, u8 onoff);
extern int dib7000p_pid_filter_ctrl(struct dvb_frontend *fe, 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 #else
static inline static inline struct dvb_frontend *dib7000p_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib7000p_config *cfg)
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__); printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
return NULL; return NULL;
} }
static inline static inline struct i2c_adapter *dib7000p_get_i2c_master(struct dvb_frontend *fe, enum dibx000_i2c_interface i, int x)
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__); printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
return NULL; return NULL;
} }
static inline int dib7000p_i2c_enumeration(struct i2c_adapter *i2c, static inline int dib7000p_i2c_enumeration(struct i2c_adapter *i2c, int no_of_demods, u8 default_addr, struct dib7000p_config cfg[])
int no_of_demods, u8 default_addr,
struct dib7000p_config cfg[])
{ {
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
return -ENODEV; return -ENODEV;
} }
static inline int dib7000p_set_gpio(struct dvb_frontend *fe, static inline int dib7000p_set_gpio(struct dvb_frontend *fe, u8 num, u8 dir, u8 val)
u8 num, u8 dir, u8 val)
{ {
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
return -ENODEV; return -ENODEV;
...@@ -102,16 +97,59 @@ static inline int dib7000pc_detection(struct i2c_adapter *i2c_adap) ...@@ -102,16 +97,59 @@ static inline int dib7000pc_detection(struct i2c_adapter *i2c_adap)
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
return -ENODEV; return -ENODEV;
} }
static inline int dib7000p_pid_filter(struct dvb_frontend *fe, u8 id, u16 pid, u8 onoff) 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__); printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
return -ENODEV; return -ENODEV;
} }
static inline int dib7000p_pid_filter_ctrl(struct dvb_frontend *fe, uint8_t onoff) static inline int dib7000p_pid_filter_ctrl(struct dvb_frontend *fe, uint8_t onoff)
{ {
printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
return -ENODEV; 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 #endif
......
...@@ -141,8 +141,8 @@ enum dibx000_adc_states { ...@@ -141,8 +141,8 @@ enum dibx000_adc_states {
}; };
#define BANDWIDTH_TO_KHZ(v) ( (v) == BANDWIDTH_8_MHZ ? 8000 : \ #define BANDWIDTH_TO_KHZ(v) ( (v) == BANDWIDTH_8_MHZ ? 8000 : \
(v) == BANDWIDTH_7_MHZ ? 7000 : \ (v) == BANDWIDTH_7_MHZ ? 7000 : \
(v) == BANDWIDTH_6_MHZ ? 6000 : 8000 ) (v) == BANDWIDTH_6_MHZ ? 6000 : 8000 )
#define BANDWIDTH_TO_INDEX(v) ( \ #define BANDWIDTH_TO_INDEX(v) ( \
(v) == 8000 ? BANDWIDTH_8_MHZ : \ (v) == 8000 ? BANDWIDTH_8_MHZ : \
...@@ -158,53 +158,57 @@ enum dibx000_adc_states { ...@@ -158,53 +158,57 @@ enum dibx000_adc_states {
#define OUTMODE_MPEG2_FIFO 5 #define OUTMODE_MPEG2_FIFO 5
#define OUTMODE_ANALOG_ADC 6 #define OUTMODE_ANALOG_ADC 6
#define INPUT_MODE_OFF 0x11
#define INPUT_MODE_DIVERSITY 0x12
#define INPUT_MODE_MPEG 0x13
enum frontend_tune_state { enum frontend_tune_state {
CT_TUNER_START = 10, CT_TUNER_START = 10,
CT_TUNER_STEP_0, CT_TUNER_STEP_0,
CT_TUNER_STEP_1, CT_TUNER_STEP_1,
CT_TUNER_STEP_2, CT_TUNER_STEP_2,
CT_TUNER_STEP_3, CT_TUNER_STEP_3,
CT_TUNER_STEP_4, CT_TUNER_STEP_4,
CT_TUNER_STEP_5, CT_TUNER_STEP_5,
CT_TUNER_STEP_6, CT_TUNER_STEP_6,
CT_TUNER_STEP_7, CT_TUNER_STEP_7,
CT_TUNER_STOP, CT_TUNER_STOP,
CT_AGC_START = 20, CT_AGC_START = 20,
CT_AGC_STEP_0, CT_AGC_STEP_0,
CT_AGC_STEP_1, CT_AGC_STEP_1,
CT_AGC_STEP_2, CT_AGC_STEP_2,
CT_AGC_STEP_3, CT_AGC_STEP_3,
CT_AGC_STEP_4, CT_AGC_STEP_4,
CT_AGC_STOP, CT_AGC_STOP,
CT_DEMOD_START = 30, CT_DEMOD_START = 30,
CT_DEMOD_STEP_1, CT_DEMOD_STEP_1,
CT_DEMOD_STEP_2, CT_DEMOD_STEP_2,
CT_DEMOD_STEP_3, CT_DEMOD_STEP_3,
CT_DEMOD_STEP_4, CT_DEMOD_STEP_4,
CT_DEMOD_STEP_5, CT_DEMOD_STEP_5,
CT_DEMOD_STEP_6, CT_DEMOD_STEP_6,
CT_DEMOD_STEP_7, CT_DEMOD_STEP_7,
CT_DEMOD_STEP_8, CT_DEMOD_STEP_8,
CT_DEMOD_STEP_9, CT_DEMOD_STEP_9,
CT_DEMOD_STEP_10, CT_DEMOD_STEP_10,
CT_DEMOD_SEARCH_NEXT = 41, CT_DEMOD_SEARCH_NEXT = 41,
CT_DEMOD_STEP_LOCKED, CT_DEMOD_STEP_LOCKED,
CT_DEMOD_STOP, CT_DEMOD_STOP,
CT_DONE = 100, CT_DONE = 100,
CT_SHUTDOWN, CT_SHUTDOWN,
}; };
struct dvb_frontend_parametersContext { struct dvb_frontend_parametersContext {
#define CHANNEL_STATUS_PARAMETERS_UNKNOWN 0x01 #define CHANNEL_STATUS_PARAMETERS_UNKNOWN 0x01
#define CHANNEL_STATUS_PARAMETERS_SET 0x02 #define CHANNEL_STATUS_PARAMETERS_SET 0x02
u8 status; u8 status;
u32 tune_time_estimation[2]; u32 tune_time_estimation[2];
s32 tps_available; s32 tps_available;
u16 tps[9]; u16 tps[9];
}; };
#define FE_STATUS_TUNE_FAILED 0 #define FE_STATUS_TUNE_FAILED 0
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment