Commit b416f2e4 authored by Dmitry Torokhov's avatar Dmitry Torokhov Committed by Greg Kroah-Hartman

[PATCH] Input: convert sonypi to dynamic input_dev allocation

Input: convert sonypi to dynamic input_dev allocation

This is required for input_dev sysfs integration
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent eca1ed19
...@@ -424,10 +424,6 @@ static struct sonypi_eventtypes { ...@@ -424,10 +424,6 @@ static struct sonypi_eventtypes {
#define SONYPI_BUF_SIZE 128 #define SONYPI_BUF_SIZE 128
/* The name of the devices for the input device drivers */
#define SONYPI_JOG_INPUTNAME "Sony Vaio Jogdial"
#define SONYPI_KEY_INPUTNAME "Sony Vaio Keys"
/* Correspondance table between sonypi events and input layer events */ /* Correspondance table between sonypi events and input layer events */
static struct { static struct {
int sonypiev; int sonypiev;
...@@ -490,8 +486,8 @@ static struct sonypi_device { ...@@ -490,8 +486,8 @@ static struct sonypi_device {
struct fasync_struct *fifo_async; struct fasync_struct *fifo_async;
int open_count; int open_count;
int model; int model;
struct input_dev input_jog_dev; struct input_dev *input_jog_dev;
struct input_dev input_key_dev; struct input_dev *input_key_dev;
struct work_struct input_work; struct work_struct input_work;
struct kfifo *input_fifo; struct kfifo *input_fifo;
spinlock_t input_fifo_lock; spinlock_t input_fifo_lock;
...@@ -779,8 +775,8 @@ static void input_keyrelease(void *data) ...@@ -779,8 +775,8 @@ static void input_keyrelease(void *data)
static void sonypi_report_input_event(u8 event) static void sonypi_report_input_event(u8 event)
{ {
struct input_dev *jog_dev = &sonypi_device.input_jog_dev; struct input_dev *jog_dev = sonypi_device.input_jog_dev;
struct input_dev *key_dev = &sonypi_device.input_key_dev; struct input_dev *key_dev = sonypi_device.input_key_dev;
struct sonypi_keypress kp = { NULL }; struct sonypi_keypress kp = { NULL };
int i; int i;
...@@ -1203,6 +1199,47 @@ static struct device_driver sonypi_driver = { ...@@ -1203,6 +1199,47 @@ static struct device_driver sonypi_driver = {
.shutdown = sonypi_shutdown, .shutdown = sonypi_shutdown,
}; };
static int __devinit sonypi_create_input_devices(void)
{
struct input_dev *jog_dev;
struct input_dev *key_dev;
int i;
sonypi_device.input_jog_dev = jog_dev = input_allocate_device();
if (!jog_dev)
return -ENOMEM;
jog_dev->name = "Sony Vaio Jogdial";
jog_dev->id.bustype = BUS_ISA;
jog_dev->id.vendor = PCI_VENDOR_ID_SONY;
jog_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REL);
jog_dev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_MIDDLE);
jog_dev->relbit[0] = BIT(REL_WHEEL);
sonypi_device.input_key_dev = key_dev = input_allocate_device();
if (!key_dev) {
input_free_device(jog_dev);
sonypi_device.input_jog_dev = NULL;
return -ENOMEM;
}
key_dev->name = "Sony Vaio Keys";
key_dev->id.bustype = BUS_ISA;
key_dev->id.vendor = PCI_VENDOR_ID_SONY;
/* Initialize the Input Drivers: special keys */
key_dev->evbit[0] = BIT(EV_KEY);
for (i = 0; sonypi_inputkeys[i].sonypiev; i++)
if (sonypi_inputkeys[i].inputev)
set_bit(sonypi_inputkeys[i].inputev, key_dev->keybit);
input_register_device(jog_dev);
input_register_device(key_dev);
return 0;
}
static int __devinit sonypi_probe(void) static int __devinit sonypi_probe(void)
{ {
int i, ret; int i, ret;
...@@ -1298,34 +1335,10 @@ static int __devinit sonypi_probe(void) ...@@ -1298,34 +1335,10 @@ static int __devinit sonypi_probe(void)
} }
if (useinput) { if (useinput) {
/* Initialize the Input Drivers: jogdial */
int i;
sonypi_device.input_jog_dev.evbit[0] =
BIT(EV_KEY) | BIT(EV_REL);
sonypi_device.input_jog_dev.keybit[LONG(BTN_MOUSE)] =
BIT(BTN_MIDDLE);
sonypi_device.input_jog_dev.relbit[0] = BIT(REL_WHEEL);
sonypi_device.input_jog_dev.name = SONYPI_JOG_INPUTNAME;
sonypi_device.input_jog_dev.id.bustype = BUS_ISA;
sonypi_device.input_jog_dev.id.vendor = PCI_VENDOR_ID_SONY;
input_register_device(&sonypi_device.input_jog_dev);
printk(KERN_INFO "%s input method installed.\n",
sonypi_device.input_jog_dev.name);
/* Initialize the Input Drivers: special keys */
sonypi_device.input_key_dev.evbit[0] = BIT(EV_KEY);
for (i = 0; sonypi_inputkeys[i].sonypiev; i++)
if (sonypi_inputkeys[i].inputev)
set_bit(sonypi_inputkeys[i].inputev,
sonypi_device.input_key_dev.keybit);
sonypi_device.input_key_dev.name = SONYPI_KEY_INPUTNAME;
sonypi_device.input_key_dev.id.bustype = BUS_ISA;
sonypi_device.input_key_dev.id.vendor = PCI_VENDOR_ID_SONY;
input_register_device(&sonypi_device.input_key_dev); ret = sonypi_create_input_devices();
printk(KERN_INFO "%s input method installed.\n", if (ret)
sonypi_device.input_key_dev.name); goto out_inputdevices;
spin_lock_init(&sonypi_device.input_fifo_lock); spin_lock_init(&sonypi_device.input_fifo_lock);
sonypi_device.input_fifo = sonypi_device.input_fifo =
...@@ -1375,8 +1388,9 @@ static int __devinit sonypi_probe(void) ...@@ -1375,8 +1388,9 @@ static int __devinit sonypi_probe(void)
out_platformdev: out_platformdev:
kfifo_free(sonypi_device.input_fifo); kfifo_free(sonypi_device.input_fifo);
out_infifo: out_infifo:
input_unregister_device(&sonypi_device.input_key_dev); input_unregister_device(sonypi_device.input_key_dev);
input_unregister_device(&sonypi_device.input_jog_dev); input_unregister_device(sonypi_device.input_jog_dev);
out_inputdevices:
free_irq(sonypi_device.irq, sonypi_irq); free_irq(sonypi_device.irq, sonypi_irq);
out_reqirq: out_reqirq:
release_region(sonypi_device.ioport1, sonypi_device.region_size); release_region(sonypi_device.ioport1, sonypi_device.region_size);
...@@ -1402,8 +1416,8 @@ static void __devexit sonypi_remove(void) ...@@ -1402,8 +1416,8 @@ static void __devexit sonypi_remove(void)
platform_device_unregister(sonypi_device.pdev); platform_device_unregister(sonypi_device.pdev);
if (useinput) { if (useinput) {
input_unregister_device(&sonypi_device.input_key_dev); input_unregister_device(sonypi_device.input_key_dev);
input_unregister_device(&sonypi_device.input_jog_dev); input_unregister_device(sonypi_device.input_jog_dev);
kfifo_free(sonypi_device.input_fifo); kfifo_free(sonypi_device.input_fifo);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment