diff options
| -rw-r--r-- | arch/arm/mach-s3c2410/Kconfig | 5 | ||||
| -rw-r--r-- | arch/arm/mach-s3c2410/mach-n30.c | 145 |
2 files changed, 144 insertions, 6 deletions
diff --git a/arch/arm/mach-s3c2410/Kconfig b/arch/arm/mach-s3c2410/Kconfig index 1a7d01b47440..99fdc736698c 100644 --- a/arch/arm/mach-s3c2410/Kconfig +++ b/arch/arm/mach-s3c2410/Kconfig | |||
| @@ -72,10 +72,11 @@ config PM_H1940 | |||
| 72 | Internal node for H1940 and related PM | 72 | Internal node for H1940 and related PM |
| 73 | 73 | ||
| 74 | config MACH_N30 | 74 | config MACH_N30 |
| 75 | bool "Acer N30" | 75 | bool "Acer N30 family" |
| 76 | select CPU_S3C2410 | 76 | select CPU_S3C2410 |
| 77 | help | 77 | help |
| 78 | Say Y here if you are using the Acer N30 | 78 | Say Y here if you want suppt for the Acer N30, Acer N35, |
| 79 | Navman PiN570, Yakumo AlphaX or Airis NC05 PDAs. | ||
| 79 | 80 | ||
| 80 | config ARCH_BAST | 81 | config ARCH_BAST |
| 81 | bool "Simtec Electronics BAST (EB2410ITX)" | 82 | bool "Simtec Electronics BAST (EB2410ITX)" |
diff --git a/arch/arm/mach-s3c2410/mach-n30.c b/arch/arm/mach-s3c2410/mach-n30.c index e1351a7b40ee..621b343adbed 100644 --- a/arch/arm/mach-s3c2410/mach-n30.c +++ b/arch/arm/mach-s3c2410/mach-n30.c | |||
| @@ -1,4 +1,5 @@ | |||
| 1 | /* Machine specific code for the Acer n30 PDA. | 1 | /* Machine specific code for the Acer n30, Acer N35, Navman PiN 570, |
| 2 | * Yakumo AlphaX and Airis NC05 PDAs. | ||
| 2 | * | 3 | * |
| 3 | * Copyright (c) 2003-2005 Simtec Electronics | 4 | * Copyright (c) 2003-2005 Simtec Electronics |
| 4 | * Ben Dooks <ben@simtec.co.uk> | 5 | * Ben Dooks <ben@simtec.co.uk> |
| @@ -11,7 +12,7 @@ | |||
| 11 | * This program is free software; you can redistribute it and/or modify | 12 | * This program is free software; you can redistribute it and/or modify |
| 12 | * it under the terms of the GNU General Public License version 2 as | 13 | * it under the terms of the GNU General Public License version 2 as |
| 13 | * published by the Free Software Foundation. | 14 | * published by the Free Software Foundation. |
| 14 | */ | 15 | */ |
| 15 | 16 | ||
| 16 | #include <linux/kernel.h> | 17 | #include <linux/kernel.h> |
| 17 | #include <linux/types.h> | 18 | #include <linux/types.h> |
| @@ -68,7 +69,8 @@ static struct s3c2410_uartcfg n30_uartcfgs[] = { | |||
| 68 | .ulcon = 0x43, | 69 | .ulcon = 0x43, |
| 69 | .ufcon = 0x51, | 70 | .ufcon = 0x51, |
| 70 | }, | 71 | }, |
| 71 | /* The BlueTooth controller is connected to port 2 */ | 72 | /* On the N30 the bluetooth controller is connected here. |
| 73 | * On the N35 and variants the GPS receiver is connected here. */ | ||
| 72 | [2] = { | 74 | [2] = { |
| 73 | .hwport = 2, | 75 | .hwport = 2, |
| 74 | .flags = 0, | 76 | .flags = 0, |
| @@ -165,6 +167,95 @@ static struct platform_device n30_button_device = { | |||
| 165 | } | 167 | } |
| 166 | }; | 168 | }; |
| 167 | 169 | ||
| 170 | static struct gpio_keys_button n35_buttons[] = { | ||
| 171 | { | ||
| 172 | .gpio = S3C2410_GPF0, | ||
| 173 | .code = KEY_POWER, | ||
| 174 | .desc = "Power", | ||
| 175 | .active_low = 0, | ||
| 176 | }, | ||
| 177 | { | ||
| 178 | .gpio = S3C2410_GPG9, | ||
| 179 | .code = KEY_UP, | ||
| 180 | .desc = "Joystick Up", | ||
| 181 | .active_low = 0, | ||
| 182 | }, | ||
| 183 | { | ||
| 184 | .gpio = S3C2410_GPG8, | ||
| 185 | .code = KEY_DOWN, | ||
| 186 | .desc = "Joystick Down", | ||
| 187 | .active_low = 0, | ||
| 188 | }, | ||
| 189 | { | ||
| 190 | .gpio = S3C2410_GPG6, | ||
| 191 | .code = KEY_DOWN, | ||
| 192 | .desc = "Joystick Left", | ||
| 193 | .active_low = 0, | ||
| 194 | }, | ||
| 195 | { | ||
| 196 | .gpio = S3C2410_GPG5, | ||
| 197 | .code = KEY_DOWN, | ||
| 198 | .desc = "Joystick Right", | ||
| 199 | .active_low = 0, | ||
| 200 | }, | ||
| 201 | { | ||
| 202 | .gpio = S3C2410_GPG7, | ||
| 203 | .code = KEY_ENTER, | ||
| 204 | .desc = "Joystick Press", | ||
| 205 | .active_low = 0, | ||
| 206 | }, | ||
| 207 | { | ||
| 208 | .gpio = S3C2410_GPF7, | ||
| 209 | .code = KEY_HOMEPAGE, | ||
| 210 | .desc = "Home", | ||
| 211 | .active_low = 0, | ||
| 212 | }, | ||
| 213 | { | ||
| 214 | .gpio = S3C2410_GPF6, | ||
| 215 | .code = KEY_CALENDAR, | ||
| 216 | .desc = "Calendar", | ||
| 217 | .active_low = 0, | ||
| 218 | }, | ||
| 219 | { | ||
| 220 | .gpio = S3C2410_GPF5, | ||
| 221 | .code = KEY_ADDRESSBOOK, | ||
| 222 | .desc = "Contacts", | ||
| 223 | .active_low = 0, | ||
| 224 | }, | ||
| 225 | { | ||
| 226 | .gpio = S3C2410_GPF4, | ||
| 227 | .code = KEY_MAIL, | ||
| 228 | .desc = "Mail", | ||
| 229 | .active_low = 0, | ||
| 230 | }, | ||
| 231 | { | ||
| 232 | .gpio = S3C2410_GPF3, | ||
| 233 | .code = SW_RADIO, | ||
| 234 | .desc = "GPS Antenna", | ||
| 235 | .active_low = 0, | ||
| 236 | }, | ||
| 237 | { | ||
| 238 | .gpio = S3C2410_GPG2, | ||
| 239 | .code = SW_HEADPHONE_INSERT, | ||
| 240 | .desc = "Headphone", | ||
| 241 | .active_low = 0, | ||
| 242 | }, | ||
| 243 | }; | ||
| 244 | |||
| 245 | static struct gpio_keys_platform_data n35_button_data = { | ||
| 246 | .buttons = n35_buttons, | ||
| 247 | .nbuttons = ARRAY_SIZE(n35_buttons), | ||
| 248 | }; | ||
| 249 | |||
| 250 | static struct platform_device n35_button_device = { | ||
| 251 | .name = "gpio-keys", | ||
| 252 | .id = -1, | ||
| 253 | .num_resources = 0, | ||
| 254 | .dev = { | ||
| 255 | .platform_data = &n35_button_data, | ||
| 256 | } | ||
| 257 | }; | ||
| 258 | |||
| 168 | /* This is the bluetooth LED on the device. */ | 259 | /* This is the bluetooth LED on the device. */ |
| 169 | static struct s3c24xx_led_platdata n30_blue_led_pdata = { | 260 | static struct s3c24xx_led_platdata n30_blue_led_pdata = { |
| 170 | .name = "blue_led", | 261 | .name = "blue_led", |
| @@ -211,6 +302,15 @@ static struct platform_device *n30_devices[] __initdata = { | |||
| 211 | &n30_warning_led, | 302 | &n30_warning_led, |
| 212 | }; | 303 | }; |
| 213 | 304 | ||
| 305 | static struct platform_device *n35_devices[] __initdata = { | ||
| 306 | &s3c_device_lcd, | ||
| 307 | &s3c_device_wdt, | ||
| 308 | &s3c_device_i2c, | ||
| 309 | &s3c_device_iis, | ||
| 310 | &s3c_device_usbgadget, | ||
| 311 | &n35_button_device, | ||
| 312 | }; | ||
| 313 | |||
| 214 | static struct s3c2410_platform_i2c n30_i2ccfg = { | 314 | static struct s3c2410_platform_i2c n30_i2ccfg = { |
| 215 | .flags = 0, | 315 | .flags = 0, |
| 216 | .slave_addr = 0x10, | 316 | .slave_addr = 0x10, |
| @@ -244,7 +344,32 @@ static void __init n30_init(void) | |||
| 244 | S3C2410_MISCCR_USBSUSPND0 | | 344 | S3C2410_MISCCR_USBSUSPND0 | |
| 245 | S3C2410_MISCCR_USBSUSPND1, 0x0); | 345 | S3C2410_MISCCR_USBSUSPND1, 0x0); |
| 246 | 346 | ||
| 247 | platform_add_devices(n30_devices, ARRAY_SIZE(n30_devices)); | 347 | if (machine_is_n30()) { |
| 348 | /* Turn off suspend on both USB ports, and switch the | ||
| 349 | * selectable USB port to USB device mode. */ | ||
| 350 | s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST | | ||
| 351 | S3C2410_MISCCR_USBSUSPND0 | | ||
| 352 | S3C2410_MISCCR_USBSUSPND1, 0x0); | ||
| 353 | |||
| 354 | platform_add_devices(n30_devices, ARRAY_SIZE(n30_devices)); | ||
| 355 | } | ||
| 356 | |||
| 357 | if (machine_is_n35()) { | ||
| 358 | /* Turn off suspend and switch the selectable USB port | ||
| 359 | * to USB device mode. Turn on suspend for the host | ||
| 360 | * port since it is not connected on the N35. | ||
| 361 | * | ||
| 362 | * Actually, the host port is available at some pads | ||
| 363 | * on the back of the device, so it would actually be | ||
| 364 | * possible to add a USB device inside the N35 if you | ||
| 365 | * are willing to do some hardware modifications. */ | ||
| 366 | s3c2410_modify_misccr(S3C2410_MISCCR_USBHOST | | ||
| 367 | S3C2410_MISCCR_USBSUSPND0 | | ||
| 368 | S3C2410_MISCCR_USBSUSPND1, | ||
| 369 | S3C2410_MISCCR_USBSUSPND1); | ||
| 370 | |||
| 371 | platform_add_devices(n35_devices, ARRAY_SIZE(n35_devices)); | ||
| 372 | } | ||
| 248 | } | 373 | } |
| 249 | 374 | ||
| 250 | MACHINE_START(N30, "Acer-N30") | 375 | MACHINE_START(N30, "Acer-N30") |
| @@ -259,3 +384,15 @@ MACHINE_START(N30, "Acer-N30") | |||
| 259 | .init_irq = n30_init_irq, | 384 | .init_irq = n30_init_irq, |
| 260 | .map_io = n30_map_io, | 385 | .map_io = n30_map_io, |
| 261 | MACHINE_END | 386 | MACHINE_END |
| 387 | |||
| 388 | MACHINE_START(N35, "Acer-N35") | ||
| 389 | /* Maintainer: Christer Weinigel <christer@weinigel.se> | ||
| 390 | */ | ||
| 391 | .phys_io = S3C2410_PA_UART, | ||
| 392 | .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc, | ||
| 393 | .boot_params = S3C2410_SDRAM_PA + 0x100, | ||
| 394 | .timer = &s3c24xx_timer, | ||
| 395 | .init_machine = n30_init, | ||
| 396 | .init_irq = n30_init_irq, | ||
| 397 | .map_io = n30_map_io, | ||
| 398 | MACHINE_END | ||
