| /* |
| * Copyright (c) 2023 Grinn |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #define DT_DRV_COMPAT maxim_max20335 |
| |
| #include <errno.h> |
| |
| #include <zephyr/drivers/i2c.h> |
| #include <zephyr/sys/util.h> |
| |
| #define MAX20335_REG_CHIP_ID 0x00 |
| #define MAX20335_CHIP_ID_VAL 0x04 |
| |
| struct mfd_max20335_config { |
| struct i2c_dt_spec bus; |
| }; |
| |
| static int mfd_max20335_init(const struct device *dev) |
| { |
| const struct mfd_max20335_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, MAX20335_REG_CHIP_ID, &val); |
| if (ret < 0) { |
| return ret; |
| } |
| |
| if (val != MAX20335_CHIP_ID_VAL) { |
| return -ENODEV; |
| } |
| |
| return 0; |
| } |
| |
| #define MFD_MA20335_DEFINE(inst) \ |
| static const struct mfd_max20335_config mfd_max20335_config##inst = { \ |
| .bus = I2C_DT_SPEC_INST_GET(inst), \ |
| }; \ |
| \ |
| DEVICE_DT_INST_DEFINE(inst, mfd_max20335_init, NULL, NULL, \ |
| &mfd_max20335_config##inst, POST_KERNEL, \ |
| CONFIG_MFD_INIT_PRIORITY, NULL); |
| |
| DT_INST_FOREACH_STATUS_OKAY(MFD_MA20335_DEFINE) |