You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.5 KiB
98 lines
2.5 KiB
/* |
|
* Copyright (c) 2016 BayLibre, SAS |
|
* Copyright (c) 2017 Linaro Ltd |
|
* |
|
* SPDX-License-Identifier: Apache-2.0 |
|
* |
|
*/ |
|
|
|
#ifndef ZEPHYR_DRIVERS_I2C_I2C_LL_STM32_H_ |
|
#define ZEPHYR_DRIVERS_I2C_I2C_LL_STM32_H_ |
|
|
|
typedef void (*irq_config_func_t)(const struct device *port); |
|
|
|
#if DT_HAS_COMPAT_STATUS_OKAY(st_stm32_i2c_v2) |
|
/** |
|
* @brief structure to convey optional i2c timings settings |
|
*/ |
|
struct i2c_config_timing { |
|
/* i2c peripheral clock in Hz */ |
|
uint32_t periph_clock; |
|
/* i2c bus speed in Hz */ |
|
uint32_t i2c_speed; |
|
/* I2C_TIMINGR register value of i2c v2 peripheral */ |
|
uint32_t timing_setting; |
|
}; |
|
#endif |
|
|
|
struct i2c_stm32_config { |
|
#ifdef CONFIG_I2C_STM32_INTERRUPT |
|
irq_config_func_t irq_config_func; |
|
#endif |
|
struct stm32_pclken pclken; |
|
I2C_TypeDef *i2c; |
|
uint32_t bitrate; |
|
const struct soc_gpio_pinctrl *pinctrl_list; |
|
size_t pinctrl_list_size; |
|
#if DT_HAS_COMPAT_STATUS_OKAY(st_stm32_i2c_v2) |
|
const struct i2c_config_timing *timings; |
|
size_t n_timings; |
|
#endif |
|
}; |
|
|
|
struct i2c_stm32_data { |
|
#ifdef CONFIG_I2C_STM32_INTERRUPT |
|
struct k_sem device_sync_sem; |
|
#endif |
|
struct k_sem bus_mutex; |
|
uint32_t dev_config; |
|
#ifdef CONFIG_I2C_STM32_V1 |
|
uint16_t slave_address; |
|
#endif |
|
struct { |
|
#ifdef CONFIG_I2C_STM32_V1 |
|
unsigned int is_restart; |
|
unsigned int flags; |
|
#endif |
|
unsigned int is_write; |
|
unsigned int is_arlo; |
|
unsigned int is_nack; |
|
unsigned int is_err; |
|
struct i2c_msg *msg; |
|
unsigned int len; |
|
uint8_t *buf; |
|
} current; |
|
#ifdef CONFIG_I2C_SLAVE |
|
bool master_active; |
|
struct i2c_slave_config *slave_cfg; |
|
bool slave_attached; |
|
#endif |
|
}; |
|
|
|
int32_t stm32_i2c_msg_write(const struct device *dev, struct i2c_msg *msg, |
|
uint8_t *flg, |
|
uint16_t sadr); |
|
int32_t stm32_i2c_msg_read(const struct device *dev, struct i2c_msg *msg, |
|
uint8_t *flg, |
|
uint16_t sadr); |
|
int32_t stm32_i2c_configure_timing(const struct device *dev, uint32_t clk); |
|
int i2c_stm32_runtime_configure(const struct device *dev, uint32_t config); |
|
|
|
void stm32_i2c_event_isr(void *arg); |
|
void stm32_i2c_error_isr(void *arg); |
|
#ifdef CONFIG_I2C_STM32_COMBINED_INTERRUPT |
|
void stm32_i2c_combined_isr(void *arg); |
|
#endif |
|
|
|
#ifdef CONFIG_I2C_SLAVE |
|
int i2c_stm32_slave_register(const struct device *dev, |
|
struct i2c_slave_config *config); |
|
int i2c_stm32_slave_unregister(const struct device *dev, |
|
struct i2c_slave_config *config); |
|
#endif |
|
|
|
#define DEV_DATA(dev) ((struct i2c_stm32_data * const)(dev)->data) |
|
#define DEV_CFG(dev) \ |
|
((const struct i2c_stm32_config * const)(dev)->config) |
|
|
|
#endif /* ZEPHYR_DRIVERS_I2C_I2C_LL_STM32_H_ */
|
|
|