Commit 415e02bd authored by Anthony Olech's avatar Anthony Olech Committed by Dmitry Torokhov

Input: da9052_onkey - use correct register bit for key status

The wrong register bit of the DA9052/3 PMIC registers was
used to determine the status on the ONKEY.

Also a failure in reading the status register will no longer
result in the work queue being rescheduled as that would result
in a (potentially) endless retry.
Signed-off-by: default avatarAnthony Olech <anthony.olech.opensource@diasemi.com>
Acked-by: default avatarDavid Dajun Chen <david.chen@diasemi.com>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 86234eb7
...@@ -27,29 +27,32 @@ struct da9052_onkey { ...@@ -27,29 +27,32 @@ struct da9052_onkey {
static void da9052_onkey_query(struct da9052_onkey *onkey) static void da9052_onkey_query(struct da9052_onkey *onkey)
{ {
int key_stat; int ret;
key_stat = da9052_reg_read(onkey->da9052, DA9052_EVENT_B_REG); ret = da9052_reg_read(onkey->da9052, DA9052_STATUS_A_REG);
if (key_stat < 0) { if (ret < 0) {
dev_err(onkey->da9052->dev, dev_err(onkey->da9052->dev,
"Failed to read onkey event %d\n", key_stat); "Failed to read onkey event err=%d\n", ret);
} else { } else {
/* /*
* Since interrupt for deassertion of ONKEY pin is not * Since interrupt for deassertion of ONKEY pin is not
* generated, onkey event state determines the onkey * generated, onkey event state determines the onkey
* button state. * button state.
*/ */
key_stat &= DA9052_EVENTB_ENONKEY; bool pressed = !(ret & DA9052_STATUSA_NONKEY);
input_report_key(onkey->input, KEY_POWER, key_stat);
input_report_key(onkey->input, KEY_POWER, pressed);
input_sync(onkey->input); input_sync(onkey->input);
}
/* /*
* Interrupt is generated only when the ONKEY pin is asserted. * Interrupt is generated only when the ONKEY pin
* Hence the deassertion of the pin is simulated through work queue. * is asserted. Hence the deassertion of the pin
* is simulated through work queue.
*/ */
if (key_stat) if (pressed)
schedule_delayed_work(&onkey->work, msecs_to_jiffies(50)); schedule_delayed_work(&onkey->work,
msecs_to_jiffies(50));
}
} }
static void da9052_onkey_work(struct work_struct *work) static void da9052_onkey_work(struct work_struct *work)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment