Skip to content

Commit

Permalink
LFU-628-1 thermal: scmi: Support scmi to get and set config of sensor
Browse files Browse the repository at this point in the history
Provide scmi_sensor_config_get/set() to get and set config of sensor.

Signed-off-by: Alice Guo <alice.guo@nxp.com>
Reviewed-by: Ye Li <ye.li@nxp.com>
  • Loading branch information
Alice Guo authored and Ye Li committed Dec 14, 2023
1 parent 1a37dce commit 3ca247d
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 0 deletions.
49 changes: 49 additions & 0 deletions drivers/thermal/scmi_thermal.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,51 @@ static const struct dm_thermal_ops scmi_thermal_ops = {
.get_temp = scmi_thermal_get_temp,
};

static int scmi_sensor_config_get(struct udevice *dev)
{
struct scmi_thermal_priv *priv = dev_get_priv(dev);
struct scmi_sensor_config_get_a2p in = {
.sensor_id = priv->thermal_id,
};
struct scmi_sensor_config_get_p2a out = { 0 };
struct scmi_msg msg = SCMI_MSG_IN(SCMI_PROTOCOL_ID_SENSOR,
SCMI_SENSOR_CONFIG_GET, in, out);
int ret;

ret = devm_scmi_process_msg(dev, priv->channel, &msg);
if (ret)
return ret;

ret = scmi_to_linux_errno(out.status);
if (ret < 0)
return ret;

return out.sensor_config;
}

static int scmi_sensor_config_set(struct udevice *dev, u32 config)
{
struct scmi_thermal_priv *priv = dev_get_priv(dev);
struct scmi_sensor_config_set_a2p in = {
.id = priv->thermal_id,
.sensor_config = config,
};
struct scmi_sensor_config_set_p2a out = { 0 };
struct scmi_msg msg = SCMI_MSG_IN(SCMI_PROTOCOL_ID_SENSOR,
SCMI_SENSOR_CONFIG_SET, in, out);
int ret;

ret = devm_scmi_process_msg(dev, priv->channel, &msg);
if (ret)
return ret;

ret = scmi_to_linux_errno(*(u32 *)out.buf);
if (ret < 0)
return ret;

return 0;
}

static int scmi_thermal_probe(struct udevice *dev)
{
int ret;
Expand Down Expand Up @@ -169,6 +214,10 @@ static int scmi_thermal_probe(struct udevice *dev)
return -ENODEV;
}

u32 sensor_config = scmi_sensor_config_get(dev);
if ((sensor_config & SCMI_SENS_CFG_ENABLED_MASK) == SCMI_SENS_CFG_DISABLE)
scmi_sensor_config_set(dev, sensor_config | SCMI_SENS_CFG_ENABLE);

return 0;
}

Expand Down
14 changes: 14 additions & 0 deletions include/scmi_protocols.h
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,20 @@ struct scmi_sensor_config_get_p2a {
uint32_t sensor_config;
};

struct scmi_sensor_config_set_a2p {
u32 id;
u32 sensor_config;
};

struct scmi_sensor_config_set_p2a {
void *buf;
size_t len;
};

#define SCMI_SENS_CFG_ENABLED_MASK BIT(0)
#define SCMI_SENS_CFG_ENABLE 1
#define SCMI_SENS_CFG_DISABLE 0

/*
* Sensor Reading Get
*/
Expand Down

0 comments on commit 3ca247d

Please sign in to comment.