Skip to content

Commit

Permalink
media: i2c: adv748x: Store the pixel rate ctrl on CSI objects
Browse files Browse the repository at this point in the history
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 <[email protected]>
Tested-by: Niklas Söderlund <[email protected]>
Acked-by: Sakari Ailus <[email protected]>
Signed-off-by: Hans Verkuil <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
  • Loading branch information
kbingham authored and mchehab committed Dec 8, 2017
1 parent 7df66d7 commit b0fe777
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 6 deletions.
1 change: 1 addition & 0 deletions drivers/media/i2c/adv748x/adv748x-afe.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down
13 changes: 7 additions & 6 deletions drivers/media/i2c/adv748x/adv748x-csi2.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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) {
Expand Down
1 change: 1 addition & 0 deletions drivers/media/i2c/adv748x/adv748x.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
};

Expand Down

0 comments on commit b0fe777

Please sign in to comment.