diff options
author | Istvan Varga <istvan_v@mailbox.hu> | 2011-06-04 19:04:51 +0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2011-07-28 00:52:36 +0400 |
commit | 027fd361860e40736c0ad093a8f4194d727afb63 (patch) | |
tree | 4183af8c26bf70bbaf70a642f2d4912defcc4846 /drivers | |
parent | 5272f6b1f423d4ce636dc90f190e245897bdb045 (diff) | |
download | linux-027fd361860e40736c0ad093a8f4194d727afb63.tar.xz |
[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: Istvan Varga <istvan_v@mailbox.hu>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/common/tuners/xc4000.c | 36 |
1 files changed, 16 insertions, 20 deletions
diff --git a/drivers/media/common/tuners/xc4000.c b/drivers/media/common/tuners/xc4000.c index c373f4b36f5a..ec5f1f1b3f3c 100644 --- a/drivers/media/common/tuners/xc4000.c +++ b/drivers/media/common/tuners/xc4000.c @@ -1400,21 +1400,8 @@ static int xc4000_sleep(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__); - 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; } @@ -1511,8 +1498,14 @@ struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe, 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; + } else { + id = ((priv->cur_fw.type & BASE) != 0 ? + priv->hwmodel : XC_PRODUCT_ID_FW_NOT_LOADED); + } switch (id) { case XC_PRODUCT_ID_FW_LOADED: @@ -1541,16 +1534,19 @@ struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe, memcpy(&fe->ops.tuner_ops, &xc4000_tuner_ops, sizeof(struct dvb_tuner_ops)); - /* FIXME: For now, load the firmware at startup. We will remove this - before the code goes to production... */ - mutex_lock(&priv->lock); - check_firmware(fe, DTV8, 0, priv->if_khz); - mutex_unlock(&priv->lock); + if (instance == 1) { + int ret; + mutex_lock(&priv->lock); + ret = xc4000_fwupload(fe); + mutex_unlock(&priv->lock); + if (ret != XC_RESULT_SUCCESS) + goto fail2; + } return fe; fail: mutex_unlock(&xc4000_list_mutex); - +fail2: xc4000_release(fe); return NULL; } |