aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorRob Herring <rob.herring@calxeda.com>2012-03-04 23:00:46 -0500
committerRob Herring <rob.herring@calxeda.com>2012-03-04 23:00:46 -0500
commitd50673ed97a7ce609cf62bcd40c57517ada31806 (patch)
treede1464fe1a4126be6b34762015afb8ad8a90a2f0 /drivers
parentab15e0e80c02b8b9f3392a6173b9109348eed1c3 (diff)
parent7eca30aef7961e68ad74c0ef920546c2be7f6579 (diff)
Merge remote-tracking branch 'arm-soc/at91/base2+cleanup' into cleanup-base
Diffstat (limited to 'drivers')
-rw-r--r--drivers/mmc/host/at91_mci.c1
-rw-r--r--drivers/pcmcia/at91_cf.c5
-rw-r--r--drivers/rtc/rtc-at91sam9.c98
-rw-r--r--drivers/tty/serial/atmel_serial.c2
-rw-r--r--drivers/usb/gadget/Kconfig4
-rw-r--r--drivers/usb/gadget/at91_udc.c9
-rw-r--r--drivers/usb/gadget/atmel_usba_udc.c6
-rw-r--r--drivers/watchdog/at91rm9200_wdt.c8
8 files changed, 57 insertions, 76 deletions
diff --git a/drivers/mmc/host/at91_mci.c b/drivers/mmc/host/at91_mci.c
index 947faa5d2ce4..efdb81d21c44 100644
--- a/drivers/mmc/host/at91_mci.c
+++ b/drivers/mmc/host/at91_mci.c
@@ -86,7 +86,6 @@ static inline int at91mci_is_mci1rev2xx(void)
86{ 86{
87 return ( cpu_is_at91sam9260() 87 return ( cpu_is_at91sam9260()
88 || cpu_is_at91sam9263() 88 || cpu_is_at91sam9263()
89 || cpu_is_at91cap9()
90 || cpu_is_at91sam9rl() 89 || cpu_is_at91sam9rl()
91 || cpu_is_at91sam9g10() 90 || cpu_is_at91sam9g10()
92 || cpu_is_at91sam9g20() 91 || cpu_is_at91sam9g20()
diff --git a/drivers/pcmcia/at91_cf.c b/drivers/pcmcia/at91_cf.c
index 4902206f53d9..1dd68f502634 100644
--- a/drivers/pcmcia/at91_cf.c
+++ b/drivers/pcmcia/at91_cf.c
@@ -26,6 +26,7 @@
26 26
27#include <mach/board.h> 27#include <mach/board.h>
28#include <mach/at91rm9200_mc.h> 28#include <mach/at91rm9200_mc.h>
29#include <mach/at91_ramc.h>
29 30
30 31
31/* 32/*
@@ -156,7 +157,7 @@ static int at91_cf_set_io_map(struct pcmcia_socket *s, struct pccard_io_map *io)
156 /* 157 /*
157 * Use 16 bit accesses unless/until we need 8-bit i/o space. 158 * Use 16 bit accesses unless/until we need 8-bit i/o space.
158 */ 159 */
159 csr = at91_sys_read(AT91_SMC_CSR(cf->board->chipselect)) & ~AT91_SMC_DBW; 160 csr = at91_ramc_read(0, AT91_SMC_CSR(cf->board->chipselect)) & ~AT91_SMC_DBW;
160 161
161 /* 162 /*
162 * NOTE: this CF controller ignores IOIS16, so we can't really do 163 * NOTE: this CF controller ignores IOIS16, so we can't really do
@@ -175,7 +176,7 @@ static int at91_cf_set_io_map(struct pcmcia_socket *s, struct pccard_io_map *io)
175 csr |= AT91_SMC_DBW_16; 176 csr |= AT91_SMC_DBW_16;
176 pr_debug("%s: 16bit i/o bus\n", driver_name); 177 pr_debug("%s: 16bit i/o bus\n", driver_name);
177 } 178 }
178 at91_sys_write(AT91_SMC_CSR(cf->board->chipselect), csr); 179 at91_ramc_write(0, AT91_SMC_CSR(cf->board->chipselect), csr);
179 180
180 io->start = cf->socket.io_offset; 181 io->start = cf->socket.io_offset;
181 io->stop = io->start + SZ_2K - 1; 182 io->stop = io->start + SZ_2K - 1;
diff --git a/drivers/rtc/rtc-at91sam9.c b/drivers/rtc/rtc-at91sam9.c
index a3ad957507dc..729fb843a2fc 100644
--- a/drivers/rtc/rtc-at91sam9.c
+++ b/drivers/rtc/rtc-at91sam9.c
@@ -57,6 +57,7 @@ struct sam9_rtc {
57 void __iomem *rtt; 57 void __iomem *rtt;
58 struct rtc_device *rtcdev; 58 struct rtc_device *rtcdev;
59 u32 imr; 59 u32 imr;
60 void __iomem *gpbr;
60}; 61};
61 62
62#define rtt_readl(rtc, field) \ 63#define rtt_readl(rtc, field) \
@@ -65,9 +66,9 @@ struct sam9_rtc {
65 __raw_writel((val), (rtc)->rtt + AT91_RTT_ ## field) 66 __raw_writel((val), (rtc)->rtt + AT91_RTT_ ## field)
66 67
67#define gpbr_readl(rtc) \ 68#define gpbr_readl(rtc) \
68 at91_sys_read(AT91_GPBR + 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR) 69 __raw_readl((rtc)->gpbr)
69#define gpbr_writel(rtc, val) \ 70#define gpbr_writel(rtc, val) \
70 at91_sys_write(AT91_GPBR + 4 * CONFIG_RTC_DRV_AT91SAM9_GPBR, (val)) 71 __raw_writel((val), (rtc)->gpbr)
71 72
72/* 73/*
73 * Read current time and date in RTC 74 * Read current time and date in RTC
@@ -287,16 +288,19 @@ static const struct rtc_class_ops at91_rtc_ops = {
287/* 288/*
288 * Initialize and install RTC driver 289 * Initialize and install RTC driver
289 */ 290 */
290static int __init at91_rtc_probe(struct platform_device *pdev) 291static int __devinit at91_rtc_probe(struct platform_device *pdev)
291{ 292{
292 struct resource *r; 293 struct resource *r, *r_gpbr;
293 struct sam9_rtc *rtc; 294 struct sam9_rtc *rtc;
294 int ret; 295 int ret;
295 u32 mr; 296 u32 mr;
296 297
297 r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 298 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
298 if (!r) 299 r_gpbr = platform_get_resource(pdev, IORESOURCE_MEM, 1);
300 if (!r || !r_gpbr) {
301 dev_err(&pdev->dev, "need 2 ressources\n");
299 return -ENODEV; 302 return -ENODEV;
303 }
300 304
301 rtc = kzalloc(sizeof *rtc, GFP_KERNEL); 305 rtc = kzalloc(sizeof *rtc, GFP_KERNEL);
302 if (!rtc) 306 if (!rtc)
@@ -307,8 +311,19 @@ static int __init at91_rtc_probe(struct platform_device *pdev)
307 device_init_wakeup(&pdev->dev, 1); 311 device_init_wakeup(&pdev->dev, 1);
308 312
309 platform_set_drvdata(pdev, rtc); 313 platform_set_drvdata(pdev, rtc);
310 rtc->rtt = (void __force __iomem *) (AT91_VA_BASE_SYS - AT91_BASE_SYS); 314 rtc->rtt = ioremap(r->start, resource_size(r));
311 rtc->rtt += r->start; 315 if (!rtc->rtt) {
316 dev_err(&pdev->dev, "failed to map registers, aborting.\n");
317 ret = -ENOMEM;
318 goto fail;
319 }
320
321 rtc->gpbr = ioremap(r_gpbr->start, resource_size(r_gpbr));
322 if (!rtc->gpbr) {
323 dev_err(&pdev->dev, "failed to map gpbr registers, aborting.\n");
324 ret = -ENOMEM;
325 goto fail_gpbr;
326 }
312 327
313 mr = rtt_readl(rtc, MR); 328 mr = rtt_readl(rtc, MR);
314 329
@@ -326,7 +341,7 @@ static int __init at91_rtc_probe(struct platform_device *pdev)
326 &at91_rtc_ops, THIS_MODULE); 341 &at91_rtc_ops, THIS_MODULE);
327 if (IS_ERR(rtc->rtcdev)) { 342 if (IS_ERR(rtc->rtcdev)) {
328 ret = PTR_ERR(rtc->rtcdev); 343 ret = PTR_ERR(rtc->rtcdev);
329 goto fail; 344 goto fail_register;
330 } 345 }
331 346
332 /* register irq handler after we know what name we'll use */ 347 /* register irq handler after we know what name we'll use */
@@ -336,7 +351,7 @@ static int __init at91_rtc_probe(struct platform_device *pdev)
336 if (ret) { 351 if (ret) {
337 dev_dbg(&pdev->dev, "can't share IRQ %d?\n", AT91_ID_SYS); 352 dev_dbg(&pdev->dev, "can't share IRQ %d?\n", AT91_ID_SYS);
338 rtc_device_unregister(rtc->rtcdev); 353 rtc_device_unregister(rtc->rtcdev);
339 goto fail; 354 goto fail_register;
340 } 355 }
341 356
342 /* NOTE: sam9260 rev A silicon has a ROM bug which resets the 357 /* NOTE: sam9260 rev A silicon has a ROM bug which resets the
@@ -351,6 +366,10 @@ static int __init at91_rtc_probe(struct platform_device *pdev)
351 366
352 return 0; 367 return 0;
353 368
369fail_register:
370 iounmap(rtc->gpbr);
371fail_gpbr:
372 iounmap(rtc->rtt);
354fail: 373fail:
355 platform_set_drvdata(pdev, NULL); 374 platform_set_drvdata(pdev, NULL);
356 kfree(rtc); 375 kfree(rtc);
@@ -360,7 +379,7 @@ fail:
360/* 379/*
361 * Disable and remove the RTC driver 380 * Disable and remove the RTC driver
362 */ 381 */
363static int __exit at91_rtc_remove(struct platform_device *pdev) 382static int __devexit at91_rtc_remove(struct platform_device *pdev)
364{ 383{
365 struct sam9_rtc *rtc = platform_get_drvdata(pdev); 384 struct sam9_rtc *rtc = platform_get_drvdata(pdev);
366 u32 mr = rtt_readl(rtc, MR); 385 u32 mr = rtt_readl(rtc, MR);
@@ -371,6 +390,8 @@ static int __exit at91_rtc_remove(struct platform_device *pdev)
371 390
372 rtc_device_unregister(rtc->rtcdev); 391 rtc_device_unregister(rtc->rtcdev);
373 392
393 iounmap(rtc->gpbr);
394 iounmap(rtc->rtt);
374 platform_set_drvdata(pdev, NULL); 395 platform_set_drvdata(pdev, NULL);
375 kfree(rtc); 396 kfree(rtc);
376 return 0; 397 return 0;
@@ -433,63 +454,20 @@ static int at91_rtc_resume(struct platform_device *pdev)
433#endif 454#endif
434 455
435static struct platform_driver at91_rtc_driver = { 456static struct platform_driver at91_rtc_driver = {
436 .driver.name = "rtc-at91sam9", 457 .probe = at91_rtc_probe,
437 .driver.owner = THIS_MODULE, 458 .remove = __devexit_p(at91_rtc_remove),
438 .remove = __exit_p(at91_rtc_remove),
439 .shutdown = at91_rtc_shutdown, 459 .shutdown = at91_rtc_shutdown,
440 .suspend = at91_rtc_suspend, 460 .suspend = at91_rtc_suspend,
441 .resume = at91_rtc_resume, 461 .resume = at91_rtc_resume,
462 .driver = {
463 .name = "rtc-at91sam9",
464 .owner = THIS_MODULE,
465 },
442}; 466};
443 467
444/* Chips can have more than one RTT module, and they can be used for more
445 * than just RTCs. So we can't just register as "the" RTT driver.
446 *
447 * A normal approach in such cases is to create a library to allocate and
448 * free the modules. Here we just use bus_find_device() as like such a
449 * library, binding directly ... no runtime "library" footprint is needed.
450 */
451static int __init at91_rtc_match(struct device *dev, void *v)
452{
453 struct platform_device *pdev = to_platform_device(dev);
454 int ret;
455
456 /* continue searching if this isn't the RTT we need */
457 if (strcmp("at91_rtt", pdev->name) != 0
458 || pdev->id != CONFIG_RTC_DRV_AT91SAM9_RTT)
459 goto fail;
460
461 /* else we found it ... but fail unless we can bind to the RTC driver */
462 if (dev->driver) {
463 dev_dbg(dev, "busy, can't use as RTC!\n");
464 goto fail;
465 }
466 dev->driver = &at91_rtc_driver.driver;
467 if (device_attach(dev) == 0) {
468 dev_dbg(dev, "can't attach RTC!\n");
469 goto fail;
470 }
471 ret = at91_rtc_probe(pdev);
472 if (ret == 0)
473 return true;
474
475 dev_dbg(dev, "RTC probe err %d!\n", ret);
476fail:
477 return false;
478}
479
480static int __init at91_rtc_init(void) 468static int __init at91_rtc_init(void)
481{ 469{
482 int status; 470 return platform_driver_register(&at91_rtc_driver);
483 struct device *rtc;
484
485 status = platform_driver_register(&at91_rtc_driver);
486 if (status)
487 return status;
488 rtc = bus_find_device(&platform_bus_type, NULL,
489 NULL, at91_rtc_match);
490 if (!rtc)
491 platform_driver_unregister(&at91_rtc_driver);
492 return rtc ? 0 : -ENODEV;
493} 471}
494module_init(at91_rtc_init); 472module_init(at91_rtc_init);
495 473
diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c
index 10605ecc99ab..f9a6be7a9bed 100644
--- a/drivers/tty/serial/atmel_serial.c
+++ b/drivers/tty/serial/atmel_serial.c
@@ -1526,6 +1526,8 @@ void __init atmel_register_uart_fns(struct atmel_port_fns *fns)
1526 atmel_pops.set_wake = fns->set_wake; 1526 atmel_pops.set_wake = fns->set_wake;
1527} 1527}
1528 1528
1529struct platform_device *atmel_default_console_device; /* the serial console device */
1530
1529#ifdef CONFIG_SERIAL_ATMEL_CONSOLE 1531#ifdef CONFIG_SERIAL_ATMEL_CONSOLE
1530static void atmel_console_putchar(struct uart_port *port, int ch) 1532static void atmel_console_putchar(struct uart_port *port, int ch)
1531{ 1533{
diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
index 7ecb68a67411..85ae4b46bb68 100644
--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -137,7 +137,7 @@ choice
137 137
138config USB_AT91 138config USB_AT91
139 tristate "Atmel AT91 USB Device Port" 139 tristate "Atmel AT91 USB Device Port"
140 depends on ARCH_AT91 && !ARCH_AT91SAM9RL && !ARCH_AT91CAP9 && !ARCH_AT91SAM9G45 140 depends on ARCH_AT91 && !ARCH_AT91SAM9RL && !ARCH_AT91SAM9G45
141 help 141 help
142 Many Atmel AT91 processors (such as the AT91RM2000) have a 142 Many Atmel AT91 processors (such as the AT91RM2000) have a
143 full speed USB Device Port with support for five configurable 143 full speed USB Device Port with support for five configurable
@@ -150,7 +150,7 @@ config USB_AT91
150config USB_ATMEL_USBA 150config USB_ATMEL_USBA
151 tristate "Atmel USBA" 151 tristate "Atmel USBA"
152 select USB_GADGET_DUALSPEED 152 select USB_GADGET_DUALSPEED
153 depends on AVR32 || ARCH_AT91CAP9 || ARCH_AT91SAM9RL || ARCH_AT91SAM9G45 153 depends on AVR32 || ARCH_AT91SAM9RL || ARCH_AT91SAM9G45
154 help 154 help
155 USBA is the integrated high-speed USB Device controller on 155 USBA is the integrated high-speed USB Device controller on
156 the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel. 156 the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel.
diff --git a/drivers/usb/gadget/at91_udc.c b/drivers/usb/gadget/at91_udc.c
index 143a7256b598..f99b3dc745bd 100644
--- a/drivers/usb/gadget/at91_udc.c
+++ b/drivers/usb/gadget/at91_udc.c
@@ -41,6 +41,7 @@
41#include <mach/board.h> 41#include <mach/board.h>
42#include <mach/cpu.h> 42#include <mach/cpu.h>
43#include <mach/at91sam9261_matrix.h> 43#include <mach/at91sam9261_matrix.h>
44#include <mach/at91_matrix.h>
44 45
45#include "at91_udc.h" 46#include "at91_udc.h"
46 47
@@ -910,9 +911,9 @@ static void pullup(struct at91_udc *udc, int is_on)
910 } else if (cpu_is_at91sam9261() || cpu_is_at91sam9g10()) { 911 } else if (cpu_is_at91sam9261() || cpu_is_at91sam9g10()) {
911 u32 usbpucr; 912 u32 usbpucr;
912 913
913 usbpucr = at91_sys_read(AT91_MATRIX_USBPUCR); 914 usbpucr = at91_matrix_read(AT91_MATRIX_USBPUCR);
914 usbpucr |= AT91_MATRIX_USBPUCR_PUON; 915 usbpucr |= AT91_MATRIX_USBPUCR_PUON;
915 at91_sys_write(AT91_MATRIX_USBPUCR, usbpucr); 916 at91_matrix_write(AT91_MATRIX_USBPUCR, usbpucr);
916 } 917 }
917 } else { 918 } else {
918 stop_activity(udc); 919 stop_activity(udc);
@@ -928,9 +929,9 @@ static void pullup(struct at91_udc *udc, int is_on)
928 } else if (cpu_is_at91sam9261() || cpu_is_at91sam9g10()) { 929 } else if (cpu_is_at91sam9261() || cpu_is_at91sam9g10()) {
929 u32 usbpucr; 930 u32 usbpucr;
930 931
931 usbpucr = at91_sys_read(AT91_MATRIX_USBPUCR); 932 usbpucr = at91_matrix_read(AT91_MATRIX_USBPUCR);
932 usbpucr &= ~AT91_MATRIX_USBPUCR_PUON; 933 usbpucr &= ~AT91_MATRIX_USBPUCR_PUON;
933 at91_sys_write(AT91_MATRIX_USBPUCR, usbpucr); 934 at91_matrix_write(AT91_MATRIX_USBPUCR, usbpucr);
934 } 935 }
935 clk_off(udc); 936 clk_off(udc);
936 } 937 }
diff --git a/drivers/usb/gadget/atmel_usba_udc.c b/drivers/usb/gadget/atmel_usba_udc.c
index e2fb6d583bd9..ce9dffb0515d 100644
--- a/drivers/usb/gadget/atmel_usba_udc.c
+++ b/drivers/usb/gadget/atmel_usba_udc.c
@@ -332,12 +332,12 @@ static int vbus_is_present(struct usba_udc *udc)
332 332
333static void toggle_bias(int is_on) 333static void toggle_bias(int is_on)
334{ 334{
335 unsigned int uckr = at91_sys_read(AT91_CKGR_UCKR); 335 unsigned int uckr = at91_pmc_read(AT91_CKGR_UCKR);
336 336
337 if (is_on) 337 if (is_on)
338 at91_sys_write(AT91_CKGR_UCKR, uckr | AT91_PMC_BIASEN); 338 at91_pmc_write(AT91_CKGR_UCKR, uckr | AT91_PMC_BIASEN);
339 else 339 else
340 at91_sys_write(AT91_CKGR_UCKR, uckr & ~(AT91_PMC_BIASEN)); 340 at91_pmc_write(AT91_CKGR_UCKR, uckr & ~(AT91_PMC_BIASEN));
341} 341}
342 342
343#else 343#else
diff --git a/drivers/watchdog/at91rm9200_wdt.c b/drivers/watchdog/at91rm9200_wdt.c
index b3046dc4b56c..7ceefd29ae14 100644
--- a/drivers/watchdog/at91rm9200_wdt.c
+++ b/drivers/watchdog/at91rm9200_wdt.c
@@ -51,7 +51,7 @@ static unsigned long at91wdt_busy;
51 */ 51 */
52static inline void at91_wdt_stop(void) 52static inline void at91_wdt_stop(void)
53{ 53{
54 at91_sys_write(AT91_ST_WDMR, AT91_ST_EXTEN); 54 at91_st_write(AT91_ST_WDMR, AT91_ST_EXTEN);
55} 55}
56 56
57/* 57/*
@@ -59,9 +59,9 @@ static inline void at91_wdt_stop(void)
59 */ 59 */
60static inline void at91_wdt_start(void) 60static inline void at91_wdt_start(void)
61{ 61{
62 at91_sys_write(AT91_ST_WDMR, AT91_ST_EXTEN | AT91_ST_RSTEN | 62 at91_st_write(AT91_ST_WDMR, AT91_ST_EXTEN | AT91_ST_RSTEN |
63 (((65536 * wdt_time) >> 8) & AT91_ST_WDV)); 63 (((65536 * wdt_time) >> 8) & AT91_ST_WDV));
64 at91_sys_write(AT91_ST_CR, AT91_ST_WDRST); 64 at91_st_write(AT91_ST_CR, AT91_ST_WDRST);
65} 65}
66 66
67/* 67/*
@@ -69,7 +69,7 @@ static inline void at91_wdt_start(void)
69 */ 69 */
70static inline void at91_wdt_reload(void) 70static inline void at91_wdt_reload(void)
71{ 71{
72 at91_sys_write(AT91_ST_CR, AT91_ST_WDRST); 72 at91_st_write(AT91_ST_CR, AT91_ST_WDRST);
73} 73}
74 74
75/* ......................................................................... */ 75/* ......................................................................... */