All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] rtc: omap: cleanups and dra7x support
@ 2014-05-09 12:09 Sekhar Nori
  2014-05-09 12:09 ` [PATCH 1/3] rtc: omap: remove multiple device id checks Sekhar Nori
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Sekhar Nori @ 2014-05-09 12:09 UTC (permalink / raw)
  To: Alessandro Zummo, Andrew Morton
  Cc: Linux RTC Mailing List, Linux OMAP Mailing List, Sekhar Nori

This patch series does some cleanups
on RTC driver and prepares it for DRA7x
support.

Applies to linux-next of 5th May.

Tested on DRA7x EVM using some additional
patches for platform support. RTC alarm
was not tested (needs IRQ cross bar patches).

Sekhar Nori (3):
  rtc: omap: remove multiple device id checks
  rtc: omap: use BIT() macro
  rtc: omap: add support for enabling 32khz clock

 drivers/rtc/rtc-omap.c |   71 ++++++++++++++++++++++++++++++------------------
 1 file changed, 45 insertions(+), 26 deletions(-)

-- 
1.7.10.1


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

* [PATCH 1/3] rtc: omap: remove multiple device id checks
  2014-05-09 12:09 [PATCH 0/3] rtc: omap: cleanups and dra7x support Sekhar Nori
@ 2014-05-09 12:09 ` Sekhar Nori
  2014-05-09 12:09 ` [PATCH 2/3] rtc: omap: use BIT() macro Sekhar Nori
  2014-05-09 12:09 ` [PATCH 3/3] rtc: omap: add support for enabling 32khz clock Sekhar Nori
  2 siblings, 0 replies; 4+ messages in thread
From: Sekhar Nori @ 2014-05-09 12:09 UTC (permalink / raw)
  To: Alessandro Zummo, Andrew Morton
  Cc: Linux RTC Mailing List, Linux OMAP Mailing List, Sekhar Nori

Remove multiple superfluous device id checks. Since
an id_table is present in the driver probe() should
never encounter an empty device id entry. In case of
OF style match, of_match_device() returns an matching
entry.

For paranoia sake, check for device id entry once and
fail probe() if none is found. This is much better than
checking for it multiple times.

Signed-off-by: Sekhar Nori <nsekhar@ti.com>
---
 drivers/rtc/rtc-omap.c |   13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c
index 26de5f8..70f5149 100644
--- a/drivers/rtc/rtc-omap.c
+++ b/drivers/rtc/rtc-omap.c
@@ -352,6 +352,12 @@ static int __init omap_rtc_probe(struct platform_device *pdev)
 	if (of_id)
 		pdev->id_entry = of_id->data;
 
