V4L/DVB (13293): dvb-usb-friio: return the correct DTV_DELIVERY_SYSTEM
authorAkihiro Tsukada <tskd2@yahoo.co.jp>
Wed, 4 Nov 2009 18:39:31 +0000 (15:39 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 5 Dec 2009 20:41:14 +0000 (18:41 -0200)
This patch makes the driver return the correct DTV_DELIVERY_SYSTEM.

The driver previously returned SYS_UNDEFINED for DTV_DELIVERY_SYSTEM property,
as it lacked any driver specific S2API support.

Signed-off-by: Akihiro Tsukada <tskd2@yahoo.co.jp>
Signed-off-by: Douglas Schilling Landgraf <dougsland@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb/dvb-usb/friio-fe.c

index c4dfe25cf60dc7deaf6030a9de2914dd8eaaaa04..8b489d11eb371a7b134131816c5217bd05a41c8e 100644 (file)
@@ -286,6 +286,27 @@ static int jdvbt90502_get_tune_settings(struct dvb_frontend *fe,
        return 0;
 }
 
+/* filter out un-supported properties to notify users */
+static int jdvbt90502_set_property(struct dvb_frontend *fe,
+                                  struct dtv_property *tvp)
+{
+       int r = 0;
+
+       switch (tvp->cmd) {
+       case DTV_DELIVERY_SYSTEM:
+               if (tvp->u.data != SYS_ISDBT)
+                       r = -EINVAL;
+               break;
+       case DTV_CLEAR:
+       case DTV_TUNE:
+       case DTV_FREQUENCY:
+               break;
+       default:
+               r = -EINVAL;
+       }
+       return r;
+}
+
 static int jdvbt90502_get_frontend(struct dvb_frontend *fe,
                                   struct dvb_frontend_parameters *p)
 {
@@ -314,6 +335,9 @@ static int jdvbt90502_set_frontend(struct dvb_frontend *fe,
 
        deb_fe("%s: Freq:%d\n", __func__, p->frequency);
 
+       /* for recovery from DTV_CLEAN */
+       fe->dtv_property_cache.delivery_system = SYS_ISDBT;
+
        ret = jdvbt90502_pll_set_freq(state, p->frequency);
        if (ret) {
                deb_fe("%s:ret == %d\n", __func__, ret);
@@ -394,6 +418,7 @@ static int jdvbt90502_init(struct dvb_frontend *fe)
                if (ret != 1)
                        goto error;
        }
+       fe->dtv_property_cache.delivery_system = SYS_ISDBT;
        msleep(100);
 
        return 0;
@@ -471,6 +496,8 @@ static struct dvb_frontend_ops jdvbt90502_ops = {
        .sleep = jdvbt90502_sleep,
        .write = _jdvbt90502_write,
 
+       .set_property = jdvbt90502_set_property,
+
        .set_frontend = jdvbt90502_set_frontend,
        .get_frontend = jdvbt90502_get_frontend,
        .get_tune_settings = jdvbt90502_get_tune_settings,