All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/6] OMAP-AM33xx RTC DT support
@ 2012-07-23 13:41 Afzal Mohammed
       [not found] ` <cover.1343046707.git.afzal-l0cyMroinI0@public.gmane.org>
  0 siblings, 1 reply; 12+ messages in thread
From: Afzal Mohammed @ 2012-07-23 13:41 UTC (permalink / raw)
  To: grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	rob.herring-bsGFqQB8/DxBDgjK7y7TUQ, rob-VoJi6FS/r0vR7s880joybQ,
	linux-lFZ/pmaqli7XmaaqVzeoHQ, nsekhar-l0cyMroinI0,
	khilman-l0cyMroinI0, a.zummo-BfzFCNDTiLLj+vYz1yj4TQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	linux-doc-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/,
	rtc-linux-/JYPxA39Uh5TLH3MbocFFw
  Cc: Afzal Mohammed

Hi,

This series makes rtc-omap driver DT capable, adds AM33xx
RTC DT support along with a few enchancments to the driver.

rtc-omap driver is made intelligent enough to handle kicker
mechanism. This helps in removing kicker mechanism support
done for DaVinci at platform level.

This has been tested on Beaglebone (AM33xx platform) and on
DaVinci DA850 EVM.

This series is based over linux-omap master and can be
directly applied over linux-next, except for
[PATCH 6/6] arm/dts: am33xx rtc node.

PATCH 6/6 should go through linux-omap tree and needs
http://www.mail-archive.com/linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org/msg71644.html
(arm/dts: am33xx wdt node) to get applied cleanly

Regards
Afzal

Afzal Mohammed (5):
  rtc: omap: kicker mechanism support
  ARM: davinci: remove rtc kicker release
  rtc: omap: dt support
  rtc: omap: depend on am33xx
  arm/dts: am33xx rtc node

Vaibhav Hiremath (1):
  rtc: omap: Add runtime pm support

 Documentation/devicetree/bindings/rtc/rtc-omap.txt |   20 +++++
 arch/arm/boot/dts/am33xx.dtsi                      |    5 ++
 arch/arm/mach-davinci/devices-da8xx.c              |   13 +---
 drivers/rtc/Kconfig                                |    8 +-
 drivers/rtc/rtc-omap.c                             |   75 +++++++++++++++++++-
 5 files changed, 104 insertions(+), 17 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/rtc/rtc-omap.txt

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 1/6] rtc: omap: kicker mechanism support
       [not found] ` <cover.1343046707.git.afzal-l0cyMroinI0@public.gmane.org>
