Hi Felipe, > +++ b/drivers/input/misc/twl4030-pwrbutton.c > @@ -0,0 +1,147 @@ > +/** > + * drivers/i2c/chips/twl4030-pwrbutton.c > + * Please remove this file path. > + > +static struct input_dev *powerbutton_dev; > +static struct device *dbg_dev; > + > +static irqreturn_t powerbutton_irq(int irq, void *dev_id) > +{ > + int err; > + u8 value; > + > +#ifdef CONFIG_LOCKDEP > + /* WORKAROUND for lockdep forcing IRQF_DISABLED on us, which > + * we don't want and can't tolerate. Although it might be > + * friendlier not to borrow this thread context... > + */ > + local_irq_enable(); > +#endif > + > + err = twl4030_i2c_read_u8(TWL4030_MODULE_PM_MASTER, &value, > + STS_HW_CONDITIONS); > + if (!err) { > + input_report_key(powerbutton_dev, KEY_POWER, > + value & PWR_PWRON_IRQ); input_sync(...) please. > + } else { > + dev_err(dbg_dev, "twl4030: i2c error %d while reading TWL4030" > + " PM_MASTER STS_HW_CONDITIONS register\n", err); > + } > + > +static int __devexit twl4030_pwrbutton_remove(struct platform_device *pdev) > +{ > + int irq = platform_get_irq(pdev, 0); > + > + free_irq(irq, NULL); > + input_unregister_device(powerbutton_dev); > + input_free_device(powerbutton_dev); No need of input_free_device after input_unregister_device. > + > + return 0; > +} > + > +struct platform_driver twl4030_pwrbutton_driver = { > + .probe = twl4030_pwrbutton_probe, > + .remove = twl4030_pwrbutton_remove, __devexit_p(...) -- ---Trilok Soni http://triloksoni.wordpress.com http://www.linkedin.com/in/triloksoni -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html