V4L/DVB (9114): dib0700: fix bad assignment of dib0700_xc5000_tuner_callback after...
authorDevin Heitmueller <devin.heitmueller@gmail.com>
Mon, 6 Oct 2008 15:07:48 +0000 (12:07 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 12 Oct 2008 11:37:14 +0000 (09:37 -0200)
Put callback definition before function return and cleanup callback:

Fix a bug where the xc5000 callback was being set *after* the
return call (essentially resulting in dead code).

Also cleanup the callback function to detect unknown commands.

Signed-off-by: Devin Heitmueller <devin.heitmueller@gmail.com>
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/dvb-usb/dib0700_devices.c

index 9891ca0924a3d358157f3e8af93138f83ebec8e7..0cfccc24b1907acad9d4db7ea6f3d77b5a6e7a1a 100644 (file)
@@ -1181,11 +1181,16 @@ static int dib0700_xc5000_tuner_callback(void *priv, int component,
 {
        struct dvb_usb_adapter *adap = priv;
 
-       /* Reset the tuner */
-       dib0700_set_gpio(adap->dev, GPIO1, GPIO_OUT, 0);
-       msleep(330); /* from Windows USB trace */
-       dib0700_set_gpio(adap->dev, GPIO1, GPIO_OUT, 1);
-       msleep(330); /* from Windows USB trace */
+       if (command == XC5000_TUNER_RESET) {
+               /* Reset the tuner */
+               dib0700_set_gpio(adap->dev, GPIO1, GPIO_OUT, 0);
+               msleep(330); /* from Windows USB trace */
+               dib0700_set_gpio(adap->dev, GPIO1, GPIO_OUT, 1);
+               msleep(330); /* from Windows USB trace */
+       } else {
+               err("xc5000: unknown tuner callback command: %d\n", command);
+               return -EINVAL;
+       }
 
        return 0;
 }
@@ -1197,12 +1202,12 @@ static struct xc5000_config s5h1411_xc5000_tunerconfig = {
 
 static int xc5000_tuner_attach(struct dvb_usb_adapter *adap)
 {
+       /* FIXME: generalize & move to common area */
+       adap->fe->callback = dib0700_xc5000_tuner_callback;
+
        return dvb_attach(xc5000_attach, adap->fe, &adap->dev->i2c_adap,
                          &s5h1411_xc5000_tunerconfig)
                == NULL ? -ENODEV : 0;
-
-       /* FIXME: generalize & move to common area */
-       adap->fe->callback = dib0700_xc5000_tuner_callback;
 }
 
 /* DVB-USB and USB stuff follows */