blob: 6976b2e2b3e77e5e56447ad59cde6449a7d4f542 [file] [log] [blame]
/*
* Copyright 2021-2024 NXP
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <lib/libc/errno.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include "../../../drivers/scmi-msg/sensor.h"
#include <common/debug.h>
#include <drivers/scmi.h>
#include <lib/mmio.h>
#include <lib/utils_def.h>
#include <scmi.h>
#include <upower_api.h>
/* Only Temperature now */
static uint16_t imx_scmi_sensor_count(unsigned int agent_id __unused)
{
return 1U;
}
uint8_t imx_scmi_sensor_max_requests(unsigned int agent_id __unused)
{
return 1U;
}
extern int upower_read_temperature(uint32_t sensor_id, int32_t *temperature);
int imx_scmi_sensor_reading_get(uint32_t agent_id __unused, uint16_t sensor_id __unused,
uint32_t *val)
{
int32_t temperature;
int ret;
ret = upower_read_temperature(1, &temperature);
if (ret != 0U) {
val[0] = 0xFFFFFFFF;
} else {
val[0] = temperature;
}
val[1] = 0;
val[2] = 0;
val[3] = 0;
return ret;
}
#define SCMI_SENSOR_NAME_LENGTH_MAX 16U
uint32_t imx_scmi_sensor_state(uint32_t agent_id __unused, uint16_t sensor_id __unused)
{
return 1U;
}
uint32_t imx_scmi_sensor_description_get(uint32_t agent_id __unused, uint16_t desc_index __unused,
struct scmi_sensor_desc *desc __unused)
{
desc->id = 0;
desc->attr_low = 0;
desc->attr_high = 2;
strlcpy((char *)desc->name, "UPOWER-TEMP", 12);
desc->power = 0;
desc->resolution = 0;
desc->min_range_low = 0;
desc->min_range_high = 0x80000000;
desc->max_range_low = 0xffffffff;
desc->max_range_high = 0x7fffffff;
return 1U;
}
REGISTER_SCMI_SENSOR_OPS(imx_scmi_sensor_count,
imx_scmi_sensor_max_requests,
NULL,
imx_scmi_sensor_reading_get,
imx_scmi_sensor_description_get,
NULL,
imx_scmi_sensor_state,
NULL);