diff mbox

[v2,1/1] rtc: ds3232: Call device_init_wakeup before device_register

Message ID 1487905971-38303-1-git-send-email-preid@electromag.com.au
State Accepted
Headers show

Commit Message

Phil Reid Feb. 24, 2017, 3:12 a.m. UTC
The wakealarm attribute is currently not exposed in the sysfs interface
as the device has not been set as doing wakealarm when device_register
is called. Changing the order of the calls fixes that problem. Interrupts
are cleared in check_rtc_status prior to requesting the interrupt.

This is only set if an irq is defined. If irq registration fails then
set wakeup_capable to false. With this change the sysfs wakealarm
attribute will be left visible but it is non functional. rtcwake
still returns that the device is not enabled for wakeup.

Signed-off-by: Phil Reid <preid@electromag.com.au>
---

Notes:
    Changes from v1:
    - Don't register the irq before device_register call.
      but set the capability if a irq is defined.
      Unset wakeup capability if irq registration fails.

 drivers/rtc/rtc-ds3232.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

Comments

Alexandre Belloni Feb. 24, 2017, 10:15 a.m. UTC | #1
On 24/02/2017 at 11:12:51 +0800, Phil Reid wrote:
> The wakealarm attribute is currently not exposed in the sysfs interface
> as the device has not been set as doing wakealarm when device_register
> is called. Changing the order of the calls fixes that problem. Interrupts
> are cleared in check_rtc_status prior to requesting the interrupt.
> 
> This is only set if an irq is defined. If irq registration fails then
> set wakeup_capable to false. With this change the sysfs wakealarm
> attribute will be left visible but it is non functional. rtcwake
> still returns that the device is not enabled for wakeup.
> 
> Signed-off-by: Phil Reid <preid@electromag.com.au>
> ---
> 
> Notes:
>     Changes from v1:
>     - Don't register the irq before device_register call.
>       but set the capability if a irq is defined.
>       Unset wakeup capability if irq registration fails.
> 
>  drivers/rtc/rtc-ds3232.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
Applied, thanks.
diff mbox

Patch

diff --git a/drivers/rtc/rtc-ds3232.c b/drivers/rtc/rtc-ds3232.c
index 60de3a0..9bb39a0 100644
--- a/drivers/rtc/rtc-ds3232.c
+++ b/drivers/rtc/rtc-ds3232.c
@@ -363,6 +363,9 @@  static int ds3232_probe(struct device *dev, struct regmap *regmap, int irq,
 	if (ret)
 		return ret;
 
+	if (ds3232->irq > 0)
+		device_init_wakeup(dev, 1);
+
 	ds3232->rtc = devm_rtc_device_register(dev, name, &ds3232_rtc_ops,
 						THIS_MODULE);
 	if (IS_ERR(ds3232->rtc))
@@ -374,10 +377,10 @@  static int ds3232_probe(struct device *dev, struct regmap *regmap, int irq,
 						IRQF_SHARED | IRQF_ONESHOT,
 						name, dev);
 		if (ret) {
+			device_set_wakeup_capable(dev, 0);
 			ds3232->irq = 0;
 			dev_err(dev, "unable to request IRQ\n");
-		} else
-			device_init_wakeup(dev, 1);
+		}
 	}
 
 	return 0;