Lines Matching +full:sensor +full:- +full:channel
1 // SPDX-License-Identifier: GPL-2.0
3 * System Control and Management Interface(SCMI) based hwmon sensor driver
25 while (x--) in __pow10()
31 static int scmi_hwmon_scale(const struct scmi_sensor_info *sensor, u64 *value) in scmi_hwmon_scale() argument
33 s8 scale = sensor->scale; in scmi_hwmon_scale()
36 switch (sensor->type) { in scmi_hwmon_scale()
54 return -E2BIG; in scmi_hwmon_scale()
66 u32 attr, int channel, long *val) in scmi_hwmon_read() argument
70 const struct scmi_sensor_info *sensor; in scmi_hwmon_read() local
72 const struct scmi_handle *h = scmi_sensors->handle; in scmi_hwmon_read()
74 sensor = *(scmi_sensors->info[type] + channel); in scmi_hwmon_read()
75 ret = h->sensor_ops->reading_get(h, sensor->id, &value); in scmi_hwmon_read()
79 ret = scmi_hwmon_scale(sensor, &value); in scmi_hwmon_read()
88 u32 attr, int channel, const char **str) in scmi_hwmon_read_string() argument
90 const struct scmi_sensor_info *sensor; in scmi_hwmon_read_string() local
93 sensor = *(scmi_sensors->info[type] + channel); in scmi_hwmon_read_string()
94 *str = sensor->name; in scmi_hwmon_read_string()
101 u32 attr, int channel) in scmi_hwmon_is_visible() argument
103 const struct scmi_sensor_info *sensor; in scmi_hwmon_is_visible() local
106 sensor = *(scmi_sensors->info[type] + channel); in scmi_hwmon_is_visible()
107 if (sensor) in scmi_hwmon_is_visible()
132 return -ENOMEM; in scmi_hwmon_add_chan_info()
134 scmi_hwmon_chan->type = type; in scmi_hwmon_add_chan_info()
135 scmi_hwmon_chan->config = cfg; in scmi_hwmon_add_chan_info()
165 const struct scmi_sensor_info *sensor; in scmi_hwmon_probe() local
168 struct device *hwdev, *dev = &sdev->dev; in scmi_hwmon_probe()
171 const struct scmi_handle *handle = sdev->handle; in scmi_hwmon_probe()
173 if (!handle || !handle->sensor_ops) in scmi_hwmon_probe()
174 return -ENODEV; in scmi_hwmon_probe()
176 nr_sensors = handle->sensor_ops->count_get(handle); in scmi_hwmon_probe()
178 return -EIO; in scmi_hwmon_probe()
182 return -ENOMEM; in scmi_hwmon_probe()
184 scmi_sensors->handle = handle; in scmi_hwmon_probe()
187 sensor = handle->sensor_ops->info_get(handle, i); in scmi_hwmon_probe()
188 if (!sensor) in scmi_hwmon_probe()
189 return -EINVAL; in scmi_hwmon_probe()
191 switch (sensor->type) { in scmi_hwmon_probe()
197 type = scmi_types[sensor->type]; in scmi_hwmon_probe()
213 return -ENOMEM; in scmi_hwmon_probe()
218 return -ENOMEM; in scmi_hwmon_probe()
231 scmi_sensors->info[type] = in scmi_hwmon_probe()
233 sizeof(*scmi_sensors->info), GFP_KERNEL); in scmi_hwmon_probe()
234 if (!scmi_sensors->info[type]) in scmi_hwmon_probe()
235 return -ENOMEM; in scmi_hwmon_probe()
238 for (i = nr_sensors - 1; i >= 0 ; i--) { in scmi_hwmon_probe()
239 sensor = handle->sensor_ops->info_get(handle, i); in scmi_hwmon_probe()
240 if (!sensor) in scmi_hwmon_probe()
243 switch (sensor->type) { in scmi_hwmon_probe()
249 type = scmi_types[sensor->type]; in scmi_hwmon_probe()
250 idx = --nr_count[type]; in scmi_hwmon_probe()
251 *(scmi_sensors->info[type] + idx) = sensor; in scmi_hwmon_probe()
270 .name = "scmi-hwmon",