media: rockchip: vicap: sditf sub sensor add quick stream and get sync mode.

Signed-off-by: Sach Lin <sach.lin@rock-chips.com>
Change-Id: I558a1f4048b8be2d9aef45ac0d857231bce3764f
This commit is contained in:
Sach Lin
2022-03-31 15:11:38 +08:00
committed by Tao Huang
parent 67426129b0
commit a70a70dc1e
2 changed files with 68 additions and 21 deletions

View File

@@ -4190,7 +4190,7 @@ static int rkcif_stream_start(struct rkcif_stream *stream, unsigned int mode)
static void rkcif_attach_sync_mode(struct rkcif_hw *hw)
{
struct rkcif_device *dev;
int i = 0;
int i = 0, j = 0;
int ret = 0;
int sync_type = 0;
int count = 0;
@@ -4201,10 +4201,21 @@ static void rkcif_attach_sync_mode(struct rkcif_hw *hw)
memset(&hw->sync_config, 0, sizeof(struct rkcif_multi_sync_config));
for (i = 0; i < hw->dev_num; i++) {
dev = hw->cif_dev[i];
ret = v4l2_subdev_call(dev->terminal_sensor.sd,
core, ioctl,
RKMODULE_GET_SYNC_MODE,
&sync_type);
if (dev->sditf_cnt == 1) {
ret = v4l2_subdev_call(dev->terminal_sensor.sd,
core, ioctl,
RKMODULE_GET_SYNC_MODE,
&sync_type);
} else {
for (j = 0; j < dev->sditf_cnt; j++) {
ret |= v4l2_subdev_call(dev->sditf[j]->sensor_sd,
core, ioctl,
RKMODULE_GET_SYNC_MODE,
&sync_type);
if (sync_type)
break;
}
}
if (!ret) {
if (sync_type == EXTERNAL_MASTER_MODE) {
count = hw->sync_config.ext_master.count;

View File

@@ -885,7 +885,7 @@ static void rkcif_set_sensor_streamon_in_sync_mode(struct rkcif_device *cif_dev)
{
struct rkcif_hw *hw = cif_dev->hw_dev;
struct rkcif_device *dev = NULL;
int i = 0;
int i = 0, j = 0;
int on = 1;
int ret = 0;
bool is_streaming = false;
@@ -904,11 +904,23 @@ static void rkcif_set_sensor_streamon_in_sync_mode(struct rkcif_device *cif_dev)
dev = hw->sync_config.slave.cif_dev[i];
is_streaming = hw->sync_config.slave.is_streaming[i];
if (!is_streaming) {
ret = v4l2_subdev_call(dev->terminal_sensor.sd, core, ioctl,
RKMODULE_SET_QUICK_STREAM, &on);
if (ret)
dev_info(dev->dev,
"set RKMODULE_SET_QUICK_STREAM failed\n");
if (dev->sditf_cnt == 1) {
ret = v4l2_subdev_call(dev->terminal_sensor.sd, core, ioctl,
RKMODULE_SET_QUICK_STREAM, &on);
if (ret)
dev_info(dev->dev,
"set RKMODULE_SET_QUICK_STREAM failed\n");
} else {
for (j = 0; j < dev->sditf_cnt; j++)
ret |= v4l2_subdev_call(dev->sditf[j]->sensor_sd,
core,
ioctl,
RKMODULE_SET_QUICK_STREAM,
&on);
if (ret)
dev_info(dev->dev,
"set RKMODULE_SET_QUICK_STREAM failed\n");
}
hw->sync_config.slave.is_streaming[i] = true;
}
v4l2_dbg(3, rkcif_debug, &dev->v4l2_dev,
@@ -919,11 +931,23 @@ static void rkcif_set_sensor_streamon_in_sync_mode(struct rkcif_device *cif_dev)
dev = hw->sync_config.ext_master.cif_dev[i];
is_streaming = hw->sync_config.ext_master.is_streaming[i];
if (!is_streaming) {
ret = v4l2_subdev_call(dev->terminal_sensor.sd, core, ioctl,
RKMODULE_SET_QUICK_STREAM, &on);
if (!ret)
dev_info(dev->dev,
"set RKMODULE_SET_QUICK_STREAM failed\n");
if (dev->sditf_cnt == 1) {
ret = v4l2_subdev_call(dev->terminal_sensor.sd, core, ioctl,
RKMODULE_SET_QUICK_STREAM, &on);
if (ret)
dev_info(dev->dev,
"set RKMODULE_SET_QUICK_STREAM failed\n");
} else {
for (j = 0; j < dev->sditf_cnt; j++)
ret |= v4l2_subdev_call(dev->sditf[j]->sensor_sd,
core,
ioctl,
RKMODULE_SET_QUICK_STREAM,
&on);
if (ret)
dev_info(dev->dev,
"set RKMODULE_SET_QUICK_STREAM failed\n");
}
hw->sync_config.ext_master.is_streaming[i] = true;
}
v4l2_dbg(3, rkcif_debug, &dev->v4l2_dev,
@@ -933,11 +957,23 @@ static void rkcif_set_sensor_streamon_in_sync_mode(struct rkcif_device *cif_dev)
dev = hw->sync_config.int_master.cif_dev[i];
is_streaming = hw->sync_config.int_master.is_streaming[i];
if (!is_streaming) {
ret = v4l2_subdev_call(dev->terminal_sensor.sd, core, ioctl,
RKMODULE_SET_QUICK_STREAM, &on);
if (!ret)
dev_info(hw->dev,
"set RKMODULE_SET_QUICK_STREAM failed\n");
if (dev->sditf_cnt == 1) {
ret = v4l2_subdev_call(dev->terminal_sensor.sd, core, ioctl,
RKMODULE_SET_QUICK_STREAM, &on);
if (ret)
dev_info(hw->dev,
"set RKMODULE_SET_QUICK_STREAM failed\n");
} else {
for (j = 0; j < dev->sditf_cnt; j++)
ret |= v4l2_subdev_call(dev->sditf[j]->sensor_sd,
core,
ioctl,
RKMODULE_SET_QUICK_STREAM,
&on);
if (ret)
dev_info(dev->dev,
"set RKMODULE_SET_QUICK_STREAM failed\n");
}
hw->sync_config.int_master.is_streaming[i] = true;
}
v4l2_dbg(3, rkcif_debug, &dev->v4l2_dev,