Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Initial support for the Ubiquiti Networks XM board (rev 1.0).

Signed-off-by: Rene Bolldorf <xsecute@googlemail.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/3020/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>

authored by

Rene Bolldorf and committed by
Ralf Baechle
2dc7b4a1 4ff40d5a

+132
+11
arch/mips/ath79/Kconfig
··· 36 36 Say 'Y' here if you want your kernel to support the 37 37 Atheros PB44 reference board. 38 38 39 + config ATH79_MACH_UBNT_XM 40 + bool "Ubiquiti Networks XM (rev 1.0) board" 41 + select SOC_AR724X 42 + select ATH79_DEV_GPIO_BUTTONS 43 + select ATH79_DEV_LEDS_GPIO 44 + select ATH79_DEV_SPI 45 + help 46 + Say 'Y' here if you want your kernel to support the 47 + Ubiquiti Networks XM (rev 1.0) board. 48 + 39 49 endmenu 40 50 41 51 config SOC_AR71XX ··· 56 46 config SOC_AR724X 57 47 select USB_ARCH_HAS_EHCI 58 48 select USB_ARCH_HAS_OHCI 49 + select HW_HAS_PCI 59 50 def_bool n 60 51 61 52 config SOC_AR913X
+1
arch/mips/ath79/Makefile
··· 28 28 obj-$(CONFIG_ATH79_MACH_AP121) += mach-ap121.o 29 29 obj-$(CONFIG_ATH79_MACH_AP81) += mach-ap81.o 30 30 obj-$(CONFIG_ATH79_MACH_PB44) += mach-pb44.o 31 + obj-$(CONFIG_ATH79_MACH_UBNT_XM) += mach-ubnt-xm.o
+119
arch/mips/ath79/mach-ubnt-xm.c
··· 1 + /* 2 + * Ubiquiti Networks XM (rev 1.0) board support 3 + * 4 + * Copyright (C) 2011 René Bolldorf <xsecute@googlemail.com> 5 + * 6 + * Derived from: mach-pb44.c 7 + * 8 + * This program is free software; you can redistribute it and/or modify it 9 + * under the terms of the GNU General Public License version 2 as published 10 + * by the Free Software Foundation. 11 + */ 12 + 13 + #include <linux/init.h> 14 + #include <linux/pci.h> 15 + 16 + #ifdef CONFIG_PCI 17 + #include <linux/ath9k_platform.h> 18 + #include <asm/mach-ath79/pci-ath724x.h> 19 + #endif /* CONFIG_PCI */ 20 + 21 + #include "machtypes.h" 22 + #include "dev-gpio-buttons.h" 23 + #include "dev-leds-gpio.h" 24 + #include "dev-spi.h" 25 + 26 + #define UBNT_XM_GPIO_LED_L1 0 27 + #define UBNT_XM_GPIO_LED_L2 1 28 + #define UBNT_XM_GPIO_LED_L3 11 29 + #define UBNT_XM_GPIO_LED_L4 7 30 + 31 + #define UBNT_XM_GPIO_BTN_RESET 12 32 + 33 + #define UBNT_XM_KEYS_POLL_INTERVAL 20 34 + #define UBNT_XM_KEYS_DEBOUNCE_INTERVAL (3 * UBNT_XM_KEYS_POLL_INTERVAL) 35 + 36 + #define UBNT_XM_PCI_IRQ 48 37 + #define UBNT_XM_EEPROM_ADDR (u8 *) KSEG1ADDR(0x1fff1000) 38 + 39 + static struct gpio_led ubnt_xm_leds_gpio[] __initdata = { 40 + { 41 + .name = "ubnt-xm:red:link1", 42 + .gpio = UBNT_XM_GPIO_LED_L1, 43 + .active_low = 0, 44 + }, { 45 + .name = "ubnt-xm:orange:link2", 46 + .gpio = UBNT_XM_GPIO_LED_L2, 47 + .active_low = 0, 48 + }, { 49 + .name = "ubnt-xm:green:link3", 50 + .gpio = UBNT_XM_GPIO_LED_L3, 51 + .active_low = 0, 52 + }, { 53 + .name = "ubnt-xm:green:link4", 54 + .gpio = UBNT_XM_GPIO_LED_L4, 55 + .active_low = 0, 56 + }, 57 + }; 58 + 59 + static struct gpio_keys_button ubnt_xm_gpio_keys[] __initdata = { 60 + { 61 + .desc = "reset", 62 + .type = EV_KEY, 63 + .code = KEY_RESTART, 64 + .debounce_interval = UBNT_XM_KEYS_DEBOUNCE_INTERVAL, 65 + .gpio = UBNT_XM_GPIO_BTN_RESET, 66 + .active_low = 1, 67 + } 68 + }; 69 + 70 + static struct spi_board_info ubnt_xm_spi_info[] = { 71 + { 72 + .bus_num = 0, 73 + .chip_select = 0, 74 + .max_speed_hz = 25000000, 75 + .modalias = "mx25l6405d", 76 + } 77 + }; 78 + 79 + static struct ath79_spi_platform_data ubnt_xm_spi_data = { 80 + .bus_num = 0, 81 + .num_chipselect = 1, 82 + }; 83 + 84 + #ifdef CONFIG_PCI 85 + static struct ath9k_platform_data ubnt_xm_eeprom_data; 86 + 87 + static struct ath724x_pci_data ubnt_xm_pci_data[] = { 88 + { 89 + .irq = UBNT_XM_PCI_IRQ, 90 + .pdata = &ubnt_xm_eeprom_data, 91 + }, 92 + }; 93 + #endif /* CONFIG_PCI */ 94 + 95 + static void __init ubnt_xm_init(void) 96 + { 97 + ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_xm_leds_gpio), 98 + ubnt_xm_leds_gpio); 99 + 100 + ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL, 101 + ARRAY_SIZE(ubnt_xm_gpio_keys), 102 + ubnt_xm_gpio_keys); 103 + 104 + ath79_register_spi(&ubnt_xm_spi_data, ubnt_xm_spi_info, 105 + ARRAY_SIZE(ubnt_xm_spi_info)); 106 + 107 + #ifdef CONFIG_PCI 108 + memcpy(ubnt_xm_eeprom_data.eeprom_data, UBNT_XM_EEPROM_ADDR, 109 + sizeof(ubnt_xm_eeprom_data.eeprom_data)); 110 + 111 + ath724x_pci_add_data(ubnt_xm_pci_data, ARRAY_SIZE(ubnt_xm_pci_data)); 112 + #endif /* CONFIG_PCI */ 113 + 114 + } 115 + 116 + MIPS_MACHINE(ATH79_MACH_UBNT_XM, 117 + "UBNT-XM", 118 + "Ubiquiti Networks XM (rev 1.0) board", 119 + ubnt_xm_init);
+1
arch/mips/ath79/machtypes.h
··· 19 19 ATH79_MACH_AP121, /* Atheros AP121 reference board */ 20 20 ATH79_MACH_AP81, /* Atheros AP81 reference board */ 21 21 ATH79_MACH_PB44, /* Atheros PB44 reference board */ 22 + ATH79_MACH_UBNT_XM, /* Ubiquiti Networks XM board rev 1.0 */ 22 23 }; 23 24 24 25 #endif /* _ATH79_MACHTYPE_H */