From nobody Sat Oct 4 12:40:58 2025 Received: from vs81.iboxed.net (vs10.datenmanufaktur-hosting.net [213.160.73.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 61431223335; Sun, 17 Aug 2025 10:22:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.160.73.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755426181; cv=none; b=e6/MKivVBNx9KELmtDQpQ+qhbXvW4eVJxpAGMR39S8Vv4GK8wlx7Iuzdg6oEolZBe9X66ZjBp/ew4En4APYS1bMWAJi2x+amDHQQtB8Z36vqo3GJ50s4xcDbkkg/OQa+JxuFwmiBYcR16rXeuJRup7Qc3ahPpU7uHBwr7QB4VwY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755426181; c=relaxed/simple; bh=J77z28Rsps3f58rOZXV1bcV8fV7whl06dun+g/QrRHE=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=NLppmaILjextT+GoRK3Mlwywvzf61fINsw89TIpJuxHEfYl2gRS/i02N+R3fojFHFvnNxsij3dl7N1Tq5x+Qi4ya94o+w87IBc4+KKmfh+RBQSDvi9jDp6j5NOmwg1gJoZ13tuDxJ4EA1TyMdJ06iXVadOS5BJTH/w97TmLz1Vk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de; spf=pass smtp.mailfrom=blala.de; arc=none smtp.client-ip=213.160.73.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blala.de Received: from blala.de (localhost [127.0.0.1]) by vs81.iboxed.net (8.15.2/8.15.2/Debian-14~deb10u1) with ESMTP id 57HARqOi029760; Sun, 17 Aug 2025 10:27:52 GMT Received: (from akurz@localhost) by blala.de (8.15.2/8.15.2/Submit) id 57HARqE8029759; Sun, 17 Aug 2025 10:27:52 GMT From: Alexander Kurz To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dmitry Torokhov , Dzmitry Sankouski , "Dr. David Alan Gilbert" , Heiko Stuebner , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Alexander Kurz Subject: [PATCH 1/6] Input: mc13783-pwrbutton: fix irq mixup Date: Sun, 17 Aug 2025 10:27:45 +0000 Message-Id: <20250817102751.29709-2-akurz@blala.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20250817102751.29709-1-akurz@blala.de> References: <20250817102751.29709-1-akurz@blala.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The mfd mc13xxx interrupt handling was migrated to regmap with commit 10f9edaeaa30 ("mfd: mc13xxx: Use regmap irq framework for interrupts"). As a consequence, button_irq() will get called with virtual irq instead of chip-internal irq now. Add wrappers for the three supported interrupts. Signed-off-by: Alexander Kurz --- drivers/input/misc/mc13783-pwrbutton.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/drivers/input/misc/mc13783-pwrbutton.c b/drivers/input/misc/mc= 13783-pwrbutton.c index 1c7faa9b7afe..4765b25bc9f6 100644 --- a/drivers/input/misc/mc13783-pwrbutton.c +++ b/drivers/input/misc/mc13783-pwrbutton.c @@ -88,6 +88,21 @@ static irqreturn_t button_irq(int irq, void *_priv) return IRQ_HANDLED; } =20 +static irqreturn_t button1_irq(int irq, void *_priv) +{ + return button_irq(MC13783_IRQ_ONOFD1, _priv); +} + +static irqreturn_t button2_irq(int irq, void *_priv) +{ + return button_irq(MC13783_IRQ_ONOFD2, _priv); +} + +static irqreturn_t button3_irq(int irq, void *_priv) +{ + return button_irq(MC13783_IRQ_ONOFD3, _priv); +} + static int mc13783_pwrbutton_probe(struct platform_device *pdev) { const struct mc13xxx_buttons_platform_data *pdata; @@ -137,7 +152,7 @@ static int mc13783_pwrbutton_probe(struct platform_devi= ce *pdev) reg |=3D MC13783_POWER_CONTROL_2_ON1BRSTEN; =20 err =3D mc13xxx_irq_request(mc13783, MC13783_IRQ_ONOFD1, - button_irq, "b1on", priv); + button1_irq, "b1on", priv); if (err) { dev_dbg(&pdev->dev, "Can't request irq\n"); goto free_priv; @@ -156,7 +171,7 @@ static int mc13783_pwrbutton_probe(struct platform_devi= ce *pdev) reg |=3D MC13783_POWER_CONTROL_2_ON2BRSTEN; =20 err =3D mc13xxx_irq_request(mc13783, MC13783_IRQ_ONOFD2, - button_irq, "b2on", priv); + button2_irq, "b2on", priv); if (err) { dev_dbg(&pdev->dev, "Can't request irq\n"); goto free_irq_b1; @@ -175,7 +190,7 @@ static int mc13783_pwrbutton_probe(struct platform_devi= ce *pdev) reg |=3D MC13783_POWER_CONTROL_2_ON3BRSTEN; =20 err =3D mc13xxx_irq_request(mc13783, MC13783_IRQ_ONOFD3, - button_irq, "b3on", priv); + button3_irq, "b3on", priv); if (err) { dev_dbg(&pdev->dev, "Can't request irq: %d\n", err); goto free_irq_b2; --=20 2.39.5 From nobody Sat Oct 4 12:40:58 2025 Received: from vs81.iboxed.net (vs10.datenmanufaktur-hosting.net [213.160.73.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6148A223337; Sun, 17 Aug 2025 10:22:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.160.73.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755426183; cv=none; b=W9MirwoFV19fN7F2KvwSojHEoYX/W3q+XwMaGaON1+pb1WflGyUyw2WZxKHJmly23rAA8LcB6HIbcXSQSx3DKwiPujTfaZp2dvwqvcPZDZg59Bhy2k1zKgZz/KFEbELfieXTQSSedjOWn83dH0zTfgKUxhX8A0Ina0sKXMdWMis= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755426183; c=relaxed/simple; bh=VTgi9DtXP6kPqmsaARkv7ETfo+rq9PKhR/wvxlwOHFI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=PqO1BechWGCHgPacGTqzY5+tT6kcDSEsofhmgMyhqK/V837XaOsBsHGpBklO5dV7xiEGzj6dYAub1/zES6C36SpLsFtsScKgQ/xZ2dzZIgEHQehwHMg5/F9kOZ8J58rN/nfkG4xWOoBg3wPih0GF1sFyqXMOG9J9du645VZLLok= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de; spf=pass smtp.mailfrom=blala.de; arc=none smtp.client-ip=213.160.73.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blala.de Received: from blala.de (localhost [127.0.0.1]) by vs81.iboxed.net (8.15.2/8.15.2/Debian-14~deb10u1) with ESMTP id 57HARruk029768; Sun, 17 Aug 2025 10:27:53 GMT Received: (from akurz@localhost) by blala.de (8.15.2/8.15.2/Submit) id 57HARrq7029764; Sun, 17 Aug 2025 10:27:53 GMT From: Alexander Kurz To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dmitry Torokhov , Dzmitry Sankouski , "Dr. David Alan Gilbert" , Heiko Stuebner , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Alexander Kurz Subject: [PATCH 2/6] Input: mc13783-pwrbutton: use managed resources Date: Sun, 17 Aug 2025 10:27:46 +0000 Message-Id: <20250817102751.29709-3-akurz@blala.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20250817102751.29709-1-akurz@blala.de> References: <20250817102751.29709-1-akurz@blala.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use devres functionality to simplify resource freeing, dev.parent will be set by devm_input_allocate_device(). Signed-off-by: Alexander Kurz --- drivers/input/misc/mc13783-pwrbutton.c | 28 ++++++++------------------ 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/drivers/input/misc/mc13783-pwrbutton.c b/drivers/input/misc/mc= 13783-pwrbutton.c index 4765b25bc9f6..9fd84b8d163d 100644 --- a/drivers/input/misc/mc13783-pwrbutton.c +++ b/drivers/input/misc/mc13783-pwrbutton.c @@ -21,6 +21,7 @@ =20 #include #include +#include #include #include #include @@ -118,18 +119,13 @@ static int mc13783_pwrbutton_probe(struct platform_de= vice *pdev) return -ENODEV; } =20 - pwr =3D input_allocate_device(); - if (!pwr) { - dev_dbg(&pdev->dev, "Can't allocate power button\n"); + pwr =3D devm_input_allocate_device(&pdev->dev); + if (!pwr) return -ENOMEM; - } =20 - priv =3D kzalloc(sizeof(*priv), GFP_KERNEL); - if (!priv) { - err =3D -ENOMEM; - dev_dbg(&pdev->dev, "Can't allocate power button\n"); - goto free_input_dev; - } + priv =3D devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; =20 reg |=3D (pdata->b1on_flags & 0x3) << MC13783_POWER_CONTROL_2_ON1BDBNC; reg |=3D (pdata->b2on_flags & 0x3) << MC13783_POWER_CONTROL_2_ON2BDBNC; @@ -155,7 +151,7 @@ static int mc13783_pwrbutton_probe(struct platform_devi= ce *pdev) button1_irq, "b1on", priv); if (err) { dev_dbg(&pdev->dev, "Can't request irq\n"); - goto free_priv; + goto free_mc13xxx_lock; } } =20 @@ -203,7 +199,6 @@ static int mc13783_pwrbutton_probe(struct platform_devi= ce *pdev) =20 pwr->name =3D "mc13783_pwrbutton"; pwr->phys =3D "mc13783_pwrbutton/input0"; - pwr->dev.parent =3D &pdev->dev; =20 pwr->keycode =3D priv->keymap; pwr->keycodemax =3D ARRAY_SIZE(priv->keymap); @@ -234,12 +229,8 @@ static int mc13783_pwrbutton_probe(struct platform_dev= ice *pdev) if (pdata->b1on_flags & MC13783_BUTTON_ENABLE) mc13xxx_irq_free(mc13783, MC13783_IRQ_ONOFD1, priv); =20 -free_priv: +free_mc13xxx_lock: mc13xxx_unlock(mc13783); - kfree(priv); - -free_input_dev: - input_free_device(pwr); =20 return err; } @@ -261,9 +252,6 @@ static void mc13783_pwrbutton_remove(struct platform_de= vice *pdev) mc13xxx_irq_free(priv->mc13783, MC13783_IRQ_ONOFD1, priv); =20 mc13xxx_unlock(priv->mc13783); - - input_unregister_device(priv->pwr); - kfree(priv); } =20 static struct platform_driver mc13783_pwrbutton_driver =3D { --=20 2.39.5 From nobody Sat Oct 4 12:40:58 2025 Received: from vs81.iboxed.net (vs10.datenmanufaktur-hosting.net [213.160.73.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7E93F22A7E4; Sun, 17 Aug 2025 10:23:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.160.73.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755426183; cv=none; b=JgQW6RoH02NnuhC0+SBAB7hKkNbRydySlxRIvBhPjC13GgAimtwdP6JUiHhmYy1CklJVowkBJtlOKez9dwKmm6PqKMcyiXh/SUv81F7UriVtppXSzY1VWKZ4zjme8s9HdwjhLyQrICqCS2EyADzhPQyE8PLY7rHgnIqVUxpBdYU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755426183; c=relaxed/simple; bh=rw4iAVJQoJquBUkqo0t0jQUlOZeouEUPovjZIlCnB2I=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=KP9/58eZWmWnZh5cxbeFzKhZ33OESMMkxKOyu6Ahw6oU1nF0M9H+H5BUUMal1cjQNwuhfHk60GRzaFgOh6lb0TWC8hxMt8atQAdmwWWF5YSTgBjfHW08SbVo55k3h6Ic5yf7TiaibwCJJ+z3AsbU4zViu8KTuK6bZpQzJIuIclw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de; spf=pass smtp.mailfrom=blala.de; arc=none smtp.client-ip=213.160.73.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blala.de Received: from blala.de (localhost [127.0.0.1]) by vs81.iboxed.net (8.15.2/8.15.2/Debian-14~deb10u1) with ESMTP id 57HARr3W029776; Sun, 17 Aug 2025 10:27:53 GMT Received: (from akurz@localhost) by blala.de (8.15.2/8.15.2/Submit) id 57HARrZE029771; Sun, 17 Aug 2025 10:27:53 GMT From: Alexander Kurz To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dmitry Torokhov , Dzmitry Sankouski , "Dr. David Alan Gilbert" , Heiko Stuebner , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Alexander Kurz Subject: [PATCH 3/6] Input: mc13783-pwrbutton: enable other mc13xxx PMIC Date: Sun, 17 Aug 2025 10:27:47 +0000 Message-Id: <20250817102751.29709-4-akurz@blala.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20250817102751.29709-1-akurz@blala.de> References: <20250817102751.29709-1-akurz@blala.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" All three mc13xxx types do feature two common power buttons while mc13783 and mc13892 provide one extra button each that differs unfortunately. The common buttons are ONOFD[12] (mc13783) and PWRON[12] (mc13892/mc34708). ONOFD3 on mc13783 will still be supported while support for PWRON3 for mc13892 will be left unsupported for simplicity. Add the similarities to the header files for reference, extend the platform_driver struct with the id table to support all three types. Signed-off-by: Alexander Kurz Acked-by: Lee Jones --- drivers/input/misc/Kconfig | 4 ++-- drivers/input/misc/mc13783-pwrbutton.c | 21 ++++++++++++++++++--- include/linux/mfd/mc13783.h | 4 ++-- include/linux/mfd/mc13xxx.h | 9 +++++++++ 4 files changed, 31 insertions(+), 7 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. =20 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/mc= 13783-pwrbutton.c index 9fd84b8d163d..cb2f25a1a757 100644 --- a/drivers/input/misc/mc13783-pwrbutton.c +++ b/drivers/input/misc/mc13783-pwrbutton.c @@ -33,13 +33,14 @@ 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]; }; =20 +#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 +109,7 @@ static int mc13783_pwrbutton_probe(struct platform_devi= ce *pdev) { const struct mc13xxx_buttons_platform_data *pdata; struct mc13xxx *mc13783 =3D dev_get_drvdata(pdev->dev.parent); + enum mc13xxx_chip_type chip =3D platform_get_device_id(pdev)->driver_data; struct input_dev *pwr; struct mc13783_pwrb *priv; int err =3D 0; @@ -127,6 +129,11 @@ static int mc13783_pwrbutton_probe(struct platform_dev= ice *pdev) if (!priv) return -ENOMEM; =20 + /* ONOFD3 is only supported for MC13783. */ + if (pdata->b3on_flags & MC13783_BUTTON_ENABLE && + chip !=3D MC13XXX_CHIP_TYPE_MC13783) + return -ENODEV; + reg |=3D (pdata->b1on_flags & 0x3) << MC13783_POWER_CONTROL_2_ON1BDBNC; reg |=3D (pdata->b2on_flags & 0x3) << MC13783_POWER_CONTROL_2_ON2BDBNC; reg |=3D (pdata->b3on_flags & 0x3) << MC13783_POWER_CONTROL_2_ON3BDBNC; @@ -254,7 +261,15 @@ static void mc13783_pwrbutton_remove(struct platform_d= evice *pdev) mc13xxx_unlock(priv->mc13783); } =20 +static const struct platform_device_id mc13xxx_pwrbutton_idtable[] =3D { + { "mc13783-pwrbutton", MC13XXX_CHIP_TYPE_MC13783 }, + { "mc13892-pwrbutton", MC13XXX_CHIP_TYPE_MC13892 }, + { "mc34708-pwrbutton", MC13XXX_CHIP_TYPE_MC34708 }, + { /* sentinel */ } +}; + static struct platform_driver mc13783_pwrbutton_driver =3D { + .id_table =3D mc13xxx_pwrbutton_idtable, .probe =3D mc13783_pwrbutton_probe, .remove =3D mc13783_pwrbutton_remove, .driver =3D { 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 f372926d5894..6984ea69db3e 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 @@ -78,6 +80,13 @@ int mc13xxx_irq_unmask(struct mc13xxx *mc13xxx, int irq); =20 struct regulator_init_data; =20 +enum mc13xxx_chip_type { + MC13XXX_CHIP_TYPE_MC13783, + MC13XXX_CHIP_TYPE_MC13892, + MC13XXX_CHIP_TYPE_MC34708, + MC13XXX_CHIP_TYPE_AMOUNT +}; + struct mc13xxx_regulator_init_data { int id; struct regulator_init_data *init_data; --=20 2.39.5 From nobody Sat Oct 4 12:40:58 2025 Received: from vs81.iboxed.net (vs10.datenmanufaktur-hosting.net [213.160.73.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B0E4B23D298; Sun, 17 Aug 2025 10:23:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.160.73.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755426183; cv=none; b=jY+9okbXVlWfZEb5ciPNjZfTHgDCfz/7a88ghLp9okjEqmIEP1es7CcQ0qvKcm/Asr3Y1v+e3JH8v4Z7ira6/AymsFZNuK/3vm3smScV6t8/Jzzc6pN6Rmowx5Uf/H3Owz6VJPywx71qo/FnSCGK3fUA+MqKtSsnne001DyZhvE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755426183; c=relaxed/simple; bh=q8/DbBKbrBgEINTYssy1UUKBdYsb7f2nRa/oHEffnS8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=cP5X9ye7PuDTRKv57Ma0Ru89jFiHxnIssZbgbU1ETEADi3rY0MKqpJvf0vXS1mocI16ygQK6vcip/9FY0vFrcuKkNsrRs6mcquciFAkXEP+BZvm1WGoDwzCyYWzGBPq5Zhl/7fXgpBh1DF0V44CEZSfXlOY2621X3U+zkHaMT6k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de; spf=pass smtp.mailfrom=blala.de; arc=none smtp.client-ip=213.160.73.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blala.de Received: from blala.de (localhost [127.0.0.1]) by vs81.iboxed.net (8.15.2/8.15.2/Debian-14~deb10u1) with ESMTP id 57HARr82029784; Sun, 17 Aug 2025 10:27:53 GMT Received: (from akurz@localhost) by blala.de (8.15.2/8.15.2/Submit) id 57HARrHB029779; Sun, 17 Aug 2025 10:27:53 GMT From: Alexander Kurz To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dmitry Torokhov , Dzmitry Sankouski , "Dr. David Alan Gilbert" , Heiko Stuebner , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Alexander Kurz Subject: [PATCH 4/6] Input: mc13783-pwrbutton: convert members to array Date: Sun, 17 Aug 2025 10:27:48 +0000 Message-Id: <20250817102751.29709-5-akurz@blala.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20250817102751.29709-1-akurz@blala.de> References: <20250817102751.29709-1-akurz@blala.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As preparation for mc13783-pwrbutton OF support, convert the members of mc13xxx_buttons_platform_data to arrays to allow index access within the next commit. Signed-off-by: Alexander Kurz --- drivers/input/misc/mc13783-pwrbutton.c | 56 +++++++++++++------------- include/linux/mfd/mc13xxx.h | 8 +--- 2 files changed, 30 insertions(+), 34 deletions(-) diff --git a/drivers/input/misc/mc13783-pwrbutton.c b/drivers/input/misc/mc= 13783-pwrbutton.c index cb2f25a1a757..49bc5d25f098 100644 --- a/drivers/input/misc/mc13783-pwrbutton.c +++ b/drivers/input/misc/mc13783-pwrbutton.c @@ -130,28 +130,28 @@ static int mc13783_pwrbutton_probe(struct platform_de= vice *pdev) return -ENOMEM; =20 /* ONOFD3 is only supported for MC13783. */ - if (pdata->b3on_flags & MC13783_BUTTON_ENABLE && + if (pdata->b_on_flags[2] & MC13783_BUTTON_ENABLE && chip !=3D MC13XXX_CHIP_TYPE_MC13783) return -ENODEV; =20 - reg |=3D (pdata->b1on_flags & 0x3) << MC13783_POWER_CONTROL_2_ON1BDBNC; - reg |=3D (pdata->b2on_flags & 0x3) << MC13783_POWER_CONTROL_2_ON2BDBNC; - reg |=3D (pdata->b3on_flags & 0x3) << MC13783_POWER_CONTROL_2_ON3BDBNC; + reg |=3D (pdata->b_on_flags[0] & 0x3) << MC13783_POWER_CONTROL_2_ON1BDBNC; + reg |=3D (pdata->b_on_flags[1] & 0x3) << MC13783_POWER_CONTROL_2_ON2BDBNC; + reg |=3D (pdata->b_on_flags[2] & 0x3) << MC13783_POWER_CONTROL_2_ON3BDBNC; =20 priv->pwr =3D pwr; priv->mc13783 =3D mc13783; =20 mc13xxx_lock(mc13783); =20 - if (pdata->b1on_flags & MC13783_BUTTON_ENABLE) { - priv->keymap[0] =3D pdata->b1on_key; - if (pdata->b1on_key !=3D KEY_RESERVED) - __set_bit(pdata->b1on_key, pwr->keybit); + if (pdata->b_on_flags[0] & MC13783_BUTTON_ENABLE) { + priv->keymap[0] =3D pdata->b_on_key[0]; + if (pdata->b_on_key[0] !=3D KEY_RESERVED) + __set_bit(pdata->b_on_key[0], pwr->keybit); =20 - if (pdata->b1on_flags & MC13783_BUTTON_POL_INVERT) + if (pdata->b_on_flags[0] & MC13783_BUTTON_POL_INVERT) priv->flags |=3D MC13783_PWRB_B1_POL_INVERT; =20 - if (pdata->b1on_flags & MC13783_BUTTON_RESET_EN) + if (pdata->b_on_flags[0] & MC13783_BUTTON_RESET_EN) reg |=3D MC13783_POWER_CONTROL_2_ON1BRSTEN; =20 err =3D mc13xxx_irq_request(mc13783, MC13783_IRQ_ONOFD1, @@ -162,15 +162,15 @@ static int mc13783_pwrbutton_probe(struct platform_de= vice *pdev) } } =20 - if (pdata->b2on_flags & MC13783_BUTTON_ENABLE) { - priv->keymap[1] =3D pdata->b2on_key; - if (pdata->b2on_key !=3D KEY_RESERVED) - __set_bit(pdata->b2on_key, pwr->keybit); + if (pdata->b_on_flags[1] & MC13783_BUTTON_ENABLE) { + priv->keymap[1] =3D pdata->b_on_key[1]; + if (pdata->b_on_key[1] !=3D KEY_RESERVED) + __set_bit(pdata->b_on_key[1], pwr->keybit); =20 - if (pdata->b2on_flags & MC13783_BUTTON_POL_INVERT) + if (pdata->b_on_flags[1] & MC13783_BUTTON_POL_INVERT) priv->flags |=3D MC13783_PWRB_B2_POL_INVERT; =20 - if (pdata->b2on_flags & MC13783_BUTTON_RESET_EN) + if (pdata->b_on_flags[1] & MC13783_BUTTON_RESET_EN) reg |=3D MC13783_POWER_CONTROL_2_ON2BRSTEN; =20 err =3D mc13xxx_irq_request(mc13783, MC13783_IRQ_ONOFD2, @@ -181,15 +181,15 @@ static int mc13783_pwrbutton_probe(struct platform_de= vice *pdev) } } =20 - if (pdata->b3on_flags & MC13783_BUTTON_ENABLE) { - priv->keymap[2] =3D pdata->b3on_key; - if (pdata->b3on_key !=3D KEY_RESERVED) - __set_bit(pdata->b3on_key, pwr->keybit); + if (pdata->b_on_flags[2] & MC13783_BUTTON_ENABLE) { + priv->keymap[2] =3D pdata->b_on_key[3]; + if (pdata->b_on_key[3] !=3D KEY_RESERVED) + __set_bit(pdata->b_on_key[3], pwr->keybit); =20 - if (pdata->b3on_flags & MC13783_BUTTON_POL_INVERT) + if (pdata->b_on_flags[2] & MC13783_BUTTON_POL_INVERT) priv->flags |=3D MC13783_PWRB_B3_POL_INVERT; =20 - if (pdata->b3on_flags & MC13783_BUTTON_RESET_EN) + if (pdata->b_on_flags[2] & MC13783_BUTTON_RESET_EN) reg |=3D MC13783_POWER_CONTROL_2_ON3BRSTEN; =20 err =3D mc13xxx_irq_request(mc13783, MC13783_IRQ_ONOFD3, @@ -225,15 +225,15 @@ static int mc13783_pwrbutton_probe(struct platform_de= vice *pdev) free_irq: mc13xxx_lock(mc13783); =20 - if (pdata->b3on_flags & MC13783_BUTTON_ENABLE) + if (pdata->b_on_flags[2] & MC13783_BUTTON_ENABLE) mc13xxx_irq_free(mc13783, MC13783_IRQ_ONOFD3, priv); =20 free_irq_b2: - if (pdata->b2on_flags & MC13783_BUTTON_ENABLE) + if (pdata->b_on_flags[1] & MC13783_BUTTON_ENABLE) mc13xxx_irq_free(mc13783, MC13783_IRQ_ONOFD2, priv); =20 free_irq_b1: - if (pdata->b1on_flags & MC13783_BUTTON_ENABLE) + if (pdata->b_on_flags[0] & MC13783_BUTTON_ENABLE) mc13xxx_irq_free(mc13783, MC13783_IRQ_ONOFD1, priv); =20 free_mc13xxx_lock: @@ -251,11 +251,11 @@ static void mc13783_pwrbutton_remove(struct platform_= device *pdev) =20 mc13xxx_lock(priv->mc13783); =20 - if (pdata->b3on_flags & MC13783_BUTTON_ENABLE) + if (pdata->b_on_flags[2] & MC13783_BUTTON_ENABLE) mc13xxx_irq_free(priv->mc13783, MC13783_IRQ_ONOFD3, priv); - if (pdata->b2on_flags & MC13783_BUTTON_ENABLE) + if (pdata->b_on_flags[1] & MC13783_BUTTON_ENABLE) mc13xxx_irq_free(priv->mc13783, MC13783_IRQ_ONOFD2, priv); - if (pdata->b1on_flags & MC13783_BUTTON_ENABLE) + if (pdata->b_on_flags[0] & MC13783_BUTTON_ENABLE) mc13xxx_irq_free(priv->mc13783, MC13783_IRQ_ONOFD1, priv); =20 mc13xxx_unlock(priv->mc13783); diff --git a/include/linux/mfd/mc13xxx.h b/include/linux/mfd/mc13xxx.h index 6984ea69db3e..8bd25b0532ba 100644 --- a/include/linux/mfd/mc13xxx.h +++ b/include/linux/mfd/mc13xxx.h @@ -196,12 +196,8 @@ struct mc13xxx_leds_platform_data { #define MC13783_BUTTON_RESET_EN (1 << 4) =20 struct mc13xxx_buttons_platform_data { - int b1on_flags; - unsigned short b1on_key; - int b2on_flags; - unsigned short b2on_key; - int b3on_flags; - unsigned short b3on_key; + int b_on_flags[3]; + unsigned int b_on_key[3]; }; =20 #define MC13783_TS_ATO_FIRST false --=20 2.39.5 From nobody Sat Oct 4 12:40:58 2025 Received: from vs81.iboxed.net (vs10.datenmanufaktur-hosting.net [213.160.73.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7E8E52253FC; Sun, 17 Aug 2025 10:23:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.160.73.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755426182; cv=none; b=uVjzh4osA5T3zJWtth4+4A/IUQHO8AKM7j4CIhmQ1bbGbokTin8gqm5cjxnAd0qP49TefoqGyB2bpG98oWr6lxZDc4ezHjTUsPNyDnxEokuWfiZ1JuiuNn9dc3Bi/NdNyRWxvDRAIEOsnYRNsngs0b/+xjG+h0e2RNbRTQsMUnk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755426182; c=relaxed/simple; bh=I3rayUSW5zuktXOF5XyLNF+Oo33AU9vj7SNG5c3h+Zo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=cLGaggq0q18pvoEfm0uU3WgXoibjeiSlSCqA1Kt2hu+3yn2scgkHoWr5uZOvfdgQ3X0xnL8aPoKF/TVHDgx9fzWWNByir4ARbMA8PvHstdYjd+3n/+CWPP0/qMYp6A8zMHl+XbbiyWUURwBtbv2ioKqwqzNFgkb9V80UgfiU7Os= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de; spf=pass smtp.mailfrom=blala.de; arc=none smtp.client-ip=213.160.73.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blala.de Received: from blala.de (localhost [127.0.0.1]) by vs81.iboxed.net (8.15.2/8.15.2/Debian-14~deb10u1) with ESMTP id 57HARr9A029792; Sun, 17 Aug 2025 10:27:53 GMT Received: (from akurz@localhost) by blala.de (8.15.2/8.15.2/Submit) id 57HARr3O029787; Sun, 17 Aug 2025 10:27:53 GMT From: Alexander Kurz To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dmitry Torokhov , Dzmitry Sankouski , "Dr. David Alan Gilbert" , Heiko Stuebner , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Alexander Kurz Subject: [PATCH 5/6] dt-bindings: mfd: mc13xxx: add pwrbutton dt support Date: Sun, 17 Aug 2025 10:27:49 +0000 Message-Id: <20250817102751.29709-6-akurz@blala.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20250817102751.29709-1-akurz@blala.de> References: <20250817102751.29709-1-akurz@blala.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The mc13xxx series features two or three power buttons that may be used as input device. OF support will be added in a different commit. Add a short documentation for it according to the reference- and User- manuals of the mc13xxx series. Signed-off-by: Alexander Kurz --- .../devicetree/bindings/mfd/mc13xxx.txt | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/Documentation/devicetree/bindings/mfd/mc13xxx.txt b/Documentat= ion/devicetree/bindings/mfd/mc13xxx.txt index 8261ea73278a..3c7bad07858f 100644 --- a/Documentation/devicetree/bindings/mfd/mc13xxx.txt +++ b/Documentation/devicetree/bindings/mfd/mc13xxx.txt @@ -24,6 +24,15 @@ Sub-nodes: Documentation/devicetree/bindings/leds/common.txt. - regulators : Contain the regulator nodes. The regulators are bound using their names as listed below with their registers and bits for enabling. +- pwrbuttons : Contains the onoff input button nodes. + - #address-cells: Must be 1. + - #size-cells: Must be 0. + - reg: Contains the BUTTON ID (see below) + - linux,code + - debounce-delay-value: debouncing selection of 0 (0ms), 1 (default 30ms= ), + 2(150ms) or 3 (750ms). + - active-low + - enable-reset =20 MC13783 LED IDs: 0 : Main display @@ -110,6 +119,20 @@ MC13892 regulators: The bindings details of individual regulator device can be found in: Documentation/devicetree/bindings/regulator/regulator.txt =20 +MC13783 BUTTON IDs: + 0 : ONOFD1 + 1 : ONOFD2 + 2 : ONOFD3 + +MC13892 BUTTON IDs: + 0 : PWRON1 + 1 : PWRON2 + 2 : + +MC34708 BUTTON IDs: + 0 : PWRON1 + 1 : PWRON2 + Examples: =20 ecspi@70010000 { /* ECSPI1 */ @@ -152,5 +175,17 @@ ecspi@70010000 { /* ECSPI1 */ regulator-always-on; }; }; + + pwrbuttons { + #address-cells =3D <1>; + #size-cells =3D <0>; + pwrbutton@0 { + reg =3D <0>; + linux,code =3D ; + debounce-delay-value =3D <2>; + active-low; + enable-reset; + }; + }; }; }; --=20 2.39.5 From nobody Sat Oct 4 12:40:58 2025 Received: from vs81.iboxed.net (vs10.datenmanufaktur-hosting.net [213.160.73.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7E8412248B4; Sun, 17 Aug 2025 10:23:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.160.73.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755426182; cv=none; b=T3KBK/Gd3PVqQBX/lsWPJFDFoScSBMz9OxE8lIVse1mBCm8hakqYTk1GxqkdLYUtV8e8KqQQTI/zLRVsj1aHLxyzIBnEUE+q/OeMVnGG1X/Qv2xmtmiyoWwmH65jemBalfxT55IyzbxOzbx84YBFj+M7k1lLV7V2Yaw5C/A06u8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755426182; c=relaxed/simple; bh=585Abtsi7kLDK7HjA8PidTqFDuFQS3xTittK7OJfS58=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=fsIfSg1wECEUWRjrFDe6bMFUjDiAJ4ILUJVQyCxxVljRQXt39phCY6/lGivVQGQhT9vQRZnkwUu8bfsEK5ZdpkMwljQnSERprkhQBd80CNbIF1wbV45tzN4SvKfGFXoIjjufZCpvRrdusim5rGS4ifmCI9qmLU2AFYlbAPLGCgw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de; spf=pass smtp.mailfrom=blala.de; arc=none smtp.client-ip=213.160.73.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blala.de Received: from blala.de (localhost [127.0.0.1]) by vs81.iboxed.net (8.15.2/8.15.2/Debian-14~deb10u1) with ESMTP id 57HARrLH029800; Sun, 17 Aug 2025 10:27:53 GMT Received: (from akurz@localhost) by blala.de (8.15.2/8.15.2/Submit) id 57HARrrt029795; Sun, 17 Aug 2025 10:27:53 GMT From: Alexander Kurz To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dmitry Torokhov , Dzmitry Sankouski , "Dr. David Alan Gilbert" , Heiko Stuebner , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Alexander Kurz Subject: [PATCH 6/6] Input: mc13783-pwrbutton: add OF support Date: Sun, 17 Aug 2025 10:27:50 +0000 Message-Id: <20250817102751.29709-7-akurz@blala.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20250817102751.29709-1-akurz@blala.de> References: <20250817102751.29709-1-akurz@blala.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add OF support for the mc13783-pwrbutton so that it can be used with modern DT based systems. Signed-off-by: Alexander Kurz --- drivers/input/misc/mc13783-pwrbutton.c | 78 +++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 3 deletions(-) diff --git a/drivers/input/misc/mc13783-pwrbutton.c b/drivers/input/misc/mc= 13783-pwrbutton.c index 49bc5d25f098..11a97ce070a5 100644 --- a/drivers/input/misc/mc13783-pwrbutton.c +++ b/drivers/input/misc/mc13783-pwrbutton.c @@ -29,6 +29,7 @@ #include #include #include +#include =20 struct mc13783_pwrb { struct input_dev *pwr; @@ -105,8 +106,75 @@ static irqreturn_t button3_irq(int irq, void *_priv) return button_irq(MC13783_IRQ_ONOFD3, _priv); } =20 +#ifdef CONFIG_OF +static inline struct mc13xxx_buttons_platform_data __init *mc13xxx_pwrbutt= on_probe_dt( + struct platform_device *pdev) +{ + struct mc13xxx_buttons_platform_data *pdata; + struct device_node *parent, *child; + struct device *dev =3D &pdev->dev; + enum mc13xxx_chip_type chip =3D platform_get_device_id(pdev)->driver_data; + int ret =3D -ENODATA; + + /* ONOFD3 is only supported for MC13783. */ + int max_idx =3D chip !=3D MC13XXX_CHIP_TYPE_MC13783 ? 2 : 1; + + pdata =3D devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); + if (!pdata) + return ERR_PTR(-ENOMEM); + + parent =3D of_get_child_by_name(dev->parent->of_node, "pwrbuttons"); + if (!parent) + goto out_node_put; + + for_each_child_of_node(parent, child) { + u32 idx; + u8 dbnc =3D MC13783_BUTTON_DBNC_30MS; + + if (of_property_read_u32(child, "reg", &idx)) + continue; + + if (idx > max_idx) { + dev_warn(dev, "reg out of range\n"); + continue; + } + + of_property_read_u8(child, "debounce-delay-value", &dbnc); + if (dbnc > MC13783_BUTTON_DBNC_750MS) { + dev_warn(dev, "debounce-delay-value out of range\n"); + continue; + } + + if (of_property_read_u32(child, "linux,code", &pdata->b_on_key[idx])) + continue; + + if (of_property_read_bool(child, "active-low")) + pdata->b_on_flags[idx] |=3D MC13783_BUTTON_POL_INVERT; + + if (of_property_read_bool(child, "enable-reset")) + pdata->b_on_flags[idx] |=3D MC13783_BUTTON_RESET_EN; + + pdata->b_on_flags[idx] |=3D MC13783_BUTTON_ENABLE | dbnc; + } + + ret =3D 0; + +out_node_put: + of_node_put(parent); + + return ret ? ERR_PTR(ret) : pdata; +} +#else +static inline struct mc13xxx_buttons_platform_data __init *mc13xxx_pwrbutt= on_probe_dt( + struct platform_device *pdev) +{ + return ERR_PTR(-ENODEV); +} +#endif + static int mc13783_pwrbutton_probe(struct platform_device *pdev) { + struct device *dev =3D &pdev->dev; const struct mc13xxx_buttons_platform_data *pdata; struct mc13xxx *mc13783 =3D dev_get_drvdata(pdev->dev.parent); enum mc13xxx_chip_type chip =3D platform_get_device_id(pdev)->driver_data; @@ -116,9 +184,13 @@ static int mc13783_pwrbutton_probe(struct platform_dev= ice *pdev) int reg =3D 0; =20 pdata =3D dev_get_platdata(&pdev->dev); - if (!pdata) { - dev_err(&pdev->dev, "missing platform data\n"); - return -ENODEV; + if (dev->parent->of_node) { + pdata =3D mc13xxx_pwrbutton_probe_dt(pdev); + if (IS_ERR(pdata)) + return PTR_ERR(pdata); + } else if (!pdata) { + dev_err(dev, "missing platform data\n"); + return -ENODATA; } =20 pwr =3D devm_input_allocate_device(&pdev->dev); --=20 2.39.5