]> Pileus Git - ~andy/linux/blobdiff - drivers/media/i2c/ks0127.c
Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
[~andy/linux] / drivers / media / i2c / ks0127.c
index 04a6efa37cc376eb2c49637b26a499da8665439b..c3e94ae82c03028ff48e9eec1719938b8849e8e0 100644 (file)
@@ -42,7 +42,6 @@
 #include <linux/videodev2.h>
 #include <linux/slab.h>
 #include <media/v4l2-device.h>
-#include <media/v4l2-chip-ident.h>
 #include "ks0127.h"
 
 MODULE_DESCRIPTION("KS0127 video decoder driver");
@@ -200,7 +199,6 @@ struct adjust {
 struct ks0127 {
        struct v4l2_subdev sd;
        v4l2_std_id     norm;
-       int             ident;
        u8              regs[256];
 };
 
@@ -371,12 +369,9 @@ static void ks0127_and_or(struct v4l2_subdev *sd, u8 reg, u8 and_v, u8 or_v)
 ****************************************************************************/
 static void ks0127_init(struct v4l2_subdev *sd)
 {
-       struct ks0127 *ks = to_ks0127(sd);
        u8 *table = reg_defaults;
        int i;
 
-       ks->ident = V4L2_IDENT_KS0127;
-
        v4l2_dbg(1, debug, sd, "reset\n");
        msleep(1);
 
@@ -397,7 +392,6 @@ static void ks0127_init(struct v4l2_subdev *sd)
 
 
        if ((ks0127_read(sd, KS_STAT) & 0x80) == 0) {
-               ks->ident = V4L2_IDENT_KS0122S;
                v4l2_dbg(1, debug, sd, "ks0122s found\n");
                return;
        }
@@ -408,7 +402,6 @@ static void ks0127_init(struct v4l2_subdev *sd)
                break;
 
        case 9:
-               ks->ident = V4L2_IDENT_KS0127B;
                v4l2_dbg(1, debug, sd, "ks0127B Revision A found\n");
                break;
 
@@ -616,17 +609,24 @@ static int ks0127_status(struct v4l2_subdev *sd, u32 *pstatus, v4l2_std_id *pstd
 {
        int stat = V4L2_IN_ST_NO_SIGNAL;
        u8 status;
-       v4l2_std_id std = V4L2_STD_ALL;
+       v4l2_std_id std = pstd ? *pstd : V4L2_STD_ALL;
 
        status = ks0127_read(sd, KS_STAT);
        if (!(status & 0x20))            /* NOVID not set */
                stat = 0;
-       if (!(status & 0x01))                 /* CLOCK set */
+       if (!(status & 0x01)) {               /* CLOCK set */
                stat |= V4L2_IN_ST_NO_COLOR;
-       if ((status & 0x08))               /* PALDET set */
-               std = V4L2_STD_PAL;
+               std = V4L2_STD_UNKNOWN;
+       } else {
+               if ((status & 0x08))               /* PALDET set */
+                       std &= V4L2_STD_PAL;
+               else
+                       std &= V4L2_STD_NTSC;
+       }
+       if ((status & 0x10))               /* PALDET set */
+               std &= V4L2_STD_525_60;
        else
-               std = V4L2_STD_NTSC;
+               std &= V4L2_STD_625_50;
        if (pstd)
                *pstd = std;
        if (pstatus)
@@ -646,18 +646,9 @@ static int ks0127_g_input_status(struct v4l2_subdev *sd, u32 *status)
        return ks0127_status(sd, status, NULL);
 }
 
-static int ks0127_g_chip_ident(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip)
-{
-       struct i2c_client *client = v4l2_get_subdevdata(sd);
-       struct ks0127 *ks = to_ks0127(sd);
-
-       return v4l2_chip_ident_i2c_client(client, chip, ks->ident, 0);
-}
-
 /* ----------------------------------------------------------------------- */
 
 static const struct v4l2_subdev_core_ops ks0127_core_ops = {
-       .g_chip_ident = ks0127_g_chip_ident,
        .s_std = ks0127_s_std,
 };
 
@@ -685,7 +676,7 @@ static int ks0127_probe(struct i2c_client *client, const struct i2c_device_id *i
                client->addr == (I2C_KS0127_ADDON >> 1) ? "addon" : "on-board",
                client->addr << 1, client->adapter->name);
 
-       ks = kzalloc(sizeof(*ks), GFP_KERNEL);
+       ks = devm_kzalloc(&client->dev, sizeof(*ks), GFP_KERNEL);
        if (ks == NULL)
                return -ENOMEM;
        sd = &ks->sd;
@@ -708,7 +699,6 @@ static int ks0127_remove(struct i2c_client *client)
        v4l2_device_unregister_subdev(sd);
        ks0127_write(sd, KS_OFMTA, 0x20); /* tristate */
        ks0127_write(sd, KS_CMDA, 0x2c | 0x80); /* power down */
-       kfree(to_ks0127(sd));
        return 0;
 }