On Wed, 2012-02-01 at 13:30 +0530, Ashish Jangam wrote:
> On Tue, Jan 17, 2012 at 06:59:11PM +0530, Ashish Jangam wrote:
>
> > + ret = da9052_reg_read(onkey->da9052, DA9052_EVENT_B_REG);
> > + if (ret < 0) {
> > + dev_err(onkey->da9052->dev,
> > + "da9052_onkey_report_event da9052_reg_read error %d\n",
> > + ret);
> > + ret = 1;
> > + } else {
> > + ret = ret & DA9052_EVENTB_ENONKEY;
> > + input_report_key(onkey->input, KEY_POWER, ret);
> > + input_sync(onkey->input);
> > + }
> > +
> > + if (ret)
> > + schedule_delayed_work(&onkey->work, msecs_to_jiffies(50));
>
> Why not just schedule the work directly? The use of ret took a bit of
> thinking about to follow.
schedule_dealyed_work simulates the release of the onkey button since event for release
is not generated and ret & DA9052_EVENTB_ENONKEY is used to determine the release
of the onkey button.
> > + error = request_threaded_irq(onkey->da9052->irq_base + onkey->irq, NULL,
> > + da9052_onkey_irq,
>
> This looks buggy, the resource should have the IRQ you need directly in
> it. The MFD core can do this for the chip core driver when it registers
> children.
>
As irq_base may get determined at runtime this will require modification to the
defined resource struct for each mfd child in the device init function of the mfd core.
Not sure if this is fine.
On Wed, Feb 01, 2012 at 01:58:55PM +0530, Ashish Jangam wrote:
> On Wed, 2012-02-01 at 13:30 +0530, Ashish Jangam wrote:
> > > + ret = da9052_reg_read(onkey->da9052, DA9052_EVENT_B_REG);
> > > + if (ret < 0) {
> > > + dev_err(onkey->da9052->dev,
> > > + "da9052_onkey_report_event da9052_reg_read error %d\n",
> > > + ret);
> > > + ret = 1;
> > > + } else {
> > > + ret = ret & DA9052_EVENTB_ENONKEY;
> > > + input_report_key(onkey->input, KEY_POWER, ret);
> > > + input_sync(onkey->input);
> > > + }
> > > + if (ret)
> > > + schedule_delayed_work(&onkey->work, msecs_to_jiffies(50));
> > Why not just schedule the work directly? The use of ret took a bit of
> > thinking about to follow.
> schedule_dealyed_work simulates the release of the onkey button since event for release
> is not generated and ret & DA9052_EVENTB_ENONKEY is used to determine the release
That doesn't seem to address the concern. You're setting ret in exactly
one place and scheduling the work in exactly one place, why are these
two things split?
> of the onkey button.
> > > + error = request_threaded_irq(onkey->da9052->irq_base + onkey->irq, NULL,
> > > + da9052_onkey_irq,
> > This looks buggy, the resource should have the IRQ you need directly in
> > it. The MFD core can do this for the chip core driver when it registers
> > children.
> As irq_base may get determined at runtime this will require modification to the
> defined resource struct for each mfd child in the device init function of the mfd core.
> Not sure if this is fine.
No, it really won't require that. Please read what I wrote above: the
MFD core can do this for you.