power: collie_battery: support generating wakeup event
PATCH 1/2 power: collie_battery: support generating wakeup event
Teach collie_battery driver to communicate to the kernel that it can generate wakeup events. Handle enabling/disabling wakeup on battery full event in suspend/resume callbacks.
Signed-off-by Dmitry Eremin-Solenikov <[email protected]>
--- drivers/power/collie_battery.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-)
drivers/power/collie_battery.c +18 -4
@@ -26,6 +26,7 @@static DEFINE_MUTEX (bat_lock);/* protects gpio pins */ static struct work_struct bat_work;static struct ucb1x00 *ucb; +static int wakeup_enabled;struct collie_bat {int status;
@@ -291,11 +292,19 @@ static int collie_bat_suspend(struct ucb1x00_dev *dev) {/* flush all pending status updates */ flush_work (&bat_work); + +if (device_may_wakeup (&dev->ucb->dev) && + collie_bat_main.status ==POWER_SUPPLY_STATUS_CHARGING ) + wakeup_enabled = !enable_irq_wake (gpio_to_irq (COLLIE_GPIO_CO )); +return 0 ; }static int collie_bat_resume (struct ucb1x00_dev *dev) { +if (wakeup_enabled) +disable_irq_wake (gpio_to_irq (COLLIE_GPIO_CO )); +/* things may have changed while we were away */ schedule_work (&bat_work);return 0 ;
@@ -334,10 +343,15 @@ static int collie_bat_probe(struct ucb1x00_dev *dev) collie_bat_gpio_isr,IRQF_TRIGGER_RISING |IRQF_TRIGGER_FALLING , "main full", &collie_bat_main); -if (!ret) { -schedule_work (&bat_work); -return 0 ; - } +if (ret) + goto err_irq; + +device_init_wakeup (&ucb->dev,1 ); +schedule_work (&bat_work); + +return 0 ; + +err_irq:power_supply_unregister (&collie_bat_bu.psy); err_psy_reg_bu:power_supply_unregister (&collie_bat_main.psy);
Signature · 1 line
2.1.3
PATCH 2/2 power: gpio-charger: balance enable/disable_irq_wake calls
enable_irq_wakeup returns 0 in case it correctly enabled the IRQ to generate the wakeup event (and thus resume should call disable_irq_wake). Currently gpio-charger driver has this logic inverted. Correct that thus correcting enable/disable_irq_wake() calls balance.
Signed-off-by Dmitry Eremin-Solenikov <[email protected]>
--- drivers/power/gpio-charger.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/power/gpio-charger.c +1 -1
@@ -168,7 +168,7 @@ static int gpio_charger_suspend(struct device *dev)if (device_may_wakeup (dev)) gpio_charger->wakeup_enabled = -enable_irq_wake (gpio_charger->irq); + !enable_irq_wake (gpio_charger->irq);return 0 ; }
Signature · 1 line
2.1.3