@ 2012-07-23 13:42   ` Afzal Mohammed
  2012-07-23 13:42   ` [PATCH 2/6] ARM: davinci: remove rtc kicker release Afzal Mohammed
                     ` (4 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
From: Afzal Mohammed @ 2012-07-23 13:42 UTC (permalink / raw)
  To: grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	rob.herring-bsGFqQB8/DxBDgjK7y7TUQ, rob-VoJi6FS/r0vR7s880joybQ,
	linux-lFZ/pmaqli7XmaaqVzeoHQ, nsekhar-l0cyMroinI0,
	khilman-l0cyMroinI0, a.zummo-BfzFCNDTiLLj+vYz1yj4TQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	linux-doc-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/,
	rtc-linux-/JYPxA39Uh5TLH3MbocFFw
  Cc: Afzal Mohammed

OMAP RTC IP can have kicker feature. This prevents spurious
writes to register. To write to registers kicker lock has to
be released. Procedure to do it as follows,

1. write to kick0 register, 0x83e70b13
2. write to kick1 register, 0x95a4f1e0

Writing value other than 0x83e70b13 to kick0 enables write
locking, more details about kicker mechanism can be found in
section 20.3.3.5.3 of AM335X TRM @www.ti.com/am335x

Here id table information is added and is used to distinguish
those that require kicker handling and the ones that doesn't
need it. There are more features in the newer IP's compared
to legacy ones other than kicker, which driver currently
doesn't handle, supporting additional features would be
easier with the addition of id table.

Signed-off-by: Afzal Mohammed <afzal-l0cyMroinI0@public.gmane.org>
---
 drivers/rtc/rtc-omap.c |   39 ++++++++++++++++++++++++++++++++++++++-
 1 files changed, 38 insertions(+), 1 deletions(-)

diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c
index 0b614e3..65eda29 100644
--- a/drivers/rtc/rtc-omap.c
+++ b/drivers/rtc/rtc-omap.c
@@ -38,6 +38,8 @@
  * the SoC). See the BOARD-SPECIFIC CUSTOMIZATION comment.
  */
 
+#define	DRIVER_NAME			"omap_rtc"
+
 #define OMAP_RTC_BASE			0xfffb4800
 
 /* RTC registers */
@@ -64,6 +66,9 @@
 #define OMAP_RTC_COMP_MSB_REG		0x50
 #define OMAP_RTC_OSC_REG		0x54
 
+#define OMAP_RTC_KICK0_R		0x6c
+#define OMAP_RTC_KICK1_R		0x70
+
 /* OMAP_RTC_CTRL_REG bit fields: */
 #define OMAP_RTC_CTRL_SPLIT		(1<<7)
 #define OMAP_RTC_CTRL_DISABLE		(1<<6)
@@ -88,11 +93,19 @@
 #define OMAP_RTC_INTERRUPTS_IT_ALARM    (1<<3)
 #define OMAP_RTC_INTERRUPTS_IT_TIMER    (1<<2)
 
+/* OMAP_RTC_KICKER values */
+#define	KICK0_VALUE			(0x83e70b13)
+#define	KICK1_VALUE			(0x95a4f1e0)
+
+#define	OMAP_RTC_HAS_KICKER		0x1
+
 static void __iomem	*rtc_base;
 
 #define rtc_read(addr)		__raw_readb(rtc_base + (addr))
 #define rtc_write(val, addr)	__raw_writeb(val, rtc_base + (addr))
 
+#define rtc_writel(val, addr)	writel(val, rtc_base + (addr))
+
 
 /* we rely on the rtc framework to handle locking (rtc->ops_lock),
  * so the only other requirement is that register accesses which
@@ -285,11 +298,22 @@ static struct rtc_class_ops omap_rtc_ops = {
 static int omap_rtc_alarm;
 static int omap_rtc_timer;
 
+static struct platform_device_id omap_rtc_devtype[] = {
+	{
+		.name	= DRIVER_NAME,
+	}, {
+		.name	= "am1808-rtc",
+		.driver_data = OMAP_RTC_HAS_KICKER,
+	}
+};
+MODULE_DEVICE_TABLE(platform, omap_rtc_devtype);
+
 static int __init omap_rtc_probe(struct platform_device *pdev)
 {
 	struct resource		*res, *mem;
 	struct rtc_device	*rtc;
 	u8			reg, new_ctrl;
+	const struct platform_device_id *id_entry;
 
 	omap_rtc_timer = platform_get_irq(pdev, 0);
 	if (omap_rtc_timer <= 0) {
@@ -322,6 +346,12 @@ static int __init omap_rtc_probe(struct platform_device *pdev)
 		goto fail;
 	}
 
+	id_entry = platform_get_device_id(pdev);
+	if (id_entry && (id_entry->driver_data & OMAP_RTC_HAS_KICKER)) {
+		rtc_writel(KICK0_VALUE, OMAP_RTC_KICK0_R);
+		rtc_writel(KICK1_VALUE, OMAP_RTC_KICK1_R);
+	}
+
 	rtc = rtc_device_register(pdev->name, &pdev->dev,
 			&omap_rtc_ops, THIS_MODULE);
 	if (IS_ERR(rtc)) {
@@ -398,6 +428,8 @@ fail2:
 fail1:
 	rtc_device_unregister(rtc);
 fail0:
+	if (id_entry && (id_entry->driver_data & OMAP_RTC_HAS_KICKER))
+		rtc_writel(0, OMAP_RTC_KICK0_R);
 	iounmap(rtc_base);
 fail:
 	release_mem_region(mem->start, resource_size(mem));
@@ -408,6 +440,8 @@ static int __exit omap_rtc_remove(struct platform_device *pdev)
 {
 	struct rtc_device	*rtc = platform_get_drvdata(pdev);
 	struct resource		*mem = dev_get_drvdata(&rtc->dev);
+	const struct platform_device_id *id_entry =
+				platform_get_device_id(pdev);
 
 	device_init_wakeup(&pdev->dev, 0);
 
@@ -420,6 +454,8 @@ static int __exit omap_rtc_remove(struct platform_device *pdev)
 		free_irq(omap_rtc_alarm, rtc);
 
 	rtc_device_unregister(rtc);
+	if (id_entry && (id_entry->driver_data & OMAP_RTC_HAS_KICKER))
+		rtc_writel(0, OMAP_RTC_KICK0_R);
 	iounmap(rtc_base);
 	release_mem_region(mem->start, resource_size(mem));
 	return 0;
@@ -471,9 +507,10 @@ static struct platform_driver omap_rtc_driver = {
 	.resume		= omap_rtc_resume,
 	.shutdown	= omap_rtc_shutdown,
 	.driver		= {
-		.name	= "omap_rtc",
+		.name	= DRIVER_NAME,
 		.owner	= THIS_MODULE,
 	},
+	.id_table	= omap_rtc_devtype,
 };
 
 static int __init rtc_init(void)
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 2/6] ARM: davinci: remove rtc kicker release
       [not found] ` <cover.1343046707.git.afzal-l0cyMroinI0@public.gmane.org>
  2012-07-23 13:42   ` [PATCH 1/6] rtc: omap: kicker mechanism support Afzal Mohammed
@ 2012-07-23 13:42   ` Afzal Mohammed
  2012-07-24 11:11       ` Sergei Shtylyov
  2012-07-23 13:42   ` [PATCH 3/6] rtc: omap: dt support Afzal Mohammed
                     ` (3 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Afzal Mohammed @ 2012-07-23 13:42 UTC (permalink / raw)
  To: grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	rob.herring-bsGFqQB8/DxBDgjK7y7TUQ, rob-VoJi6FS/r0vR7s880joybQ,
	linux-lFZ/pmaqli7XmaaqVzeoHQ, nsekhar-l0cyMroinI0,
	khilman-l0cyMroinI0, a.zummo-BfzFCNDTiLLj+vYz1yj4TQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	linux-doc-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/,
	rtc-linux-/JYPxA39Uh5TLH3MbocFFw
  Cc: Afzal Mohammed

rtc-omap driver is now capable of handling kicker mechanism,
hence remove kicker handling at platform level, instead
provide proper device name so that driver can handle kicker
mechanism by itself

Signed-off-by: Afzal Mohammed <afzal-l0cyMroinI0@public.gmane.org>
---
 arch/arm/mach-davinci/devices-da8xx.c |   13 +------------
 1 files changed, 1 insertions(+), 12 deletions(-)

diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
index d1624a3..c915bff 100644
--- a/arch/arm/mach-davinci/devices-da8xx.c
+++ b/arch/arm/mach-davinci/devices-da8xx.c
@@ -679,7 +679,7 @@ static struct resource da8xx_rtc_resources[] = {
 };
 
 static struct platform_device da8xx_rtc_device = {
-	.name           = "omap_rtc",
+	.name           = "am1808-rtc",
 	.id             = -1,
 	.num_resources	= ARRAY_SIZE(da8xx_rtc_resources),
 	.resource	= da8xx_rtc_resources,
@@ -688,17 +688,6 @@ static struct platform_device da8xx_rtc_device = {
 int da8xx_register_rtc(void)
 {
 	int ret;
-	void __iomem *base;
-
-	base = ioremap(DA8XX_RTC_BASE, SZ_4K);
-	if (WARN_ON(!base))
-		return -ENOMEM;
-
-	/* Unlock the rtc's registers */
-	__raw_writel(0x83e70b13, base + 0x6c);
-	__raw_writel(0x95a4f1e0, base + 0x70);
-
-	iounmap(base);
 
 	ret = platform_device_register(&da8xx_rtc_device);
 	if (!ret)
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 3/6] rtc: omap: dt support
       [not found] ` <cover.1343046707.git.afzal-l0cyMroinI0@public.gmane.org>
  2012-07-23 13:42   ` [PATCH 1/6] rtc: omap: kicker mechanism support Afzal Mohammed
  2012-07-23 13:42   ` [PATCH 2/6] ARM: davinci: remove rtc kicker release Afzal Mohammed
