[ARM] 4759/1: [AT91] Buttons on CSB300
Support for the 3 GPIO-connected buttons on the CSB300 board. Based on wakeup testing code from David Brownell. Signed-off-by: Andrew Victor <linux@maxim.org.za> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
committed by
Russell King
parent
a04ff1af97
commit
6d2a8401d2
@@ -25,6 +25,8 @@
|
|||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/spi/spi.h>
|
#include <linux/spi/spi.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
|
#include <linux/input.h>
|
||||||
|
#include <linux/gpio_keys.h>
|
||||||
|
|
||||||
#include <asm/hardware.h>
|
#include <asm/hardware.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
@@ -156,6 +158,63 @@ static struct platform_device csb_flash = {
|
|||||||
.num_resources = ARRAY_SIZE(csb_flash_resources),
|
.num_resources = ARRAY_SIZE(csb_flash_resources),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* GPIO Buttons (on CSB300)
|
||||||
|
*/
|
||||||
|
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
||||||
|
static struct gpio_keys_button csb300_buttons[] = {
|
||||||
|
{
|
||||||
|
.gpio = AT91_PIN_PB29,
|
||||||
|
.code = BTN_0,
|
||||||
|
.desc = "sw0",
|
||||||
|
.active_low = 1,
|
||||||
|
.wakeup = 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.gpio = AT91_PIN_PB28,
|
||||||
|
.code = BTN_1,
|
||||||
|
.desc = "sw1",
|
||||||
|
.active_low = 1,
|
||||||
|
.wakeup = 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.gpio = AT91_PIN_PA21,
|
||||||
|
.code = BTN_2,
|
||||||
|
.desc = "sw2",
|
||||||
|
.active_low = 1,
|
||||||
|
.wakeup = 1,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct gpio_keys_platform_data csb300_button_data = {
|
||||||
|
.buttons = csb300_buttons,
|
||||||
|
.nbuttons = ARRAY_SIZE(csb300_buttons),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device csb300_button_device = {
|
||||||
|
.name = "gpio-keys",
|
||||||
|
.id = -1,
|
||||||
|
.num_resources = 0,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &csb300_button_data,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static void __init csb300_add_device_buttons(void)
|
||||||
|
{
|
||||||
|
at91_set_gpio_input(AT91_PIN_PB29, 0); /* sw0 */
|
||||||
|
at91_set_deglitch(AT91_PIN_PB29, 1);
|
||||||
|
at91_set_gpio_input(AT91_PIN_PB28, 0); /* sw1 */
|
||||||
|
at91_set_deglitch(AT91_PIN_PB28, 1);
|
||||||
|
at91_set_gpio_input(AT91_PIN_PA21, 0); /* sw2 */
|
||||||
|
at91_set_deglitch(AT91_PIN_PA21, 1);
|
||||||
|
|
||||||
|
platform_device_register(&csb300_button_device);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static void __init csb300_add_device_buttons(void) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void __init csb337_board_init(void)
|
static void __init csb337_board_init(void)
|
||||||
{
|
{
|
||||||
/* Serial */
|
/* Serial */
|
||||||
@@ -177,6 +236,8 @@ static void __init csb337_board_init(void)
|
|||||||
at91_add_device_mmc(0, &csb337_mmc_data);
|
at91_add_device_mmc(0, &csb337_mmc_data);
|
||||||
/* NOR flash */
|
/* NOR flash */
|
||||||
platform_device_register(&csb_flash);
|
platform_device_register(&csb_flash);
|
||||||
|
/* Switches on CSB300 */
|
||||||
|
csb300_add_device_buttons();
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START(CSB337, "Cogent CSB337")
|
MACHINE_START(CSB337, "Cogent CSB337")
|
||||||
|
Reference in New Issue
Block a user