media: i2c: adv748x: Store the pixel rate ctrl on CSI objects
authorKieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Thu, 3 Aug 2017 13:50:23 +0000 (09:50 -0400)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Fri, 8 Dec 2017 15:03:00 +0000 (10:03 -0500)
The current implementation has to search the list of controls for the
pixel rate control, each time it is set.  This can be optimised easily
by storing the ctrl pointer in the CSI/TX object, and referencing that
directly.

While at it, fix up a missing blank line also highlighted in review
comments.

Signed-off-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Tested-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/i2c/adv748x/adv748x-afe.c
drivers/media/i2c/adv748x/adv748x-csi2.c
drivers/media/i2c/adv748x/adv748x.h

index 4aa8e45b5cd39a9895e763db265f1fa15a500f4a..5188178588c9067d60e7a38ac08d8bd8bba08858 100644 (file)
@@ -267,6 +267,7 @@ static int adv748x_afe_g_input_status(struct v4l2_subdev *sd, u32 *status)
        ret = adv748x_afe_status(afe, status, NULL);
 
        mutex_unlock(&state->mutex);
+
        return ret;
 }
 
index 979825d4a419b2daca113965f6c5b69f23a8c313..820b44ed56a8679f59cec8e9c99a6d632f1959d5 100644 (file)
@@ -223,13 +223,12 @@ static const struct v4l2_subdev_ops adv748x_csi2_ops = {
 
 int adv748x_csi2_set_pixelrate(struct v4l2_subdev *sd, s64 rate)
 {
-       struct v4l2_ctrl *ctrl;
+       struct adv748x_csi2 *tx = adv748x_sd_to_csi2(sd);
 
-       ctrl = v4l2_ctrl_find(sd->ctrl_handler, V4L2_CID_PIXEL_RATE);
-       if (!ctrl)
+       if (!tx->pixel_rate)
                return -EINVAL;
 
-       return v4l2_ctrl_s_ctrl_int64(ctrl, rate);
+       return v4l2_ctrl_s_ctrl_int64(tx->pixel_rate, rate);
 }
 
 static int adv748x_csi2_s_ctrl(struct v4l2_ctrl *ctrl)
@@ -251,8 +250,10 @@ static int adv748x_csi2_init_controls(struct adv748x_csi2 *tx)
 
        v4l2_ctrl_handler_init(&tx->ctrl_hdl, 1);
 
-       v4l2_ctrl_new_std(&tx->ctrl_hdl, &adv748x_csi2_ctrl_ops,
-                         V4L2_CID_PIXEL_RATE, 1, INT_MAX, 1, 1);
+       tx->pixel_rate = v4l2_ctrl_new_std(&tx->ctrl_hdl,
+                                          &adv748x_csi2_ctrl_ops,
+                                          V4L2_CID_PIXEL_RATE, 1, INT_MAX,
+                                          1, 1);
 
        tx->sd.ctrl_handler = &tx->ctrl_hdl;
        if (tx->ctrl_hdl.error) {
index cc4151b5b31e24180c1efdc226e4b4323fbc96a9..6789e2f3bc8c2b498ea620f487971150706c7a94 100644 (file)
@@ -97,6 +97,7 @@ struct adv748x_csi2 {
 
        struct media_pad pads[ADV748X_CSI2_NR_PADS];
        struct v4l2_ctrl_handler ctrl_hdl;
+       struct v4l2_ctrl *pixel_rate;
        struct v4l2_subdev sd;
 };