@ 2012-07-23 13:42   ` Afzal Mohammed
  2012-07-23 13:42   ` [PATCH 4/6] rtc: omap: depend on am33xx Afzal Mohammed
                     ` (2 subsequent siblings)
  5 siblings, 0 replies; 12+ messages in thread
From: Afzal Mohammed @ 2012-07-23 13:42 UTC (permalink / raw)
  To: grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	rob.herring-bsGFqQB8/DxBDgjK7y7TUQ, rob-VoJi6FS/r0vR7s880joybQ,
	linux-lFZ/pmaqli7XmaaqVzeoHQ, nsekhar-l0cyMroinI0,
	khilman-l0cyMroinI0, a.zummo-BfzFCNDTiLLj+vYz1yj4TQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	linux-doc-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/,
	rtc-linux-/JYPxA39Uh5TLH3MbocFFw
  Cc: Afzal Mohammed

Enhance rtc-omap driver with DT capability

Signed-off-by: Afzal Mohammed <afzal-l0cyMroinI0@public.gmane.org>
---
 Documentation/devicetree/bindings/rtc/rtc-omap.txt |   20 ++++++++++++++++++++
 drivers/rtc/rtc-omap.c                             |   18 ++++++++++++++++++
 2 files changed, 38 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/rtc/rtc-omap.txt

diff --git a/Documentation/devicetree/bindings/rtc/rtc-omap.txt b/Documentation/devicetree/bindings/rtc/rtc-omap.txt
new file mode 100644
index 0000000..858c4b0
--- /dev/null
+++ b/Documentation/devicetree/bindings/rtc/rtc-omap.txt
@@ -0,0 +1,20 @@
+TI Real Time Clock
+
+Required properties:
+- compatible: "ti,am1808-rtc"
+- reg: Address range of rtc register set
+- interrupts: rtc timer, alarm interrupts in order
+- interrupt-parent: phandle for the interrupt controller
+
+Alternative for reg and interrupt properties on OMAP:
+- ti,hwmods: Name of the hwmod associated to the RTC
+
+Example:
+
+rtc@1c23000 {
+	compatible = "ti,am1808-rtc";
+	reg = <0x23000 0x1000>;
+	interrupts = <19
+		      19>;
+	interrupt-parent = <&intc>;
+};
diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c
index 65eda29..f7cc4b0 100644
--- a/drivers/rtc/rtc-omap.c
+++ b/drivers/rtc/rtc-omap.c
@@ -20,6 +20,8 @@
 #include <linux/rtc.h>
 #include <linux/bcd.h>
 #include <linux/platform_device.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
 
 #include <asm/io.h>
 
@@ -308,12 +310,27 @@ static struct platform_device_id omap_rtc_devtype[] = {
 };
 MODULE_DEVICE_TABLE(platform, omap_rtc_devtype);
 
+#define	OMAP_RTC_DATA_AM1808_IDX	1
+
+static const struct of_device_id omap_rtc_of_match[] = {
+	{	.compatible	= "ti,am1808-rtc",
+		.data		= &omap_rtc_devtype[OMAP_RTC_DATA_AM1808_IDX],
+	},
+	{},
+};
+MODULE_DEVICE_TABLE(of, omap_rtc_of_match);
+
 static int __init omap_rtc_probe(struct platform_device *pdev)
 {
 	struct resource		*res, *mem;
 	struct rtc_device	*rtc;
 	u8			reg, new_ctrl;
 	const struct platform_device_id *id_entry;
+	const struct of_device_id *of_id;
+
+	of_id = of_match_device(omap_rtc_of_match, &pdev->dev);
+	if (of_id)
+		pdev->id_entry = of_id->data;
 
 	omap_rtc_timer = platform_get_irq(pdev, 0);
 	if (omap_rtc_timer <= 0) {
@@ -509,6 +526,7 @@ static struct platform_driver omap_rtc_driver = {
 	.driver		= {
 		.name	= DRIVER_NAME,
 		.owner	= THIS_MODULE,
+		.of_match_table = of_match_ptr(omap_rtc_of_match),
 	},
 	.id_table	= omap_rtc_devtype,
 };
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 4/6] rtc: omap: depend on am33xx
       [not found] ` <cover.1343046707.git.afzal-l0cyMroinI0@public.gmane.org>
                     ` (2 preceding siblings ...)
  2012-07-23 13:42   ` [PATCH 3/6] rtc: omap: dt support Afzal Mohammed
