struct mutex state_lock;
};
-struct ad7150_conversion_mode {
- char *name;
- u8 reg_cfg;
-};
-
-static struct ad7150_conversion_mode
-ad7150_conv_mode_table[AD7150_MAX_CONV_MODE] = {
- { "idle", 0 },
- { "continuous-conversion", 1 },
- { "single-conversion", 2 },
- { "power-down", 3 },
-};
-
/*
* sysfs nodes
*/
-#define IIO_DEV_ATTR_AVAIL_CONVERSION_MODES(_show) \
- IIO_DEVICE_ATTR(available_conversion_modes, S_IRUGO, _show, NULL, 0)
-#define IIO_DEV_ATTR_CONVERSION_MODE(_mode, _show, _store) \
- IIO_DEVICE_ATTR(conversion_mode, _mode, _show, _store, 0)
-
-static ssize_t ad7150_show_conversion_modes(struct device *dev,
- struct device_attribute *attr,
- char *buf)
-{
- int i;
- int len = 0;
-
- for (i = 0; i < AD7150_MAX_CONV_MODE; i++)
- len += sprintf(buf + len, "%s\n",
- ad7150_conv_mode_table[i].name);
-
- return len;
-}
-
-static IIO_DEV_ATTR_AVAIL_CONVERSION_MODES(ad7150_show_conversion_modes);
-
-static ssize_t ad7150_show_conversion_mode(struct device *dev,
- struct device_attribute *attr,
- char *buf)
-{
- struct iio_dev *dev_info = dev_get_drvdata(dev);
- struct ad7150_chip_info *chip = iio_priv(dev_info);
-
- return sprintf(buf, "%s\n", chip->conversion_mode);
-}
-
-static ssize_t ad7150_store_conversion_mode(struct device *dev,
- struct device_attribute *attr,
- const char *buf,
- size_t len)
-{
- struct iio_dev *dev_info = dev_get_drvdata(dev);
- struct ad7150_chip_info *chip = iio_priv(dev_info);
- u8 cfg;
- int i, ret;
-
- ret = i2c_smbus_read_byte_data(chip->client, AD7150_CFG);
- if (ret < 0)
- return ret;
- cfg = ret;
-
- for (i = 0; i < AD7150_MAX_CONV_MODE; i++) {
- if (strncmp(buf, ad7150_conv_mode_table[i].name,
- strlen(ad7150_conv_mode_table[i].name) - 1) ==
- 0) {
- chip->conversion_mode = ad7150_conv_mode_table[i].name;
- cfg |= 0x18 | ad7150_conv_mode_table[i].reg_cfg;
- ret = i2c_smbus_write_byte_data(chip->client,
- AD7150_CFG,
- cfg);
- if (ret < 0)
- return ret;
- return len;
- }
- }
-
- dev_err(dev, "not supported conversion mode\n");
-
- return -EINVAL;
-}
-
-static IIO_DEV_ATTR_CONVERSION_MODE(S_IRUGO | S_IWUSR,
- ad7150_show_conversion_mode,
- ad7150_store_conversion_mode);
-
static const u8 ad7150_addresses[][6] = {
{ AD7150_CH1_DATA_HIGH, AD7150_CH1_AVG_HIGH,
AD7150_CH1_SETUP, AD7150_CH1_THR_HOLD_H,
},
};
-static struct attribute *ad7150_attributes[] = {
- &iio_dev_attr_available_conversion_modes.dev_attr.attr,
- &iio_dev_attr_conversion_mode.dev_attr.attr,
- NULL,
-};
-
-static const struct attribute_group ad7150_attribute_group = {
- .attrs = ad7150_attributes,
-};
-
/*
* threshold events
*/
};
static const struct iio_info ad7150_info = {
- .attrs = &ad7150_attribute_group,
.event_attrs = &ad7150_event_attribute_group,
.driver_module = THIS_MODULE,
.read_raw = &ad7150_read_raw,