2 * Common devices definition for Gemini
4 * Copyright (C) 2008-2009 Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
10 #include <linux/kernel.h>
11 #include <linux/init.h>
13 #include <linux/platform_device.h>
14 #include <linux/serial_8250.h>
15 #include <linux/mtd/physmap.h>
17 #include <mach/irqs.h>
18 #include <mach/hardware.h>
19 #include <mach/global_reg.h>
21 static struct plat_serial8250_port serial_platform_data
[] = {
23 .membase
= (void *)IO_ADDRESS(GEMINI_UART_BASE
),
24 .mapbase
= GEMINI_UART_BASE
,
30 .flags
= UPF_BOOT_AUTOCONF
| UPF_SKIP_TEST
| UPF_FIXED_TYPE
,
35 static struct platform_device serial_device
= {
37 .id
= PLAT8250_DEV_PLATFORM
,
39 .platform_data
= serial_platform_data
,
43 int platform_register_uart(void)
45 return platform_device_register(&serial_device
);
48 static struct resource flash_resource
= {
49 .start
= GEMINI_FLASH_BASE
,
50 .flags
= IORESOURCE_MEM
,
53 static struct physmap_flash_data pflash_platform_data
= {};
55 static struct platform_device pflash_device
= {
56 .name
= "physmap-flash",
59 .platform_data
= &pflash_platform_data
,
61 .resource
= &flash_resource
,
65 int platform_register_pflash(unsigned int size
, struct mtd_partition
*parts
,
66 unsigned int nr_parts
)
70 reg
= __raw_readl(IO_ADDRESS(GEMINI_GLOBAL_BASE
) + GLOBAL_STATUS
);
72 if ((reg
& FLASH_TYPE_MASK
) != FLASH_TYPE_PARALLEL
)
75 if (reg
& FLASH_WIDTH_16BIT
)
76 pflash_platform_data
.width
= 2;
78 pflash_platform_data
.width
= 1;
80 /* enable parallel flash pins and disable others */
81 reg
= __raw_readl(IO_ADDRESS(GEMINI_GLOBAL_BASE
) + GLOBAL_MISC_CTRL
);
82 reg
&= ~PFLASH_PADS_DISABLE
;
83 reg
|= SFLASH_PADS_DISABLE
| NAND_PADS_DISABLE
;
84 __raw_writel(reg
, IO_ADDRESS(GEMINI_GLOBAL_BASE
) + GLOBAL_MISC_CTRL
);
86 flash_resource
.end
= flash_resource
.start
+ size
- 1;
88 pflash_platform_data
.parts
= parts
;
89 pflash_platform_data
.nr_parts
= nr_parts
;
91 return platform_device_register(&pflash_device
);
94 static struct resource gemini_rtc_resources
[] = {
96 .start
= GEMINI_RTC_BASE
,
97 .end
= GEMINI_RTC_BASE
+ 0x24,
98 .flags
= IORESOURCE_MEM
,
103 .flags
= IORESOURCE_IRQ
,
107 static struct platform_device gemini_rtc_device
= {
108 .name
= "rtc-gemini",
110 .num_resources
= ARRAY_SIZE(gemini_rtc_resources
),
111 .resource
= gemini_rtc_resources
,
114 int __init
platform_register_rtc(void)
116 return platform_device_register(&gemini_rtc_device
);