.channel2 = IIO_MOD_##axis, \ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \ BIT(IIO_CHAN_INFO_SAMP_FREQ), \ .scan_index = idx, \ .scan_type = { \ .sign = 's', \ .realbits = 16, \ .storagebits = 16, \ .endianness = IIO_BE, \ }, \ .ext_info = hmc5983_ext_info, \ } static const struct iio_chan_spec hmc5843_channels[] = { HMC5843_CHANNEL(X, 0), HMC5843_CHANNEL(Y, 1), HMC5843_CHANNEL(Z, 2), IIO_CHAN_SOFT_TIMESTAMP(3), }; /* Beware: Y and Z are exchanged on HMC5883 and 5983 */ static const struct iio_chan_spec hmc5883_channels[] = { HMC5843_CHANNEL(X, 0), HMC5843_CHANNEL(Z, 1), HMC5843_CHANNEL(Y, 2), IIO_CHAN_SOFT_TIMESTAMP(3), }; static const struct iio_chan_spec hmc5983_channels[] = { HMC5983_CHANNEL(X, 0),
return IIO_VAL_INT_PLUS_NANO; }; return -EINVAL; } #define HMC5843_CHANNEL(axis, add) \ { \ .type = IIO_MAGN, \ .modified = 1, \ .channel2 = IIO_MOD_##axis, \ .info_mask = IIO_CHAN_INFO_SCALE_SHARED_BIT, \ .address = add \ } static const struct iio_chan_spec hmc5843_channels[] = { HMC5843_CHANNEL(X, HMC5843_DATA_OUT_X_MSB_REG), HMC5843_CHANNEL(Y, HMC5843_DATA_OUT_Y_MSB_REG), HMC5843_CHANNEL(Z, HMC5843_DATA_OUT_Z_MSB_REG), }; static struct attribute *hmc5843_attributes[] = { &iio_dev_attr_meas_conf.dev_attr.attr, &iio_dev_attr_operating_mode.dev_attr.attr, &iio_dev_attr_sampling_frequency.dev_attr.attr, &iio_dev_attr_in_magn_range.dev_attr.attr, &iio_const_attr_sampling_frequency_available.dev_attr.attr, NULL }; static const struct attribute_group hmc5843_group = { .attrs = hmc5843_attributes,