summaryrefslogtreecommitdiff
path: root/drivers/button/button-qcom-pmic.c
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2025-01-22 11:23:35 -0600
committerTom Rini <trini@konsulko.com>2025-01-22 11:23:35 -0600
commit2eed5a1ff36217372e19f7513bd07077fc76718a (patch)
treee98aadc2d4d04fc12504d00db17c4edc38bbb59d /drivers/button/button-qcom-pmic.c
parent380b32f54f4b30f6f9b430c5d73d8b12f90f2918 (diff)
parent599a1f9076d34c29d3683e0f833706478d62d9e0 (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.c14
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)