diff --git a/drivers/video/rockchip/vehicle/vehicle_cif.c b/drivers/video/rockchip/vehicle/vehicle_cif.c index 887d35fa827e..f0dd1b7dc987 100644 --- a/drivers/video/rockchip/vehicle/vehicle_cif.c +++ b/drivers/video/rockchip/vehicle/vehicle_cif.c @@ -3221,7 +3221,10 @@ static int vehicle_cif_stream_start(struct vehicle_cif *cif) /* just need init virtual channel 0 */ channel = &cif->channels[0]; - channel->id = 0; + channel->id = cif->vc; + + VEHICLE_INFO("@%s channel->id: %d.\n", __func__, channel->id); + vehicle_cif_csi_channel_init(cif, channel); if (cif->chip_id < CHIP_RK3588_VEHICLE_CIF) vehicle_cif_csi_channel_set(cif, channel, V4L2_MBUS_CSI2_DPHY); @@ -5118,12 +5121,20 @@ static int cif_parse_dt(struct vehicle_cif *cif) VEHICLE_INFO("%s:Get cif, drop-frames failed!\n", __func__); cif->drop_frames = 0; //default drop frames; } - if (of_property_read_u32(dev->of_node, "cif,chip-id", &cif->chip_id)) { VEHICLE_INFO("%s:Get cif, chip_id failed!\n", __func__); cif->chip_id = CHIP_RK3588_VEHICLE_CIF; //default rk3588; } + if (of_property_read_u32(dev->of_node, "cif,virtual-channel", + &cif->vc)) { + VEHICLE_INFO("%s:Get cif, virtual-channel failed!\n", __func__); + cif->vc = 0; //default virtual channel; + } + if ((cif->vc < 0) || (cif->vc > 3)) { + VEHICLE_DGERR("virtual-channel over range, use default 0!\n"); + cif->vc = 0; + } cif_node = of_parse_phandle(dev->of_node, "rockchip,cif", 0); cif->base = (char *)of_iomap(cif_node, 0); diff --git a/drivers/video/rockchip/vehicle/vehicle_cif.h b/drivers/video/rockchip/vehicle/vehicle_cif.h index 372a30da80a2..1bf7e2ab80da 100644 --- a/drivers/video/rockchip/vehicle/vehicle_cif.h +++ b/drivers/video/rockchip/vehicle/vehicle_cif.h @@ -134,6 +134,7 @@ struct vehicle_cif { struct csi2_dphy_hw *dphy_hw; int num_channels; int chip_id; + int vc; int inf_id; unsigned int csi_host_idx; struct vehicle_csi_channel_info channels[RKCIF_MAX_CSI_CHANNEL];