From: Gururaja Hebbar <gururaja.hebbar-l0cyMroinI0@public.gmane.org>
To: akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org
Cc: Alessandro Zummo
<a.zummo-BfzFCNDTiLLj+vYz1yj4TQ@public.gmane.org>,
davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org,
rtc-linux-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org,
linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org,
benoit.cousson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Rob Herring <rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>,
Rob Landley <rob-VoJi6FS/r0vR7s880joybQ@public.gmane.org>,
Grant Likely
<grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
Subject: Re: [Patch V2 3/4] rtc: omap: add rtc wakeup support to alarm events
Date: Wed, 24 Jul 2013 18:44:56 +0530 [thread overview]
Message-ID: <51EFD350.4030500@ti.com> (raw)
In-Reply-To: <1372841225-18813-4-git-send-email-gururaja.hebbar-l0cyMroinI0@public.gmane.org>
Hi Andrew,
On 7/3/2013 2:17 PM, Hebbar Gururaja wrote:
> On some platforms (like AM33xx), a special register (RTC_IRQWAKEEN)
> is available to enable Alarm Wakeup feature. This register needs to be
> properly handled for the rtcwake to work properly.
>
> Platforms using such IP should set "ti,am3352-rtc" in rtc device dt
> compatibility node.
I just checked that the 1st patch in this series is pulled in and this
patch [3/4] is not pulled . If you do not have any comments, can you
pull this one also. I have already got Acks from Sekhar & Kevin for the
same.
Thanks & regards
Gururaja
>
> Signed-off-by: Hebbar Gururaja <gururaja.hebbar-l0cyMroinI0@public.gmane.org>
> Acked-by: Kevin Hilman <khilman-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
> Acked-by: Sekhar Nori <nsekhar-l0cyMroinI0@public.gmane.org>
> Cc: Grant Likely <grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
> Cc: Rob Herring <rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>
> Cc: Rob Landley <rob-VoJi6FS/r0vR7s880joybQ@public.gmane.org>
> Cc: Alessandro Zummo <a.zummo-BfzFCNDTiLLj+vYz1yj4TQ@public.gmane.org>
> Cc: rtc-linux-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
> Cc: devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org
> Cc: linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
> ---
> Changes in V2:
> - Coding style corrections (use lower case for hex numbers)
> - use "[AM/am]3352" instead of "[AM/am]335x" to keep the all
> usages in sync.
> - Use index defined for struct members so they remain in sync
>
> :100644 100644 b47aa41... 5a0f02d... M Documentation/devicetree/bindings/rtc/rtc-omap.txt
> :100644 100644 761919d... c2e18fe... M drivers/rtc/rtc-omap.c
> Documentation/devicetree/bindings/rtc/rtc-omap.txt | 6 +-
> drivers/rtc/rtc-omap.c | 60 +++++++++++++++++---
> 2 files changed, 57 insertions(+), 9 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/rtc/rtc-omap.txt b/Documentation/devicetree/bindings/rtc/rtc-omap.txt
> index b47aa41..5a0f02d 100644
> --- a/Documentation/devicetree/bindings/rtc/rtc-omap.txt
> +++ b/Documentation/devicetree/bindings/rtc/rtc-omap.txt
> @@ -1,7 +1,11 @@
> TI Real Time Clock
>
> Required properties:
> -- compatible: "ti,da830-rtc"
> +- compatible:
> + - "ti,da830-rtc" - for RTC IP used similar to that on DA8xx SoC family.
> + - "ti,am3352-rtc" - for RTC IP used similar to that on AM335x SoC family.
> + This RTC IP has special WAKE-EN Register to enable
> + Wakeup generation for event Alarm.
> - reg: Address range of rtc register set
> - interrupts: rtc timer, alarm interrupts in order
> - interrupt-parent: phandle for the interrupt controller
> diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c
> index 761919d..c2e18fe 100644
> --- a/drivers/rtc/rtc-omap.c
> +++ b/drivers/rtc/rtc-omap.c
> @@ -72,6 +72,8 @@
> #define OMAP_RTC_KICK0_REG 0x6c
> #define OMAP_RTC_KICK1_REG 0x70
>
> +#define OMAP_RTC_IRQWAKEEN 0x7c
> +
> /* OMAP_RTC_CTRL_REG bit fields: */
> #define OMAP_RTC_CTRL_SPLIT (1<<7)
> #define OMAP_RTC_CTRL_DISABLE (1<<6)
> @@ -96,12 +98,21 @@
> #define OMAP_RTC_INTERRUPTS_IT_ALARM (1<<3)
> #define OMAP_RTC_INTERRUPTS_IT_TIMER (1<<2)
>
> +/* OMAP_RTC_IRQWAKEEN bit fields: */
> +#define OMAP_RTC_IRQWAKEEN_ALARM_WAKEEN (1<<1)
> +
> /* OMAP_RTC_KICKER values */
> #define KICK0_VALUE 0x83e70b13
> #define KICK1_VALUE 0x95a4f1e0
>
> #define OMAP_RTC_HAS_KICKER 0x1
>
> +/*
> + * Few RTC IP revisions has special WAKE-EN Register to enable Wakeup
> + * generation for event Alarm.
> + */
> +#define OMAP_RTC_HAS_IRQWAKEEN 0x2
> +
> static void __iomem *rtc_base;
>
> #define rtc_read(addr) readb(rtc_base + (addr))
> @@ -301,12 +312,18 @@ static struct rtc_class_ops omap_rtc_ops = {
> static int omap_rtc_alarm;
> static int omap_rtc_timer;
>
> -#define OMAP_RTC_DATA_DA830_IDX 1
> +#define OMAP_RTC_DATA_AM3352_IDX 1
> +#define OMAP_RTC_DATA_DA830_IDX 2
>
> static struct platform_device_id omap_rtc_devtype[] = {
> {
> .name = DRIVER_NAME,
> - }, {
> + },
> + [OMAP_RTC_DATA_AM3352_IDX] = {
> + .name = "am3352-rtc",
> + .driver_data = OMAP_RTC_HAS_KICKER | OMAP_RTC_HAS_IRQWAKEEN,
> + },
> + [OMAP_RTC_DATA_DA830_IDX] = {
> .name = "da830-rtc",
> .driver_data = OMAP_RTC_HAS_KICKER,
> },
> @@ -318,6 +335,9 @@ static const struct of_device_id omap_rtc_of_match[] = {
> { .compatible = "ti,da830-rtc",
> .data = &omap_rtc_devtype[OMAP_RTC_DATA_DA830_IDX],
> },
> + { .compatible = "ti,am3352-rtc",
> + .data = &omap_rtc_devtype[OMAP_RTC_DATA_AM3352_IDX],
> + },
> {},
> };
> MODULE_DEVICE_TABLE(of, omap_rtc_of_match);
> @@ -466,16 +486,28 @@ static u8 irqstat;
>
> static int omap_rtc_suspend(struct device *dev)
> {
> + u8 irqwake_stat;
> + struct platform_device *pdev = to_platform_device(dev);
> + const struct platform_device_id *id_entry =
> + platform_get_device_id(pdev);
> +
> irqstat = rtc_read(OMAP_RTC_INTERRUPTS_REG);
>
> /* FIXME the RTC alarm is not currently acting as a wakeup event
> - * source, and in fact this enable() call is just saving a flag
> - * that's never used...
> + * source on some platforms, and in fact this enable() call is just
> + * saving a flag that's never used...
> */
> - if (device_may_wakeup(dev))
> + if (device_may_wakeup(dev)) {
> enable_irq_wake(omap_rtc_alarm);
> - else
> +
> + if (id_entry->driver_data & OMAP_RTC_HAS_IRQWAKEEN) {
> + irqwake_stat = rtc_read(OMAP_RTC_IRQWAKEEN);
> + irqwake_stat |= OMAP_RTC_IRQWAKEEN_ALARM_WAKEEN;
> + rtc_write(irqwake_stat, OMAP_RTC_IRQWAKEEN);
> + }
> + } else {
> rtc_write(0, OMAP_RTC_INTERRUPTS_REG);
> + }
>
> /* Disable the clock/module */
> pm_runtime_put_sync(dev);
> @@ -485,13 +517,25 @@ static int omap_rtc_suspend(struct device *dev)
>
> static int omap_rtc_resume(struct device *dev)
> {
> + u8 irqwake_stat;
> + struct platform_device *pdev = to_platform_device(dev);
> + const struct platform_device_id *id_entry =
> + platform_get_device_id(pdev);
> +
> /* Enable the clock/module so that we can access the registers */
> pm_runtime_get_sync(dev);
>
> - if (device_may_wakeup(dev))
> + if (device_may_wakeup(dev)) {
> disable_irq_wake(omap_rtc_alarm);
> - else
> +
> + if (id_entry->driver_data & OMAP_RTC_HAS_IRQWAKEEN) {
> + irqwake_stat = rtc_read(OMAP_RTC_IRQWAKEEN);
> + irqwake_stat &= ~OMAP_RTC_IRQWAKEEN_ALARM_WAKEEN;
> + rtc_write(irqwake_stat, OMAP_RTC_IRQWAKEEN);
> + }
> + } else {
> rtc_write(irqstat, OMAP_RTC_INTERRUPTS_REG);
> + }
> return 0;
> }
> #endif
>
WARNING: multiple messages have this Message-ID (diff)
From: gururaja.hebbar@ti.com (Gururaja Hebbar)
To: linux-arm-kernel@lists.infradead.org
Subject: [Patch V2 3/4] rtc: omap: add rtc wakeup support to alarm events
Date: Wed, 24 Jul 2013 18:44:56 +0530 [thread overview]
Message-ID: <51EFD350.4030500@ti.com> (raw)
In-Reply-To: <1372841225-18813-4-git-send-email-gururaja.hebbar@ti.com>
Hi Andrew,
On 7/3/2013 2:17 PM, Hebbar Gururaja wrote:
> On some platforms (like AM33xx), a special register (RTC_IRQWAKEEN)
> is available to enable Alarm Wakeup feature. This register needs to be
> properly handled for the rtcwake to work properly.
>
> Platforms using such IP should set "ti,am3352-rtc" in rtc device dt
> compatibility node.
I just checked that the 1st patch in this series is pulled in and this
patch [3/4] is not pulled . If you do not have any comments, can you
pull this one also. I have already got Acks from Sekhar & Kevin for the
same.
Thanks & regards
Gururaja
>
> Signed-off-by: Hebbar Gururaja <gururaja.hebbar@ti.com>
> Acked-by: Kevin Hilman <khilman@linaro.org>
> Acked-by: Sekhar Nori <nsekhar@ti.com>
> Cc: Grant Likely <grant.likely@linaro.org>
> Cc: Rob Herring <rob.herring@calxeda.com>
> Cc: Rob Landley <rob@landley.net>
> Cc: Alessandro Zummo <a.zummo@towertech.it>
> Cc: rtc-linux at googlegroups.com
> Cc: devicetree-discuss at lists.ozlabs.org
> Cc: linux-doc at vger.kernel.org
> ---
> Changes in V2:
> - Coding style corrections (use lower case for hex numbers)
> - use "[AM/am]3352" instead of "[AM/am]335x" to keep the all
> usages in sync.
> - Use index defined for struct members so they remain in sync
>
> :100644 100644 b47aa41... 5a0f02d... M Documentation/devicetree/bindings/rtc/rtc-omap.txt
> :100644 100644 761919d... c2e18fe... M drivers/rtc/rtc-omap.c
> Documentation/devicetree/bindings/rtc/rtc-omap.txt | 6 +-
> drivers/rtc/rtc-omap.c | 60 +++++++++++++++++---
> 2 files changed, 57 insertions(+), 9 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/rtc/rtc-omap.txt b/Documentation/devicetree/bindings/rtc/rtc-omap.txt
> index b47aa41..5a0f02d 100644
> --- a/Documentation/devicetree/bindings/rtc/rtc-omap.txt
> +++ b/Documentation/devicetree/bindings/rtc/rtc-omap.txt
> @@ -1,7 +1,11 @@
> TI Real Time Clock
>
> Required properties:
> -- compatible: "ti,da830-rtc"
> +- compatible:
> + - "ti,da830-rtc" - for RTC IP used similar to that on DA8xx SoC family.
> + - "ti,am3352-rtc" - for RTC IP used similar to that on AM335x SoC family.
> + This RTC IP has special WAKE-EN Register to enable
> + Wakeup generation for event Alarm.
> - reg: Address range of rtc register set
> - interrupts: rtc timer, alarm interrupts in order
> - interrupt-parent: phandle for the interrupt controller
> diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c
> index 761919d..c2e18fe 100644
> --- a/drivers/rtc/rtc-omap.c
> +++ b/drivers/rtc/rtc-omap.c
> @@ -72,6 +72,8 @@
> #define OMAP_RTC_KICK0_REG 0x6c
> #define OMAP_RTC_KICK1_REG 0x70
>
> +#define OMAP_RTC_IRQWAKEEN 0x7c
> +
> /* OMAP_RTC_CTRL_REG bit fields: */
> #define OMAP_RTC_CTRL_SPLIT (1<<7)
> #define OMAP_RTC_CTRL_DISABLE (1<<6)
> @@ -96,12 +98,21 @@
> #define OMAP_RTC_INTERRUPTS_IT_ALARM (1<<3)
> #define OMAP_RTC_INTERRUPTS_IT_TIMER (1<<2)
>
> +/* OMAP_RTC_IRQWAKEEN bit fields: */
> +#define OMAP_RTC_IRQWAKEEN_ALARM_WAKEEN (1<<1)
> +
> /* OMAP_RTC_KICKER values */
> #define KICK0_VALUE 0x83e70b13
> #define KICK1_VALUE 0x95a4f1e0
>
> #define OMAP_RTC_HAS_KICKER 0x1
>
> +/*
> + * Few RTC IP revisions has special WAKE-EN Register to enable Wakeup
> + * generation for event Alarm.
> + */
> +#define OMAP_RTC_HAS_IRQWAKEEN 0x2
> +
> static void __iomem *rtc_base;
>
> #define rtc_read(addr) readb(rtc_base + (addr))
> @@ -301,12 +312,18 @@ static struct rtc_class_ops omap_rtc_ops = {
> static int omap_rtc_alarm;
> static int omap_rtc_timer;
>
> -#define OMAP_RTC_DATA_DA830_IDX 1
> +#define OMAP_RTC_DATA_AM3352_IDX 1
> +#define OMAP_RTC_DATA_DA830_IDX 2
>
> static struct platform_device_id omap_rtc_devtype[] = {
> {
> .name = DRIVER_NAME,
> - }, {
> + },
> + [OMAP_RTC_DATA_AM3352_IDX] = {
> + .name = "am3352-rtc",
> + .driver_data = OMAP_RTC_HAS_KICKER | OMAP_RTC_HAS_IRQWAKEEN,
> + },
> + [OMAP_RTC_DATA_DA830_IDX] = {
> .name = "da830-rtc",
> .driver_data = OMAP_RTC_HAS_KICKER,
> },
> @@ -318,6 +335,9 @@ static const struct of_device_id omap_rtc_of_match[] = {
> { .compatible = "ti,da830-rtc",
> .data = &omap_rtc_devtype[OMAP_RTC_DATA_DA830_IDX],
> },
> + { .compatible = "ti,am3352-rtc",
> + .data = &omap_rtc_devtype[OMAP_RTC_DATA_AM3352_IDX],
> + },
> {},
> };
> MODULE_DEVICE_TABLE(of, omap_rtc_of_match);
> @@ -466,16 +486,28 @@ static u8 irqstat;
>
> static int omap_rtc_suspend(struct device *dev)
> {
> + u8 irqwake_stat;
> + struct platform_device *pdev = to_platform_device(dev);
> + const struct platform_device_id *id_entry =
> + platform_get_device_id(pdev);
> +
> irqstat = rtc_read(OMAP_RTC_INTERRUPTS_REG);
>
> /* FIXME the RTC alarm is not currently acting as a wakeup event
> - * source, and in fact this enable() call is just saving a flag
> - * that's never used...
> + * source on some platforms, and in fact this enable() call is just
> + * saving a flag that's never used...
> */
> - if (device_may_wakeup(dev))
> + if (device_may_wakeup(dev)) {
> enable_irq_wake(omap_rtc_alarm);
> - else
> +
> + if (id_entry->driver_data & OMAP_RTC_HAS_IRQWAKEEN) {
> + irqwake_stat = rtc_read(OMAP_RTC_IRQWAKEEN);
> + irqwake_stat |= OMAP_RTC_IRQWAKEEN_ALARM_WAKEEN;
> + rtc_write(irqwake_stat, OMAP_RTC_IRQWAKEEN);
> + }
> + } else {
> rtc_write(0, OMAP_RTC_INTERRUPTS_REG);
> + }
>
> /* Disable the clock/module */
> pm_runtime_put_sync(dev);
> @@ -485,13 +517,25 @@ static int omap_rtc_suspend(struct device *dev)
>
> static int omap_rtc_resume(struct device *dev)
> {
> + u8 irqwake_stat;
> + struct platform_device *pdev = to_platform_device(dev);
> + const struct platform_device_id *id_entry =
> + platform_get_device_id(pdev);
> +
> /* Enable the clock/module so that we can access the registers */
> pm_runtime_get_sync(dev);
>
> - if (device_may_wakeup(dev))
> + if (device_may_wakeup(dev)) {
> disable_irq_wake(omap_rtc_alarm);
> - else
> +
> + if (id_entry->driver_data & OMAP_RTC_HAS_IRQWAKEEN) {
> + irqwake_stat = rtc_read(OMAP_RTC_IRQWAKEEN);
> + irqwake_stat &= ~OMAP_RTC_IRQWAKEEN_ALARM_WAKEEN;
> + rtc_write(irqwake_stat, OMAP_RTC_IRQWAKEEN);
> + }
> + } else {
> rtc_write(irqstat, OMAP_RTC_INTERRUPTS_REG);
> + }
> return 0;
> }
> #endif
>
WARNING: multiple messages have this Message-ID (diff)
From: Gururaja Hebbar <gururaja.hebbar@ti.com>
To: <akpm@linux-foundation.org>
Cc: <khilman@linaro.org>, <tony@atomide.com>,
<benoit.cousson@gmail.com>, <linux-omap@vger.kernel.org>,
<devicetree-discuss@lists.ozlabs.org>,
<linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<davinci-linux-open-source@linux.davincidsp.com>,
<vaibhav.bedia@ti.com>, <sudhakar.raj@ti.com>,
Grant Likely <grant.likely@linaro.org>,
Rob Herring <rob.herring@calxeda.com>,
Rob Landley <rob@landley.net>,
Alessandro Zummo <a.zummo@towertech.it>,
<rtc-linux@googlegroups.com>, <linux-doc@vger.kernel.org>
Subject: Re: [Patch V2 3/4] rtc: omap: add rtc wakeup support to alarm events
Date: Wed, 24 Jul 2013 18:44:56 +0530 [thread overview]
Message-ID: <51EFD350.4030500@ti.com> (raw)
In-Reply-To: <1372841225-18813-4-git-send-email-gururaja.hebbar@ti.com>
Hi Andrew,
On 7/3/2013 2:17 PM, Hebbar Gururaja wrote:
> On some platforms (like AM33xx), a special register (RTC_IRQWAKEEN)
> is available to enable Alarm Wakeup feature. This register needs to be
> properly handled for the rtcwake to work properly.
>
> Platforms using such IP should set "ti,am3352-rtc" in rtc device dt
> compatibility node.
I just checked that the 1st patch in this series is pulled in and this
patch [3/4] is not pulled . If you do not have any comments, can you
pull this one also. I have already got Acks from Sekhar & Kevin for the
same.
Thanks & regards
Gururaja
>
> Signed-off-by: Hebbar Gururaja <gururaja.hebbar@ti.com>
> Acked-by: Kevin Hilman <khilman@linaro.org>
> Acked-by: Sekhar Nori <nsekhar@ti.com>
> Cc: Grant Likely <grant.likely@linaro.org>
> Cc: Rob Herring <rob.herring@calxeda.com>
> Cc: Rob Landley <rob@landley.net>
> Cc: Alessandro Zummo <a.zummo@towertech.it>
> Cc: rtc-linux@googlegroups.com
> Cc: devicetree-discuss@lists.ozlabs.org
> Cc: linux-doc@vger.kernel.org
> ---
> Changes in V2:
> - Coding style corrections (use lower case for hex numbers)
> - use "[AM/am]3352" instead of "[AM/am]335x" to keep the all
> usages in sync.
> - Use index defined for struct members so they remain in sync
>
> :100644 100644 b47aa41... 5a0f02d... M Documentation/devicetree/bindings/rtc/rtc-omap.txt
> :100644 100644 761919d... c2e18fe... M drivers/rtc/rtc-omap.c
> Documentation/devicetree/bindings/rtc/rtc-omap.txt | 6 +-
> drivers/rtc/rtc-omap.c | 60 +++++++++++++++++---
> 2 files changed, 57 insertions(+), 9 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/rtc/rtc-omap.txt b/Documentation/devicetree/bindings/rtc/rtc-omap.txt
> index b47aa41..5a0f02d 100644
> --- a/Documentation/devicetree/bindings/rtc/rtc-omap.txt
> +++ b/Documentation/devicetree/bindings/rtc/rtc-omap.txt
> @@ -1,7 +1,11 @@
> TI Real Time Clock
>
> Required properties:
> -- compatible: "ti,da830-rtc"
> +- compatible:
> + - "ti,da830-rtc" - for RTC IP used similar to that on DA8xx SoC family.
> + - "ti,am3352-rtc" - for RTC IP used similar to that on AM335x SoC family.
> + This RTC IP has special WAKE-EN Register to enable
> + Wakeup generation for event Alarm.
> - reg: Address range of rtc register set
> - interrupts: rtc timer, alarm interrupts in order
> - interrupt-parent: phandle for the interrupt controller
> diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c
> index 761919d..c2e18fe 100644
> --- a/drivers/rtc/rtc-omap.c
> +++ b/drivers/rtc/rtc-omap.c
> @@ -72,6 +72,8 @@
> #define OMAP_RTC_KICK0_REG 0x6c
> #define OMAP_RTC_KICK1_REG 0x70
>
> +#define OMAP_RTC_IRQWAKEEN 0x7c
> +
> /* OMAP_RTC_CTRL_REG bit fields: */
> #define OMAP_RTC_CTRL_SPLIT (1<<7)
> #define OMAP_RTC_CTRL_DISABLE (1<<6)
> @@ -96,12 +98,21 @@
> #define OMAP_RTC_INTERRUPTS_IT_ALARM (1<<3)
> #define OMAP_RTC_INTERRUPTS_IT_TIMER (1<<2)
>
> +/* OMAP_RTC_IRQWAKEEN bit fields: */
> +#define OMAP_RTC_IRQWAKEEN_ALARM_WAKEEN (1<<1)
> +
> /* OMAP_RTC_KICKER values */
> #define KICK0_VALUE 0x83e70b13
> #define KICK1_VALUE 0x95a4f1e0
>
> #define OMAP_RTC_HAS_KICKER 0x1
>
> +/*
> + * Few RTC IP revisions has special WAKE-EN Register to enable Wakeup
> + * generation for event Alarm.
> + */
> +#define OMAP_RTC_HAS_IRQWAKEEN 0x2
> +
> static void __iomem *rtc_base;
>
> #define rtc_read(addr) readb(rtc_base + (addr))
> @@ -301,12 +312,18 @@ static struct rtc_class_ops omap_rtc_ops = {
> static int omap_rtc_alarm;
> static int omap_rtc_timer;
>
> -#define OMAP_RTC_DATA_DA830_IDX 1
> +#define OMAP_RTC_DATA_AM3352_IDX 1
> +#define OMAP_RTC_DATA_DA830_IDX 2
>
> static struct platform_device_id omap_rtc_devtype[] = {
> {
> .name = DRIVER_NAME,
> - }, {
> + },
> + [OMAP_RTC_DATA_AM3352_IDX] = {
> + .name = "am3352-rtc",
> + .driver_data = OMAP_RTC_HAS_KICKER | OMAP_RTC_HAS_IRQWAKEEN,
> + },
> + [OMAP_RTC_DATA_DA830_IDX] = {
> .name = "da830-rtc",
> .driver_data = OMAP_RTC_HAS_KICKER,
> },
> @@ -318,6 +335,9 @@ static const struct of_device_id omap_rtc_of_match[] = {
> { .compatible = "ti,da830-rtc",
> .data = &omap_rtc_devtype[OMAP_RTC_DATA_DA830_IDX],
> },
> + { .compatible = "ti,am3352-rtc",
> + .data = &omap_rtc_devtype[OMAP_RTC_DATA_AM3352_IDX],
> + },
> {},
> };
> MODULE_DEVICE_TABLE(of, omap_rtc_of_match);
> @@ -466,16 +486,28 @@ static u8 irqstat;
>
> static int omap_rtc_suspend(struct device *dev)
> {
> + u8 irqwake_stat;
> + struct platform_device *pdev = to_platform_device(dev);
> + const struct platform_device_id *id_entry =
> + platform_get_device_id(pdev);
> +
> irqstat = rtc_read(OMAP_RTC_INTERRUPTS_REG);
>
> /* FIXME the RTC alarm is not currently acting as a wakeup event
> - * source, and in fact this enable() call is just saving a flag
> - * that's never used...
> + * source on some platforms, and in fact this enable() call is just
> + * saving a flag that's never used...
> */
> - if (device_may_wakeup(dev))
> + if (device_may_wakeup(dev)) {
> enable_irq_wake(omap_rtc_alarm);
> - else
> +
> + if (id_entry->driver_data & OMAP_RTC_HAS_IRQWAKEEN) {
> + irqwake_stat = rtc_read(OMAP_RTC_IRQWAKEEN);
> + irqwake_stat |= OMAP_RTC_IRQWAKEEN_ALARM_WAKEEN;
> + rtc_write(irqwake_stat, OMAP_RTC_IRQWAKEEN);
> + }
> + } else {
> rtc_write(0, OMAP_RTC_INTERRUPTS_REG);
> + }
>
> /* Disable the clock/module */
> pm_runtime_put_sync(dev);
> @@ -485,13 +517,25 @@ static int omap_rtc_suspend(struct device *dev)
>
> static int omap_rtc_resume(struct device *dev)
> {
> + u8 irqwake_stat;
> + struct platform_device *pdev = to_platform_device(dev);
> + const struct platform_device_id *id_entry =
> + platform_get_device_id(pdev);
> +
> /* Enable the clock/module so that we can access the registers */
> pm_runtime_get_sync(dev);
>
> - if (device_may_wakeup(dev))
> + if (device_may_wakeup(dev)) {
> disable_irq_wake(omap_rtc_alarm);
> - else
> +
> + if (id_entry->driver_data & OMAP_RTC_HAS_IRQWAKEEN) {
> + irqwake_stat = rtc_read(OMAP_RTC_IRQWAKEEN);
> + irqwake_stat &= ~OMAP_RTC_IRQWAKEEN_ALARM_WAKEEN;
> + rtc_write(irqwake_stat, OMAP_RTC_IRQWAKEEN);
> + }
> + } else {
> rtc_write(irqstat, OMAP_RTC_INTERRUPTS_REG);
> + }
> return 0;
> }
> #endif
>
next prev parent reply other threads:[~2013-07-24 13:14 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-03 8:47 [Patch V2 0/4] rtc: omap: handle rtc wakeup support in driver Hebbar Gururaja
2013-07-03 8:47 ` Hebbar Gururaja
2013-07-03 8:47 ` Hebbar Gururaja
[not found] ` <1372841225-18813-1-git-send-email-gururaja.hebbar-l0cyMroinI0@public.gmane.org>
2013-07-03 8:47 ` [Patch V2 1/4] rtc: omap: restore back (hard-code) wakeup support Hebbar Gururaja
2013-07-03 8:47 ` Hebbar Gururaja
2013-07-03 8:47 ` Hebbar Gururaja
2013-07-03 8:47 ` [Patch V2 2/4] ARM: Davinci: da8xx/omap-l1: Remove hard coding of rtc device wakeup Hebbar Gururaja
2013-07-03 8:47 ` Hebbar Gururaja
2013-07-03 8:47 ` Hebbar Gururaja
[not found] ` <1372841225-18813-3-git-send-email-gururaja.hebbar-l0cyMroinI0@public.gmane.org>
2013-08-16 12:02 ` Sekhar Nori
2013-08-16 12:02 ` Sekhar Nori
2013-08-16 12:02 ` Sekhar Nori
2013-07-03 8:47 ` [Patch V2 3/4] rtc: omap: add rtc wakeup support to alarm events Hebbar Gururaja
2013-07-03 8:47 ` Hebbar Gururaja
2013-07-03 8:47 ` Hebbar Gururaja
[not found] ` <1372841225-18813-4-git-send-email-gururaja.hebbar-l0cyMroinI0@public.gmane.org>
2013-07-24 13:14 ` Gururaja Hebbar [this message]
2013-07-24 13:14 ` Gururaja Hebbar
2013-07-24 13:14 ` Gururaja Hebbar
2013-07-03 8:47 ` [Patch V2 4/4] ARM: dts: AM33XX: update rtc node compatibility Hebbar Gururaja
2013-07-03 8:47 ` Hebbar Gururaja
2013-07-03 8:47 ` Hebbar Gururaja
[not found] ` <1372841225-18813-5-git-send-email-gururaja.hebbar-l0cyMroinI0@public.gmane.org>
2013-07-30 5:05 ` Gururaja Hebbar
2013-07-30 5:05 ` Gururaja Hebbar
2013-07-30 5:05 ` Gururaja Hebbar
2013-07-30 14:55 ` Mark Rutland
2013-07-30 14:55 ` Mark Rutland
2013-07-30 14:55 ` Mark Rutland
[not found] ` <20130730145501.GA29859-NuALmloUBlrZROr8t4l/smS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
2013-07-30 16:21 ` Sekhar Nori
2013-07-30 16:21 ` Sekhar Nori
2013-07-30 16:21 ` Sekhar Nori
2013-08-01 17:05 ` Mark Rutland
2013-08-01 17:05 ` Mark Rutland
2013-08-01 17:05 ` Mark Rutland
[not found] ` <20130801170537.GF8095-NuALmloUBlrZROr8t4l/smS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
2013-08-02 11:07 ` Gururaja Hebbar
2013-08-02 11:07 ` Gururaja Hebbar
2013-08-02 11:07 ` Gururaja Hebbar
[not found] ` <51FB92F8.9020801-l0cyMroinI0@public.gmane.org>
2013-08-02 11:20 ` Mark Rutland
2013-08-02 11:20 ` Mark Rutland
2013-08-02 11:20 ` Mark Rutland
[not found] ` <20130802112018.GI2884-NuALmloUBlrZROr8t4l/smS4ubULX0JqMm0uRHvK7Nw@public.gmane.org>
2013-08-02 11:48 ` Gururaja Hebbar
2013-08-02 11:48 ` Gururaja Hebbar
2013-08-02 11:48 ` Gururaja Hebbar
2013-08-02 12:40 ` Mark Rutland
2013-08-02 12:40 ` Mark Rutland
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51EFD350.4030500@ti.com \
--to=gururaja.hebbar-l0cymroini0@public.gmane.org \
--cc=a.zummo-BfzFCNDTiLLj+vYz1yj4TQ@public.gmane.org \
--cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
--cc=benoit.cousson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org \
--cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
--cc=grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=rob-VoJi6FS/r0vR7s880joybQ@public.gmane.org \
--cc=rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org \
--cc=rtc-linux-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
--cc=tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.