]> Pileus Git - ~andy/linux/commitdiff
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 27 Nov 2007 22:20:35 +0000 (14:20 -0800)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 27 Nov 2007 22:20:35 +0000 (14:20 -0800)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
  Input: adds the context menu key (HUT GenDesc 0x84)
  Input: add definitions for frame forward and frame back keys
  Input: bf54x-keys - keypad does not exist on BF544 parts
  Input: gpio-keys - request and configure GPIOs
  Input: i8042 - add i8042.noloop quirk for MS Virtual Machine
  Sonypi: use synchronize_irq instead of sycnronize_sched
  sonypi: fit input devices into sysfs tree
  sony-laptop: fit input devices into sysfs tree

drivers/char/sonypi.c
drivers/input/keyboard/Kconfig
drivers/input/keyboard/gpio_keys.c
drivers/input/serio/i8042-x86ia64io.h
drivers/misc/sony-laptop.c
include/linux/input.h

index 877e53dcb9968a2215816b10c4351fb5e2ba4224..921c6d2bc8fc6b1959aa932a623469d59112b719 100644 (file)
@@ -1163,7 +1163,7 @@ static struct acpi_driver sonypi_acpi_driver = {
 };
 #endif
 
-static int __devinit sonypi_create_input_devices(void)
+static int __devinit sonypi_create_input_devices(struct platform_device *pdev)
 {
        struct input_dev *jog_dev;
        struct input_dev *key_dev;
@@ -1177,6 +1177,7 @@ static int __devinit sonypi_create_input_devices(void)
        jog_dev->name = "Sony Vaio Jogdial";
        jog_dev->id.bustype = BUS_ISA;
        jog_dev->id.vendor = PCI_VENDOR_ID_SONY;
+       jog_dev->dev.parent = &pdev->dev;
 
        jog_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
        jog_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_MIDDLE);
@@ -1191,6 +1192,7 @@ static int __devinit sonypi_create_input_devices(void)
        key_dev->name = "Sony Vaio Keys";
        key_dev->id.bustype = BUS_ISA;
        key_dev->id.vendor = PCI_VENDOR_ID_SONY;
+       key_dev->dev.parent = &pdev->dev;
 
        /* Initialize the Input Drivers: special keys */
        key_dev->evbit[0] = BIT_MASK(EV_KEY);
@@ -1385,7 +1387,7 @@ static int __devinit sonypi_probe(struct platform_device *dev)
 
        if (useinput) {
 
-               error = sonypi_create_input_devices();
+               error = sonypi_create_input_devices(dev);
                if (error) {
                        printk(KERN_ERR
                                "sonypi: failed to create input devices\n");
@@ -1432,7 +1434,7 @@ static int __devexit sonypi_remove(struct platform_device *dev)
 {
        sonypi_disable();
 
-       synchronize_sched();  /* Allow sonypi interrupt to complete. */
+       synchronize_irq(sonypi_device.irq);
        flush_scheduled_work();
 
        if (useinput) {
index 2316a018fae64212623ec6b7d24003aea6966e8c..dfa6592c10f646bb66465b173813e325feaa7860 100644 (file)
@@ -286,7 +286,7 @@ config KEYBOARD_MAPLE
 
 config KEYBOARD_BFIN
        tristate "Blackfin BF54x keypad support"
-       depends on BF54x
+       depends on (BF54x && !BF544)
        help
          Say Y here if you want to use the BF54x keypad.
 
index 3eddf52a0bba5cabbe76a1f41cedee7c5fbf8ffc..6a9ca4bdcb74acfa1dd9abc5bfec06bd2abeda62 100644 (file)
@@ -75,16 +75,32 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev)
 
        for (i = 0; i < pdata->nbuttons; i++) {
                struct gpio_keys_button *button = &pdata->buttons[i];
-               int irq = gpio_to_irq(button->gpio);
+               int irq;
                unsigned int type = button->type ?: EV_KEY;
 
+               error = gpio_request(button->gpio, button->desc ?: "gpio_keys");
+               if (error < 0) {
+                       pr_err("gpio-keys: failed to request GPIO %d,"
+                               " error %d\n", button->gpio, error);
+                       goto fail;
+               }
+
+               error = gpio_direction_input(button->gpio);
+               if (error < 0) {
+                       pr_err("gpio-keys: failed to configure input"
+                               " direction for GPIO %d, error %d\n",
+                               button->gpio, error);
+                       gpio_free(button->gpio);
+                       goto fail;
+               }
+
+               irq = gpio_to_irq(button->gpio);
                if (irq < 0) {
                        error = irq;
-                       printk(KERN_ERR
-                               "gpio-keys: "
-                               "Unable to get irq number for GPIO %d,"
-                               "error %d\n",
+                       pr_err("gpio-keys: Unable to get irq number"
+                               " for GPIO %d, error %d\n",
                                button->gpio, error);
+                       gpio_free(button->gpio);
                        goto fail;
                }
 
@@ -94,9 +110,9 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev)
                                    button->desc ? button->desc : "gpio_keys",
                                    pdev);
                if (error) {
-                       printk(KERN_ERR
-                               "gpio-keys: Unable to claim irq %d; error %d\n",
+                       pr_err("gpio-keys: Unable to claim irq %d; error %d\n",
                                irq, error);
+                       gpio_free(button->gpio);
                        goto fail;
                }
 
@@ -108,8 +124,7 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev)
 
        error = input_register_device(input);
        if (error) {
-               printk(KERN_ERR
-                       "gpio-keys: Unable to register input device, "
+               pr_err("gpio-keys: Unable to register input device, "
                        "error: %d\n", error);
                goto fail;
        }
@@ -119,8 +134,10 @@ static int __devinit gpio_keys_probe(struct platform_device *pdev)
        return 0;
 
  fail:
-       while (--i >= 0)
+       while (--i >= 0) {
                free_irq(gpio_to_irq(pdata->buttons[i].gpio), pdev);
+               gpio_free(pdata->buttons[i].gpio);
+       }
 
        platform_set_drvdata(pdev, NULL);
        input_free_device(input);
@@ -139,6 +156,7 @@ static int __devexit gpio_keys_remove(struct platform_device *pdev)
        for (i = 0; i < pdata->nbuttons; i++) {
                int irq = gpio_to_irq(pdata->buttons[i].gpio);
                free_irq(irq, pdev);
+               gpio_free(pdata->buttons[i].gpio);
        }
 
        input_unregister_device(input);
index f8fe421480938aef0d8e874b68640f67302c22a5..c5e68dcd88ac914673b30b46a5c6924911f4b05c 100644 (file)
@@ -110,6 +110,14 @@ static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = {
                        DMI_MATCH(DMI_PRODUCT_VERSION, "5a"),
                },
        },
+       {
+               .ident = "Microsoft Virtual Machine",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "Virtual Machine"),
+                       DMI_MATCH(DMI_PRODUCT_VERSION, "VS2005R2"),
+               },
+       },
        { }
 };
 