@ 2012-07-23 13:42   ` Afzal Mohammed
  2012-07-23 13:42   ` [PATCH 5/6] rtc: omap: Add runtime pm support Afzal Mohammed
  2012-07-23 13:42   ` [PATCH 6/6] arm/dts: am33xx rtc node Afzal Mohammed
  5 siblings, 0 replies; 12+ messages in thread
From: Afzal Mohammed @ 2012-07-23 13:42 UTC (permalink / raw)
  To: grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	rob.herring-bsGFqQB8/DxBDgjK7y7TUQ, rob-VoJi6FS/r0vR7s880joybQ,
	linux-lFZ/pmaqli7XmaaqVzeoHQ, nsekhar-l0cyMroinI0,
	khilman-l0cyMroinI0, a.zummo-BfzFCNDTiLLj+vYz1yj4TQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	linux-doc-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/,
	rtc-linux-/JYPxA39Uh5TLH3MbocFFw
  Cc: Afzal Mohammed

rtc-omap driver can be reused for AM33xx RTC.
Provide dependency in Kconfig.

Signed-off-by: Afzal Mohammed <afzal-l0cyMroinI0@public.gmane.org>
---
 drivers/rtc/Kconfig |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index 08cbdb9..70e820b 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -729,11 +729,11 @@ config RTC_DRV_IMXDI
 
 config RTC_DRV_OMAP
 	tristate "TI OMAP1"
-	depends on ARCH_OMAP15XX || ARCH_OMAP16XX || ARCH_OMAP730 || ARCH_DAVINCI_DA8XX
+	depends on ARCH_OMAP15XX || ARCH_OMAP16XX || ARCH_OMAP730 || ARCH_DAVINCI_DA8XX || SOC_AM33XX
 	help
-	  Say "yes" here to support the real time clock on TI OMAP1 and
-	  DA8xx/OMAP-L13x chips.  This driver can also be built as a
-	  module called rtc-omap.
+	  Say "yes" here to support the real time clock on TI OMAP1,
+	  AM33xx and DA8xx/OMAP-L13x chips.  This driver can also be
+	  built as a module called rtc-omap.
 
 config HAVE_S3C_RTC
 	bool
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 5/6] rtc: omap: Add runtime pm support
       [not found] ` <cover.1343046707.git.afzal-l0cyMroinI0@public.gmane.org>
                     ` (3 preceding siblings ...)
  2012-07-23 13:42   ` [PATCH 4/6] rtc: omap: depend on am33xx Afzal Mohammed
