lkml.org 
[lkml]   [2022]   [Sep]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 2/3] iio: temperature: mlx90632 Read sampling frequency
    Date
    From: Crt Mori <cmo@melexis.com>

    Allow users to read sensor sampling frequency to better plan the
    application measurement requests.

    Signed-off-by: Crt Mori <cmo@melexis.com>
    ---
    drivers/iio/temperature/mlx90632.c | 59 ++++++++++++++++++++++++++++++
    1 file changed, 59 insertions(+)

    diff --git a/drivers/iio/temperature/mlx90632.c b/drivers/iio/temperature/mlx90632.c
    index 68093639d0e9..c0bf385ebd6c 100644
    --- a/drivers/iio/temperature/mlx90632.c
    +++ b/drivers/iio/temperature/mlx90632.c
    @@ -81,6 +81,9 @@
    #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
    @@ -914,6 +917,32 @@ static int mlx90632_calc_ambient_dsp105(struct mlx90632_data *data, int *val)
    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
    @@ -992,6 +1021,15 @@ static int mlx90632_read_raw(struct iio_dev *indio_dev,
    *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;
    @@ -1025,12 +1063,30 @@ static int mlx90632_write_raw(struct iio_dev *indio_dev,
    }
    }

    +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,
    @@ -1038,12 +1094,15 @@ static const struct iio_chan_spec mlx90632_channels[] = {
    .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)
    --
    2.34.1
    \
     
     \ /
      Last update: 2022-09-19 10:50    [W:3.203 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site