X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=drivers%2Fmedia%2Fi2c%2Fov01a10.c;h=e6f87049a993531f61c6b22ce97aa2c4dd9639c2;hb=af73037634117c61336c3cab99404285b6059d00;hp=54968bbe1598079accecca2a1a783d1d38fcd122;hpb=a5a2d66c2123857cba01fc0909f47f27e10c4ee5;p=mirror_ubuntu-jammy-kernel.git diff --git a/drivers/media/i2c/ov01a10.c b/drivers/media/i2c/ov01a10.c index 54968bbe1598..e6f87049a993 100644 --- a/drivers/media/i2c/ov01a10.c +++ b/drivers/media/i2c/ov01a10.c @@ -557,7 +557,17 @@ static int ov01a10_start_streaming(struct ov01a10 *ov01a10) const struct ov01a10_reg_list *reg_list; int link_freq_index; int ret = 0; + struct vsc_mipi_config conf; + struct vsc_camera_status status; + conf.lane_num = OV01A10_DATA_LANES; + /* frequency unit 100k */ + conf.freq = OV01A10_LINK_FREQ_400MHZ / 100000; + ret = vsc_acquire_camera_sensor(&conf, NULL, NULL, &status); + if (ret) { + dev_err(&client->dev, "Acquire VSC failed"); + return ret; + } link_freq_index = ov01a10->cur_mode->link_freq_index; reg_list = &link_freq_configs[link_freq_index].reg_list; ret = ov01a10_write_reg_list(ov01a10, reg_list); @@ -589,11 +599,15 @@ static void ov01a10_stop_streaming(struct ov01a10 *ov01a10) { struct i2c_client *client = v4l2_get_subdevdata(&ov01a10->sd); int ret = 0; + struct vsc_camera_status status; ret = ov01a10_write_reg(ov01a10, OV01A10_REG_MODE_SELECT, 1, OV01A10_MODE_STANDBY); if (ret) dev_err(&client->dev, "failed to stop streaming"); + ret = vsc_release_camera_sensor(&status); + if (ret) + dev_err(&client->dev, "Release VSC failed"); } static int ov01a10_set_stream(struct v4l2_subdev *sd, int enable) @@ -829,16 +843,16 @@ static int ov01a10_probe(struct i2c_client *client) int ret = 0; struct vsc_mipi_config conf; struct vsc_camera_status status; - s64 link_freq; conf.lane_num = OV01A10_DATA_LANES; /* frequency unit 100k */ conf.freq = OV01A10_LINK_FREQ_400MHZ / 100000; ret = vsc_acquire_camera_sensor(&conf, NULL, NULL, &status); - if (ret == -EAGAIN) + if (ret == -EAGAIN) { + dev_dbg(&client->dev, "VSC not ready, will re-probe"); return -EPROBE_DEFER; - else if (ret) { - dev_err(&client->dev, "Acquire VSC failed.\n"); + } else if (ret) { + dev_err(&client->dev, "Acquire VSC failed"); return ret; } ov01a10 = devm_kzalloc(&client->dev, sizeof(*ov01a10), GFP_KERNEL);