2 * linux/arch/arm/mach-sa1100/collie.c
4 * May be copied or modified under the terms of the GNU General Public
5 * License. See linux/COPYING for more information.
7 * This file contains all Collie-specific tweaks.
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
14 * 03-06-2004 John Lenz <jelenz@wisc.edu>
15 * 06-04-2002 Chris Larson <kergoth@digitalnemesis.net>
16 * 04-16-2001 Lineo Japan,Inc. ...
19 #include <linux/config.h>
20 #include <linux/init.h>
21 #include <linux/kernel.h>
22 #include <linux/tty.h>
23 #include <linux/delay.h>
24 #include <linux/device.h>
25 #include <linux/mtd/mtd.h>
26 #include <linux/mtd/partitions.h>
27 #include <linux/timer.h>
29 #include <asm/hardware.h>
30 #include <asm/mach-types.h>
32 #include <asm/setup.h>
33 #include <asm/arch/collie.h>
35 #include <asm/mach/arch.h>
36 #include <asm/mach/flash.h>
37 #include <asm/mach/map.h>
38 #include <asm/mach/serial_sa1100.h>
40 #include <asm/hardware/scoop.h>
41 #include <asm/mach/sharpsl_param.h>
42 #include <asm/hardware/locomo.h>
46 static struct resource collie_scoop_resources
[] = {
50 .flags
= IORESOURCE_MEM
,
54 static struct scoop_config collie_scoop_setup
= {
55 .io_dir
= COLLIE_SCOOP_IO_DIR
,
56 .io_out
= COLLIE_SCOOP_IO_OUT
,
59 struct platform_device colliescoop_device
= {
60 .name
= "sharp-scoop",
63 .platform_data
= &collie_scoop_setup
,
65 .num_resources
= ARRAY_SIZE(collie_scoop_resources
),
66 .resource
= collie_scoop_resources
,
70 static struct resource locomo_resources
[] = {
74 .flags
= IORESOURCE_MEM
,
79 .flags
= IORESOURCE_IRQ
,
83 static struct platform_device locomo_device
= {
86 .num_resources
= ARRAY_SIZE(locomo_resources
),
87 .resource
= locomo_resources
,
90 static struct platform_device
*devices
[] __initdata
= {
95 static struct mtd_partition collie_partitions
[] = {
100 .mask_flags
= MTD_WRITEABLE
103 .offset
= MTDPART_OFS_APPEND
,
107 .offset
= MTDPART_OFS_APPEND
,
112 static void collie_set_vpp(int vpp
)
114 write_scoop_reg(SCOOP_GPCR
, read_scoop_reg(SCOOP_GPCR
) | COLLIE_SCP_VPEN
);
116 write_scoop_reg(SCOOP_GPWR
, read_scoop_reg(SCOOP_GPWR
) | COLLIE_SCP_VPEN
);
118 write_scoop_reg(SCOOP_GPWR
, read_scoop_reg(SCOOP_GPWR
) & ~COLLIE_SCP_VPEN
);
122 static struct flash_platform_data collie_flash_data
= {
123 .map_name
= "cfi_probe",
124 .set_vpp
= collie_set_vpp
,
125 .parts
= collie_partitions
,
126 .nr_parts
= ARRAY_SIZE(collie_partitions
),
129 static struct resource collie_flash_resources
[] = {
131 .start
= SA1100_CS0_PHYS
,
132 .end
= SA1100_CS0_PHYS
+ SZ_32M
- 1,
133 .flags
= IORESOURCE_MEM
,
137 static void __init
collie_init(void)
142 GAFR
= ( GPIO_SSP_TXD
| \
143 GPIO_SSP_SCLK
| GPIO_SSP_SFRM
| GPIO_SSP_CLK
| GPIO_TIC_ACK
| \
146 GPDR
= ( GPIO_LDD8
| GPIO_LDD9
| GPIO_LDD10
| GPIO_LDD11
| GPIO_LDD12
| \
147 GPIO_LDD13
| GPIO_LDD14
| GPIO_LDD15
| GPIO_SSP_TXD
| \
148 GPIO_SSP_SCLK
| GPIO_SSP_SFRM
| GPIO_SDLC_SCLK
| \
149 GPIO_SDLC_AAF
| GPIO_UART_SCLK1
| GPIO_32_768kHz
);
153 PPDR
= ( PPC_LDD0
| PPC_LDD1
| PPC_LDD2
| PPC_LDD3
| PPC_LDD4
| PPC_LDD5
| \
154 PPC_LDD6
| PPC_LDD7
| PPC_L_PCLK
| PPC_L_LCLK
| PPC_L_FCLK
| PPC_L_BIAS
| \
155 PPC_TXD1
| PPC_TXD2
| PPC_RXD2
| PPC_TXD3
| PPC_TXD4
| PPC_SCLK
| PPC_SFRM
);
157 PSDR
= ( PPC_RXD1
| PPC_RXD2
| PPC_RXD3
| PPC_RXD4
);
159 GAFR
|= GPIO_32_768kHz
;
160 GPDR
|= GPIO_32_768kHz
;
161 TUCR
= TUCR_32_768kHz
;
163 ret
= platform_add_devices(devices
, ARRAY_SIZE(devices
));
165 printk(KERN_WARNING
"collie: Unable to register LoCoMo device\n");
168 sa11x0_set_flash_data(&collie_flash_data
, collie_flash_resources
,
169 ARRAY_SIZE(collie_flash_resources
));
171 sharpsl_save_param();
174 static struct map_desc collie_io_desc
[] __initdata
= {
175 /* virtual physical length type */
176 {0xe8000000, 0x00000000, 0x02000000, MT_DEVICE
}, /* 32M main flash (cs0) */
177 {0xea000000, 0x08000000, 0x02000000, MT_DEVICE
}, /* 32M boot flash (cs1) */
180 static void __init
collie_map_io(void)
183 iotable_init(collie_io_desc
, ARRAY_SIZE(collie_io_desc
));
186 MACHINE_START(COLLIE
, "Sharp-Collie")
187 .phys_ram
= 0xc0000000,
188 .phys_io
= 0x80000000,
189 .io_pg_offst
= ((0xf8000000) >> 18) & 0xfffc,
190 .map_io
= collie_map_io
,
191 .init_irq
= sa1100_init_irq
,
192 .timer
= &sa1100_timer
,
193 .init_machine
= collie_init
,