linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/5] rtc: omap dt support (for am33xx)
@ 2012-10-19  9:59 Afzal Mohammed
  2012-10-19  9:59 ` [PATCH v4 1/5] rtc: omap: kicker mechanism support Afzal Mohammed
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Afzal Mohammed @ 2012-10-19  9:59 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Grant Likely, Rob Herring, Rob Landley, Sekhar Nori,
	Kevin Hilman, Russell King, Alessandro Zummo, devicetree-discuss,
	linux-doc, linux-kernel, davinci-linux-open-source,
	linux-arm-kernel, rtc-linux, Daniel Mack, Afzal Mohammed

Hi Andrew,

This series enhances rtc-omap driver so as to be usable on
am33xx SoC by adding DT support (Beagle Bone uses am33xx).
This is a revised version of series that was posted on
27th July 2012 with the subject,
"omap-am33xx rtc dt support".
It seems rtc maintainer in inactive and hence sending it you.

Please help this reach mainline.

Brief:
Enhance rtc-omap driver to make it DT capable. This is
required to support boards that boot only with DT like
Beagle Bone. rtc-omap driver is used in DaVinci platforms
and they are also now going DT way, and these changes make
their DT migration easier. rtc-omap driver is made
intelligent enough to handle kicker mechanism. This also
helps in removing kicker mechanism support done for DaVinci
at platform level.

This series has been made over 3.7-rc1

This has been tested on Beaglebone (am33xx platform) and on
DaVinci da850 evm.

Regards
Afzal

v4:
 Resolve build error during module build
 Improve DT documentation

v3:
 Remove unit address in DT node
 Use readb/writeb instead of __raw_* variants
 Remove unnecessary parens

v2:
 Use device name da830-rtc instead of am1808-rtc, similar change in
 compatible for DT
 Newly added register name made similar to that existing in the driver
 Better commit message description
 Modify Kconfig help, resolve checkpatch warning


Afzal Mohammed (4):
  rtc: omap: kicker mechanism support
  ARM: davinci: remove rtc kicker release
  rtc: omap: dt support
  rtc: omap: depend on am33xx

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

 Documentation/devicetree/bindings/rtc/rtc-omap.txt | 17 +++++
 arch/arm/mach-davinci/devices-da8xx.c              | 13 +---
 drivers/rtc/Kconfig                                | 10 +--
 drivers/rtc/rtc-omap.c                             | 80 +++++++++++++++++++++-
 4 files changed, 101 insertions(+), 19 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/rtc/rtc-omap.txt

-- 
1.7.12


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

* [PATCH v4 1/5] rtc: omap: kicker mechanism support
  2012-10-19  9:59 [PATCH v4 0/5] rtc: omap dt support (for am33xx) Afzal Mohammed
@ 2012-10-19  9:59 ` Afzal Mohammed
  2012-10-19  9:59 ` [PATCH v4 2/5] ARM: davinci: remove rtc kicker release Afzal Mohammed
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Afzal Mohammed @ 2012-10-19  9:59 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Grant Likely, Rob Herring, Rob Landley, Sekhar Nori,
	Kevin Hilman, Russell King, Alessandro Zummo, devicetree-discuss,
	linux-doc, linux-kernel, davinci-linux-open-source,
	linux-arm-kernel, rtc-linux, Daniel Mack, 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.

Older IP (of OMAP1) doesn't have revision register as per
TRM, so revision register can't be relied always to find
features, hence id table is being used.

While at it, replace __raw_writeb/__raw_readb with
writeb/readb; this driver is used on ARMv7 (AM335X SoC)

Signed-off-by: Afzal Mohammed <afzal@ti.com>
Acked-by: Sekhar Nori <nsekhar@ti.com>
---

v4:
 Resolve build error during module build

v3:
 Use readb/writeb instead of __raw_* variants
 Remove unnecessary parens

v2:
 Use device name da830-rtc instead of am1808-rtc
 Newly added register name made similar to that existing in the driver
 Better commit message description

 drivers/rtc/rtc-omap.c | 44 +++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 41 insertions(+), 3 deletions(-)

diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c
index 0b614e3..d948426 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_REG		0x6c
+#define OMAP_RTC_KICK1_REG		0x70
+
 /* OMAP_RTC_CTRL_REG bit fields: */
 #define OMAP_RTC_CTRL_SPLIT		(1<<7)
 #define OMAP_RTC_CTRL_DISABLE		(1<<6)
@@ -88,10 +93,18 @@
 #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_read(addr)		readb(rtc_base + (addr))
+#define rtc_write(val, addr)	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),
@@ -285,11 +298,23 @@ 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	= "da830-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 +347,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_REG);
+		rtc_writel(KICK1_VALUE, OMAP_RTC_KICK1_REG);
+	}
+
 	rtc = rtc_device_register(pdev->name, &pdev->dev,
 			&omap_rtc_ops, THIS_MODULE);
 	if (IS_ERR(rtc)) {
@@ -398,6 +429,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_REG);
 	iounmap(rtc_base);
 fail:
 	release_mem_region(mem->start, resource_size(mem));
@@ -408,6 +441,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 +455,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_REG);
 	iounmap(rtc_base);
 	release_mem_region(mem->start, resource_size(mem));
 	return 0;
@@ -471,9 +508,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.12


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

* [PATCH v4 2/5] ARM: davinci: remove rtc kicker release
  2012-10-19  9:59 [PATCH v4 0/5] rtc: omap dt support (for am33xx) Afzal Mohammed
  2012-10-19  9:59 ` [PATCH v4 1/5] rtc: omap: kicker mechanism support Afzal Mohammed
