Re: [PATCH v2 6/7] Input: pwm-beeper - add optional amplifier regulator

From: Dmitry Torokhov
Date: Fri Jan 20 2017 - 12:47:16 EST


On Fri, Jan 20, 2017 at 11:19:16AM +0100, Thierry Reding wrote:
> On Thu, Jan 19, 2017 at 02:40:56PM -0800, Dmitry Torokhov wrote:
> [...]
> > diff --git a/drivers/input/misc/pwm-beeper.c b/drivers/input/misc/pwm-beeper.c
> > index 9964c46468d3..7b213e0ab06c 100644
> > --- a/drivers/input/misc/pwm-beeper.c
> > +++ b/drivers/input/misc/pwm-beeper.c
> > @@ -14,6 +14,7 @@
> > */
> >
> > #include <linux/input.h>
> > +#include <linux/regulator/consumer.h>
> > #include <linux/module.h>
> > #include <linux/kernel.h>
> > #include <linux/of.h>
> > @@ -25,30 +26,59 @@
> > struct pwm_beeper {
> > struct input_dev *input;
> > struct pwm_device *pwm;
> > + struct regulator *amplifier;
> > struct work_struct work;
> > unsigned long period;
> > bool suspended;
> > + bool amplifier_on;
>
> Why do you need to track this? I thought regulator_enable() and
> regulator_disable() were already reference counted?

That us exactly the issue: without the flag userspace application
sending:

EV_SND/SND_TONE/100
EV_SND/SND_TONE/200
EV_SND/SND_TONE/300
EV_SND/SND_TONE/200
EV_SND/SND_TONE/100
EV_SND/SND_TONE/0

will result in enable count of 4 (and not 0) and regulator will stay on
forever.

Thanks.

--
Dmitry