Hi! Thanks for your review,
On Thu, May 03, 2018 at 12:54:57PM +0200, Hans Verkuil wrote:
> > +static int csi2rx_stop(struct csi2rx_priv *csi2rx)
> > +{
> > + unsigned int i;
> > +
> > + clk_prepare_enable(csi2rx->p_clk);
> > + clk_disable_unprepare(csi2rx->sys_clk);
> > +
> > + for (i = 0; i < csi2rx->max_streams; i++) {
> > + writel(0, csi2rx->base + CSI2RX_STREAM_CTRL_REG(i));
> > +
> > + clk_disable_unprepare(csi2rx->pixel_clk[i]);
> > + }
> > +
> > + clk_disable_unprepare(csi2rx->p_clk);
> > +
> > + return v4l2_subdev_call(csi2rx->source_subdev, video, s_stream, false);
> > +}
> > +
> > +static int csi2rx_s_stream(struct v4l2_subdev *subdev, int enable)
> > +{
> > + struct csi2rx_priv *csi2rx = v4l2_subdev_to_csi2rx(subdev);
> > + int ret = 0;
> > +
> > + mutex_lock(&csi2rx->lock);
> > +
> > + if (enable) {
> > + /*
> > + * If we're not the first users, there's no need to
> > + * enable the whole controller.
> > + */
> > + if (!csi2rx->count) {
> > + ret = csi2rx_start(csi2rx);
> > + if (ret)
> > + goto out;
> > + }
> > +
> > + csi2rx->count++;
> > + } else {
> > + csi2rx->count--;
> > +
> > + /*
> > + * Let the last user turn off the lights.
> > + */
> > + if (!csi2rx->count) {
> > + ret = csi2rx_stop(csi2rx);
> > + if (ret)
> > + goto out;
>
> Here the error from csi2rx_stop is propagated to the caller, but in the TX
> driver it is ignored. Is there a reason for the difference?
Even though that wasn't really intentional, TX only does a writel in
its stop (which cannot fail), while RX will need to communicate with
its subdev, and that can fail.
> In general I see little value in propagating errors when releasing/stopping
> something, since there is usually very little you can do to handle the error.
> It really shouldn't fail.
So do you want me to ignore the values in the s_stream function and
log the error, or should I just make the start / stop function return
void?
Maxime
--
Maxime Ripard, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
signature.asc
Description: PGP signature
