Adds leds and gpio keys support for Iomega iConnect.

Signed-off-by: Wojciech Dubowik <Wojciech.Dubowik@neratec.com>

SVN-Revision: 23682
owl
Lars-Peter Clausen 2010-10-27 21:22:07 +00:00
parent 98bbc04fca
commit 41ddcd79ab
1 changed files with 111 additions and 6 deletions

View File

@ -23,9 +23,19 @@
endmenu endmenu
endif endif
--- a/arch/arm/mach-kirkwood/mpp.h
+++ b/arch/arm/mach-kirkwood/mpp.h
@@ -103,6 +103,7 @@
#define MPP11_SATA0_ACTn MPP( 11, 0x5, 0, 1, 0, 1, 1, 1 )
#define MPP12_GPO MPP( 12, 0x0, 0, 1, 1, 1, 1, 1 )
+#define MPP12_GPIO MPP( 12, 0x0, 1, 1, 1, 1, 1, 1 )
#define MPP12_SD_CLK MPP( 12, 0x1, 0, 1, 1, 1, 1, 1 )
#define MPP13_GPIO MPP( 13, 0x0, 1, 1, 1, 1, 1, 1 )
--- /dev/null --- /dev/null
+++ b/arch/arm/mach-kirkwood/iconnect-setup.c +++ b/arch/arm/mach-kirkwood/iconnect-setup.c
@@ -0,0 +1,95 @@ @@ -1,0 +1,190 @@
+/* +/*
+ * arch/arm/mach-kirkwood/iconnect-setup.c + * arch/arm/mach-kirkwood/iconnect-setup.c
+ * + *
@ -43,6 +53,10 @@
+#include <linux/mtd/partitions.h> +#include <linux/mtd/partitions.h>
+#include <linux/mv643xx_eth.h> +#include <linux/mv643xx_eth.h>
+#include <linux/ethtool.h> +#include <linux/ethtool.h>
+#include <linux/gpio.h>
+#include <linux/gpio_keys.h>
+#include <linux/input.h>
+#include <linux/leds.h>
+#include <asm/mach-types.h> +#include <asm/mach-types.h>
+#include <asm/mach/arch.h> +#include <asm/mach/arch.h>
+#include <mach/kirkwood.h> +#include <mach/kirkwood.h>
@ -73,12 +87,100 @@
+ .phy_addr = MV643XX_ETH_PHY_ADDR(11), + .phy_addr = MV643XX_ETH_PHY_ADDR(11),
+}; +};
+ +
+static struct gpio_led iconnect_led_pins[] = {
+ {
+ .name = "iconnect:blue:power",
+ .default_trigger = "default-on",
+ .gpio = 42,
+ },
+ {
+ .name = "iconnect:red:power",
+ .gpio = 43,
+ },
+ {
+ .name = "iconnect:blue:usb1",
+ .gpio = 44,
+ },
+ {
+ .name = "iconnect:blue:usb2",
+ .gpio = 45,
+ },
+ {
+ .name = "iconnect:blue:usb3",
+ .gpio = 46,
+ },
+ {
+ .name = "iconnect:blue:usb4",
+ .gpio = 47,
+ },
+ {
+ .name = "iconnect:blue:otb",
+ .gpio = 48,
+ },
+};
+
+static struct gpio_led_platform_data iconnect_led_data = {
+ .leds = iconnect_led_pins,
+ .num_leds = ARRAY_SIZE(iconnect_led_pins),
+};
+
+static struct platform_device iconnect_leds = {
+ .name = "leds-gpio",
+ .id = -1,
+ .dev = {
+ .platform_data = &iconnect_led_data,
+ }
+};
+
+#define ICONNECT_GPIO_KEY_RESET 12
+#define ICONNECT_GPIO_KEY_OTB 35
+
+#define ICONNECT_SW_RESET 0x00
+#define ICONNECT_SW_OTB 0x01
+
+static struct gpio_keys_button iconnect_buttons[] = {
+ {
+ .type = EV_SW,
+ .code = ICONNECT_SW_RESET,
+ .gpio = ICONNECT_GPIO_KEY_RESET,
+ .desc = "Reset Button",
+ .active_low = 1,
+ .debounce_interval = 100,
+ },
+ {
+ .type = EV_SW,
+ .code = ICONNECT_SW_OTB,
+ .gpio = ICONNECT_GPIO_KEY_OTB,
+ .desc = "OTB Button",
+ .active_low = 1,
+ .debounce_interval = 100,
+ },
+};
+
+static struct gpio_keys_platform_data iconnect_button_data = {
+ .buttons = iconnect_buttons,
+ .nbuttons = ARRAY_SIZE(iconnect_buttons),
+};
+
+static struct platform_device iconnect_button_device = {
+ .name = "gpio-keys",
+ .id = -1,
+ .num_resources = 0,
+ .dev = {
+ .platform_data = &iconnect_button_data,
+ },
+};
+
+static unsigned int iconnect_mpp_config[] __initdata = { +static unsigned int iconnect_mpp_config[] __initdata = {
+ MPP8_TW_SDA, + MPP12_GPIO, /*Input for reset button*/
+ MPP9_TW_SCK, + MPP35_GPIO, /*Input for OTB button*/
+ MPP10_UART0_TXD, + MPP42_GPIO,
+ MPP11_UART0_RXD, + MPP43_GPIO,
+ MPP28_GPIO, + MPP44_GPIO,
+ MPP45_GPIO,
+ MPP46_GPIO,
+ MPP47_GPIO,
+ MPP48_GPIO,
+ 0 + 0
+}; +};
+ +
@ -100,6 +202,9 @@
+ +
+ kirkwood_uart0_init(); + kirkwood_uart0_init();
+ kirkwood_i2c_init(); + kirkwood_i2c_init();
+
+ platform_device_register(&iconnect_leds);
+ platform_device_register(&iconnect_button_device);
+} +}
+ +
+static int __init iconnect_pci_init(void) +static int __init iconnect_pci_init(void)