/* * Copyright 2021-2024 NXP * * SPDX-License-Identifier: BSD-3-Clause */ #include #include #include #include #include "../../../drivers/scmi-msg/sensor.h" #include #include #include #include #include #include /* 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);