diff options
Diffstat (limited to 'drivers/input/misc/da9052_onkey.c')
| -rw-r--r-- | drivers/input/misc/da9052_onkey.c | 30 | 
1 files changed, 16 insertions, 14 deletions
diff --git a/drivers/input/misc/da9052_onkey.c b/drivers/input/misc/da9052_onkey.c index 020569a499f..184c8f21ab5 100644 --- a/drivers/input/misc/da9052_onkey.c +++ b/drivers/input/misc/da9052_onkey.c @@ -11,7 +11,6 @@   * option) any later version.   */ -#include <linux/init.h>  #include <linux/input.h>  #include <linux/module.h>  #include <linux/platform_device.h> @@ -28,29 +27,32 @@ struct da9052_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); -	if (key_stat < 0) { +	ret = da9052_reg_read(onkey->da9052, DA9052_STATUS_A_REG); +	if (ret < 0) {  		dev_err(onkey->da9052->dev, -			"Failed to read onkey event %d\n", key_stat); +			"Failed to read onkey event err=%d\n", ret);  	} else {  		/*  		 * Since interrupt for deassertion of ONKEY pin is not  		 * generated, onkey event state determines the onkey  		 * button state.  		 */ -		key_stat &= DA9052_EVENTB_ENONKEY; -		input_report_key(onkey->input, KEY_POWER, key_stat); +		bool pressed = !(ret & DA9052_STATUSA_NONKEY); + +		input_report_key(onkey->input, KEY_POWER, pressed);  		input_sync(onkey->input); -	} -	/* -	 * Interrupt is generated only when the ONKEY pin is asserted. -	 * Hence the deassertion of the pin is simulated through work queue. -	 */ -	if (key_stat) -		schedule_delayed_work(&onkey->work, msecs_to_jiffies(50)); +		/* +		 * Interrupt is generated only when the ONKEY pin +		 * is asserted.  Hence the deassertion of the pin +		 * is simulated through work queue. +		 */ +		if (pressed) +			schedule_delayed_work(&onkey->work, +						msecs_to_jiffies(50)); +	}  }  static void da9052_onkey_work(struct work_struct *work)  | 
