[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: Dmitry Torokhov <dtor@mail.ru> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
eca1ed196c
commit
b416f2e452
@@ -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 {
|
|||||||
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)
|
|||||||
|
|
||||||
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 = {
|
|||||||
.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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
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);
|
ret = sonypi_create_input_devices();
|
||||||
printk(KERN_INFO "%s input method installed.\n",
|
if (ret)
|
||||||
sonypi_device.input_jog_dev.name);
|
goto out_inputdevices;
|
||||||
|
|
||||||
/* 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);
|
|
||||||
printk(KERN_INFO "%s input method installed.\n",
|
|
||||||
sonypi_device.input_key_dev.name);
|
|
||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user