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
Attachment:
signature.asc
Description: PGP signature