diff --git a/drivers/media/i2c/imx415.c b/drivers/media/i2c/imx415.c index a622c2b84bf6..8fbbb1195eb4 100644 --- a/drivers/media/i2c/imx415.c +++ b/drivers/media/i2c/imx415.c @@ -1458,7 +1458,7 @@ static long imx415_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) { struct imx415 *imx415 = to_imx415(sd); struct rkmodule_hdr_cfg *hdr; - u32 i, h, w; + u32 i, h, w, stream; long ret = 0; const struct imx415_mode *mode; u64 pixel_rate = 0; @@ -1520,6 +1520,18 @@ static long imx415_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) pixel_rate); } break; + case RKMODULE_SET_QUICK_STREAM: + + stream = *((u32 *)arg); + + if (stream) + ret = imx415_write_reg(imx415->client, IMX415_REG_CTRL_MODE, + IMX415_REG_VALUE_08BIT, IMX415_MODE_STREAMING); + else + ret = imx415_write_reg(imx415->client, IMX415_REG_CTRL_MODE, + IMX415_REG_VALUE_08BIT, IMX415_MODE_SW_STANDBY); + break; + default: ret = -ENOIOCTLCMD; break; @@ -1538,6 +1550,7 @@ static long imx415_compat_ioctl32(struct v4l2_subdev *sd, struct rkmodule_hdr_cfg *hdr; struct preisp_hdrae_exp_s *hdrae; long ret; + u32 stream; switch (cmd) { case RKMODULE_GET_MODULE_INFO: @@ -1600,6 +1613,19 @@ static long imx415_compat_ioctl32(struct v4l2_subdev *sd, ret = imx415_ioctl(sd, cmd, hdrae); kfree(hdrae); break; + case RKMODULE_SET_QUICK_STREAM: + + ret = copy_from_user(&stream, up, sizeof(u32)); + if (!ret) { + if (stream) + ret = imx415_write_reg(imx415->client, IMX415_REG_CTRL_MODE, + IMX415_REG_VALUE_08BIT, IMX415_MODE_STREAMING); + else + ret = imx415_write_reg(imx415->client, IMX415_REG_CTRL_MODE, + IMX415_REG_VALUE_08BIT, IMX415_MODE_SW_STANDBY); + } + break; + default: ret = -ENOIOCTLCMD; break;