Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 70b00524 authored by Anthony Olech's avatar Anthony Olech Committed by Dmitry Torokhov
Browse files

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 910a9f56
Loading
Loading
Loading
Loading
+16 −13
Original line number Original line Diff line number Diff line
@@ -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)