On Thu, Aug 22, 2019 at 04:22:24PM +0200, Michal Simek wrote: > There is no reason why power channel shouldn't be exported as is done for > voltage, current, temperature and humidity. > > Power channel is available on iio ina226 driver. > > Sysfs IIO documentation for power attribute added by commit 7c6d5c7ee883 > ("iio: Documentation: Add missing documentation for power attribute") > is declaring that value is in mili-Watts but hwmon interface is expecting > value in micro-Watts that's why there is a need for mili-Watts to > micro-Watts conversion. > > Tested on Xilinx ZCU102 board. > > Signed-off-by: Michal Simek <michal.simek@xxxxxxxxxx> Applied to hwmon-next. Thanks, Guenter > --- > > Changes in v1: > - from RFC - fix power conversion mili-Watts to micro-Watts > > drivers/hwmon/iio_hwmon.c | 18 +++++++++++++++--- > 1 file changed, 15 insertions(+), 3 deletions(-) > > diff --git a/drivers/hwmon/iio_hwmon.c b/drivers/hwmon/iio_hwmon.c > index f1c2d5faedf0..b85a125dd86f 100644 > --- a/drivers/hwmon/iio_hwmon.c > +++ b/drivers/hwmon/iio_hwmon.c > @@ -44,12 +44,20 @@ static ssize_t iio_hwmon_read_val(struct device *dev, > int ret; > struct sensor_device_attribute *sattr = to_sensor_dev_attr(attr); > struct iio_hwmon_state *state = dev_get_drvdata(dev); > + struct iio_channel *chan = &state->channels[sattr->index]; > + enum iio_chan_type type; > + > + ret = iio_read_channel_processed(chan, &result); > + if (ret < 0) > + return ret; > > - ret = iio_read_channel_processed(&state->channels[sattr->index], > - &result); > + ret = iio_get_channel_type(chan, &type); > if (ret < 0) > return ret; > > + if (type == IIO_POWER) > + result *= 1000; /* mili-Watts to micro-Watts conversion */ > + > return sprintf(buf, "%d\n", result); > } > > @@ -59,7 +67,7 @@ static int iio_hwmon_probe(struct platform_device *pdev) > struct iio_hwmon_state *st; > struct sensor_device_attribute *a; > int ret, i; > - int in_i = 1, temp_i = 1, curr_i = 1, humidity_i = 1; > + int in_i = 1, temp_i = 1, curr_i = 1, humidity_i = 1, power_i = 1; > enum iio_chan_type type; > struct iio_channel *channels; > struct device *hwmon_dev; > @@ -114,6 +122,10 @@ static int iio_hwmon_probe(struct platform_device *pdev) > n = curr_i++; > prefix = "curr"; > break; > + case IIO_POWER: > + n = power_i++; > + prefix = "power"; > + break; > case IIO_HUMIDITYRELATIVE: > n = humidity_i++; > prefix = "humidity";