Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 294929
b: refs/heads/master
c: 76efb0b
h: refs/heads/master
i:
  294927: f6d1d12
v: v3
  • Loading branch information
Michael Krufky authored and Mauro Carvalho Chehab committed Feb 14, 2012
1 parent 43817f2 commit b5a6273
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 88495030dc53cd97d4c71937b959e8c67ed27ed7
refs/heads/master: 76efb0ba2118c286231dd062bf02b2537cc8738f
22 changes: 16 additions & 6 deletions trunk/drivers/media/common/tuners/xc5000.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -62,6 +59,8 @@ struct xc5000_priv {
u8 video_standard;
u8 rf_mode;
u8 radio_input;

struct xc5000_fw_cfg *fw;
};

/* Misc Defines */
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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");
Expand All @@ -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 {
Expand Down Expand Up @@ -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.
*/
Expand Down
13 changes: 13 additions & 0 deletions trunk/drivers/media/common/tuners/xc5000.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down

0 comments on commit b5a6273

Please sign in to comment.