[media] xc4000: added card_type

This patch adds support for selecting a card type in struct
xc4000_config, to allow for implementing some card specific code
in the driver.

Signed-off-by: Istvan Varga <istvan_v@mailbox.hu>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Istvan Varga 2011-06-03 09:38:04 -03:00 committed by Mauro Carvalho Chehab
parent 595a83f49a
commit 0b4021321c
2 changed files with 20 additions and 2 deletions

View file

@ -90,6 +90,7 @@ struct xc4000_priv {
u32 bandwidth; u32 bandwidth;
u8 video_standard; u8 video_standard;
u8 rf_mode; u8 rf_mode;
u8 card_type;
u8 ignore_i2c_write_errors; u8 ignore_i2c_write_errors;
/* struct xc2028_ctrl ctrl; */ /* struct xc2028_ctrl ctrl; */
struct firmware_properties cur_fw; struct firmware_properties cur_fw;
@ -1433,6 +1434,16 @@ struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe,
int instance; int instance;
u16 id = 0; u16 id = 0;
if (cfg->card_type != XC4000_CARD_GENERIC) {
if (cfg->card_type == XC4000_CARD_WINFAST_CX88) {
cfg->i2c_address = 0x61;
cfg->if_khz = 4560;
} else { /* default to PCTV 340E */
cfg->i2c_address = 0x61;
cfg->if_khz = 5400;
}
}
dprintk(1, "%s(%d-%04x)\n", __func__, dprintk(1, "%s(%d-%04x)\n", __func__,
i2c ? i2c_adapter_id(i2c) : -1, i2c ? i2c_adapter_id(i2c) : -1,
cfg ? cfg->i2c_address : -1); cfg ? cfg->i2c_address : -1);
@ -1442,6 +1453,8 @@ struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe,
instance = hybrid_tuner_request_state(struct xc4000_priv, priv, instance = hybrid_tuner_request_state(struct xc4000_priv, priv,
hybrid_tuner_instance_list, hybrid_tuner_instance_list,
i2c, cfg->i2c_address, "xc4000"); i2c, cfg->i2c_address, "xc4000");
if (cfg->card_type != XC4000_CARD_GENERIC)
priv->card_type = cfg->card_type;
switch (instance) { switch (instance) {
case 0: case 0:
goto fail; goto fail;
@ -1458,7 +1471,7 @@ struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe,
break; break;
} }
if (priv->if_khz == 0) { if (cfg->if_khz != 0) {
/* If the IF hasn't been set yet, use the value provided by /* If the IF hasn't been set yet, use the value provided by
the caller (occurs in hybrid devices where the analog the caller (occurs in hybrid devices where the analog
call to xc4000_attach occurs before the digital side) */ call to xc4000_attach occurs before the digital side) */

View file

@ -27,8 +27,13 @@
struct dvb_frontend; struct dvb_frontend;
struct i2c_adapter; struct i2c_adapter;
#define XC4000_CARD_GENERIC 0
#define XC4000_CARD_PCTV_340E 1
#define XC4000_CARD_WINFAST_CX88 2
struct xc4000_config { struct xc4000_config {
u8 i2c_address; u8 card_type; /* if card type is not generic, all other */
u8 i2c_address; /* parameters are automatically set */
u32 if_khz; u32 if_khz;
}; };