Re: [RFC PATCH v3 16/18] gpu: host1x: mipi: Split tegra_mipi_calibrate and tegra_mipi_wait

From: Dmitry Osipenko
Date: Fri Jul 17 2020 - 11:02:05 EST


17.07.2020 07:46, Sowjanya Komatineni ÐÐÑÐÑ:
...
> Looks like sequence posted in TRM need to be updated clearly for proper
> MIPI CAL start and wait.
>
> Correct steps should be like below
>
> 1. Set up CSI registers for use case such as number of lanes, virtualÂ
> channel, etc.
> 2. Initialize and power up CSI CIL interface
> 3. Program MIPI CAL bias pads, cal configs, cal control registers and
> enable calibration start
> 4. Power up camera through the I2C interface and start sensor streaming
> through the I2C
>
> Note: All sensors might not leave pads in LP-11 state as sensor may be
> power down when not in use.
>
> So start streaming prior to checking for calibration done status as
> LP-11 -> HS transition happens during sensor stream and calibration
> logic can apply results to pads and update done status,
>
> 5. Wait for done signal from calibration logic
>
> 6. perform frame capture thru VI
> 7. Frame done, CSI goes back to stop state, LP11
>
> Will work internally to correct sequence in TRM ...

Will be nice to have an updated TRM, thank you!

Also, what about the auto-calibration? Isn't it needed to be enabled for
CSI?

> In mipi driver will update as below to have mipi clk enabled till
> calibration status check is done.
>
> Always tegra_mipi_wait() followes tegra_mipi_calibrate() in both DSI and
> CSI. So below sequence should work good.
>
> tegra_mipi_calibrate()
>
> - clk_enable mipi cal
> - program mipi cal registers (bias pads cfgs, mipi cal ctrl and trigger
> calibration start)
>
> tegra_mipi_wait()
> - read mipi cal status and wait for active and done bits
> - clk_disable mipi cal


Maybe then it should be better to rename the functions like this:

tegra_mipi_calibrate() -> tegra_mipi_start_calibration()
tegra_mipi_wait() -> tegra_mipi_finish_calibration().

and there also should be tegra_mipi_cancel_calibration().


Example:

tegra_mipi_start_calibration();

ret = v4l2_subdev_call(subdev, video, s_stream, on);
if (ret < 0) {
tegra_mipi_cancel_calibration();
goto err;
}

tegra_mipi_finish_calibration();