On 7/28/20 8:59 AM, Sowjanya Komatineni wrote:
On 7/28/20 3:30 AM, Dmitry Osipenko wrote:
27.07.2020 23:57, Sowjanya Komatineni пишет:
+ /*
+ * TRM has incorrectly documented to wait for done status from
+ * calibration logic after CSI interface power on.
+ * As per the design, calibration results are latched and applied
+ * to the pads only when the link is in LP11 state which will
happen
+ * during the sensor stream-on.
+ * CSI subdev stream-on triggers start of MIPI pads calibration.
+ * Wait for calibration to finish here after sensor subdev
stream-on
+ * and in case of sensor stream-on failure, cancel the
calibration.
+ */
subdev = on ? src_subdev : csi_subdev;
ret = v4l2_subdev_call(subdev, video, s_stream, on);
- if (ret < 0 && ret != -ENOIOCTLCMD)
+ if (ret < 0 && ret != -ENOIOCTLCMD) {
I assume -ENOIOCTLCMD means that camera wasn't turned ON, so why
-ENOIOCTLCMD is special?
No -ENOIOCTLCMD mean subdev don't have s_stream ops
+ if (on && csi_chan->mipi)
+ tegra_mipi_cancel_calibration(csi_chan->mipi);
return ret;
+ }
+
+ if (on && csi_chan->mipi) {
Does finish_calibration() really need to be called for ret=-ENOIOCTLCMD?
Shouldn't it be cancel_calibration( for the -ENOIOCTLCMD?
start calibration happens during csi sensor streaming which happens
prior to this point.
In case if sensor subdev does not have s_stream ops, then either
finish/cancel calibration should happen to disable the clock.
For -ENOIOCTLCMD, calling finish calibration as some sensors might keep
pads in LP-11 on power up and for such sensors calibration logic will
apply results to pads and done bit will be set.
Also avoiding additional check to specifically call cancel calibration
on ENOIOCTLCMD and making it fall into finish calibration as both does
disable clock except finish will wait for done bit to be set.
Also, most sensor subdev have s_stream ops implemented.
+ ret = tegra_mipi_finish_calibration(csi_chan->mipi);
+ if (ret < 0)
+ dev_err(csi_chan->csi->dev,
+ "MIPI calibration failed: %d\n", ret);
Doesn't v4l2_subdev_call(OFF) need to be invoked here on error?
Not required as on error streaming fails and runtime PM will turn off
power anyway.
Also we only did csi subdev s_stream on and during sensor subdev
s_stream on fail, actual stream dont happen and on tegra side frame
capture by HW happens only when kthreads run.
+ return ret;
+ }
return 0;
}