[PATCH 5/6] mc13783: add power button support

Wanlong Gao gaowanlong at cn.fujitsu.com
Thu Jul 21 21:07:11 EDT 2011


On 07/22/2011 02:04 AM, Philippe Rétornaz wrote:
> This adds support for the power-on buttons of MC13783 PMIC.
> This is done using a misc input device.
>
> Signed-off-by: Philippe Rétornaz<philippe.retornaz at epfl.ch>
> ---
>   drivers/input/misc/Kconfig             |   10 +
>   drivers/input/misc/Makefile            |    1 +
>   drivers/input/misc/mc13783-pwrbutton.c |  288 ++++++++++++++++++++++++++++++++
>   drivers/mfd/mc13xxx-core.c             |    4 +
>   include/linux/mfd/mc13783.h            |    1 +
>   include/linux/mfd/mc13xxx.h            |   17 ++
>   6 files changed, 321 insertions(+), 0 deletions(-)
>   create mode 100644 drivers/input/misc/mc13783-pwrbutton.c
>
> diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
> index 45dc6aa..4272658 100644
> --- a/drivers/input/misc/Kconfig
> +++ b/drivers/input/misc/Kconfig
> @@ -100,6 +100,16 @@ config INPUT_MAX8925_ONKEY
>   	  To compile this driver as a module, choose M here: the module
>   	  will be called max8925_onkey.
>

> +struct mc13783_pwrb {
> +	struct input_dev *pwr;
> +	struct mc13xxx *mc13783;
> +#define MC13783_PWRB_B1_POL_INVERT	(1<<  0)
> +#define MC13783_PWRB_B2_POL_INVERT	(1<<  1)
> +#define MC13783_PWRB_B3_POL_INVERT	(1<<  2)
> +	int flags;
> +	unsigned short keymap[3];
It seems like you just use the keymap[0]?


> +static int __devinit mc13783_pwrbutton_probe(struct platform_device *pdev)
> +{
> +	struct mc13xxx_buttons_platform_data *pdata;
> +	struct mc13xxx *mc13783 = dev_get_drvdata(pdev->dev.parent);
> +	struct input_dev *pwr;
> +	struct mc13783_pwrb *priv;
> +	int err = 0;
> +	int reg = 0;
> +
> +	pdata = dev_get_platdata(&pdev->dev);
> +	if (pdata == NULL) {
why not !pdata ? be consistent with below?


> +static int __devexit mc13783_pwrbutton_remove(struct platform_device *pdev)
> +{
> +	struct mc13783_pwrb *priv = platform_get_drvdata(pdev);
> +	struct mc13xxx_buttons_platform_data *pdata;
> +	pdata = dev_get_platdata(&pdev->dev);
> +
> +	mc13xxx_lock(priv->mc13783);
> +
> +	if (pdata->b3on_flags&  MC13783_BUTTON_ENABLE)
> +		mc13xxx_irq_free(priv->mc13783, MC13783_IRQ_ONOFD3, priv);
> +	if (pdata->b2on_flags&  MC13783_BUTTON_ENABLE)
> +		mc13xxx_irq_free(priv->mc13783, MC13783_IRQ_ONOFD2, priv);
> +	if (pdata->b1on_flags&  MC13783_BUTTON_ENABLE)
> +		mc13xxx_irq_free(priv->mc13783, MC13783_IRQ_ONOFD1, priv);
> +
> +	mc13xxx_unlock(priv->mc13783);
> +
> +	input_unregister_device(priv->pwr);
> +	kfree(priv);
	platform_set_drvdata(pdev, NULL);
> +
> +	return 0;
> +}
> +



More information about the linux-arm-kernel mailing list