lkml.org 
[lkml]   [2021]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 45/60] i2c: stm32f7: fix configuration of the digital filter
    Date
    From: Alain Volmat <alain.volmat@foss.st.com>

    [ Upstream commit 3d6a3d3a2a7a3a60a824e7c04e95fd50dec57812 ]

    The digital filter related computation are present in the driver
    however the programming of the filter within the IP is missing.
    The maximum value for the DNF is wrong and should be 15 instead of 16.

    Fixes: aeb068c57214 ("i2c: i2c-stm32f7: add driver")

    Signed-off-by: Alain Volmat <alain.volmat@foss.st.com>
    Signed-off-by: Pierre-Yves MORDRET <pierre-yves.mordret@foss.st.com>
    Signed-off-by: Wolfram Sang <wsa@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/i2c/busses/i2c-stm32f7.c | 11 ++++++++++-
    1 file changed, 10 insertions(+), 1 deletion(-)

    diff --git a/drivers/i2c/busses/i2c-stm32f7.c b/drivers/i2c/busses/i2c-stm32f7.c
    index b2634afe066d3..a7977eef2ead5 100644
    --- a/drivers/i2c/busses/i2c-stm32f7.c
    +++ b/drivers/i2c/busses/i2c-stm32f7.c
    @@ -53,6 +53,8 @@
    #define STM32F7_I2C_CR1_RXDMAEN BIT(15)
    #define STM32F7_I2C_CR1_TXDMAEN BIT(14)
    #define STM32F7_I2C_CR1_ANFOFF BIT(12)
    +#define STM32F7_I2C_CR1_DNF_MASK GENMASK(11, 8)
    +#define STM32F7_I2C_CR1_DNF(n) (((n) & 0xf) << 8)
    #define STM32F7_I2C_CR1_ERRIE BIT(7)
    #define STM32F7_I2C_CR1_TCIE BIT(6)
    #define STM32F7_I2C_CR1_STOPIE BIT(5)
    @@ -151,7 +153,7 @@
    #define STM32F7_I2C_MAX_SLAVE 0x2

    #define STM32F7_I2C_DNF_DEFAULT 0
    -#define STM32F7_I2C_DNF_MAX 16
    +#define STM32F7_I2C_DNF_MAX 15

    #define STM32F7_I2C_ANALOG_FILTER_ENABLE 1
    #define STM32F7_I2C_ANALOG_FILTER_DELAY_MIN 50 /* ns */
    @@ -657,6 +659,13 @@ static void stm32f7_i2c_hw_config(struct stm32f7_i2c_dev *i2c_dev)
    else
    stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
    STM32F7_I2C_CR1_ANFOFF);
    +
    + /* Program the Digital Filter */
    + stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
    + STM32F7_I2C_CR1_DNF_MASK);
    + stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
    + STM32F7_I2C_CR1_DNF(i2c_dev->setup.dnf));
    +
    stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
    STM32F7_I2C_CR1_PE);
    }
    --
    2.27.0


    \
     
     \ /
      Last update: 2021-02-15 17:00    [W:4.195 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site