On Thu, Oct 25, 2012 at 05:09:16PM +0300, Felipe Balbi wrote:
> Hi,
>
> On Thu, Oct 25, 2012 at 06:31:32PM +0530, Sourav wrote:
> > Hi Dmitry,
> >
> > - pm_runtime_put_sync(dev);
> > -
> > out:
> > pm_runtime_disable(dev);
> > return retval;
> > @@ -387,8 +385,9 @@
> > return error;
> > }
> >
> > + pm_runtime_put_sync(dev);
> > +
> > platform_set_drvdata(pdev, keypad_data);
> > - pm_runtime_enable(dev);
> >
> > return 0;
> > }
> >
> > This patch seems to solve the warning and keypad functionality is restored.
>
> the driver looks wrong to me. Why are calling pm_runtime_put_sync()
> after pm_runtime_disable() ???
No, we should not be doing this...
OK, so the idea was to do everything via managed resources (devm_*) and
not having any gotos :) But I guess we had keypad somewhat alive and it
managed to generate an interrupt while parent(s) was sleeping because we
did pm_runtime_put_sync()/pm_runtime_disable() after reading register.
I wonder if we should have something like:
static void omap4_keypad_inhibit()
{
kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
OMAP4_VAL_IRQDISABLE);
kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS,
kbd_read_irqreg(keypad_data,
OMAP4_KBD_IRQSTATUS));
}
and call it after reading the revision register.
Either that or we need devm_pm_runtime_enable().
Thanks.
--
Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html