[media] xc4000: check_firmware() cleanup

This patch makes the following fixes in check_firmware():
  - there is only one BASE and INIT1 firmware for XC4000
  - loading SCODE is needed also for FM radio

Signed-off-by: Istvan Varga <istvan_v@mailbox.hu>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
Istvan Varga 2011-06-04 11:59:54 -03:00 committed by Mauro Carvalho Chehab
parent ffce6266c8
commit 595a83f49a

View file

@ -903,7 +903,7 @@ static int check_firmware(struct dvb_frontend *fe, unsigned int type,
struct xc4000_priv *priv = fe->tuner_priv; struct xc4000_priv *priv = fe->tuner_priv;
struct firmware_properties new_fw; struct firmware_properties new_fw;
int rc = 0, is_retry = 0; int rc = 0, is_retry = 0;
u16 version, hwmodel; u16 version = 0, hwmodel;
v4l2_std_id std0; v4l2_std_id std0;
u8 hw_major, hw_minor, fw_major, fw_minor; u8 hw_major, hw_minor, fw_major, fw_minor;
@ -945,8 +945,7 @@ retry:
} }
/* No need to reload base firmware if it matches */ /* No need to reload base firmware if it matches */
if (((BASE | new_fw.type) & BASE_TYPES) == if (priv->cur_fw.type & BASE) {
(priv->cur_fw.type & BASE_TYPES)) {
dprintk(1, "BASE firmware not changed.\n"); dprintk(1, "BASE firmware not changed.\n");
goto skip_base; goto skip_base;
} }
@ -961,7 +960,7 @@ retry:
/* BASE firmwares are all std0 */ /* BASE firmwares are all std0 */
std0 = 0; std0 = 0;
rc = load_firmware(fe, BASE | new_fw.type, &std0); rc = load_firmware(fe, BASE, &std0);
if (rc < 0) { if (rc < 0) {
printk("Error %d while loading base firmware\n", rc); printk("Error %d while loading base firmware\n", rc);
goto fail; goto fail;
@ -970,10 +969,9 @@ retry:
/* Load INIT1, if needed */ /* Load INIT1, if needed */
dprintk(1, "Load init1 firmware, if exists\n"); dprintk(1, "Load init1 firmware, if exists\n");
rc = load_firmware(fe, BASE | INIT1 | new_fw.type, &std0); rc = load_firmware(fe, BASE | INIT1, &std0);
if (rc == -ENOENT) if (rc == -ENOENT)
rc = load_firmware(fe, (BASE | INIT1 | new_fw.type) & ~F8MHZ, rc = load_firmware(fe, BASE | INIT1, &std0);
&std0);
if (rc < 0 && rc != -ENOENT) { if (rc < 0 && rc != -ENOENT) {
tuner_err("Error %d while loading init1 firmware\n", tuner_err("Error %d while loading init1 firmware\n",
rc); rc);
@ -1007,9 +1005,6 @@ skip_std_specific:
goto check_device; goto check_device;
} }
if (new_fw.type & FM)
goto check_device;
/* Load SCODE firmware, if exists */ /* Load SCODE firmware, if exists */
rc = load_scode(fe, new_fw.type | new_fw.scode_table, &new_fw.id, rc = load_scode(fe, new_fw.type | new_fw.scode_table, &new_fw.id,
new_fw.int_freq, new_fw.scode_nr); new_fw.int_freq, new_fw.scode_nr);