lkml.org 
[lkml]   [2021]   [Jul]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 79/82] iio: accel: bma180: Fix BMA25x bandwidth register values
    Date
    From: Stephan Gerhold <stephan@gerhold.net>

    commit 8090d67421ddab0ae932abab5a60200598bf0bbb upstream

    According to the BMA253 datasheet [1] and BMA250 datasheet [2] the
    bandwidth value for BMA25x should be set as 01xxx:

    "Settings 00xxx result in a bandwidth of 7.81 Hz; [...]
    It is recommended [...] to use the range from ´01000b´ to ´01111b´
    only in order to be compatible with future products."

    However, at the moment the drivers sets bandwidth values from 0 to 6,
    which is not recommended and always results into 7.81 Hz bandwidth
    according to the datasheet.

    Fix this by introducing a bw_offset = 8 = 01000b for BMA25x,
    so the additional bit is always set for BMA25x.

    [1]: https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bma253-ds000.pdf
    [2]: https://datasheet.octopart.com/BMA250-Bosch-datasheet-15540103.pdf

    Cc: Peter Meerwald <pmeerw@pmeerw.net>
    Fixes: 2017cff24cc0 ("iio:bma180: Add BMA250 chip support")
    Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
    Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
    Link: https://lore.kernel.org/r/20210526094408.34298-2-stephan@gerhold.net
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    [sudip: adjust context]
    Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/iio/accel/bma180.c | 7 +++++--
    1 file changed, 5 insertions(+), 2 deletions(-)

    --- a/drivers/iio/accel/bma180.c
    +++ b/drivers/iio/accel/bma180.c
    @@ -50,7 +50,7 @@ struct bma180_part_info {

    u8 int_reset_reg, int_reset_mask;
    u8 sleep_reg, sleep_mask;
    - u8 bw_reg, bw_mask;
    + u8 bw_reg, bw_mask, bw_offset;
    u8 scale_reg, scale_mask;
    u8 power_reg, power_mask, lowpower_val;
    u8 int_enable_reg, int_enable_mask;
    @@ -106,6 +106,7 @@ struct bma180_part_info {

    #define BMA250_RANGE_MASK GENMASK(3, 0) /* Range of accel values */
    #define BMA250_BW_MASK GENMASK(4, 0) /* Accel bandwidth */
    +#define BMA250_BW_OFFSET 8
    #define BMA250_SUSPEND_MASK BIT(7) /* chip will sleep */
    #define BMA250_LOWPOWER_MASK BIT(6)
    #define BMA250_DATA_INTEN_MASK BIT(4)
    @@ -243,7 +244,8 @@ static int bma180_set_bw(struct bma180_d
    for (i = 0; i < data->part_info->num_bw; ++i) {
    if (data->part_info->bw_table[i] == val) {
    ret = bma180_set_bits(data, data->part_info->bw_reg,
    - data->part_info->bw_mask, i);
    + data->part_info->bw_mask,
    + i + data->part_info->bw_offset);
    if (ret) {
    dev_err(&data->client->dev,
    "failed to set bandwidth\n");
    @@ -662,6 +664,7 @@ static const struct bma180_part_info bma
    .sleep_mask = BMA250_SUSPEND_MASK,
    .bw_reg = BMA250_BW_REG,
    .bw_mask = BMA250_BW_MASK,
    + .bw_offset = BMA250_BW_OFFSET,
    .scale_reg = BMA250_RANGE_REG,
    .scale_mask = BMA250_RANGE_MASK,
    .power_reg = BMA250_POWER_REG,

    \
     
     \ /
      Last update: 2021-07-26 17:59    [W:4.067 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site