[media] au0828: Make the s_reg and g_reg advanced debug calls work against the bridge
authorDevin Heitmueller <dheitmueller@kernellabs.com>
Tue, 7 Aug 2012 01:46:54 +0000 (22:46 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 9 Aug 2012 23:32:00 +0000 (20:32 -0300)
The g_reg and s_reg calls worked properly if acting on subdev registers
(such as the au8522), but didn't work against the au0828 itself.  Copy
the logic over from em28xx.

Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/au0828/au0828-video.c

index ac3dd733ab815da3ce4345109bee032d6884bbb1..6e30c094c56f8bb9be742521ae1e64d624fed084 100644 (file)
@@ -1717,8 +1717,12 @@ static int vidioc_g_register(struct file *file, void *priv,
                v4l2_device_call_all(&dev->v4l2_dev, 0, core, g_register, reg);
                return 0;
        default:
-               return -EINVAL;
+               if (!v4l2_chip_match_host(&reg->match))
+                       return -EINVAL;
        }
+
+       reg->val = au0828_read(dev, reg->reg);
+       return 0;
 }
 
 static int vidioc_s_register(struct file *file, void *priv,
@@ -1732,9 +1736,10 @@ static int vidioc_s_register(struct file *file, void *priv,
                v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_register, reg);
                return 0;
        default:
-               return -EINVAL;
+               if (!v4l2_chip_match_host(&reg->match))
+                       return -EINVAL;
        }
-       return 0;
+       return au0828_writereg(dev, reg->reg, reg->val);
 }
 #endif