Re: [PATCH v2] rtc: make rtc-omap driver ioremap its register space
On Wed, Sep 16, 2009 at 05:04:58PM -0700, Mark A. Greer wrote: From: Mark A. Greer mgr...@mvista.com The rtc-omap driver currently assumes that the rtc's registers are at a fixed address and already mapped into virtual memory space. Remove those assumptions so the same driver can be used for similar devices that reside at different physical addresses (e.g., TI's DA8xx/OMAP-L13x SoC's). Also allow the possibility for the timer and alarm interrupts to use the same IRQ. Signed-off-by: Mark A. Greer mgr...@mvista.com CC: David Brownell davi...@pacbell.net --- Ping? Just wondering if this patch was noticed. FYI, the following were added by subsequent emails: Acked-by: David Brownell dbrown...@users.sourceforge.net Acked-by: Kevin Hilman khil...@deeprootsystems.com Acked-by: Tony Lindgren t...@atomide.com Thanks, Mark -- -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [rtc-linux] Re: [PATCH v2] rtc: make rtc-omap driver ioremap its register space
On Tue, 13 Oct 2009 16:00:23 -0700 Mark A. Greer mgr...@mvista.com wrote: Ping? Just wondering if this patch was noticed. noticed. it's in the queue for the next submission set, which means after upstream merges all of current pending patches (which are now in -mm) . -- Best regards, Alessandro Zummo, Tower Technologies - Torino, Italy http://www.towertech.it -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2] rtc: make rtc-omap driver ioremap its register space
Mark A. Greer mgr...@mvista.com writes: From: Mark A. Greer mgr...@mvista.com The rtc-omap driver currently assumes that the rtc's registers are at a fixed address and already mapped into virtual memory space. Remove those assumptions so the same driver can be used for similar devices that reside at different physical addresses (e.g., TI's DA8xx/OMAP-L13x SoC's). Also allow the possibility for the timer and alarm interrupts to use the same IRQ. Signed-off-by: Mark A. Greer mgr...@mvista.com CC: David Brownell davi...@pacbell.net Acked-by: Kevin Hilman khil...@deeprootsystems.com for relevance to davinci platforms. Kevin --- Sorry for the cross-posting but this is relevant to the different lists. This patch was tested on a da830 and a da850. It was only compiled for an omap1 platform (don't have the hardware) but it should be low risk. Note that the platform_device data is already set up in arch/arm/mach-omap1/devices.c so it those platforms should Just Work(tm). drivers/rtc/Kconfig|7 --- drivers/rtc/rtc-omap.c | 47 ++- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 81adbdb..f06e885 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -539,10 +539,11 @@ comment on-CPU RTC drivers config RTC_DRV_OMAP tristate TI OMAP1 - depends on ARCH_OMAP15XX || ARCH_OMAP16XX || ARCH_OMAP730 + depends on ARCH_OMAP15XX || ARCH_OMAP16XX || ARCH_OMAP730 || ARCH_DAVINCI_DA8XX help - Say yes here to support the real time clock on TI OMAP1 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 and + DA8xx/OMAP-L13x chips. This driver can also be built as a + module called rtc-omap. config RTC_DRV_S3C tristate Samsung S3C series SoC RTC diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c index bd1ce8e..aa418d5 100644 --- a/drivers/rtc/rtc-omap.c +++ b/drivers/rtc/rtc-omap.c @@ -87,9 +87,10 @@ #define OMAP_RTC_INTERRUPTS_IT_ALARM(13) #define OMAP_RTC_INTERRUPTS_IT_TIMER(12) +static void __iomem *rtc_base; -#define rtc_read(addr) omap_readb(OMAP_RTC_BASE + (addr)) -#define rtc_write(val, addr) omap_writeb(val, OMAP_RTC_BASE + (addr)) +#define rtc_read(addr) __raw_readb(rtc_base + (addr)) +#define rtc_write(val, addr) __raw_writeb(val, rtc_base + (addr)) /* we rely on the rtc framework to handle locking (rtc-ops_lock), @@ -330,32 +331,31 @@ static int __init omap_rtc_probe(struct platform_device *pdev) return -ENOENT; } - /* NOTE: using static mapping for RTC registers */ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (res res-start != OMAP_RTC_BASE) { - pr_debug(%s: RTC registers at %08x, expected %08x\n, - pdev-name, (unsigned) res-start, OMAP_RTC_BASE); + if (!res) { + pr_debug(%s: RTC resource data missing\n, pdev-name); return -ENOENT; } - if (res) - mem = request_mem_region(res-start, - res-end - res-start + 1, - pdev-name); - else - mem = NULL; + mem = request_mem_region(res-start, resource_size(res), pdev-name); if (!mem) { pr_debug(%s: RTC registers at %08x are not free\n, - pdev-name, OMAP_RTC_BASE); + pdev-name, res-start); return -EBUSY; } + rtc_base = ioremap(res-start, resource_size(res)); + if (!rtc_base) { + pr_debug(%s: RTC registers can't be mapped\n, pdev-name); + goto fail; + } + rtc = rtc_device_register(pdev-name, pdev-dev, omap_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) { pr_debug(%s: can't register RTC device, err %ld\n, pdev-name, PTR_ERR(rtc)); - goto fail; + goto fail0; } platform_set_drvdata(pdev, rtc); dev_set_drvdata(rtc-dev, mem); @@ -380,13 +380,14 @@ static int __init omap_rtc_probe(struct platform_device *pdev) dev_name(rtc-dev), rtc)) { pr_debug(%s: RTC timer interrupt IRQ%d already claimed\n, pdev-name, omap_rtc_timer); - goto fail0; + goto fail1; } - if (request_irq(omap_rtc_alarm, rtc_irq, IRQF_DISABLED, - dev_name(rtc-dev), rtc)) { + if ((omap_rtc_timer != omap_rtc_alarm) + (request_irq(omap_rtc_alarm, rtc_irq, IRQF_DISABLED, + dev_name(rtc-dev), rtc))) { pr_debug(%s: RTC alarm interrupt IRQ%d already claimed\n, pdev-name,
Re: [PATCH v2] rtc: make rtc-omap driver ioremap its register space
* Kevin Hilman khil...@deeprootsystems.com [090922 10:27]: Mark A. Greer mgr...@mvista.com writes: From: Mark A. Greer mgr...@mvista.com The rtc-omap driver currently assumes that the rtc's registers are at a fixed address and already mapped into virtual memory space. Remove those assumptions so the same driver can be used for similar devices that reside at different physical addresses (e.g., TI's DA8xx/OMAP-L13x SoC's). Also allow the possibility for the timer and alarm interrupts to use the same IRQ. Signed-off-by: Mark A. Greer mgr...@mvista.com CC: David Brownell davi...@pacbell.net Acked-by: Kevin Hilman khil...@deeprootsystems.com for relevance to davinci platforms. Acked-by: Tony Lindgren t...@atomide.com Kevin --- Sorry for the cross-posting but this is relevant to the different lists. This patch was tested on a da830 and a da850. It was only compiled for an omap1 platform (don't have the hardware) but it should be low risk. Note that the platform_device data is already set up in arch/arm/mach-omap1/devices.c so it those platforms should Just Work(tm). drivers/rtc/Kconfig|7 --- drivers/rtc/rtc-omap.c | 47 ++- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 81adbdb..f06e885 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -539,10 +539,11 @@ comment on-CPU RTC drivers config RTC_DRV_OMAP tristate TI OMAP1 - depends on ARCH_OMAP15XX || ARCH_OMAP16XX || ARCH_OMAP730 + depends on ARCH_OMAP15XX || ARCH_OMAP16XX || ARCH_OMAP730 || ARCH_DAVINCI_DA8XX help - Say yes here to support the real time clock on TI OMAP1 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 and + DA8xx/OMAP-L13x chips. This driver can also be built as a + module called rtc-omap. config RTC_DRV_S3C tristate Samsung S3C series SoC RTC diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c index bd1ce8e..aa418d5 100644 --- a/drivers/rtc/rtc-omap.c +++ b/drivers/rtc/rtc-omap.c @@ -87,9 +87,10 @@ #define OMAP_RTC_INTERRUPTS_IT_ALARM(13) #define OMAP_RTC_INTERRUPTS_IT_TIMER(12) +static void __iomem*rtc_base; -#define rtc_read(addr) omap_readb(OMAP_RTC_BASE + (addr)) -#define rtc_write(val, addr) omap_writeb(val, OMAP_RTC_BASE + (addr)) +#define rtc_read(addr) __raw_readb(rtc_base + (addr)) +#define rtc_write(val, addr) __raw_writeb(val, rtc_base + (addr)) /* we rely on the rtc framework to handle locking (rtc-ops_lock), @@ -330,32 +331,31 @@ static int __init omap_rtc_probe(struct platform_device *pdev) return -ENOENT; } - /* NOTE: using static mapping for RTC registers */ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (res res-start != OMAP_RTC_BASE) { - pr_debug(%s: RTC registers at %08x, expected %08x\n, - pdev-name, (unsigned) res-start, OMAP_RTC_BASE); + if (!res) { + pr_debug(%s: RTC resource data missing\n, pdev-name); return -ENOENT; } - if (res) - mem = request_mem_region(res-start, - res-end - res-start + 1, - pdev-name); - else - mem = NULL; + mem = request_mem_region(res-start, resource_size(res), pdev-name); if (!mem) { pr_debug(%s: RTC registers at %08x are not free\n, - pdev-name, OMAP_RTC_BASE); + pdev-name, res-start); return -EBUSY; } + rtc_base = ioremap(res-start, resource_size(res)); + if (!rtc_base) { + pr_debug(%s: RTC registers can't be mapped\n, pdev-name); + goto fail; + } + rtc = rtc_device_register(pdev-name, pdev-dev, omap_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) { pr_debug(%s: can't register RTC device, err %ld\n, pdev-name, PTR_ERR(rtc)); - goto fail; + goto fail0; } platform_set_drvdata(pdev, rtc); dev_set_drvdata(rtc-dev, mem); @@ -380,13 +380,14 @@ static int __init omap_rtc_probe(struct platform_device *pdev) dev_name(rtc-dev), rtc)) { pr_debug(%s: RTC timer interrupt IRQ%d already claimed\n, pdev-name, omap_rtc_timer); - goto fail0; + goto fail1; } - if (request_irq(omap_rtc_alarm, rtc_irq, IRQF_DISABLED, - dev_name(rtc-dev), rtc)) { + if ((omap_rtc_timer != omap_rtc_alarm) + (request_irq(omap_rtc_alarm, rtc_irq, IRQF_DISABLED, +
[PATCH v2] rtc: make rtc-omap driver ioremap its register space
From: Mark A. Greer mgr...@mvista.com The rtc-omap driver currently assumes that the rtc's registers are at a fixed address and already mapped into virtual memory space. Remove those assumptions so the same driver can be used for similar devices that reside at different physical addresses (e.g., TI's DA8xx/OMAP-L13x SoC's). Also allow the possibility for the timer and alarm interrupts to use the same IRQ. Signed-off-by: Mark A. Greer mgr...@mvista.com CC: David Brownell davi...@pacbell.net --- Sorry for the cross-posting but this is relevant to the different lists. This patch was tested on a da830 and a da850. It was only compiled for an omap1 platform (don't have the hardware) but it should be low risk. Note that the platform_device data is already set up in arch/arm/mach-omap1/devices.c so it those platforms should Just Work(tm). drivers/rtc/Kconfig|7 --- drivers/rtc/rtc-omap.c | 47 ++- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 81adbdb..f06e885 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -539,10 +539,11 @@ comment on-CPU RTC drivers config RTC_DRV_OMAP tristate TI OMAP1 - depends on ARCH_OMAP15XX || ARCH_OMAP16XX || ARCH_OMAP730 + depends on ARCH_OMAP15XX || ARCH_OMAP16XX || ARCH_OMAP730 || ARCH_DAVINCI_DA8XX help - Say yes here to support the real time clock on TI OMAP1 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 and + DA8xx/OMAP-L13x chips. This driver can also be built as a + module called rtc-omap. config RTC_DRV_S3C tristate Samsung S3C series SoC RTC diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c index bd1ce8e..aa418d5 100644 --- a/drivers/rtc/rtc-omap.c +++ b/drivers/rtc/rtc-omap.c @@ -87,9 +87,10 @@ #define OMAP_RTC_INTERRUPTS_IT_ALARM(13) #define OMAP_RTC_INTERRUPTS_IT_TIMER(12) +static void __iomem*rtc_base; -#define rtc_read(addr) omap_readb(OMAP_RTC_BASE + (addr)) -#define rtc_write(val, addr) omap_writeb(val, OMAP_RTC_BASE + (addr)) +#define rtc_read(addr) __raw_readb(rtc_base + (addr)) +#define rtc_write(val, addr) __raw_writeb(val, rtc_base + (addr)) /* we rely on the rtc framework to handle locking (rtc-ops_lock), @@ -330,32 +331,31 @@ static int __init omap_rtc_probe(struct platform_device *pdev) return -ENOENT; } - /* NOTE: using static mapping for RTC registers */ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (res res-start != OMAP_RTC_BASE) { - pr_debug(%s: RTC registers at %08x, expected %08x\n, - pdev-name, (unsigned) res-start, OMAP_RTC_BASE); + if (!res) { + pr_debug(%s: RTC resource data missing\n, pdev-name); return -ENOENT; } - if (res) - mem = request_mem_region(res-start, - res-end - res-start + 1, - pdev-name); - else - mem = NULL; + mem = request_mem_region(res-start, resource_size(res), pdev-name); if (!mem) { pr_debug(%s: RTC registers at %08x are not free\n, - pdev-name, OMAP_RTC_BASE); + pdev-name, res-start); return -EBUSY; } + rtc_base = ioremap(res-start, resource_size(res)); + if (!rtc_base) { + pr_debug(%s: RTC registers can't be mapped\n, pdev-name); + goto fail; + } + rtc = rtc_device_register(pdev-name, pdev-dev, omap_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) { pr_debug(%s: can't register RTC device, err %ld\n, pdev-name, PTR_ERR(rtc)); - goto fail; + goto fail0; } platform_set_drvdata(pdev, rtc); dev_set_drvdata(rtc-dev, mem); @@ -380,13 +380,14 @@ static int __init omap_rtc_probe(struct platform_device *pdev) dev_name(rtc-dev), rtc)) { pr_debug(%s: RTC timer interrupt IRQ%d already claimed\n, pdev-name, omap_rtc_timer); - goto fail0; + goto fail1; } - if (request_irq(omap_rtc_alarm, rtc_irq, IRQF_DISABLED, - dev_name(rtc-dev), rtc)) { + if ((omap_rtc_timer != omap_rtc_alarm) + (request_irq(omap_rtc_alarm, rtc_irq, IRQF_DISABLED, + dev_name(rtc-dev), rtc))) { pr_debug(%s: RTC alarm interrupt IRQ%d already claimed\n, pdev-name, omap_rtc_alarm); - goto fail1; + goto fail2; } /* On boards with split power, RTC_ON_NOFF won't
Re: [PATCH v2] rtc: make rtc-omap driver ioremap its register space
On Wednesday 16 September 2009, Mark A. Greer wrote: From: Mark A. Greer mgr...@mvista.com The rtc-omap driver currently assumes that the rtc's registers are at a fixed address and already mapped into virtual memory space. Remove those assumptions so the same driver can be used for similar devices that reside at different physical addresses (e.g., TI's DA8xx/OMAP-L13x SoC's). Also allow the possibility for the timer and alarm interrupts to use the same IRQ. Signed-off-by: Mark A. Greer mgr...@mvista.com CC: David Brownell davi...@pacbell.net Acked-by: David Brownell dbrown...@users.sourceforge.net ... but not tested on OMAP1 (e.g. OSK5912, H2). --- Sorry for the cross-posting but this is relevant to the different lists. This patch was tested on a da830 and a da850. It was only compiled for an omap1 platform (don't have the hardware) but it should be low risk. Note that the platform_device data is already set up in arch/arm/mach-omap1/devices.c so it those platforms should Just Work(tm). drivers/rtc/Kconfig|7 --- drivers/rtc/rtc-omap.c | 47 ++- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 81adbdb..f06e885 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -539,10 +539,11 @@ comment on-CPU RTC drivers config RTC_DRV_OMAP tristate TI OMAP1 - depends on ARCH_OMAP15XX || ARCH_OMAP16XX || ARCH_OMAP730 + depends on ARCH_OMAP15XX || ARCH_OMAP16XX || ARCH_OMAP730 || ARCH_DAVINCI_DA8XX help - Say yes here to support the real time clock on TI OMAP1 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 and + DA8xx/OMAP-L13x chips. This driver can also be built as a + module called rtc-omap. config RTC_DRV_S3C tristate Samsung S3C series SoC RTC diff --git a/drivers/rtc/rtc-omap.c b/drivers/rtc/rtc-omap.c index bd1ce8e..aa418d5 100644 --- a/drivers/rtc/rtc-omap.c +++ b/drivers/rtc/rtc-omap.c @@ -87,9 +87,10 @@ #define OMAP_RTC_INTERRUPTS_IT_ALARM(13) #define OMAP_RTC_INTERRUPTS_IT_TIMER(12) +static void __iomem *rtc_base; -#define rtc_read(addr) omap_readb(OMAP_RTC_BASE + (addr)) -#define rtc_write(val, addr) omap_writeb(val, OMAP_RTC_BASE + (addr)) +#define rtc_read(addr) __raw_readb(rtc_base + (addr)) +#define rtc_write(val, addr) __raw_writeb(val, rtc_base + (addr)) /* we rely on the rtc framework to handle locking (rtc-ops_lock), @@ -330,32 +331,31 @@ static int __init omap_rtc_probe(struct platform_device *pdev) return -ENOENT; } - /* NOTE: using static mapping for RTC registers */ res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (res res-start != OMAP_RTC_BASE) { - pr_debug(%s: RTC registers at %08x, expected %08x\n, - pdev-name, (unsigned) res-start, OMAP_RTC_BASE); + if (!res) { + pr_debug(%s: RTC resource data missing\n, pdev-name); return -ENOENT; } - if (res) - mem = request_mem_region(res-start, - res-end - res-start + 1, - pdev-name); - else - mem = NULL; + mem = request_mem_region(res-start, resource_size(res), pdev-name); if (!mem) { pr_debug(%s: RTC registers at %08x are not free\n, - pdev-name, OMAP_RTC_BASE); + pdev-name, res-start); return -EBUSY; } + rtc_base = ioremap(res-start, resource_size(res)); + if (!rtc_base) { + pr_debug(%s: RTC registers can't be mapped\n, pdev-name); + goto fail; + } + rtc = rtc_device_register(pdev-name, pdev-dev, omap_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) { pr_debug(%s: can't register RTC device, err %ld\n, pdev-name, PTR_ERR(rtc)); - goto fail; + goto fail0; } platform_set_drvdata(pdev, rtc); dev_set_drvdata(rtc-dev, mem); @@ -380,13 +380,14 @@ static int __init omap_rtc_probe(struct platform_device *pdev) dev_name(rtc-dev), rtc)) { pr_debug(%s: RTC timer interrupt IRQ%d already claimed\n, pdev-name, omap_rtc_timer); - goto fail0; + goto fail1; } - if (request_irq(omap_rtc_alarm, rtc_irq, IRQF_DISABLED, - dev_name(rtc-dev), rtc)) { + if ((omap_rtc_timer != omap_rtc_alarm) + (request_irq(omap_rtc_alarm, rtc_irq, IRQF_DISABLED, + dev_name(rtc-dev), rtc))) { pr_debug(%s: RTC alarm interrupt IRQ%d already claimed\n,