@ 2012-10-19  9:59 ` Afzal Mohammed
  2012-10-19  9:59 ` [PATCH v4 3/5] rtc: omap: dt support Afzal Mohammed
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Afzal Mohammed @ 2012-10-19  9:59 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Grant Likely, Rob Herring, Rob Landley, Sekhar Nori,
	Kevin Hilman, Russell King, Alessandro Zummo, devicetree-discuss,
	linux-doc, linux-kernel, davinci-linux-open-source,
	linux-arm-kernel, rtc-linux, Daniel Mack, 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@ti.com>
Acked-by: Sekhar Nori <nsekhar@ti.com>
---

v2:
 Use device name da830-rtc instead of am1808-rtc

 arch/arm/mach-davinci/devices-da8xx.c | 13 +------------
 1 file changed, 1 insertion(+), 12 deletions(-)

diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
index bd2f72b..2d25b24 100644
--- a/arch/arm/mach-davinci/devices-da8xx.c
+++ b/arch/arm/mach-davinci/devices-da8xx.c
@@ -674,7 +674,7 @@ static struct resource da8xx_rtc_resources[] = {
 };
 
 static struct platform_device da8xx_rtc_device = {
-	.name           = "omap_rtc",
+	.name           = "da830-rtc",
 	.id             = -1,
 	.num_resources	= ARRAY_SIZE(da8xx_rtc_resources),
 	.resource	= da8xx_rtc_resources,
@@ -683,17 +683,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.12


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

* [PATCH v4 3/5] rtc: omap: dt support
  2012-10-19  9:59 [PATCH v4 0/5] rtc: omap dt support (for am33xx) Afzal Mohammed
  2012-10-19  9:59 ` [PATCH v4 1/5] rtc: omap: kicker mechanism support Afzal Mohammed
  2012-10-19  9:59 ` [PATCH v4 2/5] ARM: davinci: remove rtc kicker release Afzal Mohammed
@ 2012-10-19  9:59 ` Afzal Mohammed
  2012-10-21 19:51   ` Daniel Mack
  2012-10-19  9:59 ` [PATCH v4 4/5] rtc: omap: depend on am33xx Afzal Mohammed
  2012-10-19  9:59 ` [PATCH v4 5/5] rtc: omap: Add runtime pm support Afzal Mohammed
  4 siblings, 1 reply; 8+ messages in thread
From: Afzal Mohammed @ 2012-10-19  9:59 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Grant Likely, Rob Herring, Rob Landley, Sekhar Nori,
	Kevin Hilman, Russell King, Alessandro Zummo, devicetree-discuss,
	linux-doc, linux-kernel, davinci-linux-open-source,
	linux-arm-kernel, rtc-linux, Daniel Mack, Afzal Mohammed

enhance rtc-omap driver with DT capability

Signed-off-by: Afzal Mohammed <afzal@ti.com>
Acked-by: Sekhar Nori <nsekhar@ti.com>
---

v4:
 Proper devicetree documentation

v2:
 Use compatible as ti,da830-rtc instead of ti,am1808-rtc

 Documentation/devicetree/bindings/rtc/rtc-omap.txt | 17 +++++++++++++++++
 drivers/rtc/rtc-omap.c                             | 18 ++++++++++++++++++
 2 files changed, 35 insertions(+)
 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..b47aa41
--- /dev/null
+++ b/Documentation/devicetree/bindings/rtc/rtc-omap.txt
@@ -0,0 +1,17 @@
+TI Real Time Clock
+
+Required properties:
+- compatible: "ti,da830-rtc"
+- reg: Address range of rtc register set
+- interrupts: rtc timer, alarm interrupts in order
+- interrupt-parent: phandle for the interrupt controller
+
+Example:
+
+rtc@1c23000 {
+	compatible = "ti,da830-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 d948426..dff9ff4 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>
 
@@ -298,6 +300,8 @@ 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
+
 static struct platform_device_id omap_rtc_devtype[] = {
 	{
 		.name	= DRIVER_NAME,
@@ -309,12 +313,25 @@ static struct platform_device_id omap_rtc_devtype[] = {
 };
 MODULE_DEVICE_TABLE(platform, omap_rtc_devtype);
 
+static const struct of_device_id omap_rtc_of_match[] = {
+	{	.compatible	= "ti,da830-rtc",
+		.data		= &omap_rtc_devtype[OMAP_RTC_DATA_DA830_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) {
@@ -510,6 +527,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.12


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

* [PATCH v4 4/5] rtc: omap: depend on am33xx
  2012-10-19  9:59 [PATCH v4 0/5] rtc: omap dt support (for am33xx) Afzal Mohammed
                   ` (2 preceding siblings ...)
  2012-10-19  9:59 ` [PATCH v4 3/5] rtc: omap: dt support Afzal Mohammed
@ 2012-10-19  9:59 ` Afzal Mohammed
  2012-10-19  9:59 ` [PATCH v4 5/5] rtc: omap: Add runtime pm support Afzal Mohammed
  4 siblings, 0 replies; 8+ messages in thread
From: Afzal Mohammed @ 2012-10-19  9:59 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Grant Likely, Rob Herring, Rob Landley, Sekhar Nori,
	Kevin Hilman, Russell King, Alessandro Zummo, devicetree-discuss,
	linux-doc, linux-kernel, davinci-linux-open-source,
	linux-arm-kernel, rtc-linux, Daniel Mack, Afzal Mohammed

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

Signed-off-by: Afzal Mohammed <afzal@ti.com>
Acked-by: Sekhar Nori <nsekhar@ti.com>
---

v2:
 Modify Kconfig help, resolve checkpatch warning

 drivers/rtc/Kconfig | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index 19c03ab..4f7ecb6 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -777,11 +777,13 @@ 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 on chip real time clock
+	  present on TI OMAP1, AM33xx and DA8xx/OMAP-L13x.
+
+	  This driver can also be built as a module, if so, module
+	  will be called rtc-omap.
 
 config HAVE_S3C_RTC
 	bool
-- 
1.7.12


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

* [PATCH v4 5/5] rtc: omap: Add runtime pm support
  2012-10-19  9:59 [PATCH v4 0/5] rtc: omap dt support (for am33xx) Afzal Mohammed
                   ` (3 preceding siblings ...)
  2012-10-19  9:59 ` [PATCH v4 4/5] rtc: omap: depend on am33xx Afzal Mohammed
@ 2012-10-19  9:59 ` Afzal Mohammed
  4 siblings, 0 replies; 8+ messages in thread
From: Afzal Mohammed @ 2012-10-19  9:59 UTC (permalink / raw)
  To: Andrew Morton
  Cc: Grant Likely, Rob Herring, Rob Landley, Sekhar Nori,
	Kevin Hilman, Russell King, Alessandro Zummo, devicetree-discuss,
	linux-doc, linux-kernel, davinci-linux-open-source,
	linux-arm-kernel, rtc-linux, Daniel Mack, Vaibhav Hiremath,
	Afzal Mohammed

From: Vaibhav Hiremath <hvaibhav@ti.com>

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@ti.com: handle error path

Signed-off-by: Vaibhav Hiremath <hvaibhav@ti.com>
Signed-off-by: Afzal Mohammed <afzal@ti.com>
Acked-by: Sekhar Nori <nsekhar@ti.com>
---
 drivers/rtc/rtc-omap.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c
index dff9ff4..6009714 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>
 
@@ -364,6 +365,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_REG);
@@ -448,6 +453,8 @@ fail1:
 fail0:
 	if (id_entry && (id_entry->driver_data & OMAP_RTC_HAS_KICKER))
 		rtc_writel(0, OMAP_RTC_KICK0_REG);
+	pm_runtime_put_sync(&pdev->dev);
+	pm_runtime_disable(&pdev->dev);
 	iounmap(rtc_base);
 fail:
 	release_mem_region(mem->start, resource_size(mem));
@@ -474,6 +481,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_REG);
+
+	/* 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;
@@ -496,11 +508,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.12


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

* Re: [PATCH v4 3/5] rtc: omap: dt support
  2012-10-19  9:59 ` [PATCH v4 3/5] rtc: omap: dt support Afzal Mohammed
@ 2012-10-21 19:51   ` Daniel Mack
  2012-10-29  8:03     ` Afzal Mohammed
  0 siblings, 1 reply; 8+ messages in thread
From: Daniel Mack @ 2012-10-21 19:51 UTC (permalink / raw)
  To: Afzal Mohammed
  Cc: Andrew Morton, Grant Likely, Rob Herring, Rob Landley,
	Sekhar Nori, Kevin Hilman, Russell King, Alessandro Zummo,
	devicetree-discuss, linux-doc, linux-kernel,
	davinci-linux-open-source, linux-arm-kernel, rtc-linux

On 19.10.2012 11:59, Afzal Mohammed wrote:
> enhance rtc-omap driver with DT capability
> 
> Signed-off-by: Afzal Mohammed <afzal@ti.com>
> Acked-by: Sekhar Nori <nsekhar@ti.com>
> ---
> 
> v4:
>  Proper devicetree documentation
> 
> v2:
>  Use compatible as ti,da830-rtc instead of ti,am1808-rtc
> 
>  Documentation/devicetree/bindings/rtc/rtc-omap.txt | 17 +++++++++++++++++
>  drivers/rtc/rtc-omap.c                             | 18 ++++++++++++++++++
>  2 files changed, 35 insertions(+)
>  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..b47aa41
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/rtc/rtc-omap.txt
> @@ -0,0 +1,17 @@
> +TI Real Time Clock
> +
> +Required properties:
> +- compatible: "ti,da830-rtc"
> +- reg: Address range of rtc register set
> +- interrupts: rtc timer, alarm interrupts in order
> +- interrupt-parent: phandle for the interrupt controller
> +
> +Example:
> +
> +rtc@1c23000 {
> +	compatible = "ti,da830-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 d948426..dff9ff4 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>
>  
> @@ -298,6 +300,8 @@ 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
> +
>  static struct platform_device_id omap_rtc_devtype[] = {
>  	{
>  		.name	= DRIVER_NAME,
> @@ -309,12 +313,25 @@ static struct platform_device_id omap_rtc_devtype[] = {
>  };
>  MODULE_DEVICE_TABLE(platform, omap_rtc_devtype);
>  
> +static const struct of_device_id omap_rtc_of_match[] = {
> +	{	.compatible	= "ti,da830-rtc",
> +		.data		= &omap_rtc_devtype[OMAP_RTC_DATA_DA830_IDX],

Wouldn't it make sense to list all the compatible models here? The
advantage of a compatible list is that we can name the models
explicitly, or maybe at least "davinci-rtc". Is there any reason for
this particular name?



Daniel


> +	},
> +	{},
> +};
> +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) {
> @@ -510,6 +527,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,
>  };
> 


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

* Re: [PATCH v4 3/5] rtc: omap: dt support
  2012-10-21 19:51   ` Daniel Mack
@ 2012-10-29  8:03     ` Afzal Mohammed
  0 siblings, 0 replies; 8+ messages in thread
From: Afzal Mohammed @ 2012-10-29  8:03 UTC (permalink / raw)
  To: Daniel Mack
  Cc: Andrew Morton, Grant Likely, Rob Herring, Rob Landley,
	Sekhar Nori, Kevin Hilman, Russell King, Alessandro Zummo,
	devicetree-discuss, linux-doc, linux-kernel,
	davinci-linux-open-source, linux-arm-kernel, rtc-linux

Hi Daniel,

On Monday 22 October 2012 01:21 AM, Daniel Mack wrote:
> On 19.10.2012 11:59, Afzal Mohammed wrote:

>> +static const struct of_device_id omap_rtc_of_match[] = {
>> +	{	.compatible	= "ti,da830-rtc",
>> +		.data		=&omap_rtc_devtype[OMAP_RTC_DATA_DA830_IDX],

> Wouldn't it make sense to list all the compatible models here? The
> advantage of a compatible list is that we can name the models
> explicitly, or maybe at least "davinci-rtc". Is there any reason for
> this particular name?

Exact name followed by compatible models needs to be
specified in DT node only, right ? (when driver for the
first variant can handle it)

And when additional features of newer IP's has to be
leveraged, new entries can be added in the driver
match table.

First known variant of SoC for DT is da830 (exact name),
hence it was used.

Regards
Afzal


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

end of thread, other threads:[~2012-10-29  8:04 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-19  9:59 [PATCH v4 0/5] rtc: omap dt support (for am33xx) Afzal Mohammed
2012-10-19  9:59 ` [PATCH v4 1/5] rtc: omap: kicker mechanism support Afzal Mohammed
2012-10-19  9:59 ` [PATCH v4 2/5] ARM: davinci: remove rtc kicker release Afzal Mohammed
2012-10-19  9:59 ` [PATCH v4 3/5] rtc: omap: dt support Afzal Mohammed
2012-10-21 19:51   ` Daniel Mack
2012-10-29  8:03     ` Afzal Mohammed
2012-10-19  9:59 ` [PATCH v4 4/5] rtc: omap: depend on am33xx Afzal Mohammed
2012-10-19  9:59 ` [PATCH v4 5/5] rtc: omap: Add runtime pm support Afzal Mohammed

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).