Log:
HXD8: Input device should be registered before request_irq.
For HXD8, kernel would enter oops handling if
request_irq before
input device.
Index: linux-2.6.21/drivers/i2c/chips/pcf50606.c
===================================================================
--- linux-2.6.21.orig/drivers/i2c/chips/pcf50606.c 2007-05-15 13:20:12.000000000 +0800
+++ linux-2.6.21/drivers/i2c/chips/pcf50606.c 2007-05-15 13:22:07.000000000 +0800
@@ -1613,6 +1613,24 @@
/* create virtual charger 'device' */
+ /* input device registration */
+ data->input_dev = input_allocate_device();
+ if (!data->input_dev)
+ goto exit_sysfs;
+
+ data->input_dev->name = "FIC Neo1973 PMU events";
+ data->input_dev->phys = "FIXME";
+ data->input_dev->id.bustype = BUS_I2C;
+ data->input_dev->cdev.dev = &new_client->dev;
+
+ data->input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_PWR);
+ set_bit(KEY_POWER, data->input_dev->keybit);
+ set_bit(KEY_POWER2, data->input_dev->keybit);
+ set_bit(KEY_BATTERY, data->input_dev->keybit);
+
+ input_register_device(data->input_dev);
+
+
/* register power off handler with core power management */
pm_power_off = &pcf50606_go_standby;
@@ -1671,22 +1689,6 @@
backlight_update_status(data->backlight);
}
- data->input_dev = input_allocate_device();
- if (!data->input_dev)
- goto exit_pwm;
-
- data->input_dev->name = "FIC Neo1973 PMU events";
- data->input_dev->phys = "FIXME";
- data->input_dev->id.bustype = BUS_I2C;
- data->input_dev->cdev.dev = &new_client->dev;
-
- data->input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_PWR);
- set_bit(KEY_POWER, data->input_dev->keybit);
- set_bit(KEY_POWER2, data->input_dev->keybit);
- set_bit(KEY_BATTERY, data->input_dev->keybit);
-
- input_register_device(data->input_dev);
-
apm_get_power_status = pcf50606_get_power_status;
#ifdef CONFIG_MACH_NEO1973_GTA01