PageRenderTime 11ms CodeModel.GetById 1ms app.highlight 7ms RepoModel.GetById 1ms app.codeStats 0ms

/Ethereal-msm8939-beta9/arch/mips/ath79/mach-ubnt-xm.c

https://bitbucket.org/MilosStamenkovic95/etherealos
C | 126 lines | 94 code | 21 blank | 11 comment | 1 complexity | 7fcf6c29484140e13bf3d411c7279dae MD5 | raw file
  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#include <linux/ath9k_platform.h>
 16
 17#include <asm/mach-ath79/irq.h>
 18
 19#include "machtypes.h"
 20#include "dev-gpio-buttons.h"
 21#include "dev-leds-gpio.h"
 22#include "dev-spi.h"
 23#include "pci.h"
 24
 25#define UBNT_XM_GPIO_LED_L1		0
 26#define UBNT_XM_GPIO_LED_L2		1
 27#define UBNT_XM_GPIO_LED_L3		11
 28#define UBNT_XM_GPIO_LED_L4		7
 29
 30#define UBNT_XM_GPIO_BTN_RESET		12
 31
 32#define UBNT_XM_KEYS_POLL_INTERVAL	20
 33#define UBNT_XM_KEYS_DEBOUNCE_INTERVAL	(3 * UBNT_XM_KEYS_POLL_INTERVAL)
 34
 35#define UBNT_XM_EEPROM_ADDR		(u8 *) KSEG1ADDR(0x1fff1000)
 36
 37static struct gpio_led ubnt_xm_leds_gpio[] __initdata = {
 38	{
 39		.name		= "ubnt-xm:red:link1",
 40		.gpio		= UBNT_XM_GPIO_LED_L1,
 41		.active_low	= 0,
 42	}, {
 43		.name		= "ubnt-xm:orange:link2",
 44		.gpio		= UBNT_XM_GPIO_LED_L2,
 45		.active_low	= 0,
 46	}, {
 47		.name		= "ubnt-xm:green:link3",
 48		.gpio		= UBNT_XM_GPIO_LED_L3,
 49		.active_low	= 0,
 50	}, {
 51		.name		= "ubnt-xm:green:link4",
 52		.gpio		= UBNT_XM_GPIO_LED_L4,
 53		.active_low	= 0,
 54	},
 55};
 56
 57static struct gpio_keys_button ubnt_xm_gpio_keys[] __initdata = {
 58	{
 59		.desc			= "reset",
 60		.type			= EV_KEY,
 61		.code			= KEY_RESTART,
 62		.debounce_interval	= UBNT_XM_KEYS_DEBOUNCE_INTERVAL,
 63		.gpio			= UBNT_XM_GPIO_BTN_RESET,
 64		.active_low		= 1,
 65	}
 66};
 67
 68static struct spi_board_info ubnt_xm_spi_info[] = {
 69	{
 70		.bus_num	= 0,
 71		.chip_select	= 0,
 72		.max_speed_hz	= 25000000,
 73		.modalias	= "mx25l6405d",
 74	}
 75};
 76
 77static struct ath79_spi_platform_data ubnt_xm_spi_data = {
 78	.bus_num		= 0,
 79	.num_chipselect		= 1,
 80};
 81
 82#ifdef CONFIG_PCI
 83static struct ath9k_platform_data ubnt_xm_eeprom_data;
 84
 85static int ubnt_xm_pci_plat_dev_init(struct pci_dev *dev)
 86{
 87	switch (PCI_SLOT(dev->devfn)) {
 88	case 0:
 89		dev->dev.platform_data = &ubnt_xm_eeprom_data;
 90		break;
 91	}
 92
 93	return 0;
 94}
 95
 96static void __init ubnt_xm_pci_init(void)
 97{
 98	memcpy(ubnt_xm_eeprom_data.eeprom_data, UBNT_XM_EEPROM_ADDR,
 99	       sizeof(ubnt_xm_eeprom_data.eeprom_data));
100
101	ath79_pci_set_plat_dev_init(ubnt_xm_pci_plat_dev_init);
102	ath79_register_pci();
103}
104#else
105static inline void ubnt_xm_pci_init(void) {}
106#endif /* CONFIG_PCI */
107
108static void __init ubnt_xm_init(void)
109{
110	ath79_register_leds_gpio(-1, ARRAY_SIZE(ubnt_xm_leds_gpio),
111				 ubnt_xm_leds_gpio);
112
113	ath79_register_gpio_keys_polled(-1, UBNT_XM_KEYS_POLL_INTERVAL,
114					ARRAY_SIZE(ubnt_xm_gpio_keys),
115					ubnt_xm_gpio_keys);
116
117	ath79_register_spi(&ubnt_xm_spi_data, ubnt_xm_spi_info,
118			   ARRAY_SIZE(ubnt_xm_spi_info));
119
120	ubnt_xm_pci_init();
121}
122
123MIPS_MACHINE(ATH79_MACH_UBNT_XM,
124	     "UBNT-XM",
125	     "Ubiquiti Networks XM (rev 1.0) board",
126	     ubnt_xm_init);