1/* 2 * Atheros AP81 board support 3 * 4 * Copyright (C) 2009-2010 Gabor Juhos <juhosg@openwrt.org> 5 * Copyright (C) 2009 Imre Kaloz <kaloz@openwrt.org> 6 * 7 * This program is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU General Public License version 2 as published 9 * by the Free Software Foundation. 10 */ 11 12#include "machtypes.h" 13#include "dev-wmac.h" 14#include "dev-gpio-buttons.h" 15#include "dev-leds-gpio.h" 16#include "dev-spi.h" 17#include "dev-usb.h" 18 19#define AP81_GPIO_LED_STATUS 1 20#define AP81_GPIO_LED_AOSS 3 21#define AP81_GPIO_LED_WLAN 6 22#define AP81_GPIO_LED_POWER 14 23 24#define AP81_GPIO_BTN_SW4 12 25#define AP81_GPIO_BTN_SW1 21 26 27#define AP81_KEYS_POLL_INTERVAL 20 /* msecs */ 28#define AP81_KEYS_DEBOUNCE_INTERVAL (3 * AP81_KEYS_POLL_INTERVAL) 29 30#define AP81_CAL_DATA_ADDR 0x1fff1000 31 32static struct gpio_led ap81_leds_gpio[] __initdata = { 33 { 34 .name = "ap81:green:status", 35 .gpio = AP81_GPIO_LED_STATUS, 36 .active_low = 1, 37 }, { 38 .name = "ap81:amber:aoss", 39 .gpio = AP81_GPIO_LED_AOSS, 40 .active_low = 1, 41 }, { 42 .name = "ap81:green:wlan", 43 .gpio = AP81_GPIO_LED_WLAN, 44 .active_low = 1, 45 }, { 46 .name = "ap81:green:power", 47 .gpio = AP81_GPIO_LED_POWER, 48 .active_low = 1, 49 } 50}; 51 52static struct gpio_keys_button ap81_gpio_keys[] __initdata = { 53 { 54 .desc = "sw1", 55 .type = EV_KEY, 56 .code = BTN_0, 57 .debounce_interval = AP81_KEYS_DEBOUNCE_INTERVAL, 58 .gpio = AP81_GPIO_BTN_SW1, 59 .active_low = 1, 60 } , { 61 .desc = "sw4", 62 .type = EV_KEY, 63 .code = BTN_1, 64 .debounce_interval = AP81_KEYS_DEBOUNCE_INTERVAL, 65 .gpio = AP81_GPIO_BTN_SW4, 66 .active_low = 1, 67 } 68}; 69 70static struct spi_board_info ap81_spi_info[] = { 71 { 72 .bus_num = 0, 73 .chip_select = 0, 74 .max_speed_hz = 25000000, 75 .modalias = "m25p64", 76 } 77}; 78 79static struct ath79_spi_platform_data ap81_spi_data = { 80 .bus_num = 0, 81 .num_chipselect = 1, 82}; 83 84static void __init ap81_setup(void) 85{ 86 u8 *cal_data = (u8 *) KSEG1ADDR(AP81_CAL_DATA_ADDR); 87 88 ath79_register_leds_gpio(-1, ARRAY_SIZE(ap81_leds_gpio), 89 ap81_leds_gpio); 90 ath79_register_gpio_keys_polled(-1, AP81_KEYS_POLL_INTERVAL, 91 ARRAY_SIZE(ap81_gpio_keys), 92 ap81_gpio_keys); 93 ath79_register_spi(&ap81_spi_data, ap81_spi_info, 94 ARRAY_SIZE(ap81_spi_info)); 95 ath79_register_wmac(cal_data); 96 ath79_register_usb(); 97} 98 99MIPS_MACHINE(ATH79_MACH_AP81, "AP81", "Atheros AP81 reference board", 100 ap81_setup); 101