Re: [PATCH v4 4/4] input: misc: introduce retu-pwrbutton
Hi Aaro, On Sun, Nov 18, 2012 at 06:36:22PM +0200, Aaro Koskinen wrote: > Add Retu power button driver. > This patch (with minot edits) has been queued to 3.8. Thanks! -- Dmitry -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH v4 4/4] input: misc: introduce retu-pwrbutton
Hi Aaro, On Sun, Nov 18, 2012 at 06:36:22PM +0200, Aaro Koskinen wrote: Add Retu power button driver. This patch (with minot edits) has been queued to 3.8. Thanks! -- Dmitry -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH v4 4/4] input: misc: introduce retu-pwrbutton
Add Retu power button driver. Cc: linux-in...@vger.kernel.org Acked-by: Felipe Balbi Signed-off-by: Aaro Koskinen Cc: Dmitry Torokhov --- drivers/input/misc/Kconfig | 10 drivers/input/misc/Makefile |1 + drivers/input/misc/retu-pwrbutton.c | 102 +++ 3 files changed, 113 insertions(+) create mode 100644 drivers/input/misc/retu-pwrbutton.c diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index 7c0f1ec..e5be189 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig @@ -367,6 +367,16 @@ config INPUT_CM109 To compile this driver as a module, choose M here: the module will be called cm109. +config INPUT_RETU_PWRBUTTON + tristate "Retu Power button Driver" + depends on MFD_RETU + help + Say Y here if you want to enable power key reporting via the + Retu chips found in Nokia Internet Tablets (770, N800, N810). + + To compile this driver as a module, choose M here. The module will + be called retu-pwrbutton. + config INPUT_TWL4030_PWRBUTTON tristate "TWL4030 Power button Driver" depends on TWL4030_CORE diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile index 83fe6f5..4fbee0d 100644 --- a/drivers/input/misc/Makefile +++ b/drivers/input/misc/Makefile @@ -45,6 +45,7 @@ obj-$(CONFIG_INPUT_PMIC8XXX_PWRKEY) += pmic8xxx-pwrkey.o obj-$(CONFIG_INPUT_POWERMATE) += powermate.o obj-$(CONFIG_INPUT_PWM_BEEPER) += pwm-beeper.o obj-$(CONFIG_INPUT_RB532_BUTTON) += rb532_button.o +obj-$(CONFIG_INPUT_RETU_PWRBUTTON) += retu-pwrbutton.o obj-$(CONFIG_INPUT_GPIO_ROTARY_ENCODER)+= rotary_encoder.o obj-$(CONFIG_INPUT_SGI_BTNS) += sgi_btns.o obj-$(CONFIG_INPUT_SPARCSPKR) += sparcspkr.o diff --git a/drivers/input/misc/retu-pwrbutton.c b/drivers/input/misc/retu-pwrbutton.c new file mode 100644 index 000..043a12b --- /dev/null +++ b/drivers/input/misc/retu-pwrbutton.c @@ -0,0 +1,102 @@ +/* + * Retu power button driver. + * + * Copyright (C) 2004-2010 Nokia Corporation + * + * Original code written by Ari Saastamoinen, Juha Yrjölä and Felipe Balbi. + * Rewritten by Aaro Koskinen. + * + * This file is subject to the terms and conditions of the GNU General + * Public License. See the file "COPYING" in the main directory of this + * archive for more details. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define RETU_STATUS_PWRONX (1 << 5) + +static irqreturn_t retu_pwrbutton_irq(int irq, void *_pwr) +{ + bool state; + struct input_dev *idev = _pwr; + struct retu_dev *rdev = input_get_drvdata(idev); + + state = !(retu_read(rdev, RETU_REG_STATUS) & RETU_STATUS_PWRONX); + input_report_key(idev, KEY_POWER, state); + input_sync(idev); + + return IRQ_HANDLED; +} + +static int __devinit retu_pwrbutton_probe(struct platform_device *pdev) +{ + struct retu_dev *rdev = dev_get_drvdata(pdev->dev.parent); + struct input_dev *idev; + int ret; + + idev = input_allocate_device(); + if (!idev) + return -ENOMEM; + + idev->evbit[0] = BIT_MASK(EV_KEY); + idev->keybit[BIT_WORD(KEY_POWER)] = BIT_MASK(KEY_POWER); + idev->name = "retu-pwrbutton"; + + platform_set_drvdata(pdev, idev); + input_set_drvdata(idev, rdev); + + ret = input_register_device(idev); + if (ret < 0) { + input_free_device(idev); + return ret; + } + + ret = devm_request_threaded_irq(>dev, platform_get_irq(pdev, 0), + NULL, retu_pwrbutton_irq, 0, + "retu-pwrbutton", idev); + if (ret < 0) + input_unregister_device(idev); + + return ret; +} + +static int __devexit retu_pwrbutton_remove(struct platform_device *pdev) +{ + struct input_dev *idev = platform_get_drvdata(pdev); + + disable_irq(platform_get_irq(pdev, 0)); + input_unregister_device(idev); + + return 0; +} + +static struct platform_driver retu_pwrbutton_driver = { + .probe = retu_pwrbutton_probe, + .remove = __devexit_p(retu_pwrbutton_remove), + .driver = { + .name = "retu-pwrbutton", + .owner = THIS_MODULE, + }, +}; +module_platform_driver(retu_pwrbutton_driver); + +MODULE_ALIAS("platform:retu-pwrbutton"); +MODULE_DESCRIPTION("Retu Power Button"); +MODULE_AUTHOR("Ari Saastamoinen"); +MODULE_AUTHOR("Felipe Balbi");
[PATCH v4 4/4] input: misc: introduce retu-pwrbutton
Add Retu power button driver. Cc: linux-in...@vger.kernel.org Acked-by: Felipe Balbi ba...@ti.com Signed-off-by: Aaro Koskinen aaro.koski...@iki.fi Cc: Dmitry Torokhov dmitry.torok...@gmail.com --- drivers/input/misc/Kconfig | 10 drivers/input/misc/Makefile |1 + drivers/input/misc/retu-pwrbutton.c | 102 +++ 3 files changed, 113 insertions(+) create mode 100644 drivers/input/misc/retu-pwrbutton.c diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index 7c0f1ec..e5be189 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig @@ -367,6 +367,16 @@ config INPUT_CM109 To compile this driver as a module, choose M here: the module will be called cm109. +config INPUT_RETU_PWRBUTTON + tristate Retu Power button Driver + depends on MFD_RETU + help + Say Y here if you want to enable power key reporting via the + Retu chips found in Nokia Internet Tablets (770, N800, N810). + + To compile this driver as a module, choose M here. The module will + be called retu-pwrbutton. + config INPUT_TWL4030_PWRBUTTON tristate TWL4030 Power button Driver depends on TWL4030_CORE diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile index 83fe6f5..4fbee0d 100644 --- a/drivers/input/misc/Makefile +++ b/drivers/input/misc/Makefile @@ -45,6 +45,7 @@ obj-$(CONFIG_INPUT_PMIC8XXX_PWRKEY) += pmic8xxx-pwrkey.o obj-$(CONFIG_INPUT_POWERMATE) += powermate.o obj-$(CONFIG_INPUT_PWM_BEEPER) += pwm-beeper.o obj-$(CONFIG_INPUT_RB532_BUTTON) += rb532_button.o +obj-$(CONFIG_INPUT_RETU_PWRBUTTON) += retu-pwrbutton.o obj-$(CONFIG_INPUT_GPIO_ROTARY_ENCODER)+= rotary_encoder.o obj-$(CONFIG_INPUT_SGI_BTNS) += sgi_btns.o obj-$(CONFIG_INPUT_SPARCSPKR) += sparcspkr.o diff --git a/drivers/input/misc/retu-pwrbutton.c b/drivers/input/misc/retu-pwrbutton.c new file mode 100644 index 000..043a12b --- /dev/null +++ b/drivers/input/misc/retu-pwrbutton.c @@ -0,0 +1,102 @@ +/* + * Retu power button driver. + * + * Copyright (C) 2004-2010 Nokia Corporation + * + * Original code written by Ari Saastamoinen, Juha Yrjölä and Felipe Balbi. + * Rewritten by Aaro Koskinen. + * + * This file is subject to the terms and conditions of the GNU General + * Public License. See the file COPYING in the main directory of this + * archive for more details. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include linux/irq.h +#include linux/init.h +#include linux/slab.h +#include linux/errno.h +#include linux/input.h +#include linux/kernel.h +#include linux/module.h +#include linux/mfd/retu.h +#include linux/interrupt.h +#include linux/platform_device.h + +#define RETU_STATUS_PWRONX (1 5) + +static irqreturn_t retu_pwrbutton_irq(int irq, void *_pwr) +{ + bool state; + struct input_dev *idev = _pwr; + struct retu_dev *rdev = input_get_drvdata(idev); + + state = !(retu_read(rdev, RETU_REG_STATUS) RETU_STATUS_PWRONX); + input_report_key(idev, KEY_POWER, state); + input_sync(idev); + + return IRQ_HANDLED; +} + +static int __devinit retu_pwrbutton_probe(struct platform_device *pdev) +{ + struct retu_dev *rdev = dev_get_drvdata(pdev-dev.parent); + struct input_dev *idev; + int ret; + + idev = input_allocate_device(); + if (!idev) + return -ENOMEM; + + idev-evbit[0] = BIT_MASK(EV_KEY); + idev-keybit[BIT_WORD(KEY_POWER)] = BIT_MASK(KEY_POWER); + idev-name = retu-pwrbutton; + + platform_set_drvdata(pdev, idev); + input_set_drvdata(idev, rdev); + + ret = input_register_device(idev); + if (ret 0) { + input_free_device(idev); + return ret; + } + + ret = devm_request_threaded_irq(pdev-dev, platform_get_irq(pdev, 0), + NULL, retu_pwrbutton_irq, 0, + retu-pwrbutton, idev); + if (ret 0) + input_unregister_device(idev); + + return ret; +} + +static int __devexit retu_pwrbutton_remove(struct platform_device *pdev) +{ + struct input_dev *idev = platform_get_drvdata(pdev); + + disable_irq(platform_get_irq(pdev, 0)); + input_unregister_device(idev); + + return 0; +} + +static struct platform_driver retu_pwrbutton_driver = { + .probe = retu_pwrbutton_probe, + .remove = __devexit_p(retu_pwrbutton_remove), + .driver = { + .name = retu-pwrbutton, + .owner = THIS_MODULE, + }, +};