#define MLX90632_PWR_STATUS_CONTINUOUS MLX90632_PWR_STATUS(3) /* continuous */
 
 #define MLX90632_EE_RR GENMASK(10, 8) /* Only Refresh Rate bits */
+#define MLX90632_REFRESH_RATE(ee_val) FIELD_GET(MLX90632_EE_RR, ee_val)
+                                       /* Extract Refresh Rate from ee register */
+#define MLX90632_REFRESH_RATE_STATUS(refresh_rate) (refresh_rate << 8)
 
 /* Measurement types */
 #define MLX90632_MTYP_MEDICAL 0
        return ret;
 }
 
+static int mlx90632_get_refresh_rate(struct mlx90632_data *data,
+                                    int *refresh_rate)
+{
+       unsigned int meas1;
+       int ret;
+
+       ret = regmap_read(data->regmap, MLX90632_EE_MEDICAL_MEAS1, &meas1);
+       if (ret < 0)
+               return ret;
+
+       *refresh_rate = MLX90632_REFRESH_RATE(meas1);
+
+       return ret;
+}
+
+static const int mlx90632_freqs[][2] = {
+       {0, 500000},
+       {1, 0},
+       {2, 0},
+       {4, 0},
+       {8, 0},
+       {16, 0},
+       {32, 0},
+       {64, 0}
+};
+
 /**
  * mlx90632_pm_interraction_wakeup() - Measure time between user interactions to change powermode
  * @data: pointer to mlx90632_data object containing interaction_ts information
                *val = data->object_ambient_temperature;
                ret = IIO_VAL_INT;
                break;
+       case IIO_CHAN_INFO_SAMP_FREQ:
+               ret = mlx90632_get_refresh_rate(data, &cr);
+               if (ret < 0)
+                       goto mlx90632_read_raw_pm;
+
+               *val = mlx90632_freqs[cr][0];
+               *val2 = mlx90632_freqs[cr][1];
+               ret = IIO_VAL_INT_PLUS_MICRO;
+               break;
        default:
                ret = -EINVAL;
                break;
        }
 }
 
+static int mlx90632_read_avail(struct iio_dev *indio_dev,
+                              struct iio_chan_spec const *chan,
+                              const int **vals, int *type, int *length,
+                              long mask)
+{
+       switch (mask) {
+       case IIO_CHAN_INFO_SAMP_FREQ:
+               *vals = (int *)mlx90632_freqs;
+               *type = IIO_VAL_INT_PLUS_MICRO;
+               *length = 2 * ARRAY_SIZE(mlx90632_freqs);
+               return IIO_AVAIL_LIST;
+       default:
+               return -EINVAL;
+       }
+}
+
 static const struct iio_chan_spec mlx90632_channels[] = {
        {
                .type = IIO_TEMP,
                .modified = 1,
                .channel2 = IIO_MOD_TEMP_AMBIENT,
                .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED),
+               .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ),
+               .info_mask_shared_by_all_available = BIT(IIO_CHAN_INFO_SAMP_FREQ),
        },
        {
                .type = IIO_TEMP,
                .channel2 = IIO_MOD_TEMP_OBJECT,
                .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED) |
                        BIT(IIO_CHAN_INFO_CALIBEMISSIVITY) | BIT(IIO_CHAN_INFO_CALIBAMBIENT),
+               .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ),
+               .info_mask_shared_by_all_available = BIT(IIO_CHAN_INFO_SAMP_FREQ),
        },
 };
 
 static const struct iio_info mlx90632_info = {
        .read_raw = mlx90632_read_raw,
        .write_raw = mlx90632_write_raw,
+       .read_avail = mlx90632_read_avail,
 };
 
 static void mlx90632_sleep(void *_data)