From 8fcfed162f17b2b80436893c40d7b05899143878 Mon Sep 17 00:00:00 2001 From: Sergei Ovchinnikov Date: Tue, 18 Mar 2025 11:05:39 +0100 Subject: [PATCH] [nrf fromtree] drivers: mfd: mfd_npm2100: add open drain and pull up config to int pin Add possibility to configure open drain and pull up on nPM2100's interrupt output through DTS flags. Signed-off-by: Sergei Ovchinnikov (cherry picked from commit 32b79cfd1ce96b9e1571d3ddcc88801516eb8b24) --- drivers/mfd/mfd_npm2100.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/mfd/mfd_npm2100.c b/drivers/mfd/mfd_npm2100.c index 78049dff56e..6cbe0e070ae 100644 --- a/drivers/mfd/mfd_npm2100.c +++ b/drivers/mfd/mfd_npm2100.c @@ -55,9 +55,11 @@ #define EVENTS_SIZE 5U -#define GPIO_USAGE_INTLO 0x01U -#define GPIO_USAGE_INTHI 0x02U -#define GPIO_CONFIG_OUTPUT 0x02U +#define GPIO_USAGE_INTLO 0x01U +#define GPIO_USAGE_INTHI 0x02U +#define GPIO_CONFIG_OUTPUT 0x02U +#define GPIO_CONFIG_OPENDRAIN 0x04U +#define GPIO_CONFIG_PULLUP 0x10U #define RESET_STICKY_PWRBUT 0x04U @@ -171,10 +173,17 @@ static int config_pmic_int(const struct device *dev) { const struct mfd_npm2100_config *config = dev->config; uint8_t usage = GPIO_USAGE_INTHI; + uint8_t gpio_config = GPIO_CONFIG_OUTPUT; if (config->pmic_int_flags & GPIO_ACTIVE_LOW) { usage = GPIO_USAGE_INTLO; } + if ((config->pmic_int_flags & GPIO_SINGLE_ENDED) != 0U) { + gpio_config |= GPIO_CONFIG_OPENDRAIN; + } + if (config->pmic_int_flags & GPIO_PULL_UP) { + gpio_config |= GPIO_CONFIG_PULLUP; + } /* Set specified PMIC pin to be interrupt output */ int ret = i2c_reg_write_byte_dt(&config->i2c, GPIO_USAGE + config->pmic_int_pin, usage); @@ -184,8 +193,7 @@ static int config_pmic_int(const struct device *dev) } /* Configure PMIC output pin */ - return i2c_reg_write_byte_dt(&config->i2c, GPIO_CONFIG + config->pmic_int_pin, - GPIO_CONFIG_OUTPUT); + return i2c_reg_write_byte_dt(&config->i2c, GPIO_CONFIG + config->pmic_int_pin, gpio_config); } static int config_shphold(const struct device *dev)