>From 9c5fa914202d20756c56e0c4fd76035ed8f8ced8 Mon Sep 17 00:00:00 2001
From: Hans-Christian Egtvedt <hcegtvedt@atmel.com>
Date: Mon, 6 Aug 2007 08:31:14 +0200
Subject: [PATCH 1/1] Add gpio_mouse board setup to atstk1000 board

This patch adds a gpio_mouse_platform_data to the atstk1000 board code and
registers a gpio_mouse platform_device. This will enable a GPIO mouse on header
J1 on GPIO of the ATSTK1000 development kit. The board code is enabled/disabled
in menuconfig.

By connecting J1 (GPIO) to J25 (SWITCH) you can use the following keys to
simulate a mouse:

SW0: right
SW1: down
SW2: up
SW3: left
SW5: right button
SW6: middle button
SW7: left button

Signed-off-by: Hans-Christian Egtvedt <hcegtvedt@atmel.com>
---
 arch/avr32/boards/atstk1000/Kconfig     |   16 ++++++++++
 arch/avr32/boards/atstk1000/atstk1002.c |   48 +++++++++++++++++++++++++++++++
 2 files changed, 64 insertions(+), 0 deletions(-)

diff --git a/arch/avr32/boards/atstk1000/Kconfig b/arch/avr32/boards/atstk1000/Kconfig
index 718578f..d99d4bd 100644
--- a/arch/avr32/boards/atstk1000/Kconfig
+++ b/arch/avr32/boards/atstk1000/Kconfig
@@ -52,6 +52,22 @@ config BOARD_ATSTK100X_SPI1
 	  GPIO lines and accessed through the J1 jumper block.  Say "y"
 	  here to configure that SPI controller.
 
+config BOARD_ATSTK1002_GPIO_MOUSE
+	bool "Configure gpio_mouse on GPIO J1 header"
+	depends on !BOARD_ATSTK1002_SW4_CUSTOM
+	help
+	  Enable gpio_mouse board configuration on GPIO 0 to 7. Connecting a
+	  10-pin flat cable from J1 (GPIO) to J25 (SWITCH) will let a user give
+	  mouse inputs using the the switches SW0 to SW7.
+
+	  SW0: right
+	  SW1: down
+	  SW2: up
+	  SW3: left
+	  SW5: right button
+	  SW6: middle button
+	  SW7: left button
+
 config BOARD_ATSTK1000_J2_LED
 	bool
 	default BOARD_ATSTK1000_J2_LED8 || BOARD_ATSTK1000_J2_RGB
diff --git a/arch/avr32/boards/atstk1000/atstk1002.c b/arch/avr32/boards/atstk1000/atstk1002.c
index c958fd4..c7560e5 100644
--- a/arch/avr32/boards/atstk1000/atstk1002.c
+++ b/arch/avr32/boards/atstk1000/atstk1002.c
@@ -16,6 +16,7 @@
 #include <linux/types.h>
 #include <linux/spi/spi.h>
 #include <linux/spi/at73c213.h>
+#include <linux/gpio_mouse.h>
 
 #include <video/atmel_lcdc.h>
 
@@ -100,6 +101,49 @@ static struct mci_platform_data __initdata mci0_data = {
 	.cs		= 4,
 };
 
+#ifdef CONFIG_BOARD_ATSTK1002_GPIO_MOUSE
+static struct gpio_mouse_platform_data gpio_mouse0_data = {
+	.polarity	= GPIO_MOUSE_POLARITY_ACT_LOW,
+	{
+		{
+			.up		= GPIO_PIN_PB(2),
+			.down		= GPIO_PIN_PB(1),
+			.left		= GPIO_PIN_PB(3),
+			.right		= GPIO_PIN_PB(0),
+			.bleft		= GPIO_PIN_PB(7),
+			.bmiddle	= GPIO_PIN_PB(6),
+			.bright		= GPIO_PIN_PB(5),
+		},
+	},
+	.scan_ms	= 10,
+};
+
+static struct platform_device gpio_mouse0_device = {
+	.name		= "gpio_mouse",
+	.id		= 0,
+	.dev		= {
+		.platform_data = &gpio_mouse0_data,
+	},
+};
+
+static void __init add_device_gpio_mouse0(void)
+{
+	struct platform_device *pdev = &gpio_mouse0_device;
+	struct gpio_mouse_platform_data *data = pdev->dev.platform_data;
+
+	at32_select_gpio(data->up, 0);
+	at32_select_gpio(data->down, 0);
+	at32_select_gpio(data->left, 0);
+	at32_select_gpio(data->right, 0);
+
+	at32_select_gpio(data->bleft, 0);
+	at32_select_gpio(data->bmiddle, 0);
+	at32_select_gpio(data->bright, 0);
+
+	platform_device_register(pdev);
+}
+#endif
+
 /*
  * The next two functions should go away as the boot loader is
  * supposed to initialize the macb address registers with a valid
@@ -269,6 +313,10 @@ static int __init atstk1002_init(void)
 	atstk1000_setup_j2_leds();
 	atstk1002_setup_extdac();
 
+#ifdef CONFIG_BOARD_ATSTK1002_GPIO_MOUSE
+	add_device_gpio_mouse0();
+#endif
+
 	return 0;
 }
 postcore_initcall(atstk1002_init);
-- 
1.5.2.3

