All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lee Jones <lee@kernel.org>
To: Alexander Kurz <akurz@blala.de>
Cc: "Rob Herring" <robh@kernel.org>,
	"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
	"Conor Dooley" <conor+dt@kernel.org>,
	"Dmitry Torokhov" <dmitry.torokhov@gmail.com>,
	"Dzmitry Sankouski" <dsankouski@gmail.com>,
	"Dr. David Alan Gilbert" <linux@treblig.org>,
	"Heiko Stuebner" <heiko@sntech.de>,
	"Uwe Kleine-König" <u.kleine-koenig@baylibre.com>,
	devicetree@vger.kernel.org, linux-input@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 4/7] Input: mc13783-pwrbutton: enable other mc13xxx PMIC
Date: Wed, 3 Sep 2025 14:35:50 +0100	[thread overview]
Message-ID: <20250903133550.GB2764654@google.com> (raw)
In-Reply-To: <20250829201517.15374-5-akurz@blala.de>

On Fri, 29 Aug 2025, Alexander Kurz wrote:

> All three mc13xxx types do feature two common power buttons referred as
> ONOFD[12] (mc13783) and PWRON[12] (mc13892/mc34708) in the SoC reference
> manuals. Add support for PWRON[12] (mc13892/mc34708) but skip support for
> button PWRON3 (mc13892) for sake of simplicity.
> 
> Signed-off-by: Alexander Kurz <akurz@blala.de>
> ---
>  drivers/input/misc/Kconfig             |  4 +--
>  drivers/input/misc/mc13783-pwrbutton.c | 44 +++++++++++++++++++++++---

>  include/linux/mfd/mc13783.h            |  4 +--
>  include/linux/mfd/mc13xxx.h            |  2 ++

Acked-by: Lee Jones <lee@kernel.org>

