Re: [PATCH v6 25/37] hwmon: (scmi) port driver to the new scmi_sensor_proto_ops interface

From: Guenter Roeck
Date: Tue Feb 02 2021 - 20:31:36 EST


On 2/2/21 2:15 PM, Cristian Marussi wrote:
> Port driver to the new SCMI Sensor interface based on protocol handles
> and common devm_get_ops().
>
> Cc: Guenter Roeck <linux@xxxxxxxxxxxx>
> Cc: Jean Delvare <jdelvare@xxxxxxxx>
> Signed-off-by: Cristian Marussi <cristian.marussi@xxxxxxx>

Assuming this will be handled with the series.

Acked-by: Guenter Roeck <linux@xxxxxxxxxxxx>

> ---
> v4 --> v5
> - using renamed devm_get/put_protocol
> ---
> drivers/hwmon/scmi-hwmon.c | 24 +++++++++++++++---------
> 1 file changed, 15 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/hwmon/scmi-hwmon.c b/drivers/hwmon/scmi-hwmon.c
> index 17d064e58938..c5a260c6e3c6 100644
> --- a/drivers/hwmon/scmi-hwmon.c
> +++ b/drivers/hwmon/scmi-hwmon.c
> @@ -2,7 +2,7 @@
> /*
> * System Control and Management Interface(SCMI) based hwmon sensor driver
> *
> - * Copyright (C) 2018 ARM Ltd.
> + * Copyright (C) 2018-2020 ARM Ltd.
> * Sudeep Holla <sudeep.holla@xxxxxxx>
> */
>
> @@ -13,8 +13,10 @@
> #include <linux/sysfs.h>
> #include <linux/thermal.h>
>
> +static const struct scmi_sensor_proto_ops *sensor_ops;
> +
> struct scmi_sensors {
> - const struct scmi_handle *handle;
> + const struct scmi_protocol_handle *ph;
> const struct scmi_sensor_info **info[hwmon_max];
> };
>
> @@ -69,10 +71,9 @@ static int scmi_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
> u64 value;
> const struct scmi_sensor_info *sensor;
> struct scmi_sensors *scmi_sensors = dev_get_drvdata(dev);
> - const struct scmi_handle *h = scmi_sensors->handle;
>
> sensor = *(scmi_sensors->info[type] + channel);
> - ret = h->sensor_ops->reading_get(h, sensor->id, &value);
> + ret = sensor_ops->reading_get(scmi_sensors->ph, sensor->id, &value);
> if (ret)
> return ret;
>
> @@ -169,11 +170,16 @@ static int scmi_hwmon_probe(struct scmi_device *sdev)
> struct hwmon_channel_info *scmi_hwmon_chan;
> const struct hwmon_channel_info **ptr_scmi_ci;
> const struct scmi_handle *handle = sdev->handle;
> + struct scmi_protocol_handle *ph;
>
> - if (!handle || !handle->sensor_ops)
> + if (!handle)
> return -ENODEV;
>
> - nr_sensors = handle->sensor_ops->count_get(handle);
> + sensor_ops = handle->devm_get_protocol(sdev, SCMI_PROTOCOL_SENSOR, &ph);
> + if (IS_ERR(sensor_ops))
> + return PTR_ERR(sensor_ops);
> +
> + nr_sensors = sensor_ops->count_get(ph);
> if (!nr_sensors)
> return -EIO;
>
> @@ -181,10 +187,10 @@ static int scmi_hwmon_probe(struct scmi_device *sdev)
> if (!scmi_sensors)
> return -ENOMEM;
>
> - scmi_sensors->handle = handle;
> + scmi_sensors->ph = ph;
>
> for (i = 0; i < nr_sensors; i++) {
> - sensor = handle->sensor_ops->info_get(handle, i);
> + sensor = sensor_ops->info_get(ph, i);
> if (!sensor)
> return -EINVAL;
>
> @@ -236,7 +242,7 @@ static int scmi_hwmon_probe(struct scmi_device *sdev)
> }
>
> for (i = nr_sensors - 1; i >= 0 ; i--) {
> - sensor = handle->sensor_ops->info_get(handle, i);
> + sensor = sensor_ops->info_get(ph, i);
> if (!sensor)
> continue;
>
>