diff options
author | Tom Rini <trini@konsulko.com> | 2025-01-22 11:23:35 -0600 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2025-01-22 11:23:35 -0600 |
commit | 2eed5a1ff36217372e19f7513bd07077fc76718a (patch) | |
tree | e98aadc2d4d04fc12504d00db17c4edc38bbb59d /drivers/button/button-qcom-pmic.c | |
parent | 380b32f54f4b30f6f9b430c5d73d8b12f90f2918 (diff) | |
parent | 599a1f9076d34c29d3683e0f833706478d62d9e0 (diff) |
Merge https://source.denx.de/u-boot/custodians/u-boot-snapdragon
The highlights are:
* Fixed boot regression due to broken memory parsing
* Enable HW RNG and KASLR on all platforms
* Add support for Snapdragon X1 Elite hardware (clk/pinctrl)
* Add support for QCS9100 ride automotive development platform (clk/ufs)
* Add support for PCIe on SM8550, SM8650 and X1E
* Implement software debounce for PMIC buttons
Additionally, some minor improvements to "ufetch" have been pulled in:
* Show CPU architecture (arm/mips/etc)
* Make CONFIG_BLK optional
* Fix 32-bit support
Diffstat (limited to 'drivers/button/button-qcom-pmic.c')
-rw-r--r-- | drivers/button/button-qcom-pmic.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/button/button-qcom-pmic.c b/drivers/button/button-qcom-pmic.c index ad7fed3ddaa..f9f0948ae09 100644 --- a/drivers/button/button-qcom-pmic.c +++ b/drivers/button/button-qcom-pmic.c @@ -15,6 +15,7 @@ #include <power/pmic.h> #include <spmi/spmi.h> #include <linux/bitops.h> +#include <time.h> #define REG_TYPE 0x4 #define REG_SUBTYPE 0x5 @@ -31,6 +32,7 @@ struct qcom_pmic_btn_priv { u32 status_bit; int code; struct udevice *pmic; + ulong last_release_time; }; #define PON_INT_RT_STS 0x10 @@ -42,13 +44,21 @@ struct qcom_pmic_btn_priv { static enum button_state_t qcom_pwrkey_get_state(struct udevice *dev) { struct qcom_pmic_btn_priv *priv = dev_get_priv(dev); + bool pressed; + int reg; - int reg = pmic_reg_read(priv->pmic, priv->base + PON_INT_RT_STS); + if (get_timer_us(0) - priv->last_release_time < 25000) + return BUTTON_OFF; + reg = pmic_reg_read(priv->pmic, priv->base + PON_INT_RT_STS); if (reg < 0) return 0; - return (reg & BIT(priv->status_bit)) != 0; + pressed = !!(reg & BIT(priv->status_bit)); + if (!pressed) + priv->last_release_time = get_timer_us(0); + + return pressed; } static int qcom_pwrkey_get_code(struct udevice *dev) |