/* relies on pairs of these shared then separate */
 static const char * const iio_chan_info_postfix[] = {
+       [IIO_CHAN_INFO_RAW] = "raw",
+       [IIO_CHAN_INFO_PROCESSED] = "input",
        [IIO_CHAN_INFO_SCALE] = "scale",
        [IIO_CHAN_INFO_OFFSET] = "offset",
        [IIO_CHAN_INFO_CALIBSCALE] = "calibscale",
                                        struct iio_chan_spec const *chan)
 {
        int ret, attrcount = 0;
-       int i = 4;
+       int i;
        const struct iio_chan_spec_ext_info *ext_info;
 
        if (chan->channel < 0)
                return 0;
-
-       ret = __iio_add_chan_devattr(iio_data_type_name[chan->processed_val],
-                                    chan,
-                                    &iio_read_channel_info,
-                                    (chan->output ?
-                                     &iio_write_channel_info : NULL),
-                                    0,
-                                    0,
-                                    &indio_dev->dev,
-                                    &indio_dev->channel_attr_list);
-       if (ret)
-               goto error_ret;
-       attrcount++;
-
-       for_each_set_bit_from(i, &chan->info_mask, sizeof(long)*8) {
+       for_each_set_bit(i, &chan->info_mask, sizeof(long)*8) {
                ret = __iio_add_chan_devattr(iio_chan_info_postfix[i/2],
                                             chan,
                                             &iio_read_channel_info,