]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/media/video/tw9910.c
V4L/DVB (10670): tw9910: bit mask operation fix on tw9910_mask_set.
[linux-2.6-omap-h63xx.git] / drivers / media / video / tw9910.c
index 52c0357faa5d0fb2e270e41dc05fd44ec56bdd7a..0558b22fd3fb41841a97e080eefc64bde1a5a2e1 100644 (file)
@@ -460,9 +460,11 @@ static int tw9910_mask_set(struct i2c_client *client, u8 command,
                           u8 mask, u8 set)
 {
        s32 val = i2c_smbus_read_byte_data(client, command);
+       if (val < 0)
+               return val;
 
        val &= ~mask;
-       val |=  set;
+       val |= set & mask;
 
        return i2c_smbus_write_byte_data(client, command, val);
 }
@@ -645,6 +647,19 @@ static int tw9910_set_fmt(struct soc_camera_device *icd, __u32 pixfmt,
        struct tw9910_priv *priv = container_of(icd, struct tw9910_priv, icd);
        int                 ret  = -EINVAL;
        u8                  val;
+       int                 i;
+
+       /*
+        * check color format
+        */
+       for (i = 0 ; i < ARRAY_SIZE(tw9910_color_fmt) ; i++) {
+               if (pixfmt == tw9910_color_fmt[i].fourcc) {
+                       ret = 0;
+                       break;
+               }
+       }
+       if (ret < 0)
+               goto tw9910_set_fmt_error;
 
        /*
         * select suitable norm