/** * struct iio_hwmon_state - device instance state * @channels: filled with array of channels from iio * @num_channels: number of channels in channels (saves counting twice) * @attr_group: the group of attributes * @groups: null terminated array of attribute groups * @attrs: null terminated array of attribute pointers.
*/ struct iio_hwmon_state { struct iio_channel *channels; int num_channels; struct attribute_group attr_group; conststruct attribute_group *groups[2]; struct attribute **attrs;
};
/* * Assumes that IIO and hwmon operate in the same base units. * This is supposed to be true, but needs verification for * new channel types.
*/ static ssize_t iio_hwmon_read_val(struct device *dev, struct device_attribute *attr, char *buf)
{ int result; 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_get_channel_type(chan, &type); if (ret < 0) return ret;
if (type == IIO_POWER) /* mili-Watts to micro-Watts conversion */
ret = iio_read_channel_processed_scale(chan, &result, 1000); else
ret = iio_read_channel_processed(chan, &result); if (ret < 0) return ret;
channels = devm_iio_channel_get_all(dev); if (IS_ERR(channels)) {
ret = PTR_ERR(channels); if (ret == -ENODEV)
ret = -EPROBE_DEFER; return dev_err_probe(dev, ret, "Failed to get channels\n");
}
st = devm_kzalloc(dev, sizeof(*st), GFP_KERNEL);
buf = (void *)devm_get_free_pages(dev, GFP_KERNEL, 0); if (!st || !buf) return -ENOMEM;
st->channels = channels;
/* count how many channels we have */ while (st->channels[st->num_channels].indio_dev)
st->num_channels++;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.