[PATCH] arm64: dts: rockchip: Add power button for RK3399 Puma

Heiko Stübner heiko at sntech.de
Mon Sep 30 01:49:48 PDT 2024


Hey Quentin, Daniel,

Am Donnerstag, 26. September 2024, 14:34:30 CEST schrieb Quentin Schulz:
> On 9/25/24 9:28 AM, Daniel Semkowicz wrote:
> > There is a PWRBTN# input pin exposed on a Q7 connector. The pin
> > is routed to a GPIO0_A1 through a diode. Q7 specification describes
> > the PWRBTN# pin as a Power Button signal.
> > Configure the pin as KEY_POWER, so it can function as power button and
> > trigger device shutdown.
> > Add the pin definition to RK3399 Puma dts, so it can be reused
> > by derived platforms, but keep it disabled by default.
> > 
> > Enable the power button input on Haikou development board.
> > 
> > Signed-off-by: Daniel Semkowicz <dse at thaumatec.com>
> 
> This works, thanks.
> 
> Tested-by: Quentin Schulz <quentin.schulz at cherry.de>
> 
> Now I have some questions I wasn't able to answer myself, maybe someone 
> can provide some feedback on those :)
> 
> We already have a gpio-keys for buttons on Haikou, c.f. 
> https://elixir.bootlin.com/linux/v6.11/source/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts#L22. 
> Those signals are directly routed to the SoM and follow the Qseven standard.
> 
> The same applies to PWRBTN# signal.
> 
> However, here we have one gpio-keys for PWRBTN# in Puma DTSI and one 
> gpio-keys for the buttons and sliders on Haikou devkit in Haikou DTS.
> 
> I'm a bit undecided on where this should go.
> 
> Having all button/slider signals following the Qseven standard in Puma 
> DTSI and enable the gpio-keys only in the devkit would make sense to me, 
> so that other baseboards could easily make use of it. However, things 
> get complicated if the baseboard manufacturer decides to only implement 
> **some** of the signals, for which we then need to remove some nodes 
> from gpio-keys (and pinctrl entries) since gpio-keys doesn't check the 
> "status" property in its child nodes (though that could be fixed). At 
> which point, it's not entirely clear if having it in Puma DTSI is 
> actually beneficial.
> 
> Someone has an opinion/recommendation on that?

I guess from a platform perspective nobody really cares, so as that is
"your" board, it comes down to a policy decision on your part ;-) .

While pins follow the q7 standard, there may very well be some lax
handling of that standard in some places, and I guess gpio lines could
be re-used for something else if needed, as something like the lid-switch
is probably non-essential.

Also a gpio-key input does not create that much code-overhead if
replicated, so personally I'd just stick the power-button with the other
buttons in the haikou dts.

Which is also a way better thing than having multiple gpio-keys instances
that userspace then has to handle.


Heiko


> > ---
> > 
> >   .../boot/dts/rockchip/rk3399-puma-haikou.dts  |  4 ++++
> >   arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi | 22 +++++++++++++++++++
> >   2 files changed, 26 insertions(+)
> > 
> > diff --git a/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts b/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts
> > index f6f15946579e..0999026b16d0 100644
> > --- a/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts
> > +++ b/arch/arm64/boot/dts/rockchip/rk3399-puma-haikou.dts
> > @@ -143,6 +143,10 @@ vddd_codec: vddd-codec {
> >   	};
> >   };
> >   
> > +&gpio_key_power {
> > +	status = "okay";
> > +};
> > +
> >   &hdmi {
> >   	ddc-i2c-bus = <&i2c3>;
> >   	status = "okay";
> > diff --git a/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi b/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi
> > index 650b1ba9c192..389ffe604e74 100644
> > --- a/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi
> > +++ b/arch/arm64/boot/dts/rockchip/rk3399-puma.dtsi
> > @@ -3,6 +3,7 @@
> >    * Copyright (c) 2017 Theobroma Systems Design und Consulting GmbH
> >    */
> >   
> > +#include <dt-bindings/input/input.h>
> >   #include <dt-bindings/pwm/pwm.h>
> >   #include "rk3399.dtsi"
> >   
> > @@ -39,6 +40,19 @@ clkin_gmac: external-gmac-clock {
> >   		#clock-cells = <0>;
> >   	};
> >   
> > +	gpio_key_power: gpio-key-power {
> > +		compatible = "gpio-keys";
> > +		pinctrl-0 = <&pwrbtn_pin>;
> > +		pinctrl-names = "default";
> > +		status = "disabled";
> > +
> > +		button-pwrbtn-n {
> > +			gpios = <&gpio0 RK_PA1 GPIO_ACTIVE_LOW>;
> > +			label = "PWRBTN#";
> > +			linux,code = <KEY_POWER>;
> > +		};
> > +	};
> > +
> >   	vcc1v2_phy: vcc1v2-phy {
> >   		compatible = "regulator-fixed";
> >   		regulator-name = "vcc1v2_phy";
> > @@ -475,6 +489,14 @@ &pinctrl {
> >   	pinctrl-names = "default";
> >   	pinctrl-0 = <&q7_thermal_pin &bios_disable_override_hog_pin>;
> >   
> > +	buttons {
> > +		pwrbtn_pin: pwrbtn-pin {
> > +			rockchip,pins =
> > +				/* PWRBTN# */
> > +				<0 RK_PA1 RK_FUNC_GPIO &pcfg_pull_up>;
> > +		};
> > +	};
> > +
> >   	gpios {
> >   		bios_disable_override_hog_pin: bios-disable-override-hog-pin {
> >   			rockchip,pins =
> 
> 







More information about the Linux-rockchip mailing list