Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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 */