Merge branch 'sh/dwarf-unwinder'
[pandora-kernel.git] / arch / arm / mach-at91 / board-sam9rlek.c
index f6b5672..bd28e98 100644 (file)
@@ -15,6 +15,8 @@
 #include <linux/spi/spi.h>
 #include <linux/fb.h>
 #include <linux/clk.h>
+#include <linux/input.h>
+#include <linux/gpio_keys.h>
 
 #include <video/atmel_lcdc.h>
 
@@ -41,7 +43,7 @@ static void __init ek_map_io(void)
        /* Initialize processor: 12.000 MHz crystal */
        at91sam9rl_initialize(12000000);
 
-       /* DGBU on ttyS0. (Rx & Tx only) */
+       /* DBGU on ttyS0. (Rx & Tx only) */
        at91_register_uart(0, 0, 0);
 
        /* USART0 on ttyS1. (Rx, Tx, CTS, RTS) */
@@ -208,6 +210,87 @@ static struct atmel_lcdfb_info __initdata ek_lcdc_data;
 #endif
 
 
+/*
+ * AC97
+ * reset_pin is not connected: NRST
+ */
+static struct ac97c_platform_data ek_ac97_data = {
+};
+
+
+/*
+ * LEDs
+ */
+static struct gpio_led ek_leds[] = {
+       {       /* "bottom" led, green, userled1 to be defined */
+               .name                   = "ds1",
+               .gpio                   = AT91_PIN_PD15,
+               .active_low             = 1,
+               .default_trigger        = "none",
+       },
+       {       /* "bottom" led, green, userled2 to be defined */
+               .name                   = "ds2",
+               .gpio                   = AT91_PIN_PD16,
+               .active_low             = 1,
+               .default_trigger        = "none",
+       },
+       {       /* "power" led, yellow */
+               .name                   = "ds3",
+               .gpio                   = AT91_PIN_PD14,
+               .default_trigger        = "heartbeat",
+       }
+};
+
+
+/*
+ * GPIO Buttons
+ */
+#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
+static struct gpio_keys_button ek_buttons[] = {
+       {
+               .gpio           = AT91_PIN_PB0,
+               .code           = BTN_2,
+               .desc           = "Right Click",
+               .active_low     = 1,
+               .wakeup         = 1,
+       },
+       {
+               .gpio           = AT91_PIN_PB1,
+               .code           = BTN_1,
+               .desc           = "Left Click",
+               .active_low     = 1,
+               .wakeup         = 1,
+       }
+};
+
+static struct gpio_keys_platform_data ek_button_data = {
+       .buttons        = ek_buttons,
+       .nbuttons       = ARRAY_SIZE(ek_buttons),
+};
+
+static struct platform_device ek_button_device = {
+       .name           = "gpio-keys",
+       .id             = -1,
+       .num_resources  = 0,
+       .dev            = {
+               .platform_data  = &ek_button_data,
+       }
+};
+
+static void __init ek_add_device_buttons(void)
+{
+       at91_set_gpio_input(AT91_PIN_PB1, 1);   /* btn1 */
+       at91_set_deglitch(AT91_PIN_PB1, 1);
+       at91_set_gpio_input(AT91_PIN_PB0, 1);   /* btn2 */
+       at91_set_deglitch(AT91_PIN_PB0, 1);
+
+       platform_device_register(&ek_button_device);
+}
+#else
+static void __init ek_add_device_buttons(void) {}
+#endif
+
+
 static void __init ek_board_init(void)
 {
        /* Serial */
@@ -224,8 +307,14 @@ static void __init ek_board_init(void)
        at91_add_device_mmc(0, &ek_mmc_data);
        /* LCD Controller */
        at91_add_device_lcdc(&ek_lcdc_data);
+       /* AC97 */
+       at91_add_device_ac97(&ek_ac97_data);
        /* Touch Screen Controller */
        at91_add_device_tsadcc();
+       /* LEDs */
+       at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
+       /* Push Buttons */
+       ek_add_device_buttons();
 }
 
 MACHINE_START(AT91SAM9RLEK, "Atmel AT91SAM9RL-EK")