On Mon, May 28, 2018 at 12:30:11AM +0900, Akinobu Mita wrote: > The open() operation for the pxa_camera driver always calls s_power() > operation to put its subdevice sensor in normal operation mode, and the > release() operation always call s_power() operation to put the subdevice > in power saving mode. > > This requires the subdevice sensor driver to keep track of its power > state in order to avoid putting the subdevice in power saving mode while > the device is still opened by some users. > > Many subdevice drivers handle it by the boilerplate code that increments > and decrements an internal counter in s_power() like below: > > /* > * If the power count is modified from 0 to != 0 or from != 0 to 0, > * update the power state. > */ > if (sensor->power_count == !on) { > ret = ov5640_set_power(sensor, !!on); > if (ret) > goto out; > } > > /* Update the power count. */ > sensor->power_count += on ? 1 : -1; > > However, some subdevice drivers don't handle it and may cause a problem > with the pxa_camera driver if the video device is opened by more than > two users at the same time. > > Instead of propagating the boilerplate code for each subdevice driver > that implement s_power, this introduces an trick that many V4L2 drivers > are using with v4l2_fh_is_singular_file(). > > Cc: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> > Cc: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx> > Signed-off-by: Akinobu Mita <akinobu.mita@xxxxxxxxx> Acked-by: Sakari Ailus <sakari.ailus@xxxxxxxxxxxxxxx> -- Sakari Ailus sakari.ailus@xxxxxxxxxxxxxxx