+	id_entry = platform_get_device_id(pdev);
+	if (!id_entry) {
+		dev_err(&pdev->dev, "no matching device entry\n");
+		return -ENODEV;
+	}
+
 	omap_rtc_timer = platform_get_irq(pdev, 0);
 	if (omap_rtc_timer <= 0) {
 		pr_debug("%s: no update irq?\n", pdev->name);
@@ -373,8 +379,7 @@ static int __init omap_rtc_probe(struct platform_device *pdev)
 	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)) {
+	if (id_entry->driver_data & OMAP_RTC_HAS_KICKER) {
 		rtc_writel(KICK0_VALUE, OMAP_RTC_KICK0_REG);
 		rtc_writel(KICK1_VALUE, OMAP_RTC_KICK1_REG);
 	}
@@ -452,7 +457,7 @@ static int __init omap_rtc_probe(struct platform_device *pdev)
 	return 0;
 
 fail0:
-	if (id_entry && (id_entry->driver_data & OMAP_RTC_HAS_KICKER))
+	if (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);
@@ -469,7 +474,7 @@ static int __exit omap_rtc_remove(struct platform_device *pdev)
 	/* leave rtc running, but disable irqs */
 	rtc_write(0, OMAP_RTC_INTERRUPTS_REG);
 
-	if (id_entry && (id_entry->driver_data & OMAP_RTC_HAS_KICKER))
+	if (id_entry->driver_data & OMAP_RTC_HAS_KICKER)
 		rtc_writel(0, OMAP_RTC_KICK0_REG);
 
 	/* Disable the clock/module */
-- 
1.7.10.1


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

* [PATCH 2/3] rtc: omap: use BIT() macro
  2014-05-09 12:09 [PATCH 0/3] rtc: omap: cleanups and dra7x support Sekhar Nori
  2014-05-09 12:09 ` [PATCH 1/3] rtc: omap: remove multiple device id checks Sekhar Nori
@ 2014-05-09 12:09 ` Sekhar Nori
  2014-05-09 12:09 ` [PATCH 3/3] rtc: omap: add support for enabling 32khz clock Sekhar Nori
  2 siblings, 0 replies; 4+ messages in thread
From: Sekhar Nori @ 2014-05-09 12:09 UTC (permalink / raw)
  To: Alessandro Zummo, Andrew Morton
  Cc: Linux RTC Mailing List, Linux OMAP Mailing List, Sekhar Nori

Use BIT() macro for RTC_HAS_<FEATURE> defines
instead of hand-writing bit masks.

Use BIT() macros for register bit field
definitions.

While at it, fix indentation done using spaces.

No functional change in this patch.

Signed-off-by: Sekhar Nori <nsekhar@ti.com>
---
 drivers/rtc/rtc-omap.c |   42 +++++++++++++++++++++---------------------
 1 file changed, 21 insertions(+), 21 deletions(-)

diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c
index 70f5149..734e408 100644
--- a/drivers/rtc/rtc-omap.c
+++ b/drivers/rtc/rtc-omap.c
@@ -73,43 +73,43 @@
 #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)
-#define OMAP_RTC_CTRL_SET_32_COUNTER	(1<<5)
-#define OMAP_RTC_CTRL_TEST		(1<<4)
-#define OMAP_RTC_CTRL_MODE_12_24	(1<<3)
-#define OMAP_RTC_CTRL_AUTO_COMP		(1<<2)
-#define OMAP_RTC_CTRL_ROUND_30S		(1<<1)
-#define OMAP_RTC_CTRL_STOP		(1<<0)
+#define OMAP_RTC_CTRL_SPLIT		BIT(7)
+#define OMAP_RTC_CTRL_DISABLE		BIT(6)
+#define OMAP_RTC_CTRL_SET_32_COUNTER	BIT(5)
+#define OMAP_RTC_CTRL_TEST		BIT(4)
+#define OMAP_RTC_CTRL_MODE_12_24	BIT(3)
+#define OMAP_RTC_CTRL_AUTO_COMP		BIT(2)
+#define OMAP_RTC_CTRL_ROUND_30S		BIT(1)
+#define OMAP_RTC_CTRL_STOP		BIT(0)
 
 /* OMAP_RTC_STATUS_REG bit fields: */
-#define OMAP_RTC_STATUS_POWER_UP        (1<<7)
-#define OMAP_RTC_STATUS_ALARM           (1<<6)
-#define OMAP_RTC_STATUS_1D_EVENT        (1<<5)
-#define OMAP_RTC_STATUS_1H_EVENT        (1<<4)
-#define OMAP_RTC_STATUS_1M_EVENT        (1<<3)
-#define OMAP_RTC_STATUS_1S_EVENT        (1<<2)
-#define OMAP_RTC_STATUS_RUN             (1<<1)
-#define OMAP_RTC_STATUS_BUSY            (1<<0)
+#define OMAP_RTC_STATUS_POWER_UP	BIT(7)
+#define OMAP_RTC_STATUS_ALARM		BIT(6)
+#define OMAP_RTC_STATUS_1D_EVENT	BIT(5)
+#define OMAP_RTC_STATUS_1H_EVENT	BIT(4)
+#define OMAP_RTC_STATUS_1M_EVENT	BIT(3)
+#define OMAP_RTC_STATUS_1S_EVENT	BIT(2)
+#define OMAP_RTC_STATUS_RUN		BIT(1)
+#define OMAP_RTC_STATUS_BUSY		BIT(0)
 
 /* OMAP_RTC_INTERRUPTS_REG bit fields: */
-#define OMAP_RTC_INTERRUPTS_IT_ALARM    (1<<3)
-#define OMAP_RTC_INTERRUPTS_IT_TIMER    (1<<2)
+#define OMAP_RTC_INTERRUPTS_IT_ALARM	BIT(3)
+#define OMAP_RTC_INTERRUPTS_IT_TIMER	BIT(2)
 
 /* OMAP_RTC_IRQWAKEEN bit fields: */
-#define OMAP_RTC_IRQWAKEEN_ALARM_WAKEEN    (1<<1)
+#define OMAP_RTC_IRQWAKEEN_ALARM_WAKEEN	BIT(1)
 
 /* OMAP_RTC_KICKER values */
 #define	KICK0_VALUE			0x83e70b13
 #define	KICK1_VALUE			0x95a4f1e0
 
-#define	OMAP_RTC_HAS_KICKER		0x1
+#define	OMAP_RTC_HAS_KICKER		BIT(0)
 
 /*
  * Few RTC IP revisions has special WAKE-EN Register to enable Wakeup
  * generation for event Alarm.
  */
-#define	OMAP_RTC_HAS_IRQWAKEEN		0x2
+#define	OMAP_RTC_HAS_IRQWAKEEN		BIT(1)
 
 static void __iomem	*rtc_base;
 
-- 
1.7.10.1


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

* [PATCH 3/3] rtc: omap: add support for enabling 32khz clock
  2014-05-09 12:09 [PATCH 0/3] rtc: omap: cleanups and dra7x support Sekhar Nori
  2014-05-09 12:09 ` [PATCH 1/3] rtc: omap: remove multiple device id checks Sekhar Nori
  2014-05-09 12:09 ` [PATCH 2/3] rtc: omap: use BIT() macro Sekhar Nori
@ 2014-05-09 12:09 ` Sekhar Nori
  2 siblings, 0 replies; 4+ messages in thread
From: Sekhar Nori @ 2014-05-09 12:09 UTC (permalink / raw)
  To: Alessandro Zummo, Andrew Morton
  Cc: Linux RTC Mailing List, Linux OMAP Mailing List, Sekhar Nori

Newer versions of OMAP RTC IP such as those found
in AM335x and DRA7x need an explicit enable of
32khz functional clock which ticks the RTC.

AM335x support was working so far because of settings
done in U-Boot. However, the DRA7x U-Boot does no
such enable of 32khz clock and this patch is need
to get the RTC to work on DRA7x at least. In general,
it is better to not depend on settings done in U-Boot.

Thanks to Lokesh Vutla for noticing this.

Signed-off-by: Sekhar Nori <nsekhar@ti.com>
---
 drivers/rtc/rtc-omap.c |   16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c
index 734e408..03bce13 100644
--- a/drivers/rtc/rtc-omap.c
+++ b/drivers/rtc/rtc-omap.c
@@ -96,6 +96,9 @@
 #define OMAP_RTC_INTERRUPTS_IT_ALARM	BIT(3)
 #define OMAP_RTC_INTERRUPTS_IT_TIMER	BIT(2)
 
+/* OMAP_RTC_OSC_REG bit fields: */
+#define OMAP_RTC_OSC_32KCLK_EN		BIT(6)
+
 /* OMAP_RTC_IRQWAKEEN bit fields: */
 #define OMAP_RTC_IRQWAKEEN_ALARM_WAKEEN	BIT(1)
 
@@ -111,6 +114,12 @@
  */
 #define	OMAP_RTC_HAS_IRQWAKEEN		BIT(1)
 
+/*
+ * Some RTC IP revisions (like those in AM335x and DRA7x) need
+ * the 32KHz clock to be explicitly enabled.
+ */
+#define OMAP_RTC_HAS_32KCLK_EN		BIT(2)
+
 static void __iomem	*rtc_base;
 
 #define rtc_read(addr)		readb(rtc_base + (addr))
@@ -319,7 +328,8 @@ static struct platform_device_id omap_rtc_devtype[] = {
 	},
 	[OMAP_RTC_DATA_AM3352_IDX] = {
 		.name	= "am3352-rtc",
-		.driver_data = OMAP_RTC_HAS_KICKER | OMAP_RTC_HAS_IRQWAKEEN,
+		.driver_data = OMAP_RTC_HAS_KICKER | OMAP_RTC_HAS_IRQWAKEEN |
+			       OMAP_RTC_HAS_32KCLK_EN,
 	},
 	[OMAP_RTC_DATA_DA830_IDX] = {
 		.name	= "da830-rtc",
@@ -398,6 +408,10 @@ static int __init omap_rtc_probe(struct platform_device *pdev)
 	 */
 	rtc_write(0, OMAP_RTC_INTERRUPTS_REG);
 
+	/* enable RTC functional clock */
+	if (id_entry->driver_data & OMAP_RTC_HAS_32KCLK_EN)
+		rtc_writel(OMAP_RTC_OSC_32KCLK_EN, OMAP_RTC_OSC_REG);
+
 	/* clear old status */
 	reg = rtc_read(OMAP_RTC_STATUS_REG);
 	if (reg & (u8) OMAP_RTC_STATUS_POWER_UP) {
-- 
1.7.10.1


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

end of thread, other threads:[~2014-05-09 12:10 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-05-09 12:09 [PATCH 0/3] rtc: omap: cleanups and dra7x support Sekhar Nori
2014-05-09 12:09 ` [PATCH 1/3] rtc: omap: remove multiple device id checks Sekhar Nori
2014-05-09 12:09 ` [PATCH 2/3] rtc: omap: use BIT() macro Sekhar Nori
2014-05-09 12:09 ` [PATCH 3/3] rtc: omap: add support for enabling 32khz clock Sekhar Nori

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.