index bb13858f60a135fd71a06525ade38c8e8cd227ed..b0f68031b49dfa926dd8ccc62ff91d058638a65a 100644 (file)
@@ -338,7 +338,7 @@ static void sony_laptop_report_input_event(u8 event)
                dprintk("unknown input event %.2x\n", event);
 }
 
-static int sony_laptop_setup_input(void)
+static int sony_laptop_setup_input(struct acpi_device *acpi_device)
 {
        struct input_dev *jog_dev;
        struct input_dev *key_dev;
@@ -379,6 +379,7 @@ static int sony_laptop_setup_input(void)
        key_dev->name = "Sony Vaio Keys";
        key_dev->id.bustype = BUS_ISA;
        key_dev->id.vendor = PCI_VENDOR_ID_SONY;
+       key_dev->dev.parent = &acpi_device->dev;
 
        /* Initialize the Input Drivers: special keys */
        set_bit(EV_KEY, key_dev->evbit);
@@ -410,6 +411,7 @@ static int sony_laptop_setup_input(void)
        jog_dev->name = "Sony Vaio Jogdial";
        jog_dev->id.bustype = BUS_ISA;
        jog_dev->id.vendor = PCI_VENDOR_ID_SONY;
+       key_dev->dev.parent = &acpi_device->dev;
 
        jog_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
        jog_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_MIDDLE);
@@ -1006,7 +1008,7 @@ static int sony_nc_add(struct acpi_device *device)
        }
 
        /* setup input devices and helper fifo */
-       result = sony_laptop_setup_input();
+       result = sony_laptop_setup_input(device);
        if (result) {
                printk(KERN_ERR DRV_PFX
                                "Unabe to create input devices.\n");
@@ -1034,7 +1036,7 @@ static int sony_nc_add(struct acpi_device *device)
                        sony_backlight_device->props.brightness =
                            sony_backlight_get_brightness
                            (sony_backlight_device);
-                       sony_backlight_device->props.max_brightness = 
+                       sony_backlight_device->props.max_brightness =
                            SONY_MAX_BRIGHTNESS - 1;
                }
 
@@ -2453,7 +2455,7 @@ static int sony_pic_add(struct acpi_device *device)
        }
 
        /* setup input devices and helper fifo */
-       result = sony_laptop_setup_input();
+       result = sony_laptop_setup_input(device);
        if (result) {
                printk(KERN_ERR DRV_PFX
                                "Unabe to create input devices.\n");
index b45f240a8c45029d0d45107f40d5761f97028e2f..2075d6da2a313d9791ea1e714cb5beb18c91f7e6 100644 (file)
@@ -530,6 +530,11 @@ struct input_absinfo {
 #define KEY_DOLLAR             0x1b2
 #define KEY_EURO               0x1b3
 
+#define KEY_FRAMEBACK          0x1b4   /* Consumer - transport controls */
+#define KEY_FRAMEFORWARD       0x1b5
+
+#define KEY_CONTEXT_MENU       0x1b6   /* GenDesc - system context menu */
+
 #define KEY_DEL_EOL            0x1c0
 #define KEY_DEL_EOS            0x1c1
 #define KEY_INS_LINE           0x1c2