Commit 2dc7b4a1 authored by Rene Bolldorf's avatar Rene Bolldorf Committed by Ralf Baechle
Browse files

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



Signed-off-by: default avatarRene 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: default avatarRalf Baechle <ralf@linux-mips.org>
parent 4ff40d5a
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -36,6 +36,16 @@ config ATH79_MACH_PB44
	  Say 'Y' here if you want your kernel to support the
	  Atheros PB44 reference board.

config ATH79_MACH_UBNT_XM
	bool "Ubiquiti Networks XM (rev 1.0) board"
	select SOC_AR724X
	select ATH79_DEV_GPIO_BUTTONS
	select ATH79_DEV_LEDS_GPIO
	select ATH79_DEV_SPI
	help
	  Say 'Y' here if you want your kernel to support the
	  Ubiquiti Networks XM (rev 1.0) board.

endmenu

config SOC_AR71XX
@@ -46,6 +56,7 @@ config SOC_AR71XX
config SOC_AR724X
	select USB_ARCH_HAS_EHCI
	select USB_ARCH_HAS_OHCI
	select HW_HAS_PCI
	def_bool n

config SOC_AR913X
+1 −0
Original line number Diff line number Diff line
@@ -28,3 +28,4 @@ obj-$(CONFIG_ATH79_DEV_USB) += dev-usb.o
obj-$(CONFIG_ATH79_MACH_AP121)		+= mach-ap121.o
obj-$(CONFIG_ATH79_MACH_AP81)		+= mach-ap81.o
obj-$(CONFIG_ATH79_MACH_PB44)		+= mach-pb44.o
obj-$(CONFIG_ATH79_MACH_UBNT_XM)	+= mach-ubnt-xm.o
+119 −0
Original line number Diff line number Diff line
/*
 *  Ubiquiti Networks XM (rev 1.0) board support
 *
 *  Copyright (C) 2011 René Bolldorf <xsecute@googlemail.com>
 *
 *  Derived from: mach-pb44.c
 *
 *  This program is free software; you can redistribute it and/or modify it
 *  under the terms of the GNU General Public License version 2 as published
 *  by the Free Software Foundation.
 */

#include <linux/init.h>
#include <linux/pci.h>

#ifdef CONFIG_PCI
#include <linux/ath9k_platform.h>
#include <asm/mach-ath79/pci-ath724x.h>
#endif /* CONFIG_PCI */

#include "machtypes.h"
#include "dev-gpio-buttons.h"
#include "dev-leds-gpio.h"
#include "dev-spi.h"

#define UBNT_XM_GPIO_LED_L1		0
#define UBNT_XM_GPIO_LED_L2		1
#define UBNT_XM_GPIO_LED_L3		11
#define UBNT_XM_GPIO_LED_L4		7

#define UBNT_XM_GPIO_BTN_RESET		12

#define UBNT_XM_KEYS_POLL_INTERVAL	20
#define UBNT_XM_KEYS_DEBOUNCE_INTERVAL	(3 * UBNT_XM_KEYS_POLL_INTERVAL)

#define UBNT_XM_PCI_IRQ			48
#define UBNT_XM_EEPROM_ADDR		(u8 *) KSEG1ADDR(0x1fff1000)

static struct gpio_led ubnt_xm_leds_gpio[] __initdata = {
	{
		.name		= "ubnt-xm:red:link1",
		.gpio		= UBNT_XM_GPIO_LED_L1,
		.active_low	= 0,
	}, {
		.name		= "ubnt-xm:orange:link2",
		.gpio		= UBNT_XM_GPIO_LED_L2,
		.active_low	= 0,
	}, {
		.name		= "ubnt-xm:green:link3",
		.gpio		= UBNT_XM_GPIO_LED_L3,
		.active_low	= 0,
	}, {
		.name		= "ubnt-xm:green:link4",
		.gpio		= UBNT_XM_GPIO_LED_L4,
		.active_low	= 0,
	},
};

static struct gpio_keys_button ubnt_xm_gpio_keys[] __initdata = {
	{
		.desc			= "reset",
		.type			= EV_KEY,
		.code			= KEY_RESTART,
		.debounce_interval	= UBNT_XM_KEYS_DEBOUNCE_INTERVAL,
		.gpio			= UBNT_XM_GPIO_BTN_RESET,
		.active_low		= 1,
	}
};

static struct spi_board_info ubnt_xm_spi_info[] = {
	{
		.bus_num	= 0,
		.chip_select	= 0,
		.max_speed_hz	= 25000000,
		.modalias	= "mx25l6405d",
	}
};

static struct ath79_spi_platform_data ubnt_xm_spi_data = {
	.bus_num		= 0,
	.num_chipselect		= 1,
};

#ifdef CONFIG_PCI
static struct ath9k_platform_data ubnt_xm_eeprom_data;

static struct ath724x_pci_data ubnt_xm_pci_data[] = {
	{
		.irq	= UBNT_XM_PCI_IRQ,
		.pdata	= &ubnt_xm_eeprom_data,
	},
};
#endif /* CONFIG_PCI */

static void __init ubnt_xm_init(void)
{
	ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_xm_leds_gpio),
				 ubnt_xm_leds_gpio);

	ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
					ARRAY_SIZE(ubnt_xm_gpio_keys),
					ubnt_xm_gpio_keys);

	ath79_register_spi(&ubnt_xm_spi_data, ubnt_xm_spi_info,
			   ARRAY_SIZE(ubnt_xm_spi_info));

#ifdef CONFIG_PCI
	memcpy(ubnt_xm_eeprom_data.eeprom_data, UBNT_XM_EEPROM_ADDR,
	       sizeof(ubnt_xm_eeprom_data.eeprom_data));

	ath724x_pci_add_data(ubnt_xm_pci_data, ARRAY_SIZE(ubnt_xm_pci_data));
#endif /* CONFIG_PCI */

}

MIPS_MACHINE(ATH79_MACH_UBNT_XM,
	     "UBNT-XM",
	     "Ubiquiti Networks XM (rev 1.0) board",
	     ubnt_xm_init);
+1 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ enum ath79_mach_type {
	ATH79_MACH_AP121,		/* Atheros AP121 reference board */
	ATH79_MACH_AP81,		/* Atheros AP81 reference board */
	ATH79_MACH_PB44,		/* Atheros PB44 reference board */
	ATH79_MACH_UBNT_XM,		/* Ubiquiti Networks XM board rev 1.0 */
};

#endif /* _ATH79_MACHTYPE_H */