[Balloon-svn] r1880 - balloon/branches/menuconfig2/package/k…

Top Page
Attachments:
Message as email
+ (text/plain)
Delete this message
Reply to this message
Author: subversion@balloonboard.org
Date:  
To: balloon-svn
Subject: [Balloon-svn] r1880 - balloon/branches/menuconfig2/package/kernel/patches/2.6.39.4
Author: nick
Date: 2012-05-25 16:32:55 +0100 (Fri, 25 May 2012)
New Revision: 1880

Modified:
balloon/branches/menuconfig2/package/kernel/patches/2.6.39.4/keyboard-tt.patch
Log:
fixup dev references and add suspend/resume behaviour as per tt spec

Modified: balloon/branches/menuconfig2/package/kernel/patches/2.6.39.4/keyboard-tt.patch
===================================================================
--- balloon/branches/menuconfig2/package/kernel/patches/2.6.39.4/keyboard-tt.patch    2012-05-25 15:32:08 UTC (rev 1879)
+++ balloon/branches/menuconfig2/package/kernel/patches/2.6.39.4/keyboard-tt.patch    2012-05-25 15:32:55 UTC (rev 1880)
@@ -28,8 +28,8 @@
 Index: linux-2.6.39.4/drivers/input/keyboard/tt-keyboard.c
 ===================================================================
 --- /dev/null    1970-01-01 00:00:00.000000000 +0000
-+++ linux-2.6.39.4/drivers/input/keyboard/tt-keyboard.c    2012-05-24 17:46:47.000000000 +0100
-@@ -0,0 +1,820 @@
++++ linux-2.6.39.4/drivers/input/keyboard/tt-keyboard.c    2012-05-25 15:20:19.000000000 +0100
+@@ -0,0 +1,830 @@
 +/*
 + * Balloon3 Bubble TT Keyboard Controller Driver
 + * Based on OpenCores keyboard controller
@@ -118,30 +118,33 @@
 +static ssize_t
 +show_keymask(struct device *dev, struct device_attribute *attr, char *buf)
 +{
-+    return sprintf(buf, "0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x\n", 
++    struct tt_kbd *kbd = dev_get_drvdata(dev);
++
++    return sprintf(buf, "dev %p, kbd %p, kbd->spi %p, 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x\n",
++        dev, kbd, kbd->spi,
 +        keyboard_keymask[0], keyboard_keymask[1], keyboard_keymask[2], keyboard_keymask[3],
 +        keyboard_keymask[4], keyboard_keymask[5], keyboard_keymask[6], keyboard_keymask[7]);
 +}
 +
-+static void maskKey(struct device *dev, int row, int col);
-+static void unmaskKey(struct device *dev, int row, int col);
++static void maskKey(struct spi_device *dev, int row, int col);
++static void unmaskKey(struct spi_device *dev, int row, int col);
 +
 +static ssize_t
 +set_keymask(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
 +{
++    struct tt_kbd *kbd = dev_get_drvdata(dev);
 +    int args = sscanf(buf,"%u %u %u %u %u %u %u %u",
 +        &keyboard_keymask[0], &keyboard_keymask[1], &keyboard_keymask[2], &keyboard_keymask[3],
 +        &keyboard_keymask[4], &keyboard_keymask[5], &keyboard_keymask[6], &keyboard_keymask[7]);
 +    if (args == 8) {
 +        int row;
-+        for (row = 6; row < 8; row++) {
++        for (row = 0; row < 8; row++) {
 +            int col;
 +            for (col = 0; col < 8; col++) {
-+                if (keyboard_keymask[row] & (1 << col)) {
-+                    maskKey(dev, row, col);
-+                }
++                if (keyboard_keymask[row] & (1 << col))
++                    maskKey(kbd->spi, row, col);
 +                else
-+                    unmaskKey(dev, row,col);
++                    unmaskKey(kbd->spi, row,col);
 +            }
 +        }
 +    }
@@ -228,20 +231,14 @@
 +    return res;
 +}
 +
-+// FIXME remove!!
-+static struct spi_dev *horrible;
 +
-+static void maskKey(struct device *dev, int row, int col) {
-+//    struct spi_device * spi_dev = container_of(dev, struct spi_device, dev);
-+    struct spi_device * spi_dev = horrible;
-+    spiWriteRegData(spi_dev, 0x11, ((row & 0xf) << 4) | (col & 0xf));
++static void maskKey(struct spi_device *dev, int row, int col) {
++    spiWriteRegData(dev, 0x11, ((row & 0xf) << 4) | (col & 0xf));
 +    msleep(1);
 +}
 +
-+static void unmaskKey(struct device *dev, int row, int col) {
-+//    struct spi_device * spi_dev = container_of(dev, struct spi_device, dev);
-+    struct spi_device * spi_dev = horrible;
-+    spiWriteRegData(spi_dev, 0x12, ((row & 0xf) << 4) | (col & 0xf));
++static void unmaskKey(struct spi_device *dev, int row, int col) {
++    spiWriteRegData(dev, 0x12, ((row & 0xf) << 4) | (col & 0xf));
 +    msleep(1);
 +}
 +
@@ -371,6 +368,24 @@
 +{KEY_ESC, KEY_COMPOSE, KEY_LEFTMETA, KEY_INSERT, KEY_ENTER, 0, 0, 0},
 +{KEY_UP, KEY_RIGHT, KEY_DOWN, KEY_LEFT, 0, 0, 0, KEY_KPENTER},        // joystick
 +};
++
++static void suspendKeys(struct device *dev) {
++    int row, col;
++    for (row = 6; row < 8; row++) {
++        for (col = 0; col < 8; col++)
++            if (spi_keycodes[row][col] != KEY_LEFTMETA)
++                maskKey(dev, row, col);
++    }
++}
++
++static void resumeKeys(struct device *dev) {
++    int row, col;
++    for (row = 6; row < 8; row++) {
++        for (col = 0; col < 8; col++)
++            unmaskKey(dev, row, col);
++    }
++}
++
 +#endif
 +
 +static void kbd_work(struct work_struct *work) {
@@ -681,8 +696,7 @@
 +    if (error)
 +        dev_err(&dev->dev, "failed to create sysfs entries\n");
 +
-+    // FIXME remove!!
-+    horrible = tt_kbd->spi;
++    resumeKeys(dev);
 +    return 0;
 +
 + err_free_irq:
@@ -771,18 +785,14 @@
 +#ifdef CONFIG_PM_SLEEP
 +static int tt_kbd_suspend(struct device *dev)
 +{
-+//    struct samosa_device *sdev = to_samosa_device(dev);
-+//    struct tt_kbd *kbd = samosa_get_drvdata(sdev);
-+//    remove reset in case interfering with suspend/resume
-+//    ttkeypad_reset();
++    suspendKeys(to_spi_device(dev));
 +    return 0;
 +}
 +
 +static int tt_kbd_resume(struct device *dev)
 +{
-+//    struct samosa_device *sdev = to_samosa_device(dev);
-+//    struct tt_kbd *kbd = samosa_get_drvdata(sdev);
 +    ttkeypad_reset();
++    resumeKeys(to_spi_device(dev));
 +    return 0;
 +}
 +#endif