Эх сурвалжийг харах

[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>
Istvan Varga 14 жил өмнө
parent
commit
0b4021321c

+ 14 - 1
drivers/media/common/tuners/xc4000.c

@@ -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) */

+ 6 - 1
drivers/media/common/tuners/xc4000.h

@@ -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;
 };
 };