78 lines
2.8 KiB
C
78 lines
2.8 KiB
C
/*
|
|
* Copyright (c) 2024 SILA Embedded Solutions GmbH
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#define DT_DRV_COMPAT rohm_bd8lb600fs_diagnostics
|
|
|
|
#include <zephyr/drivers/sensor.h>
|
|
#include <zephyr/drivers/mfd/bd8lb600fs.h>
|
|
#include <zephyr/drivers/sensor/bd8lb600fs.h>
|
|
#include <zephyr/logging/log.h>
|
|
|
|
#include "bd8lb600fs_diagnostics.h"
|
|
|
|
LOG_MODULE_REGISTER(BD8LB600FS_DIAGNOSTICS, CONFIG_SENSOR_LOG_LEVEL);
|
|
|
|
static int bd8lb600fs_diagnostics_sample_fetch(const struct device *dev, enum sensor_channel chan)
|
|
{
|
|
const struct bd8lb600fs_diagnostics_config *config = dev->config;
|
|
struct bd8lb600fs_diagnostics_data *data = dev->data;
|
|
|
|
__ASSERT_NO_MSG(chan == SENSOR_CHAN_ALL);
|
|
return mfd_bd8lb600fs_get_output_diagnostics(config->parent_dev, &data->old,
|
|
&data->ocp_or_tsd);
|
|
}
|
|
|
|
static int bd8lb600fs_diagnostics_channel_get(const struct device *dev, enum sensor_channel chan,
|
|
struct sensor_value *val)
|
|
{
|
|
struct bd8lb600fs_diagnostics_data *data = dev->data;
|
|
|
|
switch (chan) {
|
|
case SENSOR_CHAN_BD8LB600FS_OPEN_LOAD:
|
|
val->val1 = data->old;
|
|
val->val2 = 0;
|
|
return 0;
|
|
case SENSOR_CHAN_BD8LB600FS_OVER_CURRENT_OR_THERMAL_SHUTDOWN:
|
|
val->val1 = data->ocp_or_tsd;
|
|
val->val2 = 0;
|
|
return 0;
|
|
default:
|
|
LOG_ERR("%s: requesting unsupported channel %i", dev->name, chan);
|
|
return -ENOTSUP;
|
|
}
|
|
}
|
|
|
|
static const struct sensor_driver_api bd8lb600fs_diagnostics_driver_api = {
|
|
.sample_fetch = bd8lb600fs_diagnostics_sample_fetch,
|
|
.channel_get = bd8lb600fs_diagnostics_channel_get,
|
|
};
|
|
|
|
static int bd8lb600fs_diagnostics_init(const struct device *dev)
|
|
{
|
|
const struct bd8lb600fs_diagnostics_config *config = dev->config;
|
|
|
|
if (!device_is_ready(config->parent_dev)) {
|
|
LOG_ERR("%s: parent device is not ready", dev->name);
|
|
return -ENODEV;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
#define BD8LB600FS_DIAGNOSTICS_DEFINE(inst) \
|
|
static struct bd8lb600fs_diagnostics_data bd8lb600fs_diagnostics_data_##inst; \
|
|
\
|
|
static const struct bd8lb600fs_diagnostics_config bd8lb600fs_diagnostics_config_##inst = { \
|
|
.parent_dev = DEVICE_DT_GET(DT_PARENT(DT_DRV_INST(inst))), \
|
|
}; \
|
|
\
|
|
SENSOR_DEVICE_DT_INST_DEFINE( \
|
|
inst, bd8lb600fs_diagnostics_init, NULL, &bd8lb600fs_diagnostics_data_##inst, \
|
|
&bd8lb600fs_diagnostics_config_##inst, POST_KERNEL, CONFIG_SENSOR_INIT_PRIORITY, \
|
|
&bd8lb600fs_diagnostics_driver_api);
|
|
|
|
DT_INST_FOREACH_STATUS_OKAY(BD8LB600FS_DIAGNOSTICS_DEFINE)
|