{
        int dev, ch, cnt;
        unsigned int index;
+       struct iio_dev_attr *iio_attr;
 
        st->iio_attr = devm_kcalloc(&st->spi->dev, 2, sizeof(*st->iio_attr) *
                                    (st->slave_num + 1) * AD7280A_CELLS_PER_DEV,
        for (dev = 0, cnt = 0; dev <= st->slave_num; dev++)
                for (ch = AD7280A_CELL_VOLTAGE_1; ch <= AD7280A_CELL_VOLTAGE_6;
                        ch++, cnt++) {
+                       iio_attr = &st->iio_attr[cnt];
                        index = dev * AD7280A_CELLS_PER_DEV + ch;
-                       st->iio_attr[cnt].address =
-                               ad7280a_devaddr(dev) << 8 | ch;
-                       st->iio_attr[cnt].dev_attr.attr.mode =
-                               0644;
-                       st->iio_attr[cnt].dev_attr.show =
-                               ad7280_show_balance_sw;
-                       st->iio_attr[cnt].dev_attr.store =
-                               ad7280_store_balance_sw;
-                       st->iio_attr[cnt].dev_attr.attr.name =
+                       iio_attr->address = ad7280a_devaddr(dev) << 8 | ch;
+                       iio_attr->dev_attr.attr.mode = 0644;
+                       iio_attr->dev_attr.show = ad7280_show_balance_sw;
+                       iio_attr->dev_attr.store = ad7280_store_balance_sw;
+                       iio_attr->dev_attr.attr.name =
                                devm_kasprintf(&st->spi->dev, GFP_KERNEL,
                                               "in%d-in%d_balance_switch_en",
                                               index, index + 1);
-                       ad7280_attributes[cnt] =
-                               &st->iio_attr[cnt].dev_attr.attr;
+                       if (!iio_attr->dev_attr.attr.name)
+                               return -ENOMEM;
+
+                       ad7280_attributes[cnt] = &iio_attr->dev_attr.attr;
                        cnt++;
-                       st->iio_attr[cnt].address =
-                               ad7280a_devaddr(dev) << 8 |
+                       iio_attr = &st->iio_attr[cnt];
+                       iio_attr->address = ad7280a_devaddr(dev) << 8 |
                                (AD7280A_CB1_TIMER + ch);
-                       st->iio_attr[cnt].dev_attr.attr.mode =
-                               0644;
-                       st->iio_attr[cnt].dev_attr.show =
-                               ad7280_show_balance_timer;
-                       st->iio_attr[cnt].dev_attr.store =
-                               ad7280_store_balance_timer;
-                       st->iio_attr[cnt].dev_attr.attr.name =
+                       iio_attr->dev_attr.attr.mode = 0644;
+                       iio_attr->dev_attr.show = ad7280_show_balance_timer;
+                       iio_attr->dev_attr.store = ad7280_store_balance_timer;
+                       iio_attr->dev_attr.attr.name =
                                devm_kasprintf(&st->spi->dev, GFP_KERNEL,
                                               "in%d-in%d_balance_timer",
                                               index, index + 1);
-                       ad7280_attributes[cnt] =
-                               &st->iio_attr[cnt].dev_attr.attr;
+                       if (!iio_attr->dev_attr.attr.name)
+                               return -ENOMEM;
+
+                       ad7280_attributes[cnt] = &iio_attr->dev_attr.attr;
                }
 
        ad7280_attributes[cnt] = NULL;