@ 2012-07-23 13:42   ` Afzal Mohammed
  2012-07-23 13:42   ` [PATCH 6/6] arm/dts: am33xx rtc node Afzal Mohammed
  5 siblings, 0 replies; 12+ messages in thread
From: Afzal Mohammed @ 2012-07-23 13:42 UTC (permalink / raw)
  To: grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	rob.herring-bsGFqQB8/DxBDgjK7y7TUQ, rob-VoJi6FS/r0vR7s880joybQ,
	linux-lFZ/pmaqli7XmaaqVzeoHQ, nsekhar-l0cyMroinI0,
	khilman-l0cyMroinI0, a.zummo-BfzFCNDTiLLj+vYz1yj4TQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	linux-doc-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/,
	rtc-linux-/JYPxA39Uh5TLH3MbocFFw
  Cc: Afzal Mohammed

From: Vaibhav Hiremath <hvaibhav-l0cyMroinI0@public.gmane.org>

OMAP1 RTC driver is used in multiple devices like,
OMAPL138 and AM33XX. Driver currently doesn't handle any clocks,
which may be right for OMAP1 architecture but in case of AM33XX,
the clock/module needs to be enabled in order to access the registers.

So covert this driver to runtime pm, which internally handles rest.

Afzal: handle error path

Signed-off-by: Vaibhav Hiremath <hvaibhav-l0cyMroinI0@public.gmane.org>
Signed-off-by: Afzal Mohammed <afzal-l0cyMroinI0@public.gmane.org>
---
 drivers/rtc/rtc-omap.c |   18 ++++++++++++++++++
 1 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c
index f7cc4b0..a64f98a 100644
--- a/drivers/rtc/rtc-omap.c
+++ b/drivers/rtc/rtc-omap.c
@@ -22,6 +22,7 @@
 #include <linux/platform_device.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
+#include <linux/pm_runtime.h>
 
 #include <asm/io.h>
 
@@ -363,6 +364,10 @@ static int __init omap_rtc_probe(struct platform_device *pdev)
 		goto fail;
 	}
 
