cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

i2c-stm32f7.c (66563B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Driver for STMicroelectronics STM32F7 I2C controller
      4 *
      5 * This I2C controller is described in the STM32F75xxx and STM32F74xxx Soc
      6 * reference manual.
      7 * Please see below a link to the documentation:
      8 * http://www.st.com/resource/en/reference_manual/dm00124865.pdf
      9 *
     10 * Copyright (C) M'boumba Cedric Madianga 2017
     11 * Copyright (C) STMicroelectronics 2017
     12 * Author: M'boumba Cedric Madianga <cedric.madianga@gmail.com>
     13 *
     14 * This driver is based on i2c-stm32f4.c
     15 *
     16 */
     17#include <linux/clk.h>
     18#include <linux/delay.h>
     19#include <linux/err.h>
     20#include <linux/i2c.h>
     21#include <linux/i2c-smbus.h>
     22#include <linux/interrupt.h>
     23#include <linux/io.h>
     24#include <linux/iopoll.h>
     25#include <linux/mfd/syscon.h>
     26#include <linux/module.h>
     27#include <linux/of.h>
     28#include <linux/of_address.h>
     29#include <linux/of_platform.h>
     30#include <linux/platform_device.h>
     31#include <linux/pinctrl/consumer.h>
     32#include <linux/pm_runtime.h>
     33#include <linux/pm_wakeirq.h>
     34#include <linux/regmap.h>
     35#include <linux/reset.h>
     36#include <linux/slab.h>
     37
     38#include "i2c-stm32.h"
     39
     40/* STM32F7 I2C registers */
     41#define STM32F7_I2C_CR1				0x00
     42#define STM32F7_I2C_CR2				0x04
     43#define STM32F7_I2C_OAR1			0x08
     44#define STM32F7_I2C_OAR2			0x0C
     45#define STM32F7_I2C_PECR			0x20
     46#define STM32F7_I2C_TIMINGR			0x10
     47#define STM32F7_I2C_ISR				0x18
     48#define STM32F7_I2C_ICR				0x1C
     49#define STM32F7_I2C_RXDR			0x24
     50#define STM32F7_I2C_TXDR			0x28
     51
     52/* STM32F7 I2C control 1 */
     53#define STM32F7_I2C_CR1_PECEN			BIT(23)
     54#define STM32F7_I2C_CR1_ALERTEN			BIT(22)
     55#define STM32F7_I2C_CR1_SMBHEN			BIT(20)
     56#define STM32F7_I2C_CR1_WUPEN			BIT(18)
     57#define STM32F7_I2C_CR1_SBC			BIT(16)
     58#define STM32F7_I2C_CR1_RXDMAEN			BIT(15)
     59#define STM32F7_I2C_CR1_TXDMAEN			BIT(14)
     60#define STM32F7_I2C_CR1_ANFOFF			BIT(12)
     61#define STM32F7_I2C_CR1_DNF_MASK		GENMASK(11, 8)
     62#define STM32F7_I2C_CR1_DNF(n)			(((n) & 0xf) << 8)
     63#define STM32F7_I2C_CR1_ERRIE			BIT(7)
     64#define STM32F7_I2C_CR1_TCIE			BIT(6)
     65#define STM32F7_I2C_CR1_STOPIE			BIT(5)
     66#define STM32F7_I2C_CR1_NACKIE			BIT(4)
     67#define STM32F7_I2C_CR1_ADDRIE			BIT(3)
     68#define STM32F7_I2C_CR1_RXIE			BIT(2)
     69#define STM32F7_I2C_CR1_TXIE			BIT(1)
     70#define STM32F7_I2C_CR1_PE			BIT(0)
     71#define STM32F7_I2C_ALL_IRQ_MASK		(STM32F7_I2C_CR1_ERRIE \
     72						| STM32F7_I2C_CR1_TCIE \
     73						| STM32F7_I2C_CR1_STOPIE \
     74						| STM32F7_I2C_CR1_NACKIE \
     75						| STM32F7_I2C_CR1_RXIE \
     76						| STM32F7_I2C_CR1_TXIE)
     77#define STM32F7_I2C_XFER_IRQ_MASK		(STM32F7_I2C_CR1_TCIE \
     78						| STM32F7_I2C_CR1_STOPIE \
     79						| STM32F7_I2C_CR1_NACKIE \
     80						| STM32F7_I2C_CR1_RXIE \
     81						| STM32F7_I2C_CR1_TXIE)
     82
     83/* STM32F7 I2C control 2 */
     84#define STM32F7_I2C_CR2_PECBYTE			BIT(26)
     85#define STM32F7_I2C_CR2_RELOAD			BIT(24)
     86#define STM32F7_I2C_CR2_NBYTES_MASK		GENMASK(23, 16)
     87#define STM32F7_I2C_CR2_NBYTES(n)		(((n) & 0xff) << 16)
     88#define STM32F7_I2C_CR2_NACK			BIT(15)
     89#define STM32F7_I2C_CR2_STOP			BIT(14)
     90#define STM32F7_I2C_CR2_START			BIT(13)
     91#define STM32F7_I2C_CR2_HEAD10R			BIT(12)
     92#define STM32F7_I2C_CR2_ADD10			BIT(11)
     93#define STM32F7_I2C_CR2_RD_WRN			BIT(10)
     94#define STM32F7_I2C_CR2_SADD10_MASK		GENMASK(9, 0)
     95#define STM32F7_I2C_CR2_SADD10(n)		(((n) & \
     96						STM32F7_I2C_CR2_SADD10_MASK))
     97#define STM32F7_I2C_CR2_SADD7_MASK		GENMASK(7, 1)
     98#define STM32F7_I2C_CR2_SADD7(n)		(((n) & 0x7f) << 1)
     99
    100/* STM32F7 I2C Own Address 1 */
    101#define STM32F7_I2C_OAR1_OA1EN			BIT(15)
    102#define STM32F7_I2C_OAR1_OA1MODE		BIT(10)
    103#define STM32F7_I2C_OAR1_OA1_10_MASK		GENMASK(9, 0)
    104#define STM32F7_I2C_OAR1_OA1_10(n)		(((n) & \
    105						STM32F7_I2C_OAR1_OA1_10_MASK))
    106#define STM32F7_I2C_OAR1_OA1_7_MASK		GENMASK(7, 1)
    107#define STM32F7_I2C_OAR1_OA1_7(n)		(((n) & 0x7f) << 1)
    108#define STM32F7_I2C_OAR1_MASK			(STM32F7_I2C_OAR1_OA1_7_MASK \
    109						| STM32F7_I2C_OAR1_OA1_10_MASK \
    110						| STM32F7_I2C_OAR1_OA1EN \
    111						| STM32F7_I2C_OAR1_OA1MODE)
    112
    113/* STM32F7 I2C Own Address 2 */
    114#define STM32F7_I2C_OAR2_OA2EN			BIT(15)
    115#define STM32F7_I2C_OAR2_OA2MSK_MASK		GENMASK(10, 8)
    116#define STM32F7_I2C_OAR2_OA2MSK(n)		(((n) & 0x7) << 8)
    117#define STM32F7_I2C_OAR2_OA2_7_MASK		GENMASK(7, 1)
    118#define STM32F7_I2C_OAR2_OA2_7(n)		(((n) & 0x7f) << 1)
    119#define STM32F7_I2C_OAR2_MASK			(STM32F7_I2C_OAR2_OA2MSK_MASK \
    120						| STM32F7_I2C_OAR2_OA2_7_MASK \
    121						| STM32F7_I2C_OAR2_OA2EN)
    122
    123/* STM32F7 I2C Interrupt Status */
    124#define STM32F7_I2C_ISR_ADDCODE_MASK		GENMASK(23, 17)
    125#define STM32F7_I2C_ISR_ADDCODE_GET(n) \
    126				(((n) & STM32F7_I2C_ISR_ADDCODE_MASK) >> 17)
    127#define STM32F7_I2C_ISR_DIR			BIT(16)
    128#define STM32F7_I2C_ISR_BUSY			BIT(15)
    129#define STM32F7_I2C_ISR_ALERT			BIT(13)
    130#define STM32F7_I2C_ISR_PECERR			BIT(11)
    131#define STM32F7_I2C_ISR_ARLO			BIT(9)
    132#define STM32F7_I2C_ISR_BERR			BIT(8)
    133#define STM32F7_I2C_ISR_TCR			BIT(7)
    134#define STM32F7_I2C_ISR_TC			BIT(6)
    135#define STM32F7_I2C_ISR_STOPF			BIT(5)
    136#define STM32F7_I2C_ISR_NACKF			BIT(4)
    137#define STM32F7_I2C_ISR_ADDR			BIT(3)
    138#define STM32F7_I2C_ISR_RXNE			BIT(2)
    139#define STM32F7_I2C_ISR_TXIS			BIT(1)
    140#define STM32F7_I2C_ISR_TXE			BIT(0)
    141
    142/* STM32F7 I2C Interrupt Clear */
    143#define STM32F7_I2C_ICR_ALERTCF			BIT(13)
    144#define STM32F7_I2C_ICR_PECCF			BIT(11)
    145#define STM32F7_I2C_ICR_ARLOCF			BIT(9)
    146#define STM32F7_I2C_ICR_BERRCF			BIT(8)
    147#define STM32F7_I2C_ICR_STOPCF			BIT(5)
    148#define STM32F7_I2C_ICR_NACKCF			BIT(4)
    149#define STM32F7_I2C_ICR_ADDRCF			BIT(3)
    150
    151/* STM32F7 I2C Timing */
    152#define STM32F7_I2C_TIMINGR_PRESC(n)		(((n) & 0xf) << 28)
    153#define STM32F7_I2C_TIMINGR_SCLDEL(n)		(((n) & 0xf) << 20)
    154#define STM32F7_I2C_TIMINGR_SDADEL(n)		(((n) & 0xf) << 16)
    155#define STM32F7_I2C_TIMINGR_SCLH(n)		(((n) & 0xff) << 8)
    156#define STM32F7_I2C_TIMINGR_SCLL(n)		((n) & 0xff)
    157
    158#define STM32F7_I2C_MAX_LEN			0xff
    159#define STM32F7_I2C_DMA_LEN_MIN			0x16
    160enum {
    161	STM32F7_SLAVE_HOSTNOTIFY,
    162	STM32F7_SLAVE_7_10_BITS_ADDR,
    163	STM32F7_SLAVE_7_BITS_ADDR,
    164	STM32F7_I2C_MAX_SLAVE
    165};
    166
    167#define STM32F7_I2C_DNF_DEFAULT			0
    168#define STM32F7_I2C_DNF_MAX			15
    169
    170#define STM32F7_I2C_ANALOG_FILTER_DELAY_MIN	50	/* ns */
    171#define STM32F7_I2C_ANALOG_FILTER_DELAY_MAX	260	/* ns */
    172
    173#define STM32F7_I2C_RISE_TIME_DEFAULT		25	/* ns */
    174#define STM32F7_I2C_FALL_TIME_DEFAULT		10	/* ns */
    175
    176#define STM32F7_PRESC_MAX			BIT(4)
    177#define STM32F7_SCLDEL_MAX			BIT(4)
    178#define STM32F7_SDADEL_MAX			BIT(4)
    179#define STM32F7_SCLH_MAX			BIT(8)
    180#define STM32F7_SCLL_MAX			BIT(8)
    181
    182#define STM32F7_AUTOSUSPEND_DELAY		(HZ / 100)
    183
    184/**
    185 * struct stm32f7_i2c_regs - i2c f7 registers backup
    186 * @cr1: Control register 1
    187 * @cr2: Control register 2
    188 * @oar1: Own address 1 register
    189 * @oar2: Own address 2 register
    190 * @tmgr: Timing register
    191 */
    192struct stm32f7_i2c_regs {
    193	u32 cr1;
    194	u32 cr2;
    195	u32 oar1;
    196	u32 oar2;
    197	u32 tmgr;
    198};
    199
    200/**
    201 * struct stm32f7_i2c_spec - private i2c specification timing
    202 * @rate: I2C bus speed (Hz)
    203 * @fall_max: Max fall time of both SDA and SCL signals (ns)
    204 * @rise_max: Max rise time of both SDA and SCL signals (ns)
    205 * @hddat_min: Min data hold time (ns)
    206 * @vddat_max: Max data valid time (ns)
    207 * @sudat_min: Min data setup time (ns)
    208 * @l_min: Min low period of the SCL clock (ns)
    209 * @h_min: Min high period of the SCL clock (ns)
    210 */
    211struct stm32f7_i2c_spec {
    212	u32 rate;
    213	u32 fall_max;
    214	u32 rise_max;
    215	u32 hddat_min;
    216	u32 vddat_max;
    217	u32 sudat_min;
    218	u32 l_min;
    219	u32 h_min;
    220};
    221
    222/**
    223 * struct stm32f7_i2c_setup - private I2C timing setup parameters
    224 * @speed_freq: I2C speed frequency  (Hz)
    225 * @clock_src: I2C clock source frequency (Hz)
    226 * @rise_time: Rise time (ns)
    227 * @fall_time: Fall time (ns)
    228 * @fmp_clr_offset: Fast Mode Plus clear register offset from set register
    229 */
    230struct stm32f7_i2c_setup {
    231	u32 speed_freq;
    232	u32 clock_src;
    233	u32 rise_time;
    234	u32 fall_time;
    235	u32 fmp_clr_offset;
    236};
    237
    238/**
    239 * struct stm32f7_i2c_timings - private I2C output parameters
    240 * @node: List entry
    241 * @presc: Prescaler value
    242 * @scldel: Data setup time
    243 * @sdadel: Data hold time
    244 * @sclh: SCL high period (master mode)
    245 * @scll: SCL low period (master mode)
    246 */
    247struct stm32f7_i2c_timings {
    248	struct list_head node;
    249	u8 presc;
    250	u8 scldel;
    251	u8 sdadel;
    252	u8 sclh;
    253	u8 scll;
    254};
    255
    256/**
    257 * struct stm32f7_i2c_msg - client specific data
    258 * @addr: 8-bit or 10-bit slave addr, including r/w bit
    259 * @count: number of bytes to be transferred
    260 * @buf: data buffer
    261 * @result: result of the transfer
    262 * @stop: last I2C msg to be sent, i.e. STOP to be generated
    263 * @smbus: boolean to know if the I2C IP is used in SMBus mode
    264 * @size: type of SMBus protocol
    265 * @read_write: direction of SMBus protocol
    266 * SMBus block read and SMBus block write - block read process call protocols
    267 * @smbus_buf: buffer to be used for SMBus protocol transfer. It will
    268 * contain a maximum of 32 bytes of data + byte command + byte count + PEC
    269 * This buffer has to be 32-bit aligned to be compliant with memory address
    270 * register in DMA mode.
    271 */
    272struct stm32f7_i2c_msg {
    273	u16 addr;
    274	u32 count;
    275	u8 *buf;
    276	int result;
    277	bool stop;
    278	bool smbus;
    279	int size;
    280	char read_write;
    281	u8 smbus_buf[I2C_SMBUS_BLOCK_MAX + 3] __aligned(4);
    282};
    283
    284/**
    285 * struct stm32f7_i2c_alert - SMBus alert specific data
    286 * @setup: platform data for the smbus_alert i2c client
    287 * @ara: I2C slave device used to respond to the SMBus Alert with Alert
    288 * Response Address
    289 */
    290struct stm32f7_i2c_alert {
    291	struct i2c_smbus_alert_setup setup;
    292	struct i2c_client *ara;
    293};
    294
    295/**
    296 * struct stm32f7_i2c_dev - private data of the controller
    297 * @adap: I2C adapter for this controller
    298 * @dev: device for this controller
    299 * @base: virtual memory area
    300 * @complete: completion of I2C message
    301 * @clk: hw i2c clock
    302 * @bus_rate: I2C clock frequency of the controller
    303 * @msg: Pointer to data to be written
    304 * @msg_num: number of I2C messages to be executed
    305 * @msg_id: message identifiant
    306 * @f7_msg: customized i2c msg for driver usage
    307 * @setup: I2C timing input setup
    308 * @timing: I2C computed timings
    309 * @slave: list of slave devices registered on the I2C bus
    310 * @slave_running: slave device currently used
    311 * @backup_regs: backup of i2c controller registers (for suspend/resume)
    312 * @slave_dir: transfer direction for the current slave device
    313 * @master_mode: boolean to know in which mode the I2C is running (master or
    314 * slave)
    315 * @dma: dma data
    316 * @use_dma: boolean to know if dma is used in the current transfer
    317 * @regmap: holds SYSCFG phandle for Fast Mode Plus bits
    318 * @fmp_sreg: register address for setting Fast Mode Plus bits
    319 * @fmp_creg: register address for clearing Fast Mode Plus bits
    320 * @fmp_mask: mask for Fast Mode Plus bits in set register
    321 * @wakeup_src: boolean to know if the device is a wakeup source
    322 * @smbus_mode: states that the controller is configured in SMBus mode
    323 * @host_notify_client: SMBus host-notify client
    324 * @analog_filter: boolean to indicate enabling of the analog filter
    325 * @dnf_dt: value of digital filter requested via dt
    326 * @dnf: value of digital filter to apply
    327 * @alert: SMBus alert specific data
    328 */
    329struct stm32f7_i2c_dev {
    330	struct i2c_adapter adap;
    331	struct device *dev;
    332	void __iomem *base;
    333	struct completion complete;
    334	struct clk *clk;
    335	unsigned int bus_rate;
    336	struct i2c_msg *msg;
    337	unsigned int msg_num;
    338	unsigned int msg_id;
    339	struct stm32f7_i2c_msg f7_msg;
    340	struct stm32f7_i2c_setup setup;
    341	struct stm32f7_i2c_timings timing;
    342	struct i2c_client *slave[STM32F7_I2C_MAX_SLAVE];
    343	struct i2c_client *slave_running;
    344	struct stm32f7_i2c_regs backup_regs;
    345	u32 slave_dir;
    346	bool master_mode;
    347	struct stm32_i2c_dma *dma;
    348	bool use_dma;
    349	struct regmap *regmap;
    350	u32 fmp_sreg;
    351	u32 fmp_creg;
    352	u32 fmp_mask;
    353	bool wakeup_src;
    354	bool smbus_mode;
    355	struct i2c_client *host_notify_client;
    356	bool analog_filter;
    357	u32 dnf_dt;
    358	u32 dnf;
    359	struct stm32f7_i2c_alert *alert;
    360};
    361
    362/*
    363 * All these values are coming from I2C Specification, Version 6.0, 4th of
    364 * April 2014.
    365 *
    366 * Table10. Characteristics of the SDA and SCL bus lines for Standard, Fast,
    367 * and Fast-mode Plus I2C-bus devices
    368 */
    369static struct stm32f7_i2c_spec stm32f7_i2c_specs[] = {
    370	{
    371		.rate = I2C_MAX_STANDARD_MODE_FREQ,
    372		.fall_max = 300,
    373		.rise_max = 1000,
    374		.hddat_min = 0,
    375		.vddat_max = 3450,
    376		.sudat_min = 250,
    377		.l_min = 4700,
    378		.h_min = 4000,
    379	},
    380	{
    381		.rate = I2C_MAX_FAST_MODE_FREQ,
    382		.fall_max = 300,
    383		.rise_max = 300,
    384		.hddat_min = 0,
    385		.vddat_max = 900,
    386		.sudat_min = 100,
    387		.l_min = 1300,
    388		.h_min = 600,
    389	},
    390	{
    391		.rate = I2C_MAX_FAST_MODE_PLUS_FREQ,
    392		.fall_max = 100,
    393		.rise_max = 120,
    394		.hddat_min = 0,
    395		.vddat_max = 450,
    396		.sudat_min = 50,
    397		.l_min = 500,
    398		.h_min = 260,
    399	},
    400};
    401
    402static const struct stm32f7_i2c_setup stm32f7_setup = {
    403	.rise_time = STM32F7_I2C_RISE_TIME_DEFAULT,
    404	.fall_time = STM32F7_I2C_FALL_TIME_DEFAULT,
    405};
    406
    407static const struct stm32f7_i2c_setup stm32mp15_setup = {
    408	.rise_time = STM32F7_I2C_RISE_TIME_DEFAULT,
    409	.fall_time = STM32F7_I2C_FALL_TIME_DEFAULT,
    410	.fmp_clr_offset = 0x40,
    411};
    412
    413static inline void stm32f7_i2c_set_bits(void __iomem *reg, u32 mask)
    414{
    415	writel_relaxed(readl_relaxed(reg) | mask, reg);
    416}
    417
    418static inline void stm32f7_i2c_clr_bits(void __iomem *reg, u32 mask)
    419{
    420	writel_relaxed(readl_relaxed(reg) & ~mask, reg);
    421}
    422
    423static void stm32f7_i2c_disable_irq(struct stm32f7_i2c_dev *i2c_dev, u32 mask)
    424{
    425	stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1, mask);
    426}
    427
    428static struct stm32f7_i2c_spec *stm32f7_get_specs(u32 rate)
    429{
    430	int i;
    431
    432	for (i = 0; i < ARRAY_SIZE(stm32f7_i2c_specs); i++)
    433		if (rate <= stm32f7_i2c_specs[i].rate)
    434			return &stm32f7_i2c_specs[i];
    435
    436	return ERR_PTR(-EINVAL);
    437}
    438
    439#define	RATE_MIN(rate)	((rate) * 8 / 10)
    440static int stm32f7_i2c_compute_timing(struct stm32f7_i2c_dev *i2c_dev,
    441				      struct stm32f7_i2c_setup *setup,
    442				      struct stm32f7_i2c_timings *output)
    443{
    444	struct stm32f7_i2c_spec *specs;
    445	u32 p_prev = STM32F7_PRESC_MAX;
    446	u32 i2cclk = DIV_ROUND_CLOSEST(NSEC_PER_SEC,
    447				       setup->clock_src);
    448	u32 i2cbus = DIV_ROUND_CLOSEST(NSEC_PER_SEC,
    449				       setup->speed_freq);
    450	u32 clk_error_prev = i2cbus;
    451	u32 tsync;
    452	u32 af_delay_min, af_delay_max;
    453	u32 dnf_delay;
    454	u32 clk_min, clk_max;
    455	int sdadel_min, sdadel_max;
    456	int scldel_min;
    457	struct stm32f7_i2c_timings *v, *_v, *s;
    458	struct list_head solutions;
    459	u16 p, l, a, h;
    460	int ret = 0;
    461
    462	specs = stm32f7_get_specs(setup->speed_freq);
    463	if (specs == ERR_PTR(-EINVAL)) {
    464		dev_err(i2c_dev->dev, "speed out of bound {%d}\n",
    465			setup->speed_freq);
    466		return -EINVAL;
    467	}
    468
    469	if ((setup->rise_time > specs->rise_max) ||
    470	    (setup->fall_time > specs->fall_max)) {
    471		dev_err(i2c_dev->dev,
    472			"timings out of bound Rise{%d>%d}/Fall{%d>%d}\n",
    473			setup->rise_time, specs->rise_max,
    474			setup->fall_time, specs->fall_max);
    475		return -EINVAL;
    476	}
    477
    478	i2c_dev->dnf = DIV_ROUND_CLOSEST(i2c_dev->dnf_dt, i2cclk);
    479	if (i2c_dev->dnf > STM32F7_I2C_DNF_MAX) {
    480		dev_err(i2c_dev->dev,
    481			"DNF out of bound %d/%d\n",
    482			i2c_dev->dnf * i2cclk, STM32F7_I2C_DNF_MAX * i2cclk);
    483		return -EINVAL;
    484	}
    485
    486	/*  Analog and Digital Filters */
    487	af_delay_min =
    488		(i2c_dev->analog_filter ?
    489		 STM32F7_I2C_ANALOG_FILTER_DELAY_MIN : 0);
    490	af_delay_max =
    491		(i2c_dev->analog_filter ?
    492		 STM32F7_I2C_ANALOG_FILTER_DELAY_MAX : 0);
    493	dnf_delay = i2c_dev->dnf * i2cclk;
    494
    495	sdadel_min = specs->hddat_min + setup->fall_time -
    496		af_delay_min - (i2c_dev->dnf + 3) * i2cclk;
    497
    498	sdadel_max = specs->vddat_max - setup->rise_time -
    499		af_delay_max - (i2c_dev->dnf + 4) * i2cclk;
    500
    501	scldel_min = setup->rise_time + specs->sudat_min;
    502
    503	if (sdadel_min < 0)
    504		sdadel_min = 0;
    505	if (sdadel_max < 0)
    506		sdadel_max = 0;
    507
    508	dev_dbg(i2c_dev->dev, "SDADEL(min/max): %i/%i, SCLDEL(Min): %i\n",
    509		sdadel_min, sdadel_max, scldel_min);
    510
    511	INIT_LIST_HEAD(&solutions);
    512	/* Compute possible values for PRESC, SCLDEL and SDADEL */
    513	for (p = 0; p < STM32F7_PRESC_MAX; p++) {
    514		for (l = 0; l < STM32F7_SCLDEL_MAX; l++) {
    515			u32 scldel = (l + 1) * (p + 1) * i2cclk;
    516
    517			if (scldel < scldel_min)
    518				continue;
    519
    520			for (a = 0; a < STM32F7_SDADEL_MAX; a++) {
    521				u32 sdadel = (a * (p + 1) + 1) * i2cclk;
    522
    523				if (((sdadel >= sdadel_min) &&
    524				     (sdadel <= sdadel_max)) &&
    525				    (p != p_prev)) {
    526					v = kmalloc(sizeof(*v), GFP_KERNEL);
    527					if (!v) {
    528						ret = -ENOMEM;
    529						goto exit;
    530					}
    531
    532					v->presc = p;
    533					v->scldel = l;
    534					v->sdadel = a;
    535					p_prev = p;
    536
    537					list_add_tail(&v->node,
    538						      &solutions);
    539					break;
    540				}
    541			}
    542
    543			if (p_prev == p)
    544				break;
    545		}
    546	}
    547
    548	if (list_empty(&solutions)) {
    549		dev_err(i2c_dev->dev, "no Prescaler solution\n");
    550		ret = -EPERM;
    551		goto exit;
    552	}
    553
    554	tsync = af_delay_min + dnf_delay + (2 * i2cclk);
    555	s = NULL;
    556	clk_max = NSEC_PER_SEC / RATE_MIN(setup->speed_freq);
    557	clk_min = NSEC_PER_SEC / setup->speed_freq;
    558
    559	/*
    560	 * Among Prescaler possibilities discovered above figures out SCL Low
    561	 * and High Period. Provided:
    562	 * - SCL Low Period has to be higher than SCL Clock Low Period
    563	 *   defined by I2C Specification. I2C Clock has to be lower than
    564	 *   (SCL Low Period - Analog/Digital filters) / 4.
    565	 * - SCL High Period has to be lower than SCL Clock High Period
    566	 *   defined by I2C Specification
    567	 * - I2C Clock has to be lower than SCL High Period
    568	 */
    569	list_for_each_entry(v, &solutions, node) {
    570		u32 prescaler = (v->presc + 1) * i2cclk;
    571
    572		for (l = 0; l < STM32F7_SCLL_MAX; l++) {
    573			u32 tscl_l = (l + 1) * prescaler + tsync;
    574
    575			if ((tscl_l < specs->l_min) ||
    576			    (i2cclk >=
    577			     ((tscl_l - af_delay_min - dnf_delay) / 4))) {
    578				continue;
    579			}
    580
    581			for (h = 0; h < STM32F7_SCLH_MAX; h++) {
    582				u32 tscl_h = (h + 1) * prescaler + tsync;
    583				u32 tscl = tscl_l + tscl_h +
    584					setup->rise_time + setup->fall_time;
    585
    586				if ((tscl >= clk_min) && (tscl <= clk_max) &&
    587				    (tscl_h >= specs->h_min) &&
    588				    (i2cclk < tscl_h)) {
    589					int clk_error = tscl - i2cbus;
    590
    591					if (clk_error < 0)
    592						clk_error = -clk_error;
    593
    594					if (clk_error < clk_error_prev) {
    595						clk_error_prev = clk_error;
    596						v->scll = l;
    597						v->sclh = h;
    598						s = v;
    599					}
    600				}
    601			}
    602		}
    603	}
    604
    605	if (!s) {
    606		dev_err(i2c_dev->dev, "no solution at all\n");
    607		ret = -EPERM;
    608		goto exit;
    609	}
    610
    611	output->presc = s->presc;
    612	output->scldel = s->scldel;
    613	output->sdadel = s->sdadel;
    614	output->scll = s->scll;
    615	output->sclh = s->sclh;
    616
    617	dev_dbg(i2c_dev->dev,
    618		"Presc: %i, scldel: %i, sdadel: %i, scll: %i, sclh: %i\n",
    619		output->presc,
    620		output->scldel, output->sdadel,
    621		output->scll, output->sclh);
    622
    623exit:
    624	/* Release list and memory */
    625	list_for_each_entry_safe(v, _v, &solutions, node) {
    626		list_del(&v->node);
    627		kfree(v);
    628	}
    629
    630	return ret;
    631}
    632
    633static u32 stm32f7_get_lower_rate(u32 rate)
    634{
    635	int i = ARRAY_SIZE(stm32f7_i2c_specs);
    636
    637	while (--i)
    638		if (stm32f7_i2c_specs[i].rate < rate)
    639			break;
    640
    641	return stm32f7_i2c_specs[i].rate;
    642}
    643
    644static int stm32f7_i2c_setup_timing(struct stm32f7_i2c_dev *i2c_dev,
    645				    struct stm32f7_i2c_setup *setup)
    646{
    647	struct i2c_timings timings, *t = &timings;
    648	int ret = 0;
    649
    650	t->bus_freq_hz = I2C_MAX_STANDARD_MODE_FREQ;
    651	t->scl_rise_ns = i2c_dev->setup.rise_time;
    652	t->scl_fall_ns = i2c_dev->setup.fall_time;
    653
    654	i2c_parse_fw_timings(i2c_dev->dev, t, false);
    655
    656	if (t->bus_freq_hz > I2C_MAX_FAST_MODE_PLUS_FREQ) {
    657		dev_err(i2c_dev->dev, "Invalid bus speed (%i>%i)\n",
    658			t->bus_freq_hz, I2C_MAX_FAST_MODE_PLUS_FREQ);
    659		return -EINVAL;
    660	}
    661
    662	setup->speed_freq = t->bus_freq_hz;
    663	i2c_dev->setup.rise_time = t->scl_rise_ns;
    664	i2c_dev->setup.fall_time = t->scl_fall_ns;
    665	i2c_dev->dnf_dt = t->digital_filter_width_ns;
    666	setup->clock_src = clk_get_rate(i2c_dev->clk);
    667
    668	if (!setup->clock_src) {
    669		dev_err(i2c_dev->dev, "clock rate is 0\n");
    670		return -EINVAL;
    671	}
    672
    673	if (!of_property_read_bool(i2c_dev->dev->of_node, "i2c-digital-filter"))
    674		i2c_dev->dnf_dt = STM32F7_I2C_DNF_DEFAULT;
    675
    676	do {
    677		ret = stm32f7_i2c_compute_timing(i2c_dev, setup,
    678						 &i2c_dev->timing);
    679		if (ret) {
    680			dev_err(i2c_dev->dev,
    681				"failed to compute I2C timings.\n");
    682			if (setup->speed_freq <= I2C_MAX_STANDARD_MODE_FREQ)
    683				break;
    684			setup->speed_freq =
    685				stm32f7_get_lower_rate(setup->speed_freq);
    686			dev_warn(i2c_dev->dev,
    687				 "downgrade I2C Speed Freq to (%i)\n",
    688				 setup->speed_freq);
    689		}
    690	} while (ret);
    691
    692	if (ret) {
    693		dev_err(i2c_dev->dev, "Impossible to compute I2C timings.\n");
    694		return ret;
    695	}
    696
    697	i2c_dev->analog_filter = of_property_read_bool(i2c_dev->dev->of_node,
    698						       "i2c-analog-filter");
    699
    700	dev_dbg(i2c_dev->dev, "I2C Speed(%i), Clk Source(%i)\n",
    701		setup->speed_freq, setup->clock_src);
    702	dev_dbg(i2c_dev->dev, "I2C Rise(%i) and Fall(%i) Time\n",
    703		setup->rise_time, setup->fall_time);
    704	dev_dbg(i2c_dev->dev, "I2C Analog Filter(%s), DNF(%i)\n",
    705		(i2c_dev->analog_filter ? "On" : "Off"), i2c_dev->dnf);
    706
    707	i2c_dev->bus_rate = setup->speed_freq;
    708
    709	return 0;
    710}
    711
    712static void stm32f7_i2c_disable_dma_req(struct stm32f7_i2c_dev *i2c_dev)
    713{
    714	void __iomem *base = i2c_dev->base;
    715	u32 mask = STM32F7_I2C_CR1_RXDMAEN | STM32F7_I2C_CR1_TXDMAEN;
    716
    717	stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR1, mask);
    718}
    719
    720static void stm32f7_i2c_dma_callback(void *arg)
    721{
    722	struct stm32f7_i2c_dev *i2c_dev = (struct stm32f7_i2c_dev *)arg;
    723	struct stm32_i2c_dma *dma = i2c_dev->dma;
    724	struct device *dev = dma->chan_using->device->dev;
    725
    726	stm32f7_i2c_disable_dma_req(i2c_dev);
    727	dma_unmap_single(dev, dma->dma_buf, dma->dma_len, dma->dma_data_dir);
    728	complete(&dma->dma_complete);
    729}
    730
    731static void stm32f7_i2c_hw_config(struct stm32f7_i2c_dev *i2c_dev)
    732{
    733	struct stm32f7_i2c_timings *t = &i2c_dev->timing;
    734	u32 timing = 0;
    735
    736	/* Timing settings */
    737	timing |= STM32F7_I2C_TIMINGR_PRESC(t->presc);
    738	timing |= STM32F7_I2C_TIMINGR_SCLDEL(t->scldel);
    739	timing |= STM32F7_I2C_TIMINGR_SDADEL(t->sdadel);
    740	timing |= STM32F7_I2C_TIMINGR_SCLH(t->sclh);
    741	timing |= STM32F7_I2C_TIMINGR_SCLL(t->scll);
    742	writel_relaxed(timing, i2c_dev->base + STM32F7_I2C_TIMINGR);
    743
    744	/* Configure the Analog Filter */
    745	if (i2c_dev->analog_filter)
    746		stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
    747				     STM32F7_I2C_CR1_ANFOFF);
    748	else
    749		stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
    750				     STM32F7_I2C_CR1_ANFOFF);
    751
    752	/* Program the Digital Filter */
    753	stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
    754			     STM32F7_I2C_CR1_DNF_MASK);
    755	stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
    756			     STM32F7_I2C_CR1_DNF(i2c_dev->dnf));
    757
    758	stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
    759			     STM32F7_I2C_CR1_PE);
    760}
    761
    762static void stm32f7_i2c_write_tx_data(struct stm32f7_i2c_dev *i2c_dev)
    763{
    764	struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
    765	void __iomem *base = i2c_dev->base;
    766
    767	if (f7_msg->count) {
    768		writeb_relaxed(*f7_msg->buf++, base + STM32F7_I2C_TXDR);
    769		f7_msg->count--;
    770	}
    771}
    772
    773static void stm32f7_i2c_read_rx_data(struct stm32f7_i2c_dev *i2c_dev)
    774{
    775	struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
    776	void __iomem *base = i2c_dev->base;
    777
    778	if (f7_msg->count) {
    779		*f7_msg->buf++ = readb_relaxed(base + STM32F7_I2C_RXDR);
    780		f7_msg->count--;
    781	} else {
    782		/* Flush RX buffer has no data is expected */
    783		readb_relaxed(base + STM32F7_I2C_RXDR);
    784	}
    785}
    786
    787static void stm32f7_i2c_reload(struct stm32f7_i2c_dev *i2c_dev)
    788{
    789	struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
    790	u32 cr2;
    791
    792	if (i2c_dev->use_dma)
    793		f7_msg->count -= STM32F7_I2C_MAX_LEN;
    794
    795	cr2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR2);
    796
    797	cr2 &= ~STM32F7_I2C_CR2_NBYTES_MASK;
    798	if (f7_msg->count > STM32F7_I2C_MAX_LEN) {
    799		cr2 |= STM32F7_I2C_CR2_NBYTES(STM32F7_I2C_MAX_LEN);
    800	} else {
    801		cr2 &= ~STM32F7_I2C_CR2_RELOAD;
    802		cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
    803	}
    804
    805	writel_relaxed(cr2, i2c_dev->base + STM32F7_I2C_CR2);
    806}
    807
    808static void stm32f7_i2c_smbus_reload(struct stm32f7_i2c_dev *i2c_dev)
    809{
    810	struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
    811	u32 cr2;
    812	u8 *val;
    813
    814	/*
    815	 * For I2C_SMBUS_BLOCK_DATA && I2C_SMBUS_BLOCK_PROC_CALL, the first
    816	 * data received inform us how many data will follow.
    817	 */
    818	stm32f7_i2c_read_rx_data(i2c_dev);
    819
    820	/*
    821	 * Update NBYTES with the value read to continue the transfer
    822	 */
    823	val = f7_msg->buf - sizeof(u8);
    824	f7_msg->count = *val;
    825	cr2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR2);
    826	cr2 &= ~(STM32F7_I2C_CR2_NBYTES_MASK | STM32F7_I2C_CR2_RELOAD);
    827	cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
    828	writel_relaxed(cr2, i2c_dev->base + STM32F7_I2C_CR2);
    829}
    830
    831static void stm32f7_i2c_release_bus(struct i2c_adapter *i2c_adap)
    832{
    833	struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(i2c_adap);
    834
    835	stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
    836			     STM32F7_I2C_CR1_PE);
    837
    838	stm32f7_i2c_hw_config(i2c_dev);
    839}
    840
    841static int stm32f7_i2c_wait_free_bus(struct stm32f7_i2c_dev *i2c_dev)
    842{
    843	u32 status;
    844	int ret;
    845
    846	ret = readl_relaxed_poll_timeout(i2c_dev->base + STM32F7_I2C_ISR,
    847					 status,
    848					 !(status & STM32F7_I2C_ISR_BUSY),
    849					 10, 1000);
    850	if (!ret)
    851		return 0;
    852
    853	stm32f7_i2c_release_bus(&i2c_dev->adap);
    854
    855	return -EBUSY;
    856}
    857
    858static void stm32f7_i2c_xfer_msg(struct stm32f7_i2c_dev *i2c_dev,
    859				 struct i2c_msg *msg)
    860{
    861	struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
    862	void __iomem *base = i2c_dev->base;
    863	u32 cr1, cr2;
    864	int ret;
    865
    866	f7_msg->addr = msg->addr;
    867	f7_msg->buf = msg->buf;
    868	f7_msg->count = msg->len;
    869	f7_msg->result = 0;
    870	f7_msg->stop = (i2c_dev->msg_id >= i2c_dev->msg_num - 1);
    871
    872	reinit_completion(&i2c_dev->complete);
    873
    874	cr1 = readl_relaxed(base + STM32F7_I2C_CR1);
    875	cr2 = readl_relaxed(base + STM32F7_I2C_CR2);
    876
    877	/* Set transfer direction */
    878	cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
    879	if (msg->flags & I2C_M_RD)
    880		cr2 |= STM32F7_I2C_CR2_RD_WRN;
    881
    882	/* Set slave address */
    883	cr2 &= ~(STM32F7_I2C_CR2_HEAD10R | STM32F7_I2C_CR2_ADD10);
    884	if (msg->flags & I2C_M_TEN) {
    885		cr2 &= ~STM32F7_I2C_CR2_SADD10_MASK;
    886		cr2 |= STM32F7_I2C_CR2_SADD10(f7_msg->addr);
    887		cr2 |= STM32F7_I2C_CR2_ADD10;
    888	} else {
    889		cr2 &= ~STM32F7_I2C_CR2_SADD7_MASK;
    890		cr2 |= STM32F7_I2C_CR2_SADD7(f7_msg->addr);
    891	}
    892
    893	/* Set nb bytes to transfer and reload if needed */
    894	cr2 &= ~(STM32F7_I2C_CR2_NBYTES_MASK | STM32F7_I2C_CR2_RELOAD);
    895	if (f7_msg->count > STM32F7_I2C_MAX_LEN) {
    896		cr2 |= STM32F7_I2C_CR2_NBYTES(STM32F7_I2C_MAX_LEN);
    897		cr2 |= STM32F7_I2C_CR2_RELOAD;
    898	} else {
    899		cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
    900	}
    901
    902	/* Enable NACK, STOP, error and transfer complete interrupts */
    903	cr1 |= STM32F7_I2C_CR1_ERRIE | STM32F7_I2C_CR1_TCIE |
    904		STM32F7_I2C_CR1_STOPIE | STM32F7_I2C_CR1_NACKIE;
    905
    906	/* Clear DMA req and TX/RX interrupt */
    907	cr1 &= ~(STM32F7_I2C_CR1_RXIE | STM32F7_I2C_CR1_TXIE |
    908			STM32F7_I2C_CR1_RXDMAEN | STM32F7_I2C_CR1_TXDMAEN);
    909
    910	/* Configure DMA or enable RX/TX interrupt */
    911	i2c_dev->use_dma = false;
    912	if (i2c_dev->dma && f7_msg->count >= STM32F7_I2C_DMA_LEN_MIN) {
    913		ret = stm32_i2c_prep_dma_xfer(i2c_dev->dev, i2c_dev->dma,
    914					      msg->flags & I2C_M_RD,
    915					      f7_msg->count, f7_msg->buf,
    916					      stm32f7_i2c_dma_callback,
    917					      i2c_dev);
    918		if (!ret)
    919			i2c_dev->use_dma = true;
    920		else
    921			dev_warn(i2c_dev->dev, "can't use DMA\n");
    922	}
    923
    924	if (!i2c_dev->use_dma) {
    925		if (msg->flags & I2C_M_RD)
    926			cr1 |= STM32F7_I2C_CR1_RXIE;
    927		else
    928			cr1 |= STM32F7_I2C_CR1_TXIE;
    929	} else {
    930		if (msg->flags & I2C_M_RD)
    931			cr1 |= STM32F7_I2C_CR1_RXDMAEN;
    932		else
    933			cr1 |= STM32F7_I2C_CR1_TXDMAEN;
    934	}
    935
    936	/* Configure Start/Repeated Start */
    937	cr2 |= STM32F7_I2C_CR2_START;
    938
    939	i2c_dev->master_mode = true;
    940
    941	/* Write configurations registers */
    942	writel_relaxed(cr1, base + STM32F7_I2C_CR1);
    943	writel_relaxed(cr2, base + STM32F7_I2C_CR2);
    944}
    945
    946static int stm32f7_i2c_smbus_xfer_msg(struct stm32f7_i2c_dev *i2c_dev,
    947				      unsigned short flags, u8 command,
    948				      union i2c_smbus_data *data)
    949{
    950	struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
    951	struct device *dev = i2c_dev->dev;
    952	void __iomem *base = i2c_dev->base;
    953	u32 cr1, cr2;
    954	int i, ret;
    955
    956	f7_msg->result = 0;
    957	reinit_completion(&i2c_dev->complete);
    958
    959	cr2 = readl_relaxed(base + STM32F7_I2C_CR2);
    960	cr1 = readl_relaxed(base + STM32F7_I2C_CR1);
    961
    962	/* Set transfer direction */
    963	cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
    964	if (f7_msg->read_write)
    965		cr2 |= STM32F7_I2C_CR2_RD_WRN;
    966
    967	/* Set slave address */
    968	cr2 &= ~(STM32F7_I2C_CR2_ADD10 | STM32F7_I2C_CR2_SADD7_MASK);
    969	cr2 |= STM32F7_I2C_CR2_SADD7(f7_msg->addr);
    970
    971	f7_msg->smbus_buf[0] = command;
    972	switch (f7_msg->size) {
    973	case I2C_SMBUS_QUICK:
    974		f7_msg->stop = true;
    975		f7_msg->count = 0;
    976		break;
    977	case I2C_SMBUS_BYTE:
    978		f7_msg->stop = true;
    979		f7_msg->count = 1;
    980		break;
    981	case I2C_SMBUS_BYTE_DATA:
    982		if (f7_msg->read_write) {
    983			f7_msg->stop = false;
    984			f7_msg->count = 1;
    985			cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
    986		} else {
    987			f7_msg->stop = true;
    988			f7_msg->count = 2;
    989			f7_msg->smbus_buf[1] = data->byte;
    990		}
    991		break;
    992	case I2C_SMBUS_WORD_DATA:
    993		if (f7_msg->read_write) {
    994			f7_msg->stop = false;
    995			f7_msg->count = 1;
    996			cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
    997		} else {
    998			f7_msg->stop = true;
    999			f7_msg->count = 3;
   1000			f7_msg->smbus_buf[1] = data->word & 0xff;
   1001			f7_msg->smbus_buf[2] = data->word >> 8;
   1002		}
   1003		break;
   1004	case I2C_SMBUS_BLOCK_DATA:
   1005		if (f7_msg->read_write) {
   1006			f7_msg->stop = false;
   1007			f7_msg->count = 1;
   1008			cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
   1009		} else {
   1010			f7_msg->stop = true;
   1011			if (data->block[0] > I2C_SMBUS_BLOCK_MAX ||
   1012			    !data->block[0]) {
   1013				dev_err(dev, "Invalid block write size %d\n",
   1014					data->block[0]);
   1015				return -EINVAL;
   1016			}
   1017			f7_msg->count = data->block[0] + 2;
   1018			for (i = 1; i < f7_msg->count; i++)
   1019				f7_msg->smbus_buf[i] = data->block[i - 1];
   1020		}
   1021		break;
   1022	case I2C_SMBUS_PROC_CALL:
   1023		f7_msg->stop = false;
   1024		f7_msg->count = 3;
   1025		f7_msg->smbus_buf[1] = data->word & 0xff;
   1026		f7_msg->smbus_buf[2] = data->word >> 8;
   1027		cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
   1028		f7_msg->read_write = I2C_SMBUS_READ;
   1029		break;
   1030	case I2C_SMBUS_BLOCK_PROC_CALL:
   1031		f7_msg->stop = false;
   1032		if (data->block[0] > I2C_SMBUS_BLOCK_MAX - 1) {
   1033			dev_err(dev, "Invalid block write size %d\n",
   1034				data->block[0]);
   1035			return -EINVAL;
   1036		}
   1037		f7_msg->count = data->block[0] + 2;
   1038		for (i = 1; i < f7_msg->count; i++)
   1039			f7_msg->smbus_buf[i] = data->block[i - 1];
   1040		cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
   1041		f7_msg->read_write = I2C_SMBUS_READ;
   1042		break;
   1043	case I2C_SMBUS_I2C_BLOCK_DATA:
   1044		/* Rely on emulated i2c transfer (through master_xfer) */
   1045		return -EOPNOTSUPP;
   1046	default:
   1047		dev_err(dev, "Unsupported smbus protocol %d\n", f7_msg->size);
   1048		return -EOPNOTSUPP;
   1049	}
   1050
   1051	f7_msg->buf = f7_msg->smbus_buf;
   1052
   1053	/* Configure PEC */
   1054	if ((flags & I2C_CLIENT_PEC) && f7_msg->size != I2C_SMBUS_QUICK) {
   1055		cr1 |= STM32F7_I2C_CR1_PECEN;
   1056		cr2 |= STM32F7_I2C_CR2_PECBYTE;
   1057		if (!f7_msg->read_write)
   1058			f7_msg->count++;
   1059	} else {
   1060		cr1 &= ~STM32F7_I2C_CR1_PECEN;
   1061		cr2 &= ~STM32F7_I2C_CR2_PECBYTE;
   1062	}
   1063
   1064	/* Set number of bytes to be transferred */
   1065	cr2 &= ~(STM32F7_I2C_CR2_NBYTES_MASK | STM32F7_I2C_CR2_RELOAD);
   1066	cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
   1067
   1068	/* Enable NACK, STOP, error and transfer complete interrupts */
   1069	cr1 |= STM32F7_I2C_CR1_ERRIE | STM32F7_I2C_CR1_TCIE |
   1070		STM32F7_I2C_CR1_STOPIE | STM32F7_I2C_CR1_NACKIE;
   1071
   1072	/* Clear DMA req and TX/RX interrupt */
   1073	cr1 &= ~(STM32F7_I2C_CR1_RXIE | STM32F7_I2C_CR1_TXIE |
   1074			STM32F7_I2C_CR1_RXDMAEN | STM32F7_I2C_CR1_TXDMAEN);
   1075
   1076	/* Configure DMA or enable RX/TX interrupt */
   1077	i2c_dev->use_dma = false;
   1078	if (i2c_dev->dma && f7_msg->count >= STM32F7_I2C_DMA_LEN_MIN) {
   1079		ret = stm32_i2c_prep_dma_xfer(i2c_dev->dev, i2c_dev->dma,
   1080					      cr2 & STM32F7_I2C_CR2_RD_WRN,
   1081					      f7_msg->count, f7_msg->buf,
   1082					      stm32f7_i2c_dma_callback,
   1083					      i2c_dev);
   1084		if (!ret)
   1085			i2c_dev->use_dma = true;
   1086		else
   1087			dev_warn(i2c_dev->dev, "can't use DMA\n");
   1088	}
   1089
   1090	if (!i2c_dev->use_dma) {
   1091		if (cr2 & STM32F7_I2C_CR2_RD_WRN)
   1092			cr1 |= STM32F7_I2C_CR1_RXIE;
   1093		else
   1094			cr1 |= STM32F7_I2C_CR1_TXIE;
   1095	} else {
   1096		if (cr2 & STM32F7_I2C_CR2_RD_WRN)
   1097			cr1 |= STM32F7_I2C_CR1_RXDMAEN;
   1098		else
   1099			cr1 |= STM32F7_I2C_CR1_TXDMAEN;
   1100	}
   1101
   1102	/* Set Start bit */
   1103	cr2 |= STM32F7_I2C_CR2_START;
   1104
   1105	i2c_dev->master_mode = true;
   1106
   1107	/* Write configurations registers */
   1108	writel_relaxed(cr1, base + STM32F7_I2C_CR1);
   1109	writel_relaxed(cr2, base + STM32F7_I2C_CR2);
   1110
   1111	return 0;
   1112}
   1113
   1114static void stm32f7_i2c_smbus_rep_start(struct stm32f7_i2c_dev *i2c_dev)
   1115{
   1116	struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
   1117	void __iomem *base = i2c_dev->base;
   1118	u32 cr1, cr2;
   1119	int ret;
   1120
   1121	cr2 = readl_relaxed(base + STM32F7_I2C_CR2);
   1122	cr1 = readl_relaxed(base + STM32F7_I2C_CR1);
   1123
   1124	/* Set transfer direction */
   1125	cr2 |= STM32F7_I2C_CR2_RD_WRN;
   1126
   1127	switch (f7_msg->size) {
   1128	case I2C_SMBUS_BYTE_DATA:
   1129		f7_msg->count = 1;
   1130		break;
   1131	case I2C_SMBUS_WORD_DATA:
   1132	case I2C_SMBUS_PROC_CALL:
   1133		f7_msg->count = 2;
   1134		break;
   1135	case I2C_SMBUS_BLOCK_DATA:
   1136	case I2C_SMBUS_BLOCK_PROC_CALL:
   1137		f7_msg->count = 1;
   1138		cr2 |= STM32F7_I2C_CR2_RELOAD;
   1139		break;
   1140	}
   1141
   1142	f7_msg->buf = f7_msg->smbus_buf;
   1143	f7_msg->stop = true;
   1144
   1145	/* Add one byte for PEC if needed */
   1146	if (cr1 & STM32F7_I2C_CR1_PECEN)
   1147		f7_msg->count++;
   1148
   1149	/* Set number of bytes to be transferred */
   1150	cr2 &= ~(STM32F7_I2C_CR2_NBYTES_MASK);
   1151	cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
   1152
   1153	/*
   1154	 * Configure RX/TX interrupt:
   1155	 */
   1156	cr1 &= ~(STM32F7_I2C_CR1_RXIE | STM32F7_I2C_CR1_TXIE);
   1157	cr1 |= STM32F7_I2C_CR1_RXIE;
   1158
   1159	/*
   1160	 * Configure DMA or enable RX/TX interrupt:
   1161	 * For I2C_SMBUS_BLOCK_DATA and I2C_SMBUS_BLOCK_PROC_CALL we don't use
   1162	 * dma as we don't know in advance how many data will be received
   1163	 */
   1164	cr1 &= ~(STM32F7_I2C_CR1_RXIE | STM32F7_I2C_CR1_TXIE |
   1165		 STM32F7_I2C_CR1_RXDMAEN | STM32F7_I2C_CR1_TXDMAEN);
   1166
   1167	i2c_dev->use_dma = false;
   1168	if (i2c_dev->dma && f7_msg->count >= STM32F7_I2C_DMA_LEN_MIN &&
   1169	    f7_msg->size != I2C_SMBUS_BLOCK_DATA &&
   1170	    f7_msg->size != I2C_SMBUS_BLOCK_PROC_CALL) {
   1171		ret = stm32_i2c_prep_dma_xfer(i2c_dev->dev, i2c_dev->dma,
   1172					      cr2 & STM32F7_I2C_CR2_RD_WRN,
   1173					      f7_msg->count, f7_msg->buf,
   1174					      stm32f7_i2c_dma_callback,
   1175					      i2c_dev);
   1176
   1177		if (!ret)
   1178			i2c_dev->use_dma = true;
   1179		else
   1180			dev_warn(i2c_dev->dev, "can't use DMA\n");
   1181	}
   1182
   1183	if (!i2c_dev->use_dma)
   1184		cr1 |= STM32F7_I2C_CR1_RXIE;
   1185	else
   1186		cr1 |= STM32F7_I2C_CR1_RXDMAEN;
   1187
   1188	/* Configure Repeated Start */
   1189	cr2 |= STM32F7_I2C_CR2_START;
   1190
   1191	/* Write configurations registers */
   1192	writel_relaxed(cr1, base + STM32F7_I2C_CR1);
   1193	writel_relaxed(cr2, base + STM32F7_I2C_CR2);
   1194}
   1195
   1196static int stm32f7_i2c_smbus_check_pec(struct stm32f7_i2c_dev *i2c_dev)
   1197{
   1198	struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
   1199	u8 count, internal_pec, received_pec;
   1200
   1201	internal_pec = readl_relaxed(i2c_dev->base + STM32F7_I2C_PECR);
   1202
   1203	switch (f7_msg->size) {
   1204	case I2C_SMBUS_BYTE:
   1205	case I2C_SMBUS_BYTE_DATA:
   1206		received_pec = f7_msg->smbus_buf[1];
   1207		break;
   1208	case I2C_SMBUS_WORD_DATA:
   1209	case I2C_SMBUS_PROC_CALL:
   1210		received_pec = f7_msg->smbus_buf[2];
   1211		break;
   1212	case I2C_SMBUS_BLOCK_DATA:
   1213	case I2C_SMBUS_BLOCK_PROC_CALL:
   1214		count = f7_msg->smbus_buf[0];
   1215		received_pec = f7_msg->smbus_buf[count];
   1216		break;
   1217	default:
   1218		dev_err(i2c_dev->dev, "Unsupported smbus protocol for PEC\n");
   1219		return -EINVAL;
   1220	}
   1221
   1222	if (internal_pec != received_pec) {
   1223		dev_err(i2c_dev->dev, "Bad PEC 0x%02x vs. 0x%02x\n",
   1224			internal_pec, received_pec);
   1225		return -EBADMSG;
   1226	}
   1227
   1228	return 0;
   1229}
   1230
   1231static bool stm32f7_i2c_is_addr_match(struct i2c_client *slave, u32 addcode)
   1232{
   1233	u32 addr;
   1234
   1235	if (!slave)
   1236		return false;
   1237
   1238	if (slave->flags & I2C_CLIENT_TEN) {
   1239		/*
   1240		 * For 10-bit addr, addcode = 11110XY with
   1241		 * X = Bit 9 of slave address
   1242		 * Y = Bit 8 of slave address
   1243		 */
   1244		addr = slave->addr >> 8;
   1245		addr |= 0x78;
   1246		if (addr == addcode)
   1247			return true;
   1248	} else {
   1249		addr = slave->addr & 0x7f;
   1250		if (addr == addcode)
   1251			return true;
   1252	}
   1253
   1254	return false;
   1255}
   1256
   1257static void stm32f7_i2c_slave_start(struct stm32f7_i2c_dev *i2c_dev)
   1258{
   1259	struct i2c_client *slave = i2c_dev->slave_running;
   1260	void __iomem *base = i2c_dev->base;
   1261	u32 mask;
   1262	u8 value = 0;
   1263
   1264	if (i2c_dev->slave_dir) {
   1265		/* Notify i2c slave that new read transfer is starting */
   1266		i2c_slave_event(slave, I2C_SLAVE_READ_REQUESTED, &value);
   1267
   1268		/*
   1269		 * Disable slave TX config in case of I2C combined message
   1270		 * (I2C Write followed by I2C Read)
   1271		 */
   1272		mask = STM32F7_I2C_CR2_RELOAD;
   1273		stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR2, mask);
   1274		mask = STM32F7_I2C_CR1_SBC | STM32F7_I2C_CR1_RXIE |
   1275		       STM32F7_I2C_CR1_TCIE;
   1276		stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR1, mask);
   1277
   1278		/* Enable TX empty, STOP, NACK interrupts */
   1279		mask =  STM32F7_I2C_CR1_STOPIE | STM32F7_I2C_CR1_NACKIE |
   1280			STM32F7_I2C_CR1_TXIE;
   1281		stm32f7_i2c_set_bits(base + STM32F7_I2C_CR1, mask);
   1282
   1283		/* Write 1st data byte */
   1284		writel_relaxed(value, base + STM32F7_I2C_TXDR);
   1285	} else {
   1286		/* Notify i2c slave that new write transfer is starting */
   1287		i2c_slave_event(slave, I2C_SLAVE_WRITE_REQUESTED, &value);
   1288
   1289		/* Set reload mode to be able to ACK/NACK each received byte */
   1290		mask = STM32F7_I2C_CR2_RELOAD;
   1291		stm32f7_i2c_set_bits(base + STM32F7_I2C_CR2, mask);
   1292
   1293		/*
   1294		 * Set STOP, NACK, RX empty and transfer complete interrupts.*
   1295		 * Set Slave Byte Control to be able to ACK/NACK each data
   1296		 * byte received
   1297		 */
   1298		mask =  STM32F7_I2C_CR1_STOPIE | STM32F7_I2C_CR1_NACKIE |
   1299			STM32F7_I2C_CR1_SBC | STM32F7_I2C_CR1_RXIE |
   1300			STM32F7_I2C_CR1_TCIE;
   1301		stm32f7_i2c_set_bits(base + STM32F7_I2C_CR1, mask);
   1302	}
   1303}
   1304
   1305static void stm32f7_i2c_slave_addr(struct stm32f7_i2c_dev *i2c_dev)
   1306{
   1307	void __iomem *base = i2c_dev->base;
   1308	u32 isr, addcode, dir, mask;
   1309	int i;
   1310
   1311	isr = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
   1312	addcode = STM32F7_I2C_ISR_ADDCODE_GET(isr);
   1313	dir = isr & STM32F7_I2C_ISR_DIR;
   1314
   1315	for (i = 0; i < STM32F7_I2C_MAX_SLAVE; i++) {
   1316		if (stm32f7_i2c_is_addr_match(i2c_dev->slave[i], addcode)) {
   1317			i2c_dev->slave_running = i2c_dev->slave[i];
   1318			i2c_dev->slave_dir = dir;
   1319
   1320			/* Start I2C slave processing */
   1321			stm32f7_i2c_slave_start(i2c_dev);
   1322
   1323			/* Clear ADDR flag */
   1324			mask = STM32F7_I2C_ICR_ADDRCF;
   1325			writel_relaxed(mask, base + STM32F7_I2C_ICR);
   1326			break;
   1327		}
   1328	}
   1329}
   1330
   1331static int stm32f7_i2c_get_slave_id(struct stm32f7_i2c_dev *i2c_dev,
   1332				    struct i2c_client *slave, int *id)
   1333{
   1334	int i;
   1335
   1336	for (i = 0; i < STM32F7_I2C_MAX_SLAVE; i++) {
   1337		if (i2c_dev->slave[i] == slave) {
   1338			*id = i;
   1339			return 0;
   1340		}
   1341	}
   1342
   1343	dev_err(i2c_dev->dev, "Slave 0x%x not registered\n", slave->addr);
   1344
   1345	return -ENODEV;
   1346}
   1347
   1348static int stm32f7_i2c_get_free_slave_id(struct stm32f7_i2c_dev *i2c_dev,
   1349					 struct i2c_client *slave, int *id)
   1350{
   1351	struct device *dev = i2c_dev->dev;
   1352	int i;
   1353
   1354	/*
   1355	 * slave[STM32F7_SLAVE_HOSTNOTIFY] support only SMBus Host address (0x8)
   1356	 * slave[STM32F7_SLAVE_7_10_BITS_ADDR] supports 7-bit and 10-bit slave address
   1357	 * slave[STM32F7_SLAVE_7_BITS_ADDR] supports 7-bit slave address only
   1358	 */
   1359	if (i2c_dev->smbus_mode && (slave->addr == 0x08)) {
   1360		if (i2c_dev->slave[STM32F7_SLAVE_HOSTNOTIFY])
   1361			goto fail;
   1362		*id = STM32F7_SLAVE_HOSTNOTIFY;
   1363		return 0;
   1364	}
   1365
   1366	for (i = STM32F7_I2C_MAX_SLAVE - 1; i > STM32F7_SLAVE_HOSTNOTIFY; i--) {
   1367		if ((i == STM32F7_SLAVE_7_BITS_ADDR) &&
   1368		    (slave->flags & I2C_CLIENT_TEN))
   1369			continue;
   1370		if (!i2c_dev->slave[i]) {
   1371			*id = i;
   1372			return 0;
   1373		}
   1374	}
   1375
   1376fail:
   1377	dev_err(dev, "Slave 0x%x could not be registered\n", slave->addr);
   1378
   1379	return -EINVAL;
   1380}
   1381
   1382static bool stm32f7_i2c_is_slave_registered(struct stm32f7_i2c_dev *i2c_dev)
   1383{
   1384	int i;
   1385
   1386	for (i = 0; i < STM32F7_I2C_MAX_SLAVE; i++) {
   1387		if (i2c_dev->slave[i])
   1388			return true;
   1389	}
   1390
   1391	return false;
   1392}
   1393
   1394static bool stm32f7_i2c_is_slave_busy(struct stm32f7_i2c_dev *i2c_dev)
   1395{
   1396	int i, busy;
   1397
   1398	busy = 0;
   1399	for (i = 0; i < STM32F7_I2C_MAX_SLAVE; i++) {
   1400		if (i2c_dev->slave[i])
   1401			busy++;
   1402	}
   1403
   1404	return i == busy;
   1405}
   1406
   1407static irqreturn_t stm32f7_i2c_slave_isr_event(struct stm32f7_i2c_dev *i2c_dev)
   1408{
   1409	void __iomem *base = i2c_dev->base;
   1410	u32 cr2, status, mask;
   1411	u8 val;
   1412	int ret;
   1413
   1414	status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
   1415
   1416	/* Slave transmitter mode */
   1417	if (status & STM32F7_I2C_ISR_TXIS) {
   1418		i2c_slave_event(i2c_dev->slave_running,
   1419				I2C_SLAVE_READ_PROCESSED,
   1420				&val);
   1421
   1422		/* Write data byte */
   1423		writel_relaxed(val, base + STM32F7_I2C_TXDR);
   1424	}
   1425
   1426	/* Transfer Complete Reload for Slave receiver mode */
   1427	if (status & STM32F7_I2C_ISR_TCR || status & STM32F7_I2C_ISR_RXNE) {
   1428		/*
   1429		 * Read data byte then set NBYTES to receive next byte or NACK
   1430		 * the current received byte
   1431		 */
   1432		val = readb_relaxed(i2c_dev->base + STM32F7_I2C_RXDR);
   1433		ret = i2c_slave_event(i2c_dev->slave_running,
   1434				      I2C_SLAVE_WRITE_RECEIVED,
   1435				      &val);
   1436		if (!ret) {
   1437			cr2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR2);
   1438			cr2 |= STM32F7_I2C_CR2_NBYTES(1);
   1439			writel_relaxed(cr2, i2c_dev->base + STM32F7_I2C_CR2);
   1440		} else {
   1441			mask = STM32F7_I2C_CR2_NACK;
   1442			stm32f7_i2c_set_bits(base + STM32F7_I2C_CR2, mask);
   1443		}
   1444	}
   1445
   1446	/* NACK received */
   1447	if (status & STM32F7_I2C_ISR_NACKF) {
   1448		dev_dbg(i2c_dev->dev, "<%s>: Receive NACK\n", __func__);
   1449		writel_relaxed(STM32F7_I2C_ICR_NACKCF, base + STM32F7_I2C_ICR);
   1450	}
   1451
   1452	/* STOP received */
   1453	if (status & STM32F7_I2C_ISR_STOPF) {
   1454		/* Disable interrupts */
   1455		stm32f7_i2c_disable_irq(i2c_dev, STM32F7_I2C_XFER_IRQ_MASK);
   1456
   1457		if (i2c_dev->slave_dir) {
   1458			/*
   1459			 * Flush TX buffer in order to not used the byte in
   1460			 * TXDR for the next transfer
   1461			 */
   1462			mask = STM32F7_I2C_ISR_TXE;
   1463			stm32f7_i2c_set_bits(base + STM32F7_I2C_ISR, mask);
   1464		}
   1465
   1466		/* Clear STOP flag */
   1467		writel_relaxed(STM32F7_I2C_ICR_STOPCF, base + STM32F7_I2C_ICR);
   1468
   1469		/* Notify i2c slave that a STOP flag has been detected */
   1470		i2c_slave_event(i2c_dev->slave_running, I2C_SLAVE_STOP, &val);
   1471
   1472		i2c_dev->slave_running = NULL;
   1473	}
   1474
   1475	/* Address match received */
   1476	if (status & STM32F7_I2C_ISR_ADDR)
   1477		stm32f7_i2c_slave_addr(i2c_dev);
   1478
   1479	return IRQ_HANDLED;
   1480}
   1481
   1482static irqreturn_t stm32f7_i2c_isr_event(int irq, void *data)
   1483{
   1484	struct stm32f7_i2c_dev *i2c_dev = data;
   1485	struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
   1486	struct stm32_i2c_dma *dma = i2c_dev->dma;
   1487	void __iomem *base = i2c_dev->base;
   1488	u32 status, mask;
   1489	int ret = IRQ_HANDLED;
   1490
   1491	/* Check if the interrupt if for a slave device */
   1492	if (!i2c_dev->master_mode) {
   1493		ret = stm32f7_i2c_slave_isr_event(i2c_dev);
   1494		return ret;
   1495	}
   1496
   1497	status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
   1498
   1499	/* Tx empty */
   1500	if (status & STM32F7_I2C_ISR_TXIS)
   1501		stm32f7_i2c_write_tx_data(i2c_dev);
   1502
   1503	/* RX not empty */
   1504	if (status & STM32F7_I2C_ISR_RXNE)
   1505		stm32f7_i2c_read_rx_data(i2c_dev);
   1506
   1507	/* NACK received */
   1508	if (status & STM32F7_I2C_ISR_NACKF) {
   1509		dev_dbg(i2c_dev->dev, "<%s>: Receive NACK (addr %x)\n",
   1510			__func__, f7_msg->addr);
   1511		writel_relaxed(STM32F7_I2C_ICR_NACKCF, base + STM32F7_I2C_ICR);
   1512		if (i2c_dev->use_dma) {
   1513			stm32f7_i2c_disable_dma_req(i2c_dev);
   1514			dmaengine_terminate_async(dma->chan_using);
   1515		}
   1516		f7_msg->result = -ENXIO;
   1517	}
   1518
   1519	/* STOP detection flag */
   1520	if (status & STM32F7_I2C_ISR_STOPF) {
   1521		/* Disable interrupts */
   1522		if (stm32f7_i2c_is_slave_registered(i2c_dev))
   1523			mask = STM32F7_I2C_XFER_IRQ_MASK;
   1524		else
   1525			mask = STM32F7_I2C_ALL_IRQ_MASK;
   1526		stm32f7_i2c_disable_irq(i2c_dev, mask);
   1527
   1528		/* Clear STOP flag */
   1529		writel_relaxed(STM32F7_I2C_ICR_STOPCF, base + STM32F7_I2C_ICR);
   1530
   1531		if (i2c_dev->use_dma && !f7_msg->result) {
   1532			ret = IRQ_WAKE_THREAD;
   1533		} else {
   1534			i2c_dev->master_mode = false;
   1535			complete(&i2c_dev->complete);
   1536		}
   1537	}
   1538
   1539	/* Transfer complete */
   1540	if (status & STM32F7_I2C_ISR_TC) {
   1541		if (f7_msg->stop) {
   1542			mask = STM32F7_I2C_CR2_STOP;
   1543			stm32f7_i2c_set_bits(base + STM32F7_I2C_CR2, mask);
   1544		} else if (i2c_dev->use_dma && !f7_msg->result) {
   1545			ret = IRQ_WAKE_THREAD;
   1546		} else if (f7_msg->smbus) {
   1547			stm32f7_i2c_smbus_rep_start(i2c_dev);
   1548		} else {
   1549			i2c_dev->msg_id++;
   1550			i2c_dev->msg++;
   1551			stm32f7_i2c_xfer_msg(i2c_dev, i2c_dev->msg);
   1552		}
   1553	}
   1554
   1555	if (status & STM32F7_I2C_ISR_TCR) {
   1556		if (f7_msg->smbus)
   1557			stm32f7_i2c_smbus_reload(i2c_dev);
   1558		else
   1559			stm32f7_i2c_reload(i2c_dev);
   1560	}
   1561
   1562	return ret;
   1563}
   1564
   1565static irqreturn_t stm32f7_i2c_isr_event_thread(int irq, void *data)
   1566{
   1567	struct stm32f7_i2c_dev *i2c_dev = data;
   1568	struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
   1569	struct stm32_i2c_dma *dma = i2c_dev->dma;
   1570	u32 status;
   1571	int ret;
   1572
   1573	/*
   1574	 * Wait for dma transfer completion before sending next message or
   1575	 * notity the end of xfer to the client
   1576	 */
   1577	ret = wait_for_completion_timeout(&i2c_dev->dma->dma_complete, HZ);
   1578	if (!ret) {
   1579		dev_dbg(i2c_dev->dev, "<%s>: Timed out\n", __func__);
   1580		stm32f7_i2c_disable_dma_req(i2c_dev);
   1581		dmaengine_terminate_async(dma->chan_using);
   1582		f7_msg->result = -ETIMEDOUT;
   1583	}
   1584
   1585	status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
   1586
   1587	if (status & STM32F7_I2C_ISR_TC) {
   1588		if (f7_msg->smbus) {
   1589			stm32f7_i2c_smbus_rep_start(i2c_dev);
   1590		} else {
   1591			i2c_dev->msg_id++;
   1592			i2c_dev->msg++;
   1593			stm32f7_i2c_xfer_msg(i2c_dev, i2c_dev->msg);
   1594		}
   1595	} else {
   1596		i2c_dev->master_mode = false;
   1597		complete(&i2c_dev->complete);
   1598	}
   1599
   1600	return IRQ_HANDLED;
   1601}
   1602
   1603static irqreturn_t stm32f7_i2c_isr_error(int irq, void *data)
   1604{
   1605	struct stm32f7_i2c_dev *i2c_dev = data;
   1606	struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
   1607	void __iomem *base = i2c_dev->base;
   1608	struct device *dev = i2c_dev->dev;
   1609	struct stm32_i2c_dma *dma = i2c_dev->dma;
   1610	u32 status;
   1611
   1612	status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
   1613
   1614	/* Bus error */
   1615	if (status & STM32F7_I2C_ISR_BERR) {
   1616		dev_err(dev, "<%s>: Bus error accessing addr 0x%x\n",
   1617			__func__, f7_msg->addr);
   1618		writel_relaxed(STM32F7_I2C_ICR_BERRCF, base + STM32F7_I2C_ICR);
   1619		stm32f7_i2c_release_bus(&i2c_dev->adap);
   1620		f7_msg->result = -EIO;
   1621	}
   1622
   1623	/* Arbitration loss */
   1624	if (status & STM32F7_I2C_ISR_ARLO) {
   1625		dev_dbg(dev, "<%s>: Arbitration loss accessing addr 0x%x\n",
   1626			__func__, f7_msg->addr);
   1627		writel_relaxed(STM32F7_I2C_ICR_ARLOCF, base + STM32F7_I2C_ICR);
   1628		f7_msg->result = -EAGAIN;
   1629	}
   1630
   1631	if (status & STM32F7_I2C_ISR_PECERR) {
   1632		dev_err(dev, "<%s>: PEC error in reception accessing addr 0x%x\n",
   1633			__func__, f7_msg->addr);
   1634		writel_relaxed(STM32F7_I2C_ICR_PECCF, base + STM32F7_I2C_ICR);
   1635		f7_msg->result = -EINVAL;
   1636	}
   1637
   1638	if (status & STM32F7_I2C_ISR_ALERT) {
   1639		dev_dbg(dev, "<%s>: SMBus alert received\n", __func__);
   1640		writel_relaxed(STM32F7_I2C_ICR_ALERTCF, base + STM32F7_I2C_ICR);
   1641		i2c_handle_smbus_alert(i2c_dev->alert->ara);
   1642		return IRQ_HANDLED;
   1643	}
   1644
   1645	if (!i2c_dev->slave_running) {
   1646		u32 mask;
   1647		/* Disable interrupts */
   1648		if (stm32f7_i2c_is_slave_registered(i2c_dev))
   1649			mask = STM32F7_I2C_XFER_IRQ_MASK;
   1650		else
   1651			mask = STM32F7_I2C_ALL_IRQ_MASK;
   1652		stm32f7_i2c_disable_irq(i2c_dev, mask);
   1653	}
   1654
   1655	/* Disable dma */
   1656	if (i2c_dev->use_dma) {
   1657		stm32f7_i2c_disable_dma_req(i2c_dev);
   1658		dmaengine_terminate_async(dma->chan_using);
   1659	}
   1660
   1661	i2c_dev->master_mode = false;
   1662	complete(&i2c_dev->complete);
   1663
   1664	return IRQ_HANDLED;
   1665}
   1666
   1667static int stm32f7_i2c_xfer(struct i2c_adapter *i2c_adap,
   1668			    struct i2c_msg msgs[], int num)
   1669{
   1670	struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(i2c_adap);
   1671	struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
   1672	struct stm32_i2c_dma *dma = i2c_dev->dma;
   1673	unsigned long time_left;
   1674	int ret;
   1675
   1676	i2c_dev->msg = msgs;
   1677	i2c_dev->msg_num = num;
   1678	i2c_dev->msg_id = 0;
   1679	f7_msg->smbus = false;
   1680
   1681	ret = pm_runtime_resume_and_get(i2c_dev->dev);
   1682	if (ret < 0)
   1683		return ret;
   1684
   1685	ret = stm32f7_i2c_wait_free_bus(i2c_dev);
   1686	if (ret)
   1687		goto pm_free;
   1688
   1689	stm32f7_i2c_xfer_msg(i2c_dev, msgs);
   1690
   1691	time_left = wait_for_completion_timeout(&i2c_dev->complete,
   1692						i2c_dev->adap.timeout);
   1693	ret = f7_msg->result;
   1694	if (ret) {
   1695		if (i2c_dev->use_dma)
   1696			dmaengine_synchronize(dma->chan_using);
   1697
   1698		/*
   1699		 * It is possible that some unsent data have already been
   1700		 * written into TXDR. To avoid sending old data in a
   1701		 * further transfer, flush TXDR in case of any error
   1702		 */
   1703		writel_relaxed(STM32F7_I2C_ISR_TXE,
   1704			       i2c_dev->base + STM32F7_I2C_ISR);
   1705		goto pm_free;
   1706	}
   1707
   1708	if (!time_left) {
   1709		dev_dbg(i2c_dev->dev, "Access to slave 0x%x timed out\n",
   1710			i2c_dev->msg->addr);
   1711		if (i2c_dev->use_dma)
   1712			dmaengine_terminate_sync(dma->chan_using);
   1713		stm32f7_i2c_wait_free_bus(i2c_dev);
   1714		ret = -ETIMEDOUT;
   1715	}
   1716
   1717pm_free:
   1718	pm_runtime_mark_last_busy(i2c_dev->dev);
   1719	pm_runtime_put_autosuspend(i2c_dev->dev);
   1720
   1721	return (ret < 0) ? ret : num;
   1722}
   1723
   1724static int stm32f7_i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr,
   1725				  unsigned short flags, char read_write,
   1726				  u8 command, int size,
   1727				  union i2c_smbus_data *data)
   1728{
   1729	struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(adapter);
   1730	struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
   1731	struct stm32_i2c_dma *dma = i2c_dev->dma;
   1732	struct device *dev = i2c_dev->dev;
   1733	unsigned long timeout;
   1734	int i, ret;
   1735
   1736	f7_msg->addr = addr;
   1737	f7_msg->size = size;
   1738	f7_msg->read_write = read_write;
   1739	f7_msg->smbus = true;
   1740
   1741	ret = pm_runtime_resume_and_get(dev);
   1742	if (ret < 0)
   1743		return ret;
   1744
   1745	ret = stm32f7_i2c_wait_free_bus(i2c_dev);
   1746	if (ret)
   1747		goto pm_free;
   1748
   1749	ret = stm32f7_i2c_smbus_xfer_msg(i2c_dev, flags, command, data);
   1750	if (ret)
   1751		goto pm_free;
   1752
   1753	timeout = wait_for_completion_timeout(&i2c_dev->complete,
   1754					      i2c_dev->adap.timeout);
   1755	ret = f7_msg->result;
   1756	if (ret) {
   1757		if (i2c_dev->use_dma)
   1758			dmaengine_synchronize(dma->chan_using);
   1759
   1760		/*
   1761		 * It is possible that some unsent data have already been
   1762		 * written into TXDR. To avoid sending old data in a
   1763		 * further transfer, flush TXDR in case of any error
   1764		 */
   1765		writel_relaxed(STM32F7_I2C_ISR_TXE,
   1766			       i2c_dev->base + STM32F7_I2C_ISR);
   1767		goto pm_free;
   1768	}
   1769
   1770	if (!timeout) {
   1771		dev_dbg(dev, "Access to slave 0x%x timed out\n", f7_msg->addr);
   1772		if (i2c_dev->use_dma)
   1773			dmaengine_terminate_sync(dma->chan_using);
   1774		stm32f7_i2c_wait_free_bus(i2c_dev);
   1775		ret = -ETIMEDOUT;
   1776		goto pm_free;
   1777	}
   1778
   1779	/* Check PEC */
   1780	if ((flags & I2C_CLIENT_PEC) && size != I2C_SMBUS_QUICK && read_write) {
   1781		ret = stm32f7_i2c_smbus_check_pec(i2c_dev);
   1782		if (ret)
   1783			goto pm_free;
   1784	}
   1785
   1786	if (read_write && size != I2C_SMBUS_QUICK) {
   1787		switch (size) {
   1788		case I2C_SMBUS_BYTE:
   1789		case I2C_SMBUS_BYTE_DATA:
   1790			data->byte = f7_msg->smbus_buf[0];
   1791		break;
   1792		case I2C_SMBUS_WORD_DATA:
   1793		case I2C_SMBUS_PROC_CALL:
   1794			data->word = f7_msg->smbus_buf[0] |
   1795				(f7_msg->smbus_buf[1] << 8);
   1796		break;
   1797		case I2C_SMBUS_BLOCK_DATA:
   1798		case I2C_SMBUS_BLOCK_PROC_CALL:
   1799		for (i = 0; i <= f7_msg->smbus_buf[0]; i++)
   1800			data->block[i] = f7_msg->smbus_buf[i];
   1801		break;
   1802		default:
   1803			dev_err(dev, "Unsupported smbus transaction\n");
   1804			ret = -EINVAL;
   1805		}
   1806	}
   1807
   1808pm_free:
   1809	pm_runtime_mark_last_busy(dev);
   1810	pm_runtime_put_autosuspend(dev);
   1811	return ret;
   1812}
   1813
   1814static void stm32f7_i2c_enable_wakeup(struct stm32f7_i2c_dev *i2c_dev,
   1815				      bool enable)
   1816{
   1817	void __iomem *base = i2c_dev->base;
   1818	u32 mask = STM32F7_I2C_CR1_WUPEN;
   1819
   1820	if (!i2c_dev->wakeup_src)
   1821		return;
   1822
   1823	if (enable) {
   1824		device_set_wakeup_enable(i2c_dev->dev, true);
   1825		stm32f7_i2c_set_bits(base + STM32F7_I2C_CR1, mask);
   1826	} else {
   1827		device_set_wakeup_enable(i2c_dev->dev, false);
   1828		stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR1, mask);
   1829	}
   1830}
   1831
   1832static int stm32f7_i2c_reg_slave(struct i2c_client *slave)
   1833{
   1834	struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(slave->adapter);
   1835	void __iomem *base = i2c_dev->base;
   1836	struct device *dev = i2c_dev->dev;
   1837	u32 oar1, oar2, mask;
   1838	int id, ret;
   1839
   1840	if (slave->flags & I2C_CLIENT_PEC) {
   1841		dev_err(dev, "SMBus PEC not supported in slave mode\n");
   1842		return -EINVAL;
   1843	}
   1844
   1845	if (stm32f7_i2c_is_slave_busy(i2c_dev)) {
   1846		dev_err(dev, "Too much slave registered\n");
   1847		return -EBUSY;
   1848	}
   1849
   1850	ret = stm32f7_i2c_get_free_slave_id(i2c_dev, slave, &id);
   1851	if (ret)
   1852		return ret;
   1853
   1854	ret = pm_runtime_resume_and_get(dev);
   1855	if (ret < 0)
   1856		return ret;
   1857
   1858	if (!stm32f7_i2c_is_slave_registered(i2c_dev))
   1859		stm32f7_i2c_enable_wakeup(i2c_dev, true);
   1860
   1861	switch (id) {
   1862	case 0:
   1863		/* Slave SMBus Host */
   1864		i2c_dev->slave[id] = slave;
   1865		break;
   1866
   1867	case 1:
   1868		/* Configure Own Address 1 */
   1869		oar1 = readl_relaxed(i2c_dev->base + STM32F7_I2C_OAR1);
   1870		oar1 &= ~STM32F7_I2C_OAR1_MASK;
   1871		if (slave->flags & I2C_CLIENT_TEN) {
   1872			oar1 |= STM32F7_I2C_OAR1_OA1_10(slave->addr);
   1873			oar1 |= STM32F7_I2C_OAR1_OA1MODE;
   1874		} else {
   1875			oar1 |= STM32F7_I2C_OAR1_OA1_7(slave->addr);
   1876		}
   1877		oar1 |= STM32F7_I2C_OAR1_OA1EN;
   1878		i2c_dev->slave[id] = slave;
   1879		writel_relaxed(oar1, i2c_dev->base + STM32F7_I2C_OAR1);
   1880		break;
   1881
   1882	case 2:
   1883		/* Configure Own Address 2 */
   1884		oar2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_OAR2);
   1885		oar2 &= ~STM32F7_I2C_OAR2_MASK;
   1886		if (slave->flags & I2C_CLIENT_TEN) {
   1887			ret = -EOPNOTSUPP;
   1888			goto pm_free;
   1889		}
   1890
   1891		oar2 |= STM32F7_I2C_OAR2_OA2_7(slave->addr);
   1892		oar2 |= STM32F7_I2C_OAR2_OA2EN;
   1893		i2c_dev->slave[id] = slave;
   1894		writel_relaxed(oar2, i2c_dev->base + STM32F7_I2C_OAR2);
   1895		break;
   1896
   1897	default:
   1898		dev_err(dev, "I2C slave id not supported\n");
   1899		ret = -ENODEV;
   1900		goto pm_free;
   1901	}
   1902
   1903	/* Enable ACK */
   1904	stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR2, STM32F7_I2C_CR2_NACK);
   1905
   1906	/* Enable Address match interrupt, error interrupt and enable I2C  */
   1907	mask = STM32F7_I2C_CR1_ADDRIE | STM32F7_I2C_CR1_ERRIE |
   1908		STM32F7_I2C_CR1_PE;
   1909	stm32f7_i2c_set_bits(base + STM32F7_I2C_CR1, mask);
   1910
   1911	ret = 0;
   1912pm_free:
   1913	if (!stm32f7_i2c_is_slave_registered(i2c_dev))
   1914		stm32f7_i2c_enable_wakeup(i2c_dev, false);
   1915
   1916	pm_runtime_mark_last_busy(dev);
   1917	pm_runtime_put_autosuspend(dev);
   1918
   1919	return ret;
   1920}
   1921
   1922static int stm32f7_i2c_unreg_slave(struct i2c_client *slave)
   1923{
   1924	struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(slave->adapter);
   1925	void __iomem *base = i2c_dev->base;
   1926	u32 mask;
   1927	int id, ret;
   1928
   1929	ret = stm32f7_i2c_get_slave_id(i2c_dev, slave, &id);
   1930	if (ret)
   1931		return ret;
   1932
   1933	WARN_ON(!i2c_dev->slave[id]);
   1934
   1935	ret = pm_runtime_resume_and_get(i2c_dev->dev);
   1936	if (ret < 0)
   1937		return ret;
   1938
   1939	if (id == 1) {
   1940		mask = STM32F7_I2C_OAR1_OA1EN;
   1941		stm32f7_i2c_clr_bits(base + STM32F7_I2C_OAR1, mask);
   1942	} else if (id == 2) {
   1943		mask = STM32F7_I2C_OAR2_OA2EN;
   1944		stm32f7_i2c_clr_bits(base + STM32F7_I2C_OAR2, mask);
   1945	}
   1946
   1947	i2c_dev->slave[id] = NULL;
   1948
   1949	if (!stm32f7_i2c_is_slave_registered(i2c_dev)) {
   1950		stm32f7_i2c_disable_irq(i2c_dev, STM32F7_I2C_ALL_IRQ_MASK);
   1951		stm32f7_i2c_enable_wakeup(i2c_dev, false);
   1952	}
   1953
   1954	pm_runtime_mark_last_busy(i2c_dev->dev);
   1955	pm_runtime_put_autosuspend(i2c_dev->dev);
   1956
   1957	return 0;
   1958}
   1959
   1960static int stm32f7_i2c_write_fm_plus_bits(struct stm32f7_i2c_dev *i2c_dev,
   1961					  bool enable)
   1962{
   1963	int ret;
   1964
   1965	if (i2c_dev->bus_rate <= I2C_MAX_FAST_MODE_FREQ ||
   1966	    IS_ERR_OR_NULL(i2c_dev->regmap))
   1967		/* Optional */
   1968		return 0;
   1969
   1970	if (i2c_dev->fmp_sreg == i2c_dev->fmp_creg)
   1971		ret = regmap_update_bits(i2c_dev->regmap,
   1972					 i2c_dev->fmp_sreg,
   1973					 i2c_dev->fmp_mask,
   1974					 enable ? i2c_dev->fmp_mask : 0);
   1975	else
   1976		ret = regmap_write(i2c_dev->regmap,
   1977				   enable ? i2c_dev->fmp_sreg :
   1978					    i2c_dev->fmp_creg,
   1979				   i2c_dev->fmp_mask);
   1980
   1981	return ret;
   1982}
   1983
   1984static int stm32f7_i2c_setup_fm_plus_bits(struct platform_device *pdev,
   1985					  struct stm32f7_i2c_dev *i2c_dev)
   1986{
   1987	struct device_node *np = pdev->dev.of_node;
   1988	int ret;
   1989
   1990	i2c_dev->regmap = syscon_regmap_lookup_by_phandle(np, "st,syscfg-fmp");
   1991	if (IS_ERR(i2c_dev->regmap))
   1992		/* Optional */
   1993		return 0;
   1994
   1995	ret = of_property_read_u32_index(np, "st,syscfg-fmp", 1,
   1996					 &i2c_dev->fmp_sreg);
   1997	if (ret)
   1998		return ret;
   1999
   2000	i2c_dev->fmp_creg = i2c_dev->fmp_sreg +
   2001			       i2c_dev->setup.fmp_clr_offset;
   2002
   2003	return of_property_read_u32_index(np, "st,syscfg-fmp", 2,
   2004					  &i2c_dev->fmp_mask);
   2005}
   2006
   2007static int stm32f7_i2c_enable_smbus_host(struct stm32f7_i2c_dev *i2c_dev)
   2008{
   2009	struct i2c_adapter *adap = &i2c_dev->adap;
   2010	void __iomem *base = i2c_dev->base;
   2011	struct i2c_client *client;
   2012
   2013	client = i2c_new_slave_host_notify_device(adap);
   2014	if (IS_ERR(client))
   2015		return PTR_ERR(client);
   2016
   2017	i2c_dev->host_notify_client = client;
   2018
   2019	/* Enable SMBus Host address */
   2020	stm32f7_i2c_set_bits(base + STM32F7_I2C_CR1, STM32F7_I2C_CR1_SMBHEN);
   2021
   2022	return 0;
   2023}
   2024
   2025static void stm32f7_i2c_disable_smbus_host(struct stm32f7_i2c_dev *i2c_dev)
   2026{
   2027	void __iomem *base = i2c_dev->base;
   2028
   2029	if (i2c_dev->host_notify_client) {
   2030		/* Disable SMBus Host address */
   2031		stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR1,
   2032				     STM32F7_I2C_CR1_SMBHEN);
   2033		i2c_free_slave_host_notify_device(i2c_dev->host_notify_client);
   2034	}
   2035}
   2036
   2037static int stm32f7_i2c_enable_smbus_alert(struct stm32f7_i2c_dev *i2c_dev)
   2038{
   2039	struct stm32f7_i2c_alert *alert;
   2040	struct i2c_adapter *adap = &i2c_dev->adap;
   2041	struct device *dev = i2c_dev->dev;
   2042	void __iomem *base = i2c_dev->base;
   2043
   2044	alert = devm_kzalloc(dev, sizeof(*alert), GFP_KERNEL);
   2045	if (!alert)
   2046		return -ENOMEM;
   2047
   2048	alert->ara = i2c_new_smbus_alert_device(adap, &alert->setup);
   2049	if (IS_ERR(alert->ara))
   2050		return PTR_ERR(alert->ara);
   2051
   2052	i2c_dev->alert = alert;
   2053
   2054	/* Enable SMBus Alert */
   2055	stm32f7_i2c_set_bits(base + STM32F7_I2C_CR1, STM32F7_I2C_CR1_ALERTEN);
   2056
   2057	return 0;
   2058}
   2059
   2060static void stm32f7_i2c_disable_smbus_alert(struct stm32f7_i2c_dev *i2c_dev)
   2061{
   2062	struct stm32f7_i2c_alert *alert = i2c_dev->alert;
   2063	void __iomem *base = i2c_dev->base;
   2064
   2065	if (alert) {
   2066		/* Disable SMBus Alert */
   2067		stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR1,
   2068				     STM32F7_I2C_CR1_ALERTEN);
   2069		i2c_unregister_device(alert->ara);
   2070	}
   2071}
   2072
   2073static u32 stm32f7_i2c_func(struct i2c_adapter *adap)
   2074{
   2075	struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(adap);
   2076
   2077	u32 func = I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR | I2C_FUNC_SLAVE |
   2078		   I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
   2079		   I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
   2080		   I2C_FUNC_SMBUS_BLOCK_DATA | I2C_FUNC_SMBUS_BLOCK_PROC_CALL |
   2081		   I2C_FUNC_SMBUS_PROC_CALL | I2C_FUNC_SMBUS_PEC |
   2082		   I2C_FUNC_SMBUS_I2C_BLOCK;
   2083
   2084	if (i2c_dev->smbus_mode)
   2085		func |= I2C_FUNC_SMBUS_HOST_NOTIFY;
   2086
   2087	return func;
   2088}
   2089
   2090static const struct i2c_algorithm stm32f7_i2c_algo = {
   2091	.master_xfer = stm32f7_i2c_xfer,
   2092	.smbus_xfer = stm32f7_i2c_smbus_xfer,
   2093	.functionality = stm32f7_i2c_func,
   2094	.reg_slave = stm32f7_i2c_reg_slave,
   2095	.unreg_slave = stm32f7_i2c_unreg_slave,
   2096};
   2097
   2098static int stm32f7_i2c_probe(struct platform_device *pdev)
   2099{
   2100	struct stm32f7_i2c_dev *i2c_dev;
   2101	const struct stm32f7_i2c_setup *setup;
   2102	struct resource *res;
   2103	struct i2c_adapter *adap;
   2104	struct reset_control *rst;
   2105	dma_addr_t phy_addr;
   2106	int irq_error, irq_event, ret;
   2107
   2108	i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL);
   2109	if (!i2c_dev)
   2110		return -ENOMEM;
   2111
   2112	i2c_dev->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
   2113	if (IS_ERR(i2c_dev->base))
   2114		return PTR_ERR(i2c_dev->base);
   2115	phy_addr = (dma_addr_t)res->start;
   2116
   2117	irq_event = platform_get_irq(pdev, 0);
   2118	if (irq_event <= 0)
   2119		return irq_event ? : -ENOENT;
   2120
   2121	irq_error = platform_get_irq(pdev, 1);
   2122	if (irq_error <= 0)
   2123		return irq_error ? : -ENOENT;
   2124
   2125	i2c_dev->wakeup_src = of_property_read_bool(pdev->dev.of_node,
   2126						    "wakeup-source");
   2127
   2128	i2c_dev->clk = devm_clk_get(&pdev->dev, NULL);
   2129	if (IS_ERR(i2c_dev->clk))
   2130		return dev_err_probe(&pdev->dev, PTR_ERR(i2c_dev->clk),
   2131				     "Failed to get controller clock\n");
   2132
   2133	ret = clk_prepare_enable(i2c_dev->clk);
   2134	if (ret) {
   2135		dev_err(&pdev->dev, "Failed to prepare_enable clock\n");
   2136		return ret;
   2137	}
   2138
   2139	rst = devm_reset_control_get(&pdev->dev, NULL);
   2140	if (IS_ERR(rst)) {
   2141		ret = dev_err_probe(&pdev->dev, PTR_ERR(rst),
   2142				    "Error: Missing reset ctrl\n");
   2143		goto clk_free;
   2144	}
   2145	reset_control_assert(rst);
   2146	udelay(2);
   2147	reset_control_deassert(rst);
   2148
   2149	i2c_dev->dev = &pdev->dev;
   2150
   2151	ret = devm_request_threaded_irq(&pdev->dev, irq_event,
   2152					stm32f7_i2c_isr_event,
   2153					stm32f7_i2c_isr_event_thread,
   2154					IRQF_ONESHOT,
   2155					pdev->name, i2c_dev);
   2156	if (ret) {
   2157		dev_err(&pdev->dev, "Failed to request irq event %i\n",
   2158			irq_event);
   2159		goto clk_free;
   2160	}
   2161
   2162	ret = devm_request_irq(&pdev->dev, irq_error, stm32f7_i2c_isr_error, 0,
   2163			       pdev->name, i2c_dev);
   2164	if (ret) {
   2165		dev_err(&pdev->dev, "Failed to request irq error %i\n",
   2166			irq_error);
   2167		goto clk_free;
   2168	}
   2169
   2170	setup = of_device_get_match_data(&pdev->dev);
   2171	if (!setup) {
   2172		dev_err(&pdev->dev, "Can't get device data\n");
   2173		ret = -ENODEV;
   2174		goto clk_free;
   2175	}
   2176	i2c_dev->setup = *setup;
   2177
   2178	ret = stm32f7_i2c_setup_timing(i2c_dev, &i2c_dev->setup);
   2179	if (ret)
   2180		goto clk_free;
   2181
   2182	/* Setup Fast mode plus if necessary */
   2183	if (i2c_dev->bus_rate > I2C_MAX_FAST_MODE_FREQ) {
   2184		ret = stm32f7_i2c_setup_fm_plus_bits(pdev, i2c_dev);
   2185		if (ret)
   2186			goto clk_free;
   2187		ret = stm32f7_i2c_write_fm_plus_bits(i2c_dev, true);
   2188		if (ret)
   2189			goto clk_free;
   2190	}
   2191
   2192	adap = &i2c_dev->adap;
   2193	i2c_set_adapdata(adap, i2c_dev);
   2194	snprintf(adap->name, sizeof(adap->name), "STM32F7 I2C(%pa)",
   2195		 &res->start);
   2196	adap->owner = THIS_MODULE;
   2197	adap->timeout = 2 * HZ;
   2198	adap->retries = 3;
   2199	adap->algo = &stm32f7_i2c_algo;
   2200	adap->dev.parent = &pdev->dev;
   2201	adap->dev.of_node = pdev->dev.of_node;
   2202
   2203	init_completion(&i2c_dev->complete);
   2204
   2205	/* Init DMA config if supported */
   2206	i2c_dev->dma = stm32_i2c_dma_request(i2c_dev->dev, phy_addr,
   2207					     STM32F7_I2C_TXDR,
   2208					     STM32F7_I2C_RXDR);
   2209	if (IS_ERR(i2c_dev->dma)) {
   2210		ret = PTR_ERR(i2c_dev->dma);
   2211		/* DMA support is optional, only report other errors */
   2212		if (ret != -ENODEV)
   2213			goto fmp_clear;
   2214		dev_dbg(i2c_dev->dev, "No DMA option: fallback using interrupts\n");
   2215		i2c_dev->dma = NULL;
   2216	}
   2217
   2218	if (i2c_dev->wakeup_src) {
   2219		device_set_wakeup_capable(i2c_dev->dev, true);
   2220
   2221		ret = dev_pm_set_wake_irq(i2c_dev->dev, irq_event);
   2222		if (ret) {
   2223			dev_err(i2c_dev->dev, "Failed to set wake up irq\n");
   2224			goto clr_wakeup_capable;
   2225		}
   2226	}
   2227
   2228	platform_set_drvdata(pdev, i2c_dev);
   2229
   2230	pm_runtime_set_autosuspend_delay(i2c_dev->dev,
   2231					 STM32F7_AUTOSUSPEND_DELAY);
   2232	pm_runtime_use_autosuspend(i2c_dev->dev);
   2233	pm_runtime_set_active(i2c_dev->dev);
   2234	pm_runtime_enable(i2c_dev->dev);
   2235
   2236	pm_runtime_get_noresume(&pdev->dev);
   2237
   2238	stm32f7_i2c_hw_config(i2c_dev);
   2239
   2240	i2c_dev->smbus_mode = of_property_read_bool(pdev->dev.of_node, "smbus");
   2241
   2242	ret = i2c_add_adapter(adap);
   2243	if (ret)
   2244		goto pm_disable;
   2245
   2246	if (i2c_dev->smbus_mode) {
   2247		ret = stm32f7_i2c_enable_smbus_host(i2c_dev);
   2248		if (ret) {
   2249			dev_err(i2c_dev->dev,
   2250				"failed to enable SMBus Host-Notify protocol (%d)\n",
   2251				ret);
   2252			goto i2c_adapter_remove;
   2253		}
   2254	}
   2255
   2256	if (of_property_read_bool(pdev->dev.of_node, "smbus-alert")) {
   2257		ret = stm32f7_i2c_enable_smbus_alert(i2c_dev);
   2258		if (ret) {
   2259			dev_err(i2c_dev->dev,
   2260				"failed to enable SMBus alert protocol (%d)\n",
   2261				ret);
   2262			goto i2c_disable_smbus_host;
   2263		}
   2264	}
   2265
   2266	dev_info(i2c_dev->dev, "STM32F7 I2C-%d bus adapter\n", adap->nr);
   2267
   2268	pm_runtime_mark_last_busy(i2c_dev->dev);
   2269	pm_runtime_put_autosuspend(i2c_dev->dev);
   2270
   2271	return 0;
   2272
   2273i2c_disable_smbus_host:
   2274	stm32f7_i2c_disable_smbus_host(i2c_dev);
   2275
   2276i2c_adapter_remove:
   2277	i2c_del_adapter(adap);
   2278
   2279pm_disable:
   2280	pm_runtime_put_noidle(i2c_dev->dev);
   2281	pm_runtime_disable(i2c_dev->dev);
   2282	pm_runtime_set_suspended(i2c_dev->dev);
   2283	pm_runtime_dont_use_autosuspend(i2c_dev->dev);
   2284
   2285	if (i2c_dev->wakeup_src)
   2286		dev_pm_clear_wake_irq(i2c_dev->dev);
   2287
   2288clr_wakeup_capable:
   2289	if (i2c_dev->wakeup_src)
   2290		device_set_wakeup_capable(i2c_dev->dev, false);
   2291
   2292	if (i2c_dev->dma) {
   2293		stm32_i2c_dma_free(i2c_dev->dma);
   2294		i2c_dev->dma = NULL;
   2295	}
   2296
   2297fmp_clear:
   2298	stm32f7_i2c_write_fm_plus_bits(i2c_dev, false);
   2299
   2300clk_free:
   2301	clk_disable_unprepare(i2c_dev->clk);
   2302
   2303	return ret;
   2304}
   2305
   2306static int stm32f7_i2c_remove(struct platform_device *pdev)
   2307{
   2308	struct stm32f7_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
   2309
   2310	stm32f7_i2c_disable_smbus_alert(i2c_dev);
   2311	stm32f7_i2c_disable_smbus_host(i2c_dev);
   2312
   2313	i2c_del_adapter(&i2c_dev->adap);
   2314	pm_runtime_get_sync(i2c_dev->dev);
   2315
   2316	if (i2c_dev->wakeup_src) {
   2317		dev_pm_clear_wake_irq(i2c_dev->dev);
   2318		/*
   2319		 * enforce that wakeup is disabled and that the device
   2320		 * is marked as non wakeup capable
   2321		 */
   2322		device_init_wakeup(i2c_dev->dev, false);
   2323	}
   2324
   2325	pm_runtime_put_noidle(i2c_dev->dev);
   2326	pm_runtime_disable(i2c_dev->dev);
   2327	pm_runtime_set_suspended(i2c_dev->dev);
   2328	pm_runtime_dont_use_autosuspend(i2c_dev->dev);
   2329
   2330	if (i2c_dev->dma) {
   2331		stm32_i2c_dma_free(i2c_dev->dma);
   2332		i2c_dev->dma = NULL;
   2333	}
   2334
   2335	stm32f7_i2c_write_fm_plus_bits(i2c_dev, false);
   2336
   2337	clk_disable_unprepare(i2c_dev->clk);
   2338
   2339	return 0;
   2340}
   2341
   2342static int __maybe_unused stm32f7_i2c_runtime_suspend(struct device *dev)
   2343{
   2344	struct stm32f7_i2c_dev *i2c_dev = dev_get_drvdata(dev);
   2345
   2346	if (!stm32f7_i2c_is_slave_registered(i2c_dev))
   2347		clk_disable_unprepare(i2c_dev->clk);
   2348
   2349	return 0;
   2350}
   2351
   2352static int __maybe_unused stm32f7_i2c_runtime_resume(struct device *dev)
   2353{
   2354	struct stm32f7_i2c_dev *i2c_dev = dev_get_drvdata(dev);
   2355	int ret;
   2356
   2357	if (!stm32f7_i2c_is_slave_registered(i2c_dev)) {
   2358		ret = clk_prepare_enable(i2c_dev->clk);
   2359		if (ret) {
   2360			dev_err(dev, "failed to prepare_enable clock\n");
   2361			return ret;
   2362		}
   2363	}
   2364
   2365	return 0;
   2366}
   2367
   2368static int __maybe_unused stm32f7_i2c_regs_backup(struct stm32f7_i2c_dev *i2c_dev)
   2369{
   2370	int ret;
   2371	struct stm32f7_i2c_regs *backup_regs = &i2c_dev->backup_regs;
   2372
   2373	ret = pm_runtime_resume_and_get(i2c_dev->dev);
   2374	if (ret < 0)
   2375		return ret;
   2376
   2377	backup_regs->cr1 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR1);
   2378	backup_regs->cr2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR2);
   2379	backup_regs->oar1 = readl_relaxed(i2c_dev->base + STM32F7_I2C_OAR1);
   2380	backup_regs->oar2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_OAR2);
   2381	backup_regs->tmgr = readl_relaxed(i2c_dev->base + STM32F7_I2C_TIMINGR);
   2382	stm32f7_i2c_write_fm_plus_bits(i2c_dev, false);
   2383
   2384	pm_runtime_put_sync(i2c_dev->dev);
   2385
   2386	return ret;
   2387}
   2388
   2389static int __maybe_unused stm32f7_i2c_regs_restore(struct stm32f7_i2c_dev *i2c_dev)
   2390{
   2391	u32 cr1;
   2392	int ret;
   2393	struct stm32f7_i2c_regs *backup_regs = &i2c_dev->backup_regs;
   2394
   2395	ret = pm_runtime_resume_and_get(i2c_dev->dev);
   2396	if (ret < 0)
   2397		return ret;
   2398
   2399	cr1 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR1);
   2400	if (cr1 & STM32F7_I2C_CR1_PE)
   2401		stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
   2402				     STM32F7_I2C_CR1_PE);
   2403
   2404	writel_relaxed(backup_regs->tmgr, i2c_dev->base + STM32F7_I2C_TIMINGR);
   2405	writel_relaxed(backup_regs->cr1 & ~STM32F7_I2C_CR1_PE,
   2406		       i2c_dev->base + STM32F7_I2C_CR1);
   2407	if (backup_regs->cr1 & STM32F7_I2C_CR1_PE)
   2408		stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
   2409				     STM32F7_I2C_CR1_PE);
   2410	writel_relaxed(backup_regs->cr2, i2c_dev->base + STM32F7_I2C_CR2);
   2411	writel_relaxed(backup_regs->oar1, i2c_dev->base + STM32F7_I2C_OAR1);
   2412	writel_relaxed(backup_regs->oar2, i2c_dev->base + STM32F7_I2C_OAR2);
   2413	stm32f7_i2c_write_fm_plus_bits(i2c_dev, true);
   2414
   2415	pm_runtime_put_sync(i2c_dev->dev);
   2416
   2417	return ret;
   2418}
   2419
   2420static int __maybe_unused stm32f7_i2c_suspend(struct device *dev)
   2421{
   2422	struct stm32f7_i2c_dev *i2c_dev = dev_get_drvdata(dev);
   2423	int ret;
   2424
   2425	i2c_mark_adapter_suspended(&i2c_dev->adap);
   2426
   2427	if (!device_may_wakeup(dev) && !device_wakeup_path(dev)) {
   2428		ret = stm32f7_i2c_regs_backup(i2c_dev);
   2429		if (ret < 0) {
   2430			i2c_mark_adapter_resumed(&i2c_dev->adap);
   2431			return ret;
   2432		}
   2433
   2434		pinctrl_pm_select_sleep_state(dev);
   2435		pm_runtime_force_suspend(dev);
   2436	}
   2437
   2438	return 0;
   2439}
   2440
   2441static int __maybe_unused stm32f7_i2c_resume(struct device *dev)
   2442{
   2443	struct stm32f7_i2c_dev *i2c_dev = dev_get_drvdata(dev);
   2444	int ret;
   2445
   2446	if (!device_may_wakeup(dev) && !device_wakeup_path(dev)) {
   2447		ret = pm_runtime_force_resume(dev);
   2448		if (ret < 0)
   2449			return ret;
   2450		pinctrl_pm_select_default_state(dev);
   2451
   2452		ret = stm32f7_i2c_regs_restore(i2c_dev);
   2453		if (ret < 0)
   2454			return ret;
   2455	}
   2456
   2457	i2c_mark_adapter_resumed(&i2c_dev->adap);
   2458
   2459	return 0;
   2460}
   2461
   2462static const struct dev_pm_ops stm32f7_i2c_pm_ops = {
   2463	SET_RUNTIME_PM_OPS(stm32f7_i2c_runtime_suspend,
   2464			   stm32f7_i2c_runtime_resume, NULL)
   2465	SET_SYSTEM_SLEEP_PM_OPS(stm32f7_i2c_suspend, stm32f7_i2c_resume)
   2466};
   2467
   2468static const struct of_device_id stm32f7_i2c_match[] = {
   2469	{ .compatible = "st,stm32f7-i2c", .data = &stm32f7_setup},
   2470	{ .compatible = "st,stm32mp15-i2c", .data = &stm32mp15_setup},
   2471	{},
   2472};
   2473MODULE_DEVICE_TABLE(of, stm32f7_i2c_match);
   2474
   2475static struct platform_driver stm32f7_i2c_driver = {
   2476	.driver = {
   2477		.name = "stm32f7-i2c",
   2478		.of_match_table = stm32f7_i2c_match,
   2479		.pm = &stm32f7_i2c_pm_ops,
   2480	},
   2481	.probe = stm32f7_i2c_probe,
   2482	.remove = stm32f7_i2c_remove,
   2483};
   2484
   2485module_platform_driver(stm32f7_i2c_driver);
   2486
   2487MODULE_AUTHOR("M'boumba Cedric Madianga <cedric.madianga@gmail.com>");
   2488MODULE_DESCRIPTION("STMicroelectronics STM32F7 I2C driver");
   2489MODULE_LICENSE("GPL v2");