From b5a627370aafdee6829153b7a5b48111a0996c18 Mon Sep 17 00:00:00 2001 From: Michael Krufky Date: Mon, 6 Feb 2012 19:40:32 -0300 Subject: [PATCH] --- yaml --- r: 294929 b: refs/heads/master c: 76efb0ba2118c286231dd062bf02b2537cc8738f h: refs/heads/master i: 294927: f6d1d1285f0c88f06e4e5f65cd491bb3e6a8af53 v: v3 --- [refs] | 2 +- trunk/drivers/media/common/tuners/xc5000.c | 22 ++++++++++++++++------ trunk/drivers/media/common/tuners/xc5000.h | 13 +++++++++++++ 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index e9712303a006..664acf86f185 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 88495030dc53cd97d4c71937b959e8c67ed27ed7 +refs/heads/master: 76efb0ba2118c286231dd062bf02b2537cc8738f diff --git a/trunk/drivers/media/common/tuners/xc5000.c b/trunk/drivers/media/common/tuners/xc5000.c index 296df05b8cda..16c3f75816c4 100644 --- a/trunk/drivers/media/common/tuners/xc5000.c +++ b/trunk/drivers/media/common/tuners/xc5000.c @@ -49,9 +49,6 @@ static LIST_HEAD(hybrid_tuner_instance_list); #define dprintk(level, fmt, arg...) if (debug >= level) \ printk(KERN_INFO "%s: " fmt, "xc5000", ## arg) -#define XC5000_DEFAULT_FIRMWARE "dvb-fe-xc5000-1.6.114.fw" -#define XC5000_DEFAULT_FIRMWARE_SIZE 12401 - struct xc5000_priv { struct tuner_i2c_props i2c_props; struct list_head hybrid_tuner_instance_list; @@ -62,6 +59,8 @@ struct xc5000_priv { u8 video_standard; u8 rf_mode; u8 radio_input; + + struct xc5000_fw_cfg *fw; }; /* Misc Defines */ @@ -204,6 +203,11 @@ static struct XC_TV_STANDARD XC5000_Standard[MAX_TV_STANDARD] = { {"FM Radio-INPUT1_MONO", 0x0278, 0x9002} }; +struct xc5000_fw_cfg xc5000a_1_6_114 = { + .name = "dvb-fe-xc5000-1.6.114.fw", + .size = 12401, +}; + static int xc_load_fw_and_init_tuner(struct dvb_frontend *fe); static int xc5000_is_firmware_loaded(struct dvb_frontend *fe); static int xc5000_readreg(struct xc5000_priv *priv, u16 reg, u16 *val); @@ -555,9 +559,9 @@ static int xc5000_fwupload(struct dvb_frontend *fe) /* request the firmware, this will block and timeout */ printk(KERN_INFO "xc5000: waiting for firmware upload (%s)...\n", - XC5000_DEFAULT_FIRMWARE); + priv->fw->name); - ret = request_firmware(&fw, XC5000_DEFAULT_FIRMWARE, + ret = request_firmware(&fw, priv->fw->name, priv->i2c_props.adap->dev.parent); if (ret) { printk(KERN_ERR "xc5000: Upload failed. (file not found?)\n"); @@ -569,7 +573,7 @@ static int xc5000_fwupload(struct dvb_frontend *fe) ret = XC_RESULT_SUCCESS; } - if (fw->size != XC5000_DEFAULT_FIRMWARE_SIZE) { + if (fw->size != priv->fw->size) { printk(KERN_ERR "xc5000: firmware incorrect size\n"); ret = XC_RESULT_RESET_FAILURE; } else { @@ -1139,6 +1143,12 @@ struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe, if (priv->radio_input == 0) priv->radio_input = cfg->radio_input; + /* don't override firmware filename if it's already been set + unless explicitly specified */ + if ((priv->fw == NULL) || (cfg->fw)) + /* use default firmware if none specified */ + priv->fw = (cfg->fw) ? cfg->fw : XC5000_DEFAULT_FIRMWARE; + /* Check if firmware has been loaded. It is possible that another instance of the driver has loaded the firmware. */ diff --git a/trunk/drivers/media/common/tuners/xc5000.h b/trunk/drivers/media/common/tuners/xc5000.h index e2957451b532..06d116266d81 100644 --- a/trunk/drivers/media/common/tuners/xc5000.h +++ b/trunk/drivers/media/common/tuners/xc5000.h @@ -27,10 +27,23 @@ struct dvb_frontend; struct i2c_adapter; +struct xc5000_fw_cfg { + char *name; + u16 size; +}; + +extern struct xc5000_fw_cfg xc5000a_1_6_114; + +#define XC5000_FW_A_1_6_114 &xc5000a_1_6_114 + +#define XC5000_DEFAULT_FIRMWARE XC5000_FW_A_1_6_114 + struct xc5000_config { u8 i2c_address; u32 if_khz; u8 radio_input; + + struct xc5000_fw_cfg *fw; }; /* xc5000 callback command */