Re: [PATCH 1/3] drivers: misc: ak8974 / ami305 magnetometer driver

Onkalo Samu
2010-08-30T06:55:51Z

On Fri, 2010-08-27 at 20:53 +0200, ext Mark Brown wrote:
> On Fri, Aug 27, 2010 at 07:59:13PM +0300, Onkalo Samu wrote:
> > On Fri, 2010-08-27 at 14:31 +0200, ext Alan Cox wrote:
>
> > > > +static int ak8974_regulators_on(struct ak8974_chip *chip)
> > > > +{
> > > > + int ret;
> > > > + ret = regulator_bulk_enable(ARRAY_SIZE(chip->regs), chip->regs);
>
> > > That bit seems platform specific but in generic code ?
>
> > If the regulator frame work is not configured, this code does nothing.
> > I have understood (hopefully correctly) that if the frame work is in use
> > drivers could support that directly assuming that regulators are
> > configured for that platform. If that is not the case, this should be
> > platform specific.
>
> Your understanding is correct - the regulator API provides separation
> between the driver and the platform so that the driver code can work
> with any platform. The driver requests supplies in terms of the
> physical supplies the chip has (using the struct device and the supply
> names from the datasheet). The regulator API them matches this with
> actual regulators on a given system using data provied separately by the
> code specific to that machine so that the regulator and the consumer
> using it don't need to know about each other.
>
> If the regulator API is disabled then the basic regulator API calls
> compile to inline stubs that report success, and there's a facility for
> optionally automatically stubbing out missing supplies when the API is
> enabled.

Mark, thanks for clarification. So is it ok to keep this in the driver
code.

I would like to get some advice about the following related to PM and
regulator control.

Small sensor with SYSFS only interface:
---------------------------------------
Driver doesn't know when someone opens (or keeps open) sysfs entry.
It only knows when someone reads or writes to it. Sensors may have quite
long wakeup time from total power off (regulators off) so it takes quite
long time to get first result. On the other hand, driver doesn't know
when it is ok to turn off the device.
At some level, this can be handled with a timer which is is kicked every
time when there is read / write operation. However, this is sounds
little bit a hack.

Would it make sense at all to enhange sysfs to have open / close
indication for PM related control? Of course this adds overhead to
every sysfs operation and most of the sysfs entries doesn't need
this kind of feature.

One solution is to have separate disable / enable control entry
for the sensor. This needs addional operations from the applications
and is little bit tricky in case of several users - should it be
on / off type or counting type control.

Misc-char-device + sysfs interface:
-----------------------------------
PM related issues can be nicely handled with char device.
It doesn't matter if there are one or several users. However
char device with binary data format is not that handy in scripts.
Same is true for input device.

Do you have any suggestions what could be the best way to handle this?

-Samu