Merged in jussi_kivilinna/nuttx/stm32l4_i2c_rewrite (pull request #519)

Port STM32F7 I2C driver to STM32L4

* arch/stm32l4: port STM32F7 I2C driver to STM32L4

    STM32L4 I2C driver is in work-in-progress state (plentiful of
    TODOs and #warnings) and lags many features found in more
    up-to-date STM32 I2C drivers. The peripheral on STM32F7 and
    STM32L4 are identical except for L4's 'wakeup from stop mode'
    flag and STM32F7's I2C driver is in more 'ready to use' state.

    Patch ports the STM32F7 I2C driver to STM32L4. The I2C clock
    configuration is kept the same as before (I2CCLK = PCLK1 80 Mhz)
    instead of switching to STM32F7 arch default that is I2CCLK=HSI.
    Further work would be to add configuration option for choosing
    I2C clock source instead of current hard-coded default.

* arch/arm/stm32f7: i2c: restore bus frequency after I2C reset

    Copy frequency restoration fix from STM32L4 I2C driver to STM32F7 I2C driver.

* arch/arm/stm32f7: i2c: remove unused Kconfig option

* configs/nucleo-l496zg/nsh: enable I2C4 bus with i2ctool

Approved-by: Gregory Nutt <gnutt@nuttx.org>
This commit is contained in:
Jussi Kivilinna 2017-10-26 13:59:20 +00:00 committed by Gregory Nutt
parent 7a530c404d
commit bcf4a5d056
5 changed files with 1486 additions and 665 deletions

View File

@ -1737,11 +1737,6 @@ config STM32F7_I2CTIMEOTICKS
default 500
depends on STM32F7_I2C && !STM32F7_I2C_DYNTIMEO
config STM32F7_I2C_DUTY16_9
bool "Frequency with Tlow/Thigh = 16/9 "
default n
depends on STM32F7_I2C
endmenu # "I2C Configuration"
menu "SD/MMC Configuration"

View File

@ -2522,6 +2522,7 @@ static int stm32_i2c_reset(FAR struct i2c_master_s * dev)
unsigned int stretch_count;
uint32_t scl_gpio;
uint32_t sda_gpio;
uint32_t frequency;
int ret = ERROR;
ASSERT(dev);
@ -2538,6 +2539,10 @@ static int stm32_i2c_reset(FAR struct i2c_master_s * dev)
stm32_i2c_sem_wait(dev);
/* Save the current frequency */
frequency = priv->frequency;
/* De-init the port */
stm32_i2c_deinit(priv);
@ -2613,6 +2618,10 @@ static int stm32_i2c_reset(FAR struct i2c_master_s * dev)
/* Re-init the port */
stm32_i2c_init(priv);
/* Restore the frequency */
stm32_i2c_setclock(priv, frequency);
ret = OK;
out:

View File

@ -3715,11 +3715,6 @@ config STM32L4_I2CTIMEOTICKS
default 500
depends on STM32L4_I2C && !STM32L4_I2C_DYNTIMEO
config STM32L4_I2C_DUTY16_9
bool "Frequency with Tlow/Thigh = 16/9 "
default n
depends on STM32L4_I2C
endmenu
menu "SD/MMC Configuration"

File diff suppressed because it is too large Load Diff

View File

@ -95,6 +95,8 @@ CONFIG_STM32L4_TIM1=y
CONFIG_STM32L4_USART2=y
CONFIG_STM32L4_USART3=y
CONFIG_SYSTEM_I2CTOOL=y
CONFIG_I2CTOOL_MINBUS=1
CONFIG_I2CTOOL_MAXBUS=4
CONFIG_SYSTEM_STACKMONITOR=y
CONFIG_SYSTEM_TEE=y
CONFIG_TASK_NAME_SIZE=0