+	/* Enable the clock/module so that we can access the registers */
+	pm_runtime_enable(&pdev->dev);
+	pm_runtime_get_sync(&pdev->dev);
+
 	id_entry = platform_get_device_id(pdev);
 	if (id_entry && (id_entry->driver_data & OMAP_RTC_HAS_KICKER)) {
 		rtc_writel(KICK0_VALUE, OMAP_RTC_KICK0_R);
@@ -447,6 +452,8 @@ fail1:
 fail0:
 	if (id_entry && (id_entry->driver_data & OMAP_RTC_HAS_KICKER))
 		rtc_writel(0, OMAP_RTC_KICK0_R);
+	pm_runtime_put_sync(&pdev->dev);
+	pm_runtime_disable(&pdev->dev);
 	iounmap(rtc_base);
 fail:
 	release_mem_region(mem->start, resource_size(mem));
@@ -473,6 +480,11 @@ static int __exit omap_rtc_remove(struct platform_device *pdev)
 	rtc_device_unregister(rtc);
 	if (id_entry && (id_entry->driver_data & OMAP_RTC_HAS_KICKER))
 		rtc_writel(0, OMAP_RTC_KICK0_R);
+
+	/* Disable the clock/module */
+	pm_runtime_put_sync(&pdev->dev);
+	pm_runtime_disable(&pdev->dev);
+
 	iounmap(rtc_base);
 	release_mem_region(mem->start, resource_size(mem));
 	return 0;
@@ -495,11 +507,17 @@ static int omap_rtc_suspend(struct platform_device *pdev, pm_message_t state)
 	else
 		rtc_write(0, OMAP_RTC_INTERRUPTS_REG);
 
+	/* Disable the clock/module */
+	pm_runtime_put_sync(&pdev->dev);
+
 	return 0;
 }
 
 static int omap_rtc_resume(struct platform_device *pdev)
 {
+	/* Enable the clock/module so that we can access the registers */
+	pm_runtime_get_sync(&pdev->dev);
+
 	if (device_may_wakeup(&pdev->dev))
 		disable_irq_wake(omap_rtc_alarm);
 	else
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 6/6] arm/dts: am33xx rtc node
       [not found] ` <cover.1343046707.git.afzal-l0cyMroinI0@public.gmane.org>
                     ` (4 preceding siblings ...)
  2012-07-23 13:42   ` [PATCH 5/6] rtc: omap: Add runtime pm support Afzal Mohammed
@ 2012-07-23 13:42   ` Afzal Mohammed
  5 siblings, 0 replies; 12+ messages in thread
From: Afzal Mohammed @ 2012-07-23 13:42 UTC (permalink / raw)
  To: grant.likely-s3s/WqlpOiPyB63q8FvJNQ,
	rob.herring-bsGFqQB8/DxBDgjK7y7TUQ, rob-VoJi6FS/r0vR7s880joybQ,
	linux-lFZ/pmaqli7XmaaqVzeoHQ, nsekhar-l0cyMroinI0,
	khilman-l0cyMroinI0, a.zummo-BfzFCNDTiLLj+vYz1yj4TQ,
	tony-4v6yS6AI5VpBDgjK7y7TUQ,
	devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ,
	linux-doc-u79uwXL29TY76Z2rM5mHXA,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA,
	linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
	davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/,
	rtc-linux-/JYPxA39Uh5TLH3MbocFFw
  Cc: Afzal Mohammed

Add am33xx rtc node.

Signed-off-by: Afzal Mohammed <afzal-l0cyMroinI0@public.gmane.org>
---
 arch/arm/boot/dts/am33xx.dtsi |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi
index bd0cff3..9de7e13 100644
--- a/arch/arm/boot/dts/am33xx.dtsi
+++ b/arch/arm/boot/dts/am33xx.dtsi
@@ -159,5 +159,10 @@
 			compatible = "ti,omap3-wdt";
 			ti,hwmods = "wd_timer2";
 		};
+
+		rtc@44e3e000 {
+			compatible = "ti,am1808-rtc";
+			ti,hwmods = "rtc";
+		};
 	};
 };
-- 
1.7.1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/6] ARM: davinci: remove rtc kicker release
  2012-07-23 13:42   ` [PATCH 2/6] ARM: davinci: remove rtc kicker release Afzal Mohammed
@ 2012-07-24 11:11       ` Sergei Shtylyov
  0 siblings, 0 replies; 12+ messages in thread
From: Sergei Shtylyov @ 2012-07-24 11:11 UTC (permalink / raw)
  To: Afzal Mohammed
  Cc: grant.likely, rob.herring, rob, linux, nsekhar, khilman, a.zummo,
	tony, devicetree-discuss, linux-doc, linux-kernel,
	linux-arm-kernel, davinci-linux-open-source, rtc-linux

Hello.

On 23-07-2012 17:42, Afzal Mohammed wrote:

