/* * Copyright (c) 2024 Vitrolife A/S * SPDX-License-Identifier: Apache-2.0 */ #ifndef ZEPHYR_DRIVERS_MFD_AD559X_H_ #define ZEPHYR_DRIVERS_MFD_AD559X_H_ #ifdef __cplusplus extern "C" { #endif #define DT_DRV_COMPAT adi_ad559x #include #include #if DT_ANY_INST_ON_BUS_STATUS_OKAY(i2c) #include #endif /* DT_ANY_INST_ON_BUS_STATUS_OKAY(i2c) */ #if DT_ANY_INST_ON_BUS_STATUS_OKAY(spi) #include #endif /* DT_ANY_INST_ON_BUS_STATUS_OKAY(spi) */ #define AD559X_GPIO_READBACK_EN BIT(10) #define AD559X_LDAC_READBACK_EN BIT(6) #define AD559X_REG_SOFTWARE_RESET 0x0FU #define AD559X_SOFTWARE_RESET_MAGIC_VAL 0x5AC #define AD559X_REG_VAL_MASK 0x3FF #define AD559X_REG_RESET_VAL_MASK 0x7FF #define AD559X_REG_SHIFT_VAL 11 #define AD559X_REG_READBACK_SHIFT_VAL 2 struct mfd_ad559x_transfer_function { int (*read_raw)(const struct device *dev, uint8_t *val, size_t len); int (*write_raw)(const struct device *dev, uint8_t *val, size_t len); int (*read_reg)(const struct device *dev, uint8_t reg, uint8_t reg_data, uint16_t *val); int (*write_reg)(const struct device *dev, uint8_t reg, uint16_t val); }; struct mfd_ad559x_config { struct gpio_dt_spec reset_gpio; #if DT_ANY_INST_ON_BUS_STATUS_OKAY(i2c) struct i2c_dt_spec i2c; #endif /* DT_ANY_INST_ON_BUS_STATUS_OKAY(i2c) */ #if DT_ANY_INST_ON_BUS_STATUS_OKAY(spi) struct spi_dt_spec spi; #endif /* DT_ANY_INST_ON_BUS_STATUS_OKAY(spi) */ int (*bus_init)(const struct device *dev); bool has_pointer_byte_map; }; struct mfd_ad559x_data { const struct mfd_ad559x_transfer_function *transfer_function; }; int mfd_ad559x_i2c_init(const struct device *dev); int mfd_ad559x_spi_init(const struct device *dev); #ifdef __cplusplus } #endif #endif /* ZEPHYR_DRIVERS_MFD_AD559X_H_*/