ARM: kirkwood: Add LS-XHL and LS-CHLv2 support
Add support for Buffalo Linkstation LS-XHL and LS-CHLv2 using the device tree where possible. Signed-off-by: Michael Walle <michael@walle.cc> Signed-off-by: Andrew Lunn <andrew@lunn.ch>
This commit is contained in:
parent
5136b2aa62
commit
4aff38a3db
20
arch/arm/boot/dts/kirkwood-lschlv2.dts
Normal file
20
arch/arm/boot/dts/kirkwood-lschlv2.dts
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
/include/ "kirkwood-lsxl.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "Buffalo Linkstation LS-CHLv2";
|
||||||
|
compatible = "buffalo,lschlv2", "buffalo,lsxl", "mrvl,kirkwood-88f6281", "mrvl,kirkwood";
|
||||||
|
|
||||||
|
memory {
|
||||||
|
device_type = "memory";
|
||||||
|
reg = <0x00000000 0x4000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
ocp@f1000000 {
|
||||||
|
serial@12000 {
|
||||||
|
clock-frequency = <166666667>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
20
arch/arm/boot/dts/kirkwood-lsxhl.dts
Normal file
20
arch/arm/boot/dts/kirkwood-lsxhl.dts
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
/include/ "kirkwood-lsxl.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "Buffalo Linkstation LS-XHL";
|
||||||
|
compatible = "buffalo,lsxhl", "buffalo,lsxl", "mrvl,kirkwood-88f6281", "mrvl,kirkwood";
|
||||||
|
|
||||||
|
memory {
|
||||||
|
device_type = "memory";
|
||||||
|
reg = <0x00000000 0x10000000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
ocp@f1000000 {
|
||||||
|
serial@12000 {
|
||||||
|
clock-frequency = <200000000>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
95
arch/arm/boot/dts/kirkwood-lsxl.dtsi
Normal file
95
arch/arm/boot/dts/kirkwood-lsxl.dtsi
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
/include/ "kirkwood.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
bootargs = "console=ttyS0,115200n8 earlyprintk";
|
||||||
|
};
|
||||||
|
|
||||||
|
ocp@f1000000 {
|
||||||
|
sata@80000 {
|
||||||
|
status = "okay";
|
||||||
|
nr-ports = <1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
spi@10600 {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
m25p40@0 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
compatible = "m25p40";
|
||||||
|
reg = <0>;
|
||||||
|
spi-max-frequency = <25000000>;
|
||||||
|
mode = <0>;
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
reg = <0x0 0x60000>;
|
||||||
|
label = "uboot";
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@60000 {
|
||||||
|
reg = <0x60000 0x10000>;
|
||||||
|
label = "dtb";
|
||||||
|
read-only;
|
||||||
|
};
|
||||||
|
|
||||||
|
partition@70000 {
|
||||||
|
reg = <0x70000 0x10000>;
|
||||||
|
label = "uboot_env";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
gpio_keys {
|
||||||
|
compatible = "gpio-keys";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
button@1 {
|
||||||
|
label = "Function Button";
|
||||||
|
linux,code = <132>;
|
||||||
|
gpios = <&gpio1 9 1>;
|
||||||
|
};
|
||||||
|
button@2 {
|
||||||
|
label = "Power-on Switch";
|
||||||
|
linux,code = <116>;
|
||||||
|
gpios = <&gpio1 10 1>;
|
||||||
|
};
|
||||||
|
button@3 {
|
||||||
|
label = "Power-auto Switch";
|
||||||
|
linux,code = <142>;
|
||||||
|
gpios = <&gpio1 11 1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
gpio_leds {
|
||||||
|
compatible = "gpio-leds";
|
||||||
|
|
||||||
|
led@1 {
|
||||||
|
label = "lschlv2:blue:func";
|
||||||
|
gpios = <&gpio1 4 1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
led@2 {
|
||||||
|
label = "lschlv2:red:alarm";
|
||||||
|
gpios = <&gpio1 5 1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
led@3 {
|
||||||
|
label = "lschlv2:amber:info";
|
||||||
|
gpios = <&gpio1 6 1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
led@4 {
|
||||||
|
label = "lschlv2:blue:power";
|
||||||
|
gpios = <&gpio1 7 1>;
|
||||||
|
linux,default-trigger = "default-on";
|
||||||
|
};
|
||||||
|
|
||||||
|
led@5 {
|
||||||
|
label = "lschlv2:red:func";
|
||||||
|
gpios = <&gpio1 16 1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
@ -101,6 +101,14 @@ config MACH_GOFLEXNET_DT
|
|||||||
Say 'Y' here if you want your kernel to support the
|
Say 'Y' here if you want your kernel to support the
|
||||||
Seagate GoFlex Net (Flattened Device Tree).
|
Seagate GoFlex Net (Flattened Device Tree).
|
||||||
|
|
||||||
|
config MACH_LSXL_DT
|
||||||
|
bool "Buffalo Linkstation LS-XHL, LS-CHLv2 (Flattened Device Tree)"
|
||||||
|
select ARCH_KIRKWOOD_DT
|
||||||
|
help
|
||||||
|
Say 'Y' here if you want your kernel to support the
|
||||||
|
Buffalo Linkstation LS-XHL & LS-CHLv2 devices, using
|
||||||
|
Flattened Device Tree.
|
||||||
|
|
||||||
config MACH_TS219
|
config MACH_TS219
|
||||||
bool "QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and TS-219P+ Turbo NAS"
|
bool "QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and TS-219P+ Turbo NAS"
|
||||||
help
|
help
|
||||||
|
@ -27,3 +27,4 @@ obj-$(CONFIG_MACH_DLINK_KIRKWOOD_DT) += board-dnskw.o
|
|||||||
obj-$(CONFIG_MACH_IB62X0_DT) += board-ib62x0.o
|
obj-$(CONFIG_MACH_IB62X0_DT) += board-ib62x0.o
|
||||||
obj-$(CONFIG_MACH_TS219_DT) += board-ts219.o tsx1x-common.o
|
obj-$(CONFIG_MACH_TS219_DT) += board-ts219.o tsx1x-common.o
|
||||||
obj-$(CONFIG_MACH_GOFLEXNET_DT) += board-goflexnet.o
|
obj-$(CONFIG_MACH_GOFLEXNET_DT) += board-goflexnet.o
|
||||||
|
obj-$(CONFIG_MACH_LSXL_DT) += board-lsxl.o
|
||||||
|
@ -9,3 +9,5 @@ dtb-$(CONFIG_MACH_ICONNECT_DT) += kirkwood-iconnect.dtb
|
|||||||
dtb-$(CONFIG_MACH_IB62X0_DT) += kirkwood-ib62x0.dtb
|
dtb-$(CONFIG_MACH_IB62X0_DT) += kirkwood-ib62x0.dtb
|
||||||
dtb-$(CONFIG_MACH_TS219_DT) += kirkwood-qnap-ts219.dtb
|
dtb-$(CONFIG_MACH_TS219_DT) += kirkwood-qnap-ts219.dtb
|
||||||
dtb-$(CONFIG_MACH_GOFLEXNET_DT) += kirkwood-goflexnet.dtb
|
dtb-$(CONFIG_MACH_GOFLEXNET_DT) += kirkwood-goflexnet.dtb
|
||||||
|
dbt-$(CONFIG_MACH_LSXL_DT) += kirkwood-lschlv2.dtb
|
||||||
|
dbt-$(CONFIG_MACH_LSXL_DT) += kirkwood-lsxhl.dtb
|
||||||
|
@ -84,6 +84,9 @@ static void __init kirkwood_dt_init(void)
|
|||||||
if (of_machine_is_compatible("seagate,goflexnet"))
|
if (of_machine_is_compatible("seagate,goflexnet"))
|
||||||
goflexnet_init();
|
goflexnet_init();
|
||||||
|
|
||||||
|
if (of_machine_is_compatible("buffalo,lsxl"))
|
||||||
|
lsxl_init();
|
||||||
|
|
||||||
of_platform_populate(NULL, kirkwood_dt_match_table,
|
of_platform_populate(NULL, kirkwood_dt_match_table,
|
||||||
kirkwood_auxdata_lookup, NULL);
|
kirkwood_auxdata_lookup, NULL);
|
||||||
}
|
}
|
||||||
@ -96,6 +99,7 @@ static const char *kirkwood_dt_board_compat[] = {
|
|||||||
"raidsonic,ib-nas62x0",
|
"raidsonic,ib-nas62x0",
|
||||||
"qnap,ts219",
|
"qnap,ts219",
|
||||||
"seagate,goflexnet",
|
"seagate,goflexnet",
|
||||||
|
"buffalo,lsxl",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
135
arch/arm/mach-kirkwood/board-lsxl.c
Normal file
135
arch/arm/mach-kirkwood/board-lsxl.c
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2012 (C), Michael Walle <michael@walle.cc>
|
||||||
|
*
|
||||||
|
* arch/arm/mach-kirkwood/board-lsxl.c
|
||||||
|
*
|
||||||
|
* Buffalo Linkstation LS-XHL and LS-CHLv2 init for drivers not
|
||||||
|
* converted to flattened device tree yet.
|
||||||
|
*
|
||||||
|
* This file is licensed under the terms of the GNU General Public
|
||||||
|
* License version 2. This program is licensed "as is" without any
|
||||||
|
* warranty of any kind, whether express or implied.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/mtd/partitions.h>
|
||||||
|
#include <linux/ata_platform.h>
|
||||||
|
#include <linux/spi/flash.h>
|
||||||
|
#include <linux/spi/spi.h>
|
||||||
|
#include <linux/mv643xx_eth.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/gpio-fan.h>
|
||||||
|
#include <linux/input.h>
|
||||||
|
#include <asm/mach-types.h>
|
||||||
|
#include <asm/mach/arch.h>
|
||||||
|
#include <mach/kirkwood.h>
|
||||||
|
#include "common.h"
|
||||||
|
#include "mpp.h"
|
||||||
|
|
||||||
|
static struct mv643xx_eth_platform_data lsxl_ge00_data = {
|
||||||
|
.phy_addr = MV643XX_ETH_PHY_ADDR(0),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct mv643xx_eth_platform_data lsxl_ge01_data = {
|
||||||
|
.phy_addr = MV643XX_ETH_PHY_ADDR(8),
|
||||||
|
};
|
||||||
|
|
||||||
|
static unsigned int lsxl_mpp_config[] __initdata = {
|
||||||
|
MPP10_GPO, /* HDD Power Enable */
|
||||||
|
MPP11_GPIO, /* USB Vbus Enable */
|
||||||
|
MPP18_GPO, /* FAN High Enable# */
|
||||||
|
MPP19_GPO, /* FAN Low Enable# */
|
||||||
|
MPP36_GPIO, /* Function Blue LED */
|
||||||
|
MPP37_GPIO, /* Alarm LED */
|
||||||
|
MPP38_GPIO, /* Info LED */
|
||||||
|
MPP39_GPIO, /* Power LED */
|
||||||
|
MPP40_GPIO, /* Fan Lock */
|
||||||
|
MPP41_GPIO, /* Function Button */
|
||||||
|
MPP42_GPIO, /* Power Switch */
|
||||||
|
MPP43_GPIO, /* Power Auto Switch */
|
||||||
|
MPP48_GPIO, /* Function Red LED */
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
#define LSXL_GPIO_FAN_HIGH 18
|
||||||
|
#define LSXL_GPIO_FAN_LOW 19
|
||||||
|
#define LSXL_GPIO_FAN_LOCK 40
|
||||||
|
|
||||||
|
static struct gpio_fan_alarm lsxl_alarm = {
|
||||||
|
.gpio = LSXL_GPIO_FAN_LOCK,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct gpio_fan_speed lsxl_speeds[] = {
|
||||||
|
{
|
||||||
|
.rpm = 0,
|
||||||
|
.ctrl_val = 3,
|
||||||
|
}, {
|
||||||
|
.rpm = 1500,
|
||||||
|
.ctrl_val = 1,
|
||||||
|
}, {
|
||||||
|
.rpm = 3250,
|
||||||
|
.ctrl_val = 2,
|
||||||
|
}, {
|
||||||
|
.rpm = 5000,
|
||||||
|
.ctrl_val = 0,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static int lsxl_gpio_list[] = {
|
||||||
|
LSXL_GPIO_FAN_HIGH, LSXL_GPIO_FAN_LOW,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct gpio_fan_platform_data lsxl_fan_data = {
|
||||||
|
.num_ctrl = ARRAY_SIZE(lsxl_gpio_list),
|
||||||
|
.ctrl = lsxl_gpio_list,
|
||||||
|
.alarm = &lsxl_alarm,
|
||||||
|
.num_speed = ARRAY_SIZE(lsxl_speeds),
|
||||||
|
.speed = lsxl_speeds,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device lsxl_fan_device = {
|
||||||
|
.name = "gpio-fan",
|
||||||
|
.id = -1,
|
||||||
|
.num_resources = 0,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &lsxl_fan_data,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* On the LS-XHL/LS-CHLv2, the shutdown process is following:
|
||||||
|
* - Userland monitors key events until the power switch goes to off position
|
||||||
|
* - The board reboots
|
||||||
|
* - U-boot starts and goes into an idle mode waiting for the user
|
||||||
|
* to move the switch to ON position
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static void lsxl_power_off(void)
|
||||||
|
{
|
||||||
|
kirkwood_restart('h', NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define LSXL_GPIO_HDD_POWER 10
|
||||||
|
#define LSXL_GPIO_USB_POWER 11
|
||||||
|
|
||||||
|
void __init lsxl_init(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Basic setup. Needs to be called early.
|
||||||
|
*/
|
||||||
|
kirkwood_mpp_conf(lsxl_mpp_config);
|
||||||
|
|
||||||
|
/* usb and sata power on */
|
||||||
|
gpio_set_value(LSXL_GPIO_USB_POWER, 1);
|
||||||
|
gpio_set_value(LSXL_GPIO_HDD_POWER, 1);
|
||||||
|
|
||||||
|
kirkwood_ehci_init();
|
||||||
|
kirkwood_ge00_init(&lsxl_ge00_data);
|
||||||
|
kirkwood_ge01_init(&lsxl_ge01_data);
|
||||||
|
platform_device_register(&lsxl_fan_device);
|
||||||
|
|
||||||
|
/* register power-off method */
|
||||||
|
pm_power_off = lsxl_power_off;
|
||||||
|
}
|
@ -88,6 +88,12 @@ void goflexnet_init(void);
|
|||||||
static inline void goflexnet_init(void) {};
|
static inline void goflexnet_init(void) {};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_MACH_LSXL_DT
|
||||||
|
void lsxl_init(void);
|
||||||
|
#else
|
||||||
|
static inline void lsxl_init(void) {};
|
||||||
|
#endif
|
||||||
|
|
||||||
/* early init functions not converted to fdt yet */
|
/* early init functions not converted to fdt yet */
|
||||||
char *kirkwood_id(void);
|
char *kirkwood_id(void);
|
||||||
void kirkwood_l2_init(void);
|
void kirkwood_l2_init(void);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user