V4L/DVB (13188): xc5000: return an error on tuning attempts if firmware not loaded
authorDevin Heitmueller <dheitmueller@kernellabs.com>
Wed, 14 Oct 2009 02:44:14 +0000 (23:44 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 5 Dec 2009 20:40:48 +0000 (18:40 -0200)
Xc5000 tuning attempts shouldn't return zero in the case where the firmware
did not load successfully.

Thanks to Michael Krufky for pointing out this issue.

Cc: Michael Krufky <mkrufky@kernellabs.com>
Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/common/tuners/xc5000.c

index d33bf831e76c4815715a8e75291a29fcfab9f0b3..432003dded7cc65e9971eca7eaba02bb2594e81f 100644 (file)
@@ -633,8 +633,12 @@ static int xc5000_set_params(struct dvb_frontend *fe,
        struct xc5000_priv *priv = fe->tuner_priv;
        int ret;
 
-       if (xc5000_is_firmware_loaded(fe) != XC_RESULT_SUCCESS)
-               xc_load_fw_and_init_tuner(fe);
+       if (xc5000_is_firmware_loaded(fe) != XC_RESULT_SUCCESS) {
+               if (xc_load_fw_and_init_tuner(fe) != XC_RESULT_SUCCESS) {
+                       dprintk(1, "Unable to load firmware and init tuner\n");
+                       return -EINVAL;
+               }
+       }
 
        dprintk(1, "%s() frequency=%d (Hz)\n", __func__, params->frequency);
 
@@ -884,8 +888,12 @@ static int xc5000_set_analog_params(struct dvb_frontend *fe,
        if (priv->i2c_props.adap == NULL)
                return -EINVAL;
 
-       if (xc5000_is_firmware_loaded(fe) != XC_RESULT_SUCCESS)
-               xc_load_fw_and_init_tuner(fe);
+       if (xc5000_is_firmware_loaded(fe) != XC_RESULT_SUCCESS) {
+               if (xc_load_fw_and_init_tuner(fe) != XC_RESULT_SUCCESS) {
+                       dprintk(1, "Unable to load firmware and init tuner\n");
+                       return -EINVAL;
+               }
+       }
 
        switch (params->mode) {
        case V4L2_TUNER_RADIO: