.odr_avl[3] = { 238, 0x04 },
                                .odr_avl[4] = { 476, 0x05 },
                                .odr_avl[5] = { 952, 0x06 },
+                               .odr_len = 6,
                        },
                        [ST_LSM6DSX_ID_GYRO] = {
                                .reg = {
                                .odr_avl[3] = { 238, 0x04 },
                                .odr_avl[4] = { 476, 0x05 },
                                .odr_avl[5] = { 952, 0x06 },
+                               .odr_len = 6,
                        },
                },
                .fs_table = {
                                .odr_avl[3] = { 104, 0x04 },
                                .odr_avl[4] = { 208, 0x05 },
                                .odr_avl[5] = { 416, 0x06 },
+                               .odr_len = 6,
                        },
                        [ST_LSM6DSX_ID_GYRO] = {
                                .reg = {
                                .odr_avl[3] = { 104, 0x04 },
                                .odr_avl[4] = { 208, 0x05 },
                                .odr_avl[5] = { 416, 0x06 },
+                               .odr_len = 6,
                        },
                },
                .fs_table = {
                                .odr_avl[3] = { 104, 0x04 },
                                .odr_avl[4] = { 208, 0x05 },
                                .odr_avl[5] = { 416, 0x06 },
+                               .odr_len = 6,
                        },
                        [ST_LSM6DSX_ID_GYRO] = {
                                .reg = {
                                .odr_avl[3] = { 104, 0x04 },
                                .odr_avl[4] = { 208, 0x05 },
                                .odr_avl[5] = { 416, 0x06 },
+                               .odr_len = 6,
                        },
                },
                .fs_table = {
                                .odr_avl[3] = { 104, 0x04 },
                                .odr_avl[4] = { 208, 0x05 },
                                .odr_avl[5] = { 416, 0x06 },
+                               .odr_len = 6,
                        },
                        [ST_LSM6DSX_ID_GYRO] = {
                                .reg = {
                                .odr_avl[3] = { 104, 0x04 },
                                .odr_avl[4] = { 208, 0x05 },
                                .odr_avl[5] = { 416, 0x06 },
+                               .odr_len = 6,
                        },
                },
                .fs_table = {
                                .odr_avl[3] = { 104, 0x04 },
                                .odr_avl[4] = { 208, 0x05 },
                                .odr_avl[5] = { 416, 0x06 },
+                               .odr_len = 6,
                        },
                        [ST_LSM6DSX_ID_GYRO] = {
                                .reg = {
                                .odr_avl[3] = { 104, 0x04 },
                                .odr_avl[4] = { 208, 0x05 },
                                .odr_avl[5] = { 416, 0x06 },
+                               .odr_len = 6,
                        },
                },
                .fs_table = {
                                .odr_avl[3] = { 104, 0x04 },
                                .odr_avl[4] = { 208, 0x05 },
                                .odr_avl[5] = { 416, 0x06 },
+                               .odr_len = 6,
                        },
                        [ST_LSM6DSX_ID_GYRO] = {
                                .reg = {
                                .odr_avl[3] = { 104, 0x04 },
                                .odr_avl[4] = { 208, 0x05 },
                                .odr_avl[5] = { 416, 0x06 },
+                               .odr_len = 6,
                        },
                },
                .fs_table = {
                                .odr_avl[3] = { 104, 0x04 },
                                .odr_avl[4] = { 208, 0x05 },
                                .odr_avl[5] = { 416, 0x06 },
+                               .odr_len = 6,
                        },
                        [ST_LSM6DSX_ID_GYRO] = {
                                .reg = {
                                .odr_avl[3] = { 104, 0x04 },
                                .odr_avl[4] = { 208, 0x05 },
                                .odr_avl[5] = { 416, 0x06 },
+                               .odr_len = 6,
                        },
                },
                .fs_table = {
        int i;
 
        odr_table = &sensor->hw->settings->odr_table[sensor->id];
-       for (i = 0; i < ST_LSM6DSX_ODR_LIST_SIZE; i++)
+       for (i = 0; i < odr_table->odr_len; i++) {
                /*
                 * ext devices can run at different odr respect to
                 * accel sensor
                 */
                if (odr_table->odr_avl[i].hz >= odr)
                        break;
+       }
 
-       if (i == ST_LSM6DSX_ODR_LIST_SIZE)
+       if (i == odr_table->odr_len)
                return -EINVAL;
 
        *val = odr_table->odr_avl[i].val;
                                          char *buf)
 {
        struct st_lsm6dsx_sensor *sensor = iio_priv(dev_get_drvdata(dev));
-       enum st_lsm6dsx_sensor_id id = sensor->id;
-       struct st_lsm6dsx_hw *hw = sensor->hw;
+       const struct st_lsm6dsx_odr_table_entry *odr_table;
        int i, len = 0;
 
-       for (i = 0; i < ST_LSM6DSX_ODR_LIST_SIZE; i++)
+       odr_table = &sensor->hw->settings->odr_table[sensor->id];
+       for (i = 0; i < odr_table->odr_len; i++)
                len += scnprintf(buf + len, PAGE_SIZE - len, "%d ",
-                                hw->settings->odr_table[id].odr_avl[i].hz);
+                                odr_table->odr_avl[i].hz);
        buf[len - 1] = '\n';
 
        return len;
 
                        .odr_avl[1] = {  20, 0x1 },
                        .odr_avl[2] = {  50, 0x2 },
                        .odr_avl[3] = { 100, 0x3 },
+                       .odr_len = 4,
                },
                .fs_table = {
                        .fs_avl[0] = {
        int i;
 
        settings = sensor->ext_info.settings;
-       for (i = 0; i < ST_LSM6DSX_ODR_LIST_SIZE; i++)
+       for (i = 0; i < settings->odr_table.odr_len; i++) {
                if (settings->odr_table.odr_avl[i].hz == odr)
                        break;
+       }
 
-       if (i == ST_LSM6DSX_ODR_LIST_SIZE)
+       if (i == settings->odr_table.odr_len)
                return -EINVAL;
 
        *val = settings->odr_table.odr_avl[i].val;
        int i, len = 0;
 
        settings = sensor->ext_info.settings;
-       for (i = 0; i < ST_LSM6DSX_ODR_LIST_SIZE; i++) {
+       for (i = 0; i < settings->odr_table.odr_len; i++) {
                u16 val = settings->odr_table.odr_avl[i].hz;
 
-               if (val > 0)
-                       len += scnprintf(buf + len, PAGE_SIZE - len, "%d ",
-                                        val);
+               len += scnprintf(buf + len, PAGE_SIZE - len, "%d ", val);
        }
        buf[len - 1] = '\n';