>  4 files changed, 46 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
> index 0fb21c99a5e3..b66e920369f2 100644
> --- a/drivers/input/misc/Kconfig
> +++ b/drivers/input/misc/Kconfig
> @@ -276,8 +276,8 @@ config INPUT_MC13783_PWRBUTTON
>  	tristate "MC13783 ON buttons"
>  	depends on MFD_MC13XXX
>  	help
> -	  Support the ON buttons of MC13783 PMIC as an input device
> -	  reporting power button status.
> +	  Support the ON buttons of MC13783/MC13892/MC34708 PMIC as an input
> +	  device reporting power button status.
>  
>  	  To compile this driver as a module, choose M here: the module
>  	  will be called mc13783-pwrbutton.
> diff --git a/drivers/input/misc/mc13783-pwrbutton.c b/drivers/input/misc/mc13783-pwrbutton.c
> index ace9f286fd24..c9eea57ceedd 100644
> --- a/drivers/input/misc/mc13783-pwrbutton.c
> +++ b/drivers/input/misc/mc13783-pwrbutton.c
> @@ -30,16 +30,21 @@
>  #include <linux/sched.h>
>  #include <linux/slab.h>
>  
> +struct mc13xxx_button_devtype {
> +	int button_id_max;
> +};
> +
>  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];
>  };
>  
> +#define MC13783_PWRB_B1_POL_INVERT	(1 << 0)
> +#define MC13783_PWRB_B2_POL_INVERT	(1 << 1)
> +#define MC13783_PWRB_B3_POL_INVERT	(1 << 2)
> +
>  #define MC13783_REG_INTERRUPT_SENSE_1		5
>  #define MC13783_IRQSENSE1_ONOFD1S		(1 << 3)
>  #define MC13783_IRQSENSE1_ONOFD2S		(1 << 4)
> @@ -108,6 +113,8 @@ static int mc13783_pwrbutton_probe(struct platform_device *pdev)
>  {
>  	const struct mc13xxx_buttons_platform_data *pdata;
>  	struct mc13xxx *mc13783 = dev_get_drvdata(pdev->dev.parent);
> +	struct mc13xxx_button_devtype *devtype =
> +		(struct mc13xxx_button_devtype *)pdev->id_entry->driver_data;
>  	struct input_dev *pwr;
>  	struct mc13783_pwrb *priv;
>  	int err = 0;
> @@ -127,6 +134,11 @@ static int mc13783_pwrbutton_probe(struct platform_device *pdev)
>  	if (!priv)
>  		return -ENOMEM;
>  
> +	if (devtype->button_id_max < 2 && pdata->b_on_flags[2] & 0x3) {
> +		dev_err(&pdev->dev, "button not supported\n");
> +		return -ENODEV;
> +	}
> +
>  	reg |= (pdata->b_on_flags[0] & 0x3) << MC13783_POWER_CONTROL_2_ON1BDBNC;
>  	reg |= (pdata->b_on_flags[1] & 0x3) << MC13783_POWER_CONTROL_2_ON2BDBNC;
>  	reg |= (pdata->b_on_flags[2] & 0x3) << MC13783_POWER_CONTROL_2_ON3BDBNC;
> @@ -239,12 +251,15 @@ static void mc13783_pwrbutton_remove(struct platform_device *pdev)
>  {
>  	struct mc13783_pwrb *priv = platform_get_drvdata(pdev);
>  	const struct mc13xxx_buttons_platform_data *pdata;
> +	struct mc13xxx_button_devtype *devtype =
> +		(struct mc13xxx_button_devtype *)pdev->id_entry->driver_data;
>  
>  	pdata = dev_get_platdata(&pdev->dev);
>  
>  	mc13xxx_lock(priv->mc13783);
>  
> -	if (pdata->b_on_flags[2] & MC13783_BUTTON_ENABLE)
> +	if (devtype->button_id_max >= 2 &&
> +		pdata->b_on_flags[2] & MC13783_BUTTON_ENABLE)
>  		mc13xxx_irq_free(priv->mc13783, MC13783_IRQ_ONOFD3, priv);
>  	if (pdata->b_on_flags[1] & MC13783_BUTTON_ENABLE)
>  		mc13xxx_irq_free(priv->mc13783, MC13783_IRQ_ONOFD2, priv);
> @@ -254,7 +269,28 @@ static void mc13783_pwrbutton_remove(struct platform_device *pdev)
>  	mc13xxx_unlock(priv->mc13783);
>  }
>  
> +static const struct mc13xxx_button_devtype mc13783_button_devtype = {
> +	.button_id_max	= 2,
> +};
> +
> +static const struct mc13xxx_button_devtype mc13892_button_devtype = {
> +	/* PWRON3 is not supported yet. */
> +	.button_id_max	= 1,
> +};
> +
> +static const struct mc13xxx_button_devtype mc34708_button_devtype = {
> +	.button_id_max	= 1,
> +};
> +
> +static const struct platform_device_id mc13xxx_pwrbutton_idtable[] = {
> +	{ "mc13783-pwrbutton", (kernel_ulong_t)&mc13783_button_devtype },
> +	{ "mc13892-pwrbutton", (kernel_ulong_t)&mc13892_button_devtype },
> +	{ "mc34708-pwrbutton", (kernel_ulong_t)&mc34708_button_devtype },
> +	{ /* sentinel */ }
> +};
> +
>  static struct platform_driver mc13783_pwrbutton_driver = {
> +	.id_table	= mc13xxx_pwrbutton_idtable,
>  	.probe		= mc13783_pwrbutton_probe,
>  	.remove		= mc13783_pwrbutton_remove,
>  	.driver		= {
> diff --git a/include/linux/mfd/mc13783.h b/include/linux/mfd/mc13783.h
> index c25b1676741b..ab6db774e1fa 100644
> --- a/include/linux/mfd/mc13783.h
> +++ b/include/linux/mfd/mc13783.h
> @@ -65,8 +65,8 @@
>  #define MC13783_IRQ_UDM		23
>  #define MC13783_IRQ_1HZ		MC13XXX_IRQ_1HZ
>  #define MC13783_IRQ_TODA	MC13XXX_IRQ_TODA
> -#define MC13783_IRQ_ONOFD1	27
> -#define MC13783_IRQ_ONOFD2	28
> +#define MC13783_IRQ_ONOFD1	MC13XXX_IRQ_PWRON1
> +#define MC13783_IRQ_ONOFD2	MC13XXX_IRQ_PWRON2
>  #define MC13783_IRQ_ONOFD3	29
>  #define MC13783_IRQ_SYSRST	MC13XXX_IRQ_SYSRST
>  #define MC13783_IRQ_RTCRST	MC13XXX_IRQ_RTCRST
> diff --git a/include/linux/mfd/mc13xxx.h b/include/linux/mfd/mc13xxx.h
> index 0393083af28a..36e5e7de7cb2 100644
> --- a/include/linux/mfd/mc13xxx.h
> +++ b/include/linux/mfd/mc13xxx.h
> @@ -67,6 +67,8 @@ int mc13xxx_irq_unmask(struct mc13xxx *mc13xxx, int irq);
>  #define MC13XXX_IRQ_LOBATH	14
>  #define MC13XXX_IRQ_1HZ		24
>  #define MC13XXX_IRQ_TODA	25
> +#define MC13XXX_IRQ_PWRON1	27
> +#define MC13XXX_IRQ_PWRON2	28
>  #define MC13XXX_IRQ_SYSRST	30
>  #define MC13XXX_IRQ_RTCRST	31
>  #define MC13XXX_IRQ_PC		32
> -- 
> 2.39.5
> 

-- 
Lee Jones [李琼斯]

  reply	other threads:[~2025-09-03 13:35 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-29 20:15 [PATCH v3 0/7] Fix, extend and support OF to mc13xxx pwrbutton Alexander Kurz
2025-08-29 20:15 ` [PATCH v3 1/7] Input: mc13783-pwrbutton: fix irq mixup Alexander Kurz
2025-09-04 14:10   ` Dmitry Torokhov
2025-08-29 20:15 ` [PATCH v3 2/7] Input: mc13783-pwrbutton: use managed resources Alexander Kurz
2025-09-04 14:12   ` Dmitry Torokhov
2025-08-29 20:15 ` [PATCH v3 3/7] Input: mc13783-pwrbutton: convert pdata members to array Alexander Kurz
2025-09-03 13:35   ` Lee Jones
2025-08-29 20:15 ` [PATCH v3 4/7] Input: mc13783-pwrbutton: enable other mc13xxx PMIC Alexander Kurz
2025-09-03 13:35   ` Lee Jones [this message]
2025-08-29 20:15 ` [PATCH v3 5/7] dt-bindings: mfd: fsl,mc13xxx: convert txt to DT schema Alexander Kurz
2025-09-02 20:48   ` Rob Herring (Arm)
2025-08-29 20:15 ` [PATCH v3 6/7] dt-bindings: mfd: fsl,mc13xxx: add buttons node Alexander Kurz
2025-09-02 20:49   ` Rob Herring (Arm)
2025-08-29 20:15 ` [PATCH v3 7/7] Input: mc13783-pwrbutton: add OF support Alexander Kurz
2025-09-04 14:16   ` Dmitry Torokhov
2025-09-03 13:37 ` (subset) [PATCH v3 0/7] Fix, extend and support OF to mc13xxx pwrbutton Lee Jones

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250903133550.GB2764654@google.com \
    --to=lee@kernel.org \
    --cc=akurz@blala.de \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dmitry.torokhov@gmail.com \
    --cc=dsankouski@gmail.com \
    --cc=heiko@sntech.de \
    --cc=krzk+dt@kernel.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@treblig.org \
    --cc=robh@kernel.org \
    --cc=u.kleine-koenig@baylibre.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.