zephyr/drivers/mfd/mfd_pf1550.c
Martino Facchin efe3bf5b29 drivers: add nxp pf1550 mfd (charger+regulator)
Add driver for nxp pf1550 PMIC

Signed-off-by: Martino Facchin <m.facchin@arduino.cc>
2025-02-14 03:03:10 +01:00

51 lines
1.3 KiB
C

/*
* Copyright (c) 2024 Arduino SA
* SPDX-License-Identifier: Apache-2.0
*/
#define DT_DRV_COMPAT nxp_pf1550
#include <errno.h>
#include <zephyr/drivers/i2c.h>
#include <zephyr/sys/util.h>
#define PF1550_REG_CHIP_ID 0x00
#define PF1550_CHIP_ID_VAL ((15 << 3) | 4)
struct mfd_pf1550_config {
struct i2c_dt_spec bus;
};
static int mfd_pf1550_init(const struct device *dev)
{
const struct mfd_pf1550_config *config = dev->config;
uint8_t val;
int ret;
if (!i2c_is_ready_dt(&config->bus)) {
return -ENODEV;
}
ret = i2c_reg_read_byte_dt(&config->bus, PF1550_REG_CHIP_ID, &val);
if (ret < 0) {
return ret;
}
if (val != PF1550_CHIP_ID_VAL) {
return -ENODEV;
}
return 0;
}
#define MFD_PF1550_DEFINE(inst) \
static const struct mfd_pf1550_config mfd_pf1550_config##inst = { \
.bus = I2C_DT_SPEC_INST_GET(inst), \
}; \
\
DEVICE_DT_INST_DEFINE(inst, mfd_pf1550_init, NULL, NULL, &mfd_pf1550_config##inst, \
POST_KERNEL, CONFIG_MFD_INIT_PRIORITY, NULL);
DT_INST_FOREACH_STATUS_OKAY(MFD_PF1550_DEFINE)