|  | /* | 
|  | * Copyright (c) 2023 Caspar Friedrich <c.s.w.friedrich@gmail.com> | 
|  | * | 
|  | * SPDX-License-Identifier: Apache-2.0 | 
|  | */ | 
|  |  | 
|  | #include "w1_ds2482-800.h" | 
|  | #include "w1_ds2482_84_common.h" | 
|  |  | 
|  | #include <zephyr/devicetree.h> | 
|  | #include <zephyr/drivers/i2c.h> | 
|  | #include <zephyr/logging/log.h> | 
|  |  | 
|  | #define DT_DRV_COMPAT maxim_ds2482_800 | 
|  |  | 
|  | LOG_MODULE_REGISTER(ds2482, CONFIG_W1_LOG_LEVEL); | 
|  |  | 
|  | struct ds2482_config { | 
|  | const struct i2c_dt_spec i2c_spec; | 
|  | }; | 
|  |  | 
|  | struct ds2482_data { | 
|  | struct k_mutex lock; | 
|  | }; | 
|  |  | 
|  | int ds2482_change_bus_lock_impl(const struct device *dev, bool lock) | 
|  | { | 
|  | struct ds2482_data *data = dev->data; | 
|  |  | 
|  | return lock ? k_mutex_lock(&data->lock, K_FOREVER) : k_mutex_unlock(&data->lock); | 
|  | } | 
|  |  | 
|  | static int ds2482_init(const struct device *dev) | 
|  | { | 
|  | int ret; | 
|  |  | 
|  | const struct ds2482_config *config = dev->config; | 
|  | struct ds2482_data *data = dev->data; | 
|  |  | 
|  | k_mutex_init(&data->lock); | 
|  |  | 
|  | if (!i2c_is_ready_dt(&config->i2c_spec)) { | 
|  | return -ENODEV; | 
|  | } | 
|  |  | 
|  | ret = ds2482_84_reset_device(&config->i2c_spec); | 
|  | if (ret < 0) { | 
|  | LOG_ERR("Device reset failed: %d", ret); | 
|  | return ret; | 
|  | } | 
|  |  | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | #define DS2482_INIT(inst)                                                                          \ | 
|  | static const struct ds2482_config inst_##inst##_config = {                                 \ | 
|  | .i2c_spec = I2C_DT_SPEC_INST_GET(inst),                                            \ | 
|  | };                                                                                         \ | 
|  | static struct ds2482_data inst_##inst##_data;                                              \ | 
|  | DEVICE_DT_INST_DEFINE(inst, ds2482_init, NULL, &inst_##inst##_data, &inst_##inst##_config, \ | 
|  | POST_KERNEL, CONFIG_W1_INIT_PRIORITY, NULL); | 
|  |  | 
|  | DT_INST_FOREACH_STATUS_OKAY(DS2482_INIT) | 
|  |  | 
|  | /* | 
|  | * Make sure that this driver is not initialized before the i2c bus is available | 
|  | */ | 
|  | BUILD_ASSERT(CONFIG_W1_INIT_PRIORITY > CONFIG_I2C_INIT_PRIORITY); |