From 8933e6cefa90b84493fae17542219856cafdedf5 Mon Sep 17 00:00:00 2001 From: Jeppe Odgaard Date: Tue, 13 Aug 2024 09:22:37 +0200 Subject: [PATCH] drivers: ad559x: fix mfd_ad559x_i2c_read_reg Reading a register requires 0x70 to be ORed with the register address. Signed-off-by: Jeppe Odgaard --- drivers/mfd/mfd_ad559x_i2c.c | 6 +++++- include/zephyr/drivers/mfd/ad559x.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/mfd/mfd_ad559x_i2c.c b/drivers/mfd/mfd_ad559x_i2c.c index a18ecbc1423..9f2ecd8f280 100644 --- a/drivers/mfd/mfd_ad559x_i2c.c +++ b/drivers/mfd/mfd_ad559x_i2c.c @@ -12,6 +12,8 @@ #include "mfd_ad559x.h" +#define AD559X_REG_RD_POINTER 0x70 + static int mfd_ad559x_i2c_read_raw(const struct device *dev, uint8_t *val, size_t len) { const struct mfd_ad559x_config *config = dev->config; @@ -35,7 +37,9 @@ static int mfd_ad559x_i2c_read_reg(const struct device *dev, uint8_t reg, uint8_ ARG_UNUSED(reg_data); - __ASSERT((reg & 0xf0) == 0, "reg bits [7:4] should be 0: 0x%x", reg); + if (reg >= AD559X_REG_SEQ_ADC || reg <= AD559X_REG_IO_TS_CONFIG) { + reg |= AD559X_REG_RD_POINTER; + } ret = i2c_write_read_dt(&config->i2c, ®, sizeof(reg), buf, sizeof(buf)); if (ret < 0) { diff --git a/include/zephyr/drivers/mfd/ad559x.h b/include/zephyr/drivers/mfd/ad559x.h index 095cdd3e622..744ccd312d0 100644 --- a/include/zephyr/drivers/mfd/ad559x.h +++ b/include/zephyr/drivers/mfd/ad559x.h @@ -21,6 +21,7 @@ extern "C" { #define AD559X_REG_GPIO_SET 0x09U #define AD559X_REG_GPIO_INPUT_EN 0x0AU #define AD559X_REG_PD_REF_CTRL 0x0BU +#define AD559X_REG_IO_TS_CONFIG 0x0DU #define AD559X_EN_REF BIT(9)