[media] media/i2c: remove g_chip_ident op
[linux-2.6-microblaze.git] / drivers / media / i2c / ths7303.c
index c433955..2e17abc 100644 (file)
@@ -26,7 +26,6 @@
 #include <linux/slab.h>
 
 #include <media/ths7303.h>
-#include <media/v4l2-chip-ident.h>
 #include <media/v4l2-device.h>
 
 #define THS7303_CHANNEL_1      1
@@ -35,7 +34,7 @@
 
 struct ths7303_state {
        struct v4l2_subdev              sd;
-       struct ths7303_platform_data    pdata;
+       const struct ths7303_platform_data *pdata;
        struct v4l2_bt_timings          bt;
        int std_id;
        int stream_on;
@@ -89,7 +88,7 @@ int ths7303_setval(struct v4l2_subdev *sd, enum ths7303_filter_mode mode)
 {
        struct i2c_client *client = v4l2_get_subdevdata(sd);
        struct ths7303_state *state = to_state(sd);
-       struct ths7303_platform_data *pdata = &state->pdata;
+       const struct ths7303_platform_data *pdata = state->pdata;
        u8 val, sel = 0;
        int err, disable = 0;
 
@@ -212,15 +211,6 @@ static int ths7303_s_dv_timings(struct v4l2_subdev *sd,
        return ths7303_config(sd);
 }
 
-static int ths7303_g_chip_ident(struct v4l2_subdev *sd,
-                               struct v4l2_dbg_chip_ident *chip)
-{
-       struct i2c_client *client = v4l2_get_subdevdata(sd);
-       struct ths7303_state *state = to_state(sd);
-
-       return v4l2_chip_ident_i2c_client(client, chip, state->driver_data, 0);
-}
-
 static const struct v4l2_subdev_video_ops ths7303_video_ops = {
        .s_stream       = ths7303_s_stream,
        .s_std_output   = ths7303_s_std_output,
@@ -232,13 +222,6 @@ static const struct v4l2_subdev_video_ops ths7303_video_ops = {
 static int ths7303_g_register(struct v4l2_subdev *sd,
                              struct v4l2_dbg_register *reg)
 {
-       struct i2c_client *client = v4l2_get_subdevdata(sd);
-
-       if (!v4l2_chip_match_i2c_client(client, &reg->match))
-               return -EINVAL;
-       if (!capable(CAP_SYS_ADMIN))
-               return -EPERM;
-
        reg->size = 1;
        reg->val = ths7303_read(sd, reg->reg);
        return 0;
@@ -247,13 +230,6 @@ static int ths7303_g_register(struct v4l2_subdev *sd,
 static int ths7303_s_register(struct v4l2_subdev *sd,
                              const struct v4l2_dbg_register *reg)
 {
-       struct i2c_client *client = v4l2_get_subdevdata(sd);
-
-       if (!v4l2_chip_match_i2c_client(client, &reg->match))
-               return -EINVAL;
-       if (!capable(CAP_SYS_ADMIN))
-               return -EPERM;
-
        ths7303_write(sd, reg->reg, reg->val);
        return 0;
 }
@@ -340,7 +316,6 @@ static int ths7303_log_status(struct v4l2_subdev *sd)
 }
 
 static const struct v4l2_subdev_core_ops ths7303_core_ops = {
-       .g_chip_ident = ths7303_g_chip_ident,
        .log_status = ths7303_log_status,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
        .g_register = ths7303_g_register,
@@ -353,32 +328,6 @@ static const struct v4l2_subdev_ops ths7303_ops = {
        .video  = &ths7303_video_ops,
 };
 
-static int ths7303_setup(struct v4l2_subdev *sd)
-{
-       struct ths7303_state *state = to_state(sd);
-       struct ths7303_platform_data *pdata = &state->pdata;
-       int ret;
-       u8 mask;
-
-       state->stream_on = pdata->init_enable;
-
-       mask = state->stream_on ? 0xff : 0xf8;
-
-       ret = ths7303_write(sd, THS7303_CHANNEL_1, pdata->ch_1 & mask);
-       if (ret)
-               return ret;
-
-       ret = ths7303_write(sd, THS7303_CHANNEL_2, pdata->ch_2 & mask);
-       if (ret)
-               return ret;
-
-       ret = ths7303_write(sd, THS7303_CHANNEL_3, pdata->ch_3 & mask);
-       if (ret)
-               return ret;
-
-       return 0;
-}
-
 static int ths7303_probe(struct i2c_client *client,
                        const struct i2c_device_id *id)
 {
@@ -386,6 +335,11 @@ static int ths7303_probe(struct i2c_client *client,
        struct ths7303_state *state;
        struct v4l2_subdev *sd;
 
+       if (pdata == NULL) {
+               dev_err(&client->dev, "No platform data\n");
+               return -EINVAL;
+       }
+
        if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
                return -ENODEV;
 
@@ -397,20 +351,17 @@ static int ths7303_probe(struct i2c_client *client,
        if (!state)
                return -ENOMEM;
 
-       if (!pdata)
-               v4l_warn(client, "No platform data, using default data!\n");
-       else
-               state->pdata = *pdata;
-
+       state->pdata = pdata;
        sd = &state->sd;
        v4l2_i2c_subdev_init(sd, client, &ths7303_ops);
 
        /* store the driver data to differntiate the chip */
        state->driver_data = (int)id->driver_data;
 
-       if (ths7303_setup(sd) < 0) {
-               v4l_err(client, "init failed\n");
-               return -EIO;
+       /* set to default 480I_576I filter mode */
+       if (ths7303_setval(sd, THS7303_FILTER_MODE_480I_576I) < 0) {
+               v4l_err(client, "Setting to 480I_576I filter mode failed!\n");
+               return -EINVAL;
        }
 
        return 0;
@@ -426,8 +377,8 @@ static int ths7303_remove(struct i2c_client *client)
 }
 
 static const struct i2c_device_id ths7303_id[] = {
-       {"ths7303", V4L2_IDENT_THS7303},
-       {"ths7353", V4L2_IDENT_THS7353},
+       {"ths7303", 0},
+       {"ths7353", 0},
        {},
 };