Add a new "sensor" field to dcmi struct instead of
reusing entity->subdev to address sensor subdev.

Signed-off-by: Hugues Fruchet <hugues.fruc...@st.com>
---
 drivers/media/platform/stm32/stm32-dcmi.c | 37 ++++++++++++++++---------------
 1 file changed, 19 insertions(+), 18 deletions(-)

diff --git a/drivers/media/platform/stm32/stm32-dcmi.c 
b/drivers/media/platform/stm32/stm32-dcmi.c
index b9dad0a..7a4d559 100644
--- a/drivers/media/platform/stm32/stm32-dcmi.c
+++ b/drivers/media/platform/stm32/stm32-dcmi.c
@@ -151,6 +151,7 @@ struct stm32_dcmi {
        unsigned int                    num_of_sd_framesizes;
        struct dcmi_framesize           sd_framesize;
        struct v4l2_rect                sd_bounds;
+       struct v4l2_subdev              *sensor;
 
        /* Protect this data structure */
        struct mutex                    lock;
@@ -595,7 +596,7 @@ static int dcmi_start_streaming(struct vb2_queue *vq, 
unsigned int count)
        }
 
        /* Enable stream on the sub device */
-       ret = v4l2_subdev_call(dcmi->entity.subdev, video, s_stream, 1);
+       ret = v4l2_subdev_call(dcmi->sensor, video, s_stream, 1);
        if (ret && ret != -ENOIOCTLCMD) {
                dev_err(dcmi->dev, "%s: Failed to start streaming, subdev 
streamon error",
                        __func__);
@@ -685,7 +686,7 @@ static int dcmi_start_streaming(struct vb2_queue *vq, 
unsigned int count)
        return 0;
 
 err_subdev_streamoff:
-       v4l2_subdev_call(dcmi->entity.subdev, video, s_stream, 0);
+       v4l2_subdev_call(dcmi->sensor, video, s_stream, 0);
 
 err_pm_put:
        pm_runtime_put(dcmi->dev);
@@ -713,7 +714,7 @@ static void dcmi_stop_streaming(struct vb2_queue *vq)
        int ret;
 
        /* Disable stream on the sub device */
-       ret = v4l2_subdev_call(dcmi->entity.subdev, video, s_stream, 0);
+       ret = v4l2_subdev_call(dcmi->sensor, video, s_stream, 0);
        if (ret && ret != -ENOIOCTLCMD)
                dev_err(dcmi->dev, "%s: Failed to stop streaming, subdev 
streamoff error (%d)\n",
                        __func__, ret);
@@ -857,7 +858,7 @@ static int dcmi_try_fmt(struct stm32_dcmi *dcmi, struct 
v4l2_format *f,
        }
 
        v4l2_fill_mbus_format(&format.format, pix, sd_fmt->mbus_code);
-       ret = v4l2_subdev_call(dcmi->entity.subdev, pad, set_fmt,
+       ret = v4l2_subdev_call(dcmi->sensor, pad, set_fmt,
                               &pad_cfg, &format);
        if (ret < 0)
                return ret;
@@ -934,7 +935,7 @@ static int dcmi_set_fmt(struct stm32_dcmi *dcmi, struct 
v4l2_format *f)
        mf->width = sd_framesize.width;
        mf->height = sd_framesize.height;
 
-       ret = v4l2_subdev_call(dcmi->entity.subdev, pad,
+       ret = v4l2_subdev_call(dcmi->sensor, pad,
                               set_fmt, NULL, &format);
        if (ret < 0)
                return ret;
@@ -991,7 +992,7 @@ static int dcmi_get_sensor_format(struct stm32_dcmi *dcmi,
        };
        int ret;
 
-       ret = v4l2_subdev_call(dcmi->entity.subdev, pad, get_fmt, NULL, &fmt);
+       ret = v4l2_subdev_call(dcmi->sensor, pad, get_fmt, NULL, &fmt);
        if (ret)
                return ret;
 
@@ -1020,7 +1021,7 @@ static int dcmi_set_sensor_format(struct stm32_dcmi *dcmi,
        }
 
        v4l2_fill_mbus_format(&format.format, pix, sd_fmt->mbus_code);
-       ret = v4l2_subdev_call(dcmi->entity.subdev, pad, set_fmt,
+       ret = v4l2_subdev_call(dcmi->sensor, pad, set_fmt,
                               &pad_cfg, &format);
        if (ret < 0)
                return ret;
@@ -1043,7 +1044,7 @@ static int dcmi_get_sensor_bounds(struct stm32_dcmi *dcmi,
        /*
         * Get sensor bounds first
         */
-       ret = v4l2_subdev_call(dcmi->entity.subdev, pad, get_selection,
+       ret = v4l2_subdev_call(dcmi->sensor, pad, get_selection,
                               NULL, &bounds);
        if (!ret)
                *r = bounds.r;
@@ -1224,7 +1225,7 @@ static int dcmi_enum_framesizes(struct file *file, void 
*fh,
 
        fse.code = sd_fmt->mbus_code;
 
-       ret = v4l2_subdev_call(dcmi->entity.subdev, pad, enum_frame_size,
+       ret = v4l2_subdev_call(dcmi->sensor, pad, enum_frame_size,
                               NULL, &fse);
        if (ret)
                return ret;
@@ -1241,7 +1242,7 @@ static int dcmi_g_parm(struct file *file, void *priv,
 {
        struct stm32_dcmi *dcmi = video_drvdata(file);
 
-       return v4l2_g_parm_cap(video_devdata(file), dcmi->entity.subdev, p);
+       return v4l2_g_parm_cap(video_devdata(file), dcmi->sensor, p);
 }
 
 static int dcmi_s_parm(struct file *file, void *priv,
@@ -1249,7 +1250,7 @@ static int dcmi_s_parm(struct file *file, void *priv,
 {
        struct stm32_dcmi *dcmi = video_drvdata(file);
 
-       return v4l2_s_parm_cap(video_devdata(file), dcmi->entity.subdev, p);
+       return v4l2_s_parm_cap(video_devdata(file), dcmi->sensor, p);
 }
 
 static int dcmi_enum_frameintervals(struct file *file, void *fh,
@@ -1271,7 +1272,7 @@ static int dcmi_enum_frameintervals(struct file *file, 
void *fh,
 
        fie.code = sd_fmt->mbus_code;
 
-       ret = v4l2_subdev_call(dcmi->entity.subdev, pad,
+       ret = v4l2_subdev_call(dcmi->sensor, pad,
                               enum_frame_interval, NULL, &fie);
        if (ret)
                return ret;
@@ -1291,7 +1292,7 @@ MODULE_DEVICE_TABLE(of, stm32_dcmi_of_match);
 static int dcmi_open(struct file *file)
 {
        struct stm32_dcmi *dcmi = video_drvdata(file);
-       struct v4l2_subdev *sd = dcmi->entity.subdev;
+       struct v4l2_subdev *sd = dcmi->sensor;
        int ret;
 
        if (mutex_lock_interruptible(&dcmi->lock))
@@ -1322,7 +1323,7 @@ static int dcmi_open(struct file *file)
 static int dcmi_release(struct file *file)
 {
        struct stm32_dcmi *dcmi = video_drvdata(file);
-       struct v4l2_subdev *sd = dcmi->entity.subdev;
+       struct v4l2_subdev *sd = dcmi->sensor;
        bool fh_singular;
        int ret;
 
@@ -1433,7 +1434,7 @@ static int dcmi_formats_init(struct stm32_dcmi *dcmi)
 {
        const struct dcmi_format *sd_fmts[ARRAY_SIZE(dcmi_formats)];
        unsigned int num_fmts = 0, i, j;
-       struct v4l2_subdev *subdev = dcmi->entity.subdev;
+       struct v4l2_subdev *subdev = dcmi->sensor;
        struct v4l2_subdev_mbus_code_enum mbus_code = {
                .which = V4L2_SUBDEV_FORMAT_ACTIVE,
        };
@@ -1479,7 +1480,7 @@ static int dcmi_formats_init(struct stm32_dcmi *dcmi)
 static int dcmi_framesizes_init(struct stm32_dcmi *dcmi)
 {
        unsigned int num_fsize = 0;
-       struct v4l2_subdev *subdev = dcmi->entity.subdev;
+       struct v4l2_subdev *subdev = dcmi->sensor;
        struct v4l2_subdev_frame_size_enum fse = {
                .which = V4L2_SUBDEV_FORMAT_ACTIVE,
                .code = dcmi->sd_format->mbus_code,
@@ -1526,7 +1527,7 @@ static int dcmi_graph_notify_complete(struct 
v4l2_async_notifier *notifier)
        struct stm32_dcmi *dcmi = notifier_to_dcmi(notifier);
        int ret;
 
-       dcmi->vdev->ctrl_handler = dcmi->entity.subdev->ctrl_handler;
+       dcmi->vdev->ctrl_handler = dcmi->sensor->ctrl_handler;
        ret = dcmi_formats_init(dcmi);
        if (ret) {
                dev_err(dcmi->dev, "No supported mediabus format found\n");
@@ -1582,7 +1583,7 @@ static int dcmi_graph_notify_bound(struct 
v4l2_async_notifier *notifier,
 
        dev_dbg(dcmi->dev, "Subdev %s bound\n", subdev->name);
 
-       dcmi->entity.subdev = subdev;
+       dcmi->sensor = subdev;
 
        return 0;
 }
-- 
2.7.4

Reply via email to