You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.3 KiB
50 lines
1.3 KiB
/* |
|
* 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)
|
|
|