OMAP1: AMS_DELTA: add modem support
authorJanusz Krzysztofik <jkrzyszt@tis.icnet.pl>
Fri, 28 Aug 2009 17:51:37 +0000 (10:51 -0700)
committerTony Lindgren <tony@atomide.com>
Fri, 28 Aug 2009 17:51:37 +0000 (10:51 -0700)
This patch adds support for modem device found on Amstrad E3 (Delta) board.

Based on earlier patch by Jonathan McDowell, available at
http://the.earth.li/pub/e3/2.6.19/ams-delta-modem.patch.
Modified after Ladislav Michl's arch/arm/mach-omap1/board-voiceblue.c.

This patch is dependent on 8250 driver changes getting accepted upstream:
http://git.kernel.org/?p=linux/kernel/git/sfr/linux-next.git;a=commit;h=7053133124d5cdf207c1168c7a0c582a18e12ea7

Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap1/board-ams-delta.c

index 5807732..42920f9 100644 (file)
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/input.h>
+#include <linux/interrupt.h>
 #include <linux/platform_device.h>
+#include <linux/serial_8250.h>
 
+#include <asm/serial.h>
 #include <mach/hardware.h>
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -230,6 +233,41 @@ static void __init ams_delta_init(void)
        platform_add_devices(ams_delta_devices, ARRAY_SIZE(ams_delta_devices));
 }
 
+static struct plat_serial8250_port ams_delta_modem_ports[] = {
+       {
+               .membase        = (void *) AMS_DELTA_MODEM_VIRT,
+               .mapbase        = AMS_DELTA_MODEM_PHYS,
+               .irq            = -EINVAL, /* changed later */
+               .flags          = UPF_BOOT_AUTOCONF,
+               .irqflags       = IRQF_TRIGGER_RISING,
+               .iotype         = UPIO_MEM,
+               .regshift       = 1,
+               .uartclk        = BASE_BAUD * 16,
+       },
+       { },
+};
+
+static struct platform_device ams_delta_modem_device = {
+       .name   = "serial8250",
+       .id     = PLAT8250_DEV_PLATFORM1,
+       .dev            = {
+               .platform_data = ams_delta_modem_ports,
+       },
+};
+
+static int __init ams_delta_modem_init(void)
+{
+       omap_cfg_reg(M14_1510_GPIO2);
+       ams_delta_modem_ports[0].irq = gpio_to_irq(2);
+
+       ams_delta_latch2_write(
+               AMS_DELTA_LATCH2_MODEM_NRESET | AMS_DELTA_LATCH2_MODEM_CODEC,
+               AMS_DELTA_LATCH2_MODEM_NRESET | AMS_DELTA_LATCH2_MODEM_CODEC);
+
+       return platform_device_register(&ams_delta_modem_device);
+}
+arch_initcall(ams_delta_modem_init);
+
 static void __init ams_delta_map_io(void)
 {
        omap1_map_common_io();