> rtc-omap driver is now capable of handling kicker mechanism,
> hence remove kicker handling at platform level, instead
> provide proper device name so that driver can handle kicker
> mechanism by itself

> Signed-off-by: Afzal Mohammed <afzal@ti.com>
> ---
>   arch/arm/mach-davinci/devices-da8xx.c |   13 +------------
>   1 files changed, 1 insertions(+), 12 deletions(-)

> diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
> index d1624a3..c915bff 100644
> --- a/arch/arm/mach-davinci/devices-da8xx.c
> +++ b/arch/arm/mach-davinci/devices-da8xx.c
> @@ -679,7 +679,7 @@ static struct resource da8xx_rtc_resources[] = {
>   };
>
>   static struct platform_device da8xx_rtc_device = {
> -	.name           = "omap_rtc",
> +	.name           = "am1808-rtc",

    Why not "da8xx-rtc". Kick registers exist startting with 
DA830/OMAP-L137/AM1707, not only on AM1808.

>   	.id             = -1,
>   	.num_resources	= ARRAY_SIZE(da8xx_rtc_resources),
>   	.resource	= da8xx_rtc_resources,
> @@ -688,17 +688,6 @@ static struct platform_device da8xx_rtc_device = {
>   int da8xx_register_rtc(void)
>   {
>   	int ret;
> -	void __iomem *base;
> -
> -	base = ioremap(DA8XX_RTC_BASE, SZ_4K);
> -	if (WARN_ON(!base))
> -		return -ENOMEM;
> -
> -	/* Unlock the rtc's registers */
> -	__raw_writel(0x83e70b13, base + 0x6c);
> -	__raw_writel(0x95a4f1e0, base + 0x70);
> -
> -	iounmap(base);
>
>   	ret = platform_device_register(&da8xx_rtc_device);
>   	if (!ret)

WBR, Sergei


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 2/6] ARM: davinci: remove rtc kicker release
@ 2012-07-24 11:11       ` Sergei Shtylyov
  0 siblings, 0 replies; 12+ messages in thread
From: Sergei Shtylyov @ 2012-07-24 11:11 UTC (permalink / raw)
  To: linux-arm-kernel

Hello.

On 23-07-2012 17:42, Afzal Mohammed wrote:

> rtc-omap driver is now capable of handling kicker mechanism,
> hence remove kicker handling at platform level, instead
> provide proper device name so that driver can handle kicker
> mechanism by itself

> Signed-off-by: Afzal Mohammed <afzal@ti.com>
> ---
>   arch/arm/mach-davinci/devices-da8xx.c |   13 +------------
>   1 files changed, 1 insertions(+), 12 deletions(-)

> diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
> index d1624a3..c915bff 100644
> --- a/arch/arm/mach-davinci/devices-da8xx.c
> +++ b/arch/arm/mach-davinci/devices-da8xx.c
> @@ -679,7 +679,7 @@ static struct resource da8xx_rtc_resources[] = {
>   };
>
>   static struct platform_device da8xx_rtc_device = {
> -	.name           = "omap_rtc",
> +	.name           = "am1808-rtc",

    Why not "da8xx-rtc". Kick registers exist startting with 
DA830/OMAP-L137/AM1707, not only on AM1808.

>   	.id             = -1,
>   	.num_resources	= ARRAY_SIZE(da8xx_rtc_resources),
>   	.resource	= da8xx_rtc_resources,
> @@ -688,17 +688,6 @@ static struct platform_device da8xx_rtc_device = {
>   int da8xx_register_rtc(void)
>   {
>   	int ret;
> -	void __iomem *base;
> -
> -	base = ioremap(DA8XX_RTC_BASE, SZ_4K);
> -	if (WARN_ON(!base))
> -		return -ENOMEM;
> -
> -	/* Unlock the rtc's registers */
> -	__raw_writel(0x83e70b13, base + 0x6c);
> -	__raw_writel(0x95a4f1e0, base + 0x70);
> -
> -	iounmap(base);
>
>   	ret = platform_device_register(&da8xx_rtc_device);
>   	if (!ret)

WBR, Sergei

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [PATCH 2/6] ARM: davinci: remove rtc kicker release
  2012-07-24 11:11       ` Sergei Shtylyov
  (?)
@ 2012-07-24 12:04         ` Mohammed, Afzal
  -1 siblings, 0 replies; 12+ messages in thread
From: Mohammed, Afzal @ 2012-07-24 12:04 UTC (permalink / raw)
  To: Sergei Shtylyov
  Cc: grant.likely, rob.herring, rob, linux, Nori, Sekhar, Hilman,
	Kevin, a.zummo, tony, devicetree-discuss, linux-doc,
	linux-kernel, linux-arm-kernel, davinci-linux-open-source,
	rtc-linux

Hi Sergei,

On Tue, Jul 24, 2012 at 16:41:16, Sergei Shtylyov wrote:

> >   static struct platform_device da8xx_rtc_device = {
> > -	.name           = "omap_rtc",
> > +	.name           = "am1808-rtc",
> 
>     Why not "da8xx-rtc". Kick registers exist startting with 
> DA830/OMAP-L137/AM1707, not only on AM1808.

I would prefer to keep da830-rtc, even though it is not strictly
a requirement; "da830-rtc" could be used for DT case too (as in
DT, wild card compatibles are not recommended), hence allowing
us to have a uniform name for DT & non-DT case.

Regards
Afzal

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [PATCH 2/6] ARM: davinci: remove rtc kicker release
@ 2012-07-24 12:04         ` Mohammed, Afzal
  0 siblings, 0 replies; 12+ messages in thread
From: Mohammed, Afzal @ 2012-07-24 12:04 UTC (permalink / raw)
  To: Sergei Shtylyov
  Cc: grant.likely, rob.herring, rob, linux, Nori, Sekhar, Hilman,
	Kevin, a.zummo, tony, devicetree-discuss, linux-doc,
	linux-kernel, linux-arm-kernel, davinci-linux-open-source,
	rtc-linux

Hi Sergei,

On Tue, Jul 24, 2012 at 16:41:16, Sergei Shtylyov wrote:

> >   static struct platform_device da8xx_rtc_device = {
> > -	.name           = "omap_rtc",
> > +	.name           = "am1808-rtc",
> 
>     Why not "da8xx-rtc". Kick registers exist startting with 
> DA830/OMAP-L137/AM1707, not only on AM1808.

I would prefer to keep da830-rtc, even though it is not strictly
a requirement; "da830-rtc" could be used for DT case too (as in
DT, wild card compatibles are not recommended), hence allowing
us to have a uniform name for DT & non-DT case.

Regards
Afzal

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 2/6] ARM: davinci: remove rtc kicker release
@ 2012-07-24 12:04         ` Mohammed, Afzal
  0 siblings, 0 replies; 12+ messages in thread
From: Mohammed, Afzal @ 2012-07-24 12:04 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Sergei,

On Tue, Jul 24, 2012 at 16:41:16, Sergei Shtylyov wrote:

> >   static struct platform_device da8xx_rtc_device = {
> > -	.name           = "omap_rtc",
> > +	.name           = "am1808-rtc",
> 
>     Why not "da8xx-rtc". Kick registers exist startting with 
> DA830/OMAP-L137/AM1707, not only on AM1808.

I would prefer to keep da830-rtc, even though it is not strictly
a requirement; "da830-rtc" could be used for DT case too (as in
DT, wild card compatibles are not recommended), hence allowing
us to have a uniform name for DT & non-DT case.

Regards
Afzal

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2012-07-24 12:05 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-23 13:41 [PATCH 0/6] OMAP-AM33xx RTC DT support Afzal Mohammed
     [not found] ` <cover.1343046707.git.afzal-l0cyMroinI0@public.gmane.org>
2012-07-23 13:42   ` [PATCH 1/6] rtc: omap: kicker mechanism support Afzal Mohammed
2012-07-23 13:42   ` [PATCH 2/6] ARM: davinci: remove rtc kicker release Afzal Mohammed
2012-07-24 11:11     ` Sergei Shtylyov
2012-07-24 11:11       ` Sergei Shtylyov
2012-07-24 12:04       ` Mohammed, Afzal
2012-07-24 12:04         ` Mohammed, Afzal
2012-07-24 12:04         ` Mohammed, Afzal
2012-07-23 13:42   ` [PATCH 3/6] rtc: omap: dt support Afzal Mohammed
2012-07-23 13:42   ` [PATCH 4/6] rtc: omap: depend on am33xx Afzal Mohammed
2012-07-23 13:42   ` [PATCH 5/6] rtc: omap: Add runtime pm support Afzal Mohammed
2012-07-23 13:42   ` [PATCH 6/6] arm/dts: am33xx rtc node Afzal Mohammed

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.