Commit 027fd361 authored by Istvan Varga's avatar Istvan Varga Committed by Mauro Carvalho Chehab

[media] xc4000: firmware initialization

This patch fixes/cleans up the loading of the firmware file when the
driver is loaded and initialized.
Signed-off-by: default avatarIstvan Varga <istvan_v@mailbox.hu>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 5272f6b1
...@@ -1400,21 +1400,8 @@ static int xc4000_sleep(struct dvb_frontend *fe) ...@@ -1400,21 +1400,8 @@ static int xc4000_sleep(struct dvb_frontend *fe)
static int xc4000_init(struct dvb_frontend *fe) static int xc4000_init(struct dvb_frontend *fe)
{ {
struct xc4000_priv *priv = fe->tuner_priv;
int ret;
dprintk(1, "%s()\n", __func__); dprintk(1, "%s()\n", __func__);
mutex_lock(&priv->lock);
ret = check_firmware(fe, DTV8, 0, priv->if_khz);
mutex_unlock(&priv->lock);
if (ret != XC_RESULT_SUCCESS) {
printk(KERN_ERR "xc4000: Unable to initialise tuner\n");
return -EREMOTEIO;
}
if (debug)
xc_debug_dump(priv);
return 0; return 0;
} }
...@@ -1511,8 +1498,14 @@ struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe, ...@@ -1511,8 +1498,14 @@ struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe,
instance of the driver has loaded the firmware. instance of the driver has loaded the firmware.
*/ */
if (xc4000_readreg(priv, XREG_PRODUCT_ID, &id) != XC_RESULT_SUCCESS) if (instance == 1) {
if (xc4000_readreg(priv, XREG_PRODUCT_ID, &id)
!= XC_RESULT_SUCCESS)
goto fail; goto fail;
} else {
id = ((priv->cur_fw.type & BASE) != 0 ?
priv->hwmodel : XC_PRODUCT_ID_FW_NOT_LOADED);
}
switch (id) { switch (id) {
case XC_PRODUCT_ID_FW_LOADED: case XC_PRODUCT_ID_FW_LOADED:
...@@ -1541,16 +1534,19 @@ struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe, ...@@ -1541,16 +1534,19 @@ struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe,
memcpy(&fe->ops.tuner_ops, &xc4000_tuner_ops, memcpy(&fe->ops.tuner_ops, &xc4000_tuner_ops,
sizeof(struct dvb_tuner_ops)); sizeof(struct dvb_tuner_ops));
/* FIXME: For now, load the firmware at startup. We will remove this if (instance == 1) {
before the code goes to production... */ int ret;
mutex_lock(&priv->lock); mutex_lock(&priv->lock);
check_firmware(fe, DTV8, 0, priv->if_khz); ret = xc4000_fwupload(fe);
mutex_unlock(&priv->lock); mutex_unlock(&priv->lock);
if (ret != XC_RESULT_SUCCESS)
goto fail2;
}
return fe; return fe;
fail: fail:
mutex_unlock(&xc4000_list_mutex); mutex_unlock(&xc4000_list_mutex);
fail2:
xc4000_release(fe); xc4000_release(fe);
return NULL; return NULL;
} }
......
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