Merge branch 'for-rmk' of git://git.marvell.com/orion
This commit is contained in:
commit
00e4acb1e2
4 changed files with 118 additions and 6 deletions
|
@ -13,6 +13,7 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <linux/ata_platform.h>
|
||||
#include <linux/mv643xx_eth.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/spi/flash.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/orion_spi.h>
|
||||
|
@ -53,6 +54,11 @@ static void __init rd88f6192_init(void)
|
|||
*/
|
||||
kirkwood_init();
|
||||
|
||||
orion_gpio_set_valid(RD88F6192_GPIO_USB_VBUS, 1);
|
||||
if (gpio_request(RD88F6192_GPIO_USB_VBUS, "USB VBUS") != 0 ||
|
||||
gpio_direction_output(RD88F6192_GPIO_USB_VBUS, 1) != 0)
|
||||
pr_err("RD-88F6192-NAS: failed to setup USB VBUS GPIO\n");
|
||||
|
||||
kirkwood_ehci_init();
|
||||
kirkwood_ge00_init(&rd88f6192_ge00_data);
|
||||
kirkwood_sata_init(&rd88f6192_sata_data);
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/irq.h>
|
||||
|
@ -32,6 +33,7 @@
|
|||
|
||||
#define DNS323_GPIO_LED_RIGHT_AMBER 1
|
||||
#define DNS323_GPIO_LED_LEFT_AMBER 2
|
||||
#define DNS323_GPIO_SYSTEM_UP 3
|
||||
#define DNS323_GPIO_LED_POWER 5
|
||||
#define DNS323_GPIO_OVERTEMP 6
|
||||
#define DNS323_GPIO_RTC 7
|
||||
|
@ -239,7 +241,7 @@ static struct gpio_led dns323_leds[] = {
|
|||
{
|
||||
.name = "power:blue",
|
||||
.gpio = DNS323_GPIO_LED_POWER,
|
||||
.active_low = 1,
|
||||
.default_state = LEDS_GPIO_DEFSTATE_ON,
|
||||
}, {
|
||||
.name = "right:amber",
|
||||
.gpio = DNS323_GPIO_LED_RIGHT_AMBER,
|
||||
|
@ -334,7 +336,7 @@ static struct orion5x_mpp_mode dns323_mv88f5182_mpp_modes[] __initdata = {
|
|||
{ 0, MPP_UNUSED },
|
||||
{ 1, MPP_GPIO }, /* right amber LED (sata ch0) */
|
||||
{ 2, MPP_GPIO }, /* left amber LED (sata ch1) */
|
||||
{ 3, MPP_UNUSED },
|
||||
{ 3, MPP_GPIO }, /* system up flag */
|
||||
{ 4, MPP_GPIO }, /* power button LED */
|
||||
{ 5, MPP_GPIO }, /* power button LED */
|
||||
{ 6, MPP_GPIO }, /* GMT G751-2f overtemp */
|
||||
|
@ -372,13 +374,23 @@ static struct i2c_board_info __initdata dns323_i2c_devices[] = {
|
|||
},
|
||||
};
|
||||
|
||||
/* DNS-323 specific power off method */
|
||||
static void dns323_power_off(void)
|
||||
/* DNS-323 rev. A specific power off method */
|
||||
static void dns323a_power_off(void)
|
||||
{
|
||||
pr_info("%s: triggering power-off...\n", __func__);
|
||||
gpio_set_value(DNS323_GPIO_POWER_OFF, 1);
|
||||
}
|
||||
|
||||
/* DNS-323 rev B specific power off method */
|
||||
static void dns323b_power_off(void)
|
||||
{
|
||||
pr_info("%s: triggering power-off...\n", __func__);
|
||||
/* Pin has to be changed to 1 and back to 0 to do actual power off. */
|
||||
gpio_set_value(DNS323_GPIO_POWER_OFF, 1);
|
||||
mdelay(100);
|
||||
gpio_set_value(DNS323_GPIO_POWER_OFF, 0);
|
||||
}
|
||||
|
||||
static void __init dns323_init(void)
|
||||
{
|
||||
/* Setup basic Orion functions. Need to be called early. */
|
||||
|
@ -424,11 +436,20 @@ static void __init dns323_init(void)
|
|||
if (dns323_dev_id() == MV88F5182_DEV_ID)
|
||||
orion5x_sata_init(&dns323_sata_data);
|
||||
|
||||
/* register dns323 specific power-off method */
|
||||
/* The 5182 has flag to indicate the system is up. Without this flag
|
||||
* set, power LED will flash and cannot be controlled via leds-gpio.
|
||||
*/
|
||||
if (dns323_dev_id() == MV88F5182_DEV_ID)
|
||||
gpio_set_value(DNS323_GPIO_SYSTEM_UP, 1);
|
||||
|
||||
/* Register dns323 specific power-off method */
|
||||
if (gpio_request(DNS323_GPIO_POWER_OFF, "POWEROFF") != 0 ||
|
||||
gpio_direction_output(DNS323_GPIO_POWER_OFF, 0) != 0)
|
||||
pr_err("DNS323: failed to setup power-off GPIO\n");
|
||||
pm_power_off = dns323_power_off;
|
||||
if (dns323_dev_id() == MV88F5182_DEV_ID)
|
||||
pm_power_off = dns323b_power_off;
|
||||
else
|
||||
pm_power_off = dns323a_power_off;
|
||||
}
|
||||
|
||||
/* Warning: D-Link uses a wrong mach-type (=526) in their bootloader */
|
||||
|
|
|
@ -15,6 +15,9 @@
|
|||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/mv643xx_eth.h>
|
||||
#include <linux/ethtool.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/gpio_keys.h>
|
||||
#include <linux/input.h>
|
||||
#include <net/dsa.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/gpio.h>
|
||||
|
@ -24,6 +27,80 @@
|
|||
#include "common.h"
|
||||
#include "mpp.h"
|
||||
|
||||
/*
|
||||
* LEDs attached to GPIO
|
||||
*/
|
||||
static struct gpio_led wrt350n_v2_led_pins[] = {
|
||||
{
|
||||
.name = "wrt350nv2:green:power",
|
||||
.gpio = 0,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "wrt350nv2:green:security",
|
||||
.gpio = 1,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "wrt350nv2:orange:power",
|
||||
.gpio = 5,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "wrt350nv2:green:usb",
|
||||
.gpio = 6,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "wrt350nv2:green:wireless",
|
||||
.gpio = 7,
|
||||
.active_low = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio_led_platform_data wrt350n_v2_led_data = {
|
||||
.leds = wrt350n_v2_led_pins,
|
||||
.num_leds = ARRAY_SIZE(wrt350n_v2_led_pins),
|
||||
};
|
||||
|
||||
static struct platform_device wrt350n_v2_leds = {
|
||||
.name = "leds-gpio",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &wrt350n_v2_led_data,
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* Buttons attached to GPIO
|
||||
*/
|
||||
static struct gpio_keys_button wrt350n_v2_buttons[] = {
|
||||
{
|
||||
.code = KEY_RESTART,
|
||||
.gpio = 3,
|
||||
.desc = "Reset Button",
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.code = KEY_WLAN,
|
||||
.gpio = 2,
|
||||
.desc = "WPS Button",
|
||||
.active_low = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio_keys_platform_data wrt350n_v2_button_data = {
|
||||
.buttons = wrt350n_v2_buttons,
|
||||
.nbuttons = ARRAY_SIZE(wrt350n_v2_buttons),
|
||||
};
|
||||
|
||||
static struct platform_device wrt350n_v2_button_device = {
|
||||
.name = "gpio-keys",
|
||||
.id = -1,
|
||||
.num_resources = 0,
|
||||
.dev = {
|
||||
.platform_data = &wrt350n_v2_button_data,
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
* General setup
|
||||
*/
|
||||
static struct orion5x_mpp_mode wrt350n_v2_mpp_modes[] __initdata = {
|
||||
{ 0, MPP_GPIO }, /* Power LED green (0=on) */
|
||||
{ 1, MPP_GPIO }, /* Security LED (0=on) */
|
||||
|
@ -140,6 +217,8 @@ static void __init wrt350n_v2_init(void)
|
|||
orion5x_setup_dev_boot_win(WRT350N_V2_NOR_BOOT_BASE,
|
||||
WRT350N_V2_NOR_BOOT_SIZE);
|
||||
platform_device_register(&wrt350n_v2_nor_flash);
|
||||
platform_device_register(&wrt350n_v2_leds);
|
||||
platform_device_register(&wrt350n_v2_button_device);
|
||||
}
|
||||
|
||||
static int __init wrt350n_v2_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
|
||||
|
|
|
@ -132,6 +132,12 @@ static void __init orion_pcie_setup_wins(void __iomem *base,
|
|||
size += cs->size;
|
||||
}
|
||||
|
||||
/*
|
||||
* Round up 'size' to the nearest power of two.
|
||||
*/
|
||||
if ((size & (size - 1)) != 0)
|
||||
size = 1 << fls(size);
|
||||
|
||||
/*
|
||||
* Setup BAR[1] to all DRAM banks.
|
||||
*/
|
||||
|
|
Reference in a new issue