mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
media: rockchip: vicap support ext_master/ext_slave sync mode
Change-Id: I3c6905f075155f2c9248d4e3c41a7bf56069da67 Signed-off-by: Zefa Chen <zefa.chen@rock-chips.com>
This commit is contained in:
@@ -8431,6 +8431,16 @@ static void rkcif_attach_sync_mode(struct rkcif_device *cifdev)
|
||||
sync_config->mode = RKCIF_SOFT_SYNC;
|
||||
sync_config->is_attach = true;
|
||||
dev_info(hw->dev, "group used soft sync mode\n");
|
||||
} else if (sync_config->ext_master.count > 1 &&
|
||||
sync_config->slave.count == 0 &&
|
||||
sync_config->soft_sync.count == 0) {
|
||||
sync_config->mode = RKCIF_EXT_MASTER;
|
||||
sync_config->is_attach = true;
|
||||
} else if (sync_config->slave.count > 1 &&
|
||||
sync_config->ext_master.count == 0 &&
|
||||
sync_config->soft_sync.count == 0) {
|
||||
sync_config->mode = RKCIF_EXT_SLAVE;
|
||||
sync_config->is_attach = true;
|
||||
}
|
||||
mutex_unlock(&hw->dev_lock);
|
||||
}
|
||||
@@ -13978,12 +13988,21 @@ static int rkcif_check_group_sync_state(struct rkcif_device *cif_dev)
|
||||
next_stream = &sync_config->int_master.cif_dev[0]->stream[0];
|
||||
} else if (sync_config->mode == RKCIF_SOFT_SYNC) {
|
||||
next_stream = &sync_config->soft_sync.cif_dev[i]->stream[0];
|
||||
} else if (sync_config->mode == RKCIF_EXT_MASTER) {
|
||||
next_stream = &sync_config->ext_master.cif_dev[i]->stream[0];
|
||||
} else if (sync_config->mode == RKCIF_EXT_SLAVE) {
|
||||
next_stream = &sync_config->slave.cif_dev[i]->stream[0];
|
||||
} else {
|
||||
v4l2_err(&cif_dev->v4l2_dev,
|
||||
"ERROR: invalid group sync mode\n");
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
}
|
||||
if (next_stream == NULL) {
|
||||
v4l2_err(&cif_dev->v4l2_dev,
|
||||
"ERROR: invalid stream in group sync mode\n");
|
||||
break;
|
||||
}
|
||||
if (detect_stream == next_stream)
|
||||
continue;
|
||||
fs_interval = abs(detect_stream->readout.fs_timestamp - next_stream->readout.fs_timestamp);
|
||||
@@ -14053,6 +14072,10 @@ static void rkcif_deal_sof(struct rkcif_device *cif_dev)
|
||||
tmp_dev = sync_config->slave.cif_dev[i];
|
||||
else
|
||||
tmp_dev = sync_config->int_master.cif_dev[0];
|
||||
} else if (sync_config->mode == RKCIF_EXT_MASTER) {
|
||||
tmp_dev = sync_config->ext_master.cif_dev[i];
|
||||
} else if (sync_config->mode == RKCIF_EXT_SLAVE) {
|
||||
tmp_dev = sync_config->slave.cif_dev[i];
|
||||
} else {
|
||||
v4l2_err(&cif_dev->v4l2_dev,
|
||||
"ERROR: invalid group sync mode\n");
|
||||
|
||||
@@ -1516,7 +1516,9 @@ void rkcif_set_sensor_streamon_in_sync_mode(struct rkcif_device *cif_dev)
|
||||
|
||||
if (sync_config->mode == RKCIF_MASTER_MASTER ||
|
||||
sync_config->mode == RKCIF_MASTER_SLAVE ||
|
||||
sync_config->mode == RKCIF_SOFT_SYNC) {
|
||||
sync_config->mode == RKCIF_SOFT_SYNC ||
|
||||
sync_config->mode == RKCIF_EXT_MASTER ||
|
||||
sync_config->mode == RKCIF_EXT_SLAVE) {
|
||||
for (i = 0; i < sync_config->slave.count; i++) {
|
||||
dev = sync_config->slave.cif_dev[i];
|
||||
is_streaming = sync_config->slave.is_streaming[i];
|
||||
|
||||
Reference in New Issue
Block a user