From patchwork Fri Feb 20 00:09:49 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hartley Sweeten X-Patchwork-Id: 23462 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from mail-qy0-f60.google.com (mail-qy0-f60.google.com [209.85.221.60]) by ozlabs.org (Postfix) with ESMTP id 08104DDDA9 for ; Fri, 20 Feb 2009 11:10:32 +1100 (EST) Received: by qyk20 with SMTP id 20so1621334qyk.1 for ; Thu, 19 Feb 2009 16:10:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=beta; h=domainkey-signature:received:received:x-sender:x-apparently-to :received:received:received-spf:authentication-results:received :received:received:x-mimeole:content-class:mime-version:content-type :content-transfer-encoding:subject:date:message-id:x-ms-has-attach :x-ms-tnef-correlator:thread-topic:thread-index:from:to :x-originalarrivaltime:reply-to:sender:precedence:x-google-loop :mailing-list:list-id:list-post:list-help:list-unsubscribe :x-beenthere-env:x-beenthere; bh=xt7v3b18BsEdSOPtqw4LrKAX1uG+0i1nhwBzOZhReVI=; b=VyBsLqxZHRX2BJgK9yj5DdSmcPaiBSX6NOfcKa3I1+NPhXCKj286sHtI4wVB3p+mpa h0IAr7Jwj4j+2S4uU68Pi/rx0ClqRCNW/oh0SIni5ipQXyar1pCKGCsJ/5PdpdBe3NvM ET065pv5fuC9Ngp5X0EqSc3FQYQdhKjOOPuSk= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlegroups.com; s=beta; h=x-sender:x-apparently-to:received-spf:authentication-results :x-mimeole:content-class:mime-version:content-type :content-transfer-encoding:subject:date:message-id:x-ms-has-attach :x-ms-tnef-correlator:thread-topic:thread-index:from:to :x-originalarrivaltime:reply-to:sender:precedence:x-google-loop :mailing-list:list-id:list-post:list-help:list-unsubscribe :x-beenthere-env:x-beenthere; b=5F7UXNKFiNcqhUEZN3ltOSDu0wLmhLFrV2UgCPzAhIJgWw+y2bIFlen6KDgYK6QYTd YTcgZQZYIIGL5h9GERV/naLv8jiDjMbGN56N9kxe9a1C/romA8lwn5XH9oAdT3U94MnH DiMgkUyU/TzAXwvpYKiNycUgHgbfIs+BtFWsg= Received: by 10.229.80.7 with SMTP id r7mr18580qck.25.1235088627696; Thu, 19 Feb 2009 16:10:27 -0800 (PST) Received: by 10.176.122.11 with SMTP id u11gr1911yqc.0; Thu, 19 Feb 2009 16:10:27 -0800 (PST) X-Sender: hartleys@visionengravers.com X-Apparently-To: rtc-linux@googlegroups.com Received: by 10.229.96.144 with SMTP id h16mr156933qcn.10.1235088626497; Thu, 19 Feb 2009 16:10:26 -0800 (PST) Received: from exprod6og116.obsmtp.com (exprod6og116.obsmtp.com [64.18.1.37]) by mx.google.com with SMTP id 14si526867gxk.7.2009.02.19.16.10.25; Thu, 19 Feb 2009 16:10:26 -0800 (PST) Received-SPF: neutral (google.com: 64.18.1.37 is neither permitted nor denied by best guess record for domain of hartleys@visionengravers.com) client-ip=64.18.1.37; Authentication-Results: mx.google.com; spf=neutral (google.com: 64.18.1.37 is neither permitted nor denied by best guess record for domain of hartleys@visionengravers.com) smtp.mail=hartleys@visionengravers.com Received: from source ([63.240.6.3]) (using TLSv1) by exprod6ob116.postini.com ([64.18.5.12]) with SMTP ID DSNKSZ308WF+FdAwna7mSOt7pAe1O7ybADvj@postini.com; Thu, 19 Feb 2009 16:10:26 PST Received: from d01smtp07.Mi8.com ([172.16.1.114]) by Outbound02.Mi8.com with Microsoft SMTPSVC(6.0.3790.3959); Thu, 19 Feb 2009 19:10:25 -0500 Received: from mi8nycmail19.Mi8.com ([172.16.7.219]) by d01smtp07.Mi8.com with Microsoft SMTPSVC(6.0.3790.3959); Thu, 19 Feb 2009 19:10:25 -0500 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message Mime-Version: 1.0 Subject: [rtc-linux] [PATCH] ep93xx-rtc: use ioremap'ed addresses Date: Thu, 19 Feb 2009 19:09:49 -0500 Message-ID: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [PATCH] ep93xx-rtc: use ioremap'ed addresses Thread-Index: AcmS74to1rvBtW9BQiqd54x3g4psgA== From: "hartleys" To: , "arm kernel" X-OriginalArrivalTime: 20 Feb 2009 00:10:25.0463 (UTC) FILETIME=[A11CD470:01C992EF] Reply-To: rtc-linux@googlegroups.com Sender: rtc-linux@googlegroups.com Precedence: bulk X-Google-Loop: groups Mailing-List: list rtc-linux@googlegroups.com; contact rtc-linux+owner@googlegroups.com List-Id: List-Post: List-Help: List-Unsubscribe: , X-BeenThere-Env: rtc-linux@googlegroups.com X-BeenThere: rtc-linux@googlegroups.com This patch updates the rtc-ep93xx.c driver to use ioremap'ed addresses. This removes the dependency on and properly reports the memory addresses used by the driver in /proc/iomem. In addition, ep93xx_rtc_init() is updated to use platform_driver_probe() instead of platform_driver_register(). Signed-off-by: H Hartley Sweeten --- *preload = comp & 0xffff; @@ -37,7 +41,8 @@ static int ep93xx_get_swcomp(struct device *dev, unsigned short *preload, static int ep93xx_rtc_read_time(struct device *dev, struct rtc_time *tm) { - unsigned long time = __raw_readl(EP93XX_RTC_DATA); + void __iomem *mmio_base = dev->platform_data; + unsigned long time = __raw_readl(mmio_base + EP93XX_RTC_DATA); rtc_time_to_tm(time, tm); return 0; @@ -45,7 +50,9 @@ static int ep93xx_rtc_read_time(struct device *dev, struct rtc_time *tm) static int ep93xx_rtc_set_mmss(struct device *dev, unsigned long secs) { - __raw_writel(secs + 1, EP93XX_RTC_LOAD); + void __iomem *mmio_base = dev->platform_data; + + __raw_writel(secs + 1, mmio_base + EP93XX_RTC_LOAD); return 0; } @@ -92,11 +99,32 @@ static DEVICE_ATTR(comp_delete, S_IRUGO, ep93xx_sysfs_show_comp_delete, NULL); static int __devinit ep93xx_rtc_probe(struct platform_device *dev) { - struct rtc_device *rtc = rtc_device_register("ep93xx", - &dev->dev, &ep93xx_rtc_ops, THIS_MODULE); + struct resource *res; + void __iomem *mmio_base; + struct rtc_device *rtc; + int err; + + res = platform_get_resource(dev, IORESOURCE_MEM, 0); + if (res == NULL) + return -ENXIO; + + res = request_mem_region(res->start, resource_size(res), dev->name); + if (res == NULL) + return -EBUSY; + + mmio_base = ioremap(res->start, resource_size(res)); + if (mmio_base == NULL) { + err = -ENXIO; + goto fail; + } + dev->dev.platform_data = mmio_base; + + rtc = rtc_device_register(dev->name, + &dev->dev, &ep93xx_rtc_ops, THIS_MODULE); if (IS_ERR(rtc)) { - return PTR_ERR(rtc); + err = PTR_ERR(rtc); + goto fail; } platform_set_drvdata(dev, rtc); @@ -105,14 +133,29 @@ static int __devinit ep93xx_rtc_probe(struct platform_device *dev) device_create_file(&dev->dev, &dev_attr_comp_delete); return 0; + +fail: + if (mmio_base) { + iounmap(mmio_base); + dev->dev.platform_data = NULL; + } + release_mem_region(res->start, resource_size(res)); + return err; } static int __devexit ep93xx_rtc_remove(struct platform_device *dev) { struct rtc_device *rtc = platform_get_drvdata(dev); + void __iomem *mmio_base = dev->dev.platform_data; + struct resource *res; + + rtc_device_unregister(rtc); + + iounmap(mmio_base); + dev->dev.platform_data = NULL; - if (rtc) - rtc_device_unregister(rtc); + res = platform_get_resource(dev, IORESOURCE_MEM, 0); + release_mem_region(res->start, resource_size(res)); platform_set_drvdata(dev, NULL); @@ -122,23 +165,22 @@ static int __devexit ep93xx_rtc_remove(struct platform_device *dev) /* work with hotplug and coldplug */ MODULE_ALIAS("platform:ep93xx-rtc"); -static struct platform_driver ep93xx_rtc_platform_driver = { +static struct platform_driver ep93xx_rtcdrv = { .driver = { .name = "ep93xx-rtc", .owner = THIS_MODULE, }, - .probe = ep93xx_rtc_probe, .remove = __devexit_p(ep93xx_rtc_remove), }; static int __init ep93xx_rtc_init(void) { - return platform_driver_register(&ep93xx_rtc_platform_driver); + return platform_driver_probe(&ep93xx_rtcdrv, ep93xx_rtc_probe); } static void __exit ep93xx_rtc_exit(void) { - platform_driver_unregister(&ep93xx_rtc_platform_driver); + platform_driver_unregister(&ep93xx_rtcdrv); } MODULE_AUTHOR("Alessandro Zummo "); --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to "rtc-linux". Membership options at http://groups.google.com/group/rtc-linux . Please read http://groups.google.com/group/rtc-linux/web/checklist before submitting a driver. -~----------~----~----~----~------~----~------~--~--- diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c index 6d9152d..90254d8 100644 --- a/arch/arm/mach-ep93xx/core.c +++ b/arch/arm/mach-ep93xx/core.c @@ -449,11 +449,19 @@ static struct amba_device uart3_device = { .periphid = 0x00041010, }; +static struct resource ep93xx_rtc_resource[] = { + { + .start = EP93XX_RTC_PHYS_BASE, + .end = EP93XX_RTC_PHYS_BASE + 0x10c - 1, + .flags = IORESOURCE_MEM, + }, +}; static struct platform_device ep93xx_rtc_device = { - .name = "ep93xx-rtc", - .id = -1, - .num_resources = 0, + .name = "ep93xx-rtc", + .id = -1, + .num_resources = ARRAY_SIZE(ep93xx_rtc_resource), + .resource = ep93xx_rtc_resource, }; diff --git a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h index 22d6c9a..68e6b23 100644 --- a/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h +++ b/arch/arm/mach-ep93xx/include/mach/ep93xx-regs.h @@ -146,6 +146,7 @@ #define EP93XX_PWM_BASE (EP93XX_APB_VIRT_BASE + 0x00110000) #define EP93XX_RTC_BASE (EP93XX_APB_VIRT_BASE + 0x00120000) +#define EP93XX_RTC_PHYS_BASE (EP93XX_APB_PHYS_BASE + 0x00120000) #define EP93XX_SYSCON_BASE (EP93XX_APB_VIRT_BASE + 0x00130000) #define EP93XX_SYSCON_REG(x) (EP93XX_SYSCON_BASE + (x)) diff --git a/drivers/rtc/rtc-ep93xx.c b/drivers/rtc/rtc-ep93xx.c index f7a3283..5eec3f5 100644 --- a/drivers/rtc/rtc-ep93xx.c +++ b/drivers/rtc/rtc-ep93xx.c @@ -11,20 +11,24 @@ #include #include +#include #include -#include +#include -#define EP93XX_RTC_REG(x) (EP93XX_RTC_BASE + (x)) -#define EP93XX_RTC_DATA EP93XX_RTC_REG(0x0000) -#define EP93XX_RTC_LOAD EP93XX_RTC_REG(0x000C) -#define EP93XX_RTC_SWCOMP EP93XX_RTC_REG(0x0108) +#define EP93XX_RTC_DATA 0x000 +#define EP93XX_RTC_MATCH 0x004 +#define EP93XX_RTC_STATUS 0x008 +#define EP93XX_RTC_LOAD 0x00C +#define EP93XX_RTC_CONTROL 0x010 +#define EP93XX_RTC_SWCOMP 0x108 #define DRV_VERSION "0.2" static int ep93xx_get_swcomp(struct device *dev, unsigned short *preload, unsigned short *delete) { - unsigned short comp = __raw_readl(EP93XX_RTC_SWCOMP); + void __iomem *mmio_base = dev->platform_data; + unsigned long comp = __raw_readl(mmio_base + EP93XX_RTC_SWCOMP); if (preload)