| /* |
| * Copyright (c) 2020 Innoseis B.V |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <devicetree.h> |
| #include <drivers/eeprom.h> |
| #include <drivers/sensor/tmp116.h> |
| |
| #define DT_DRV_COMPAT ti_tmp116_eeprom |
| |
| struct eeprom_tmp116_config { |
| const struct device *parent; |
| }; |
| |
| BUILD_ASSERT(CONFIG_EEPROM_INIT_PRIORITY > |
| CONFIG_SENSOR_INIT_PRIORITY, |
| "TMP116 eeprom driver must be initialized after TMP116 sensor " |
| "driver"); |
| |
| static size_t eeprom_tmp116_size(const struct device *dev) |
| { |
| return EEPROM_TMP116_SIZE; |
| } |
| |
| static int eeprom_tmp116_write(const struct device *dev, off_t offset, |
| const void *data, size_t len) |
| { |
| const struct eeprom_tmp116_config *config = dev->config; |
| |
| return tmp116_eeprom_write(config->parent, offset, data, len); |
| } |
| |
| static int eeprom_tmp116_read(const struct device *dev, off_t offset, void *data, |
| size_t len) |
| { |
| const struct eeprom_tmp116_config *config = dev->config; |
| |
| return tmp116_eeprom_read(config->parent, offset, data, len); |
| } |
| |
| static int eeprom_tmp116_init(const struct device *dev) |
| { |
| const struct eeprom_tmp116_config *config = dev->config; |
| |
| if (!device_is_ready(config->parent)) { |
| return -ENODEV; |
| } |
| |
| return 0; |
| } |
| |
| static const struct eeprom_driver_api eeprom_tmp116_api = { |
| .read = eeprom_tmp116_read, |
| .write = eeprom_tmp116_write, |
| .size = eeprom_tmp116_size, |
| }; |
| |
| #define DEFINE_TMP116(_num) \ |
| static const struct eeprom_tmp116_config eeprom_tmp116_config##_num = { \ |
| .parent = DEVICE_DT_GET(DT_INST_BUS(_num)) \ |
| }; \ |
| DEVICE_DT_INST_DEFINE(_num, eeprom_tmp116_init, NULL, \ |
| NULL, &eeprom_tmp116_config##_num, POST_KERNEL, \ |
| CONFIG_EEPROM_INIT_PRIORITY, &eeprom_tmp116_api); |
| |
| DT_INST_FOREACH_STATUS_OKAY(DEFINE_TMP116); |