};
#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;
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);
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);
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");
{
sonypi_disable();
- synchronize_sched(); /* Allow sonypi interrupt to complete. */
+ synchronize_irq(sonypi_device.irq);
flush_scheduled_work();
if (useinput) {
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.
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;
}
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;
}
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;
}
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);
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);
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"),
+ },
+ },
{ }
};
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;
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);
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);
}
/* 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");
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;
}
}
/* 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");
#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