xref: /OK3568_Linux_fs/kernel/drivers/i2c/busses/i2c-stm32f4.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Driver for STMicroelectronics STM32 I2C controller
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * This I2C controller is described in the STM32F429/439 Soc reference manual.
6*4882a593Smuzhiyun  * Please see below a link to the documentation:
7*4882a593Smuzhiyun  * http://www.st.com/resource/en/reference_manual/DM00031020.pdf
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * Copyright (C) M'boumba Cedric Madianga 2016
10*4882a593Smuzhiyun  * Copyright (C) STMicroelectronics 2017
11*4882a593Smuzhiyun  * Author: M'boumba Cedric Madianga <cedric.madianga@gmail.com>
12*4882a593Smuzhiyun  *
13*4882a593Smuzhiyun  * This driver is based on i2c-st.c
14*4882a593Smuzhiyun  *
15*4882a593Smuzhiyun  */
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #include <linux/clk.h>
18*4882a593Smuzhiyun #include <linux/delay.h>
19*4882a593Smuzhiyun #include <linux/err.h>
20*4882a593Smuzhiyun #include <linux/i2c.h>
21*4882a593Smuzhiyun #include <linux/interrupt.h>
22*4882a593Smuzhiyun #include <linux/io.h>
23*4882a593Smuzhiyun #include <linux/iopoll.h>
24*4882a593Smuzhiyun #include <linux/module.h>
25*4882a593Smuzhiyun #include <linux/of_address.h>
26*4882a593Smuzhiyun #include <linux/of_irq.h>
27*4882a593Smuzhiyun #include <linux/of.h>
28*4882a593Smuzhiyun #include <linux/platform_device.h>
29*4882a593Smuzhiyun #include <linux/reset.h>
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun #include "i2c-stm32.h"
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun /* STM32F4 I2C offset registers */
34*4882a593Smuzhiyun #define STM32F4_I2C_CR1			0x00
35*4882a593Smuzhiyun #define STM32F4_I2C_CR2			0x04
36*4882a593Smuzhiyun #define STM32F4_I2C_DR			0x10
37*4882a593Smuzhiyun #define STM32F4_I2C_SR1			0x14
38*4882a593Smuzhiyun #define STM32F4_I2C_SR2			0x18
39*4882a593Smuzhiyun #define STM32F4_I2C_CCR			0x1C
40*4882a593Smuzhiyun #define STM32F4_I2C_TRISE		0x20
41*4882a593Smuzhiyun #define STM32F4_I2C_FLTR		0x24
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun /* STM32F4 I2C control 1*/
44*4882a593Smuzhiyun #define STM32F4_I2C_CR1_POS		BIT(11)
45*4882a593Smuzhiyun #define STM32F4_I2C_CR1_ACK		BIT(10)
46*4882a593Smuzhiyun #define STM32F4_I2C_CR1_STOP		BIT(9)
47*4882a593Smuzhiyun #define STM32F4_I2C_CR1_START		BIT(8)
48*4882a593Smuzhiyun #define STM32F4_I2C_CR1_PE		BIT(0)
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun /* STM32F4 I2C control 2 */
51*4882a593Smuzhiyun #define STM32F4_I2C_CR2_FREQ_MASK	GENMASK(5, 0)
52*4882a593Smuzhiyun #define STM32F4_I2C_CR2_FREQ(n)		((n) & STM32F4_I2C_CR2_FREQ_MASK)
53*4882a593Smuzhiyun #define STM32F4_I2C_CR2_ITBUFEN		BIT(10)
54*4882a593Smuzhiyun #define STM32F4_I2C_CR2_ITEVTEN		BIT(9)
55*4882a593Smuzhiyun #define STM32F4_I2C_CR2_ITERREN		BIT(8)
56*4882a593Smuzhiyun #define STM32F4_I2C_CR2_IRQ_MASK	(STM32F4_I2C_CR2_ITBUFEN | \
57*4882a593Smuzhiyun 					 STM32F4_I2C_CR2_ITEVTEN | \
58*4882a593Smuzhiyun 					 STM32F4_I2C_CR2_ITERREN)
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun /* STM32F4 I2C Status 1 */
61*4882a593Smuzhiyun #define STM32F4_I2C_SR1_AF		BIT(10)
62*4882a593Smuzhiyun #define STM32F4_I2C_SR1_ARLO		BIT(9)
63*4882a593Smuzhiyun #define STM32F4_I2C_SR1_BERR		BIT(8)
64*4882a593Smuzhiyun #define STM32F4_I2C_SR1_TXE		BIT(7)
65*4882a593Smuzhiyun #define STM32F4_I2C_SR1_RXNE		BIT(6)
66*4882a593Smuzhiyun #define STM32F4_I2C_SR1_BTF		BIT(2)
67*4882a593Smuzhiyun #define STM32F4_I2C_SR1_ADDR		BIT(1)
68*4882a593Smuzhiyun #define STM32F4_I2C_SR1_SB		BIT(0)
69*4882a593Smuzhiyun #define STM32F4_I2C_SR1_ITEVTEN_MASK	(STM32F4_I2C_SR1_BTF | \
70*4882a593Smuzhiyun 					 STM32F4_I2C_SR1_ADDR | \
71*4882a593Smuzhiyun 					 STM32F4_I2C_SR1_SB)
72*4882a593Smuzhiyun #define STM32F4_I2C_SR1_ITBUFEN_MASK	(STM32F4_I2C_SR1_TXE | \
73*4882a593Smuzhiyun 					 STM32F4_I2C_SR1_RXNE)
74*4882a593Smuzhiyun #define STM32F4_I2C_SR1_ITERREN_MASK	(STM32F4_I2C_SR1_AF | \
75*4882a593Smuzhiyun 					 STM32F4_I2C_SR1_ARLO | \
76*4882a593Smuzhiyun 					 STM32F4_I2C_SR1_BERR)
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun /* STM32F4 I2C Status 2 */
79*4882a593Smuzhiyun #define STM32F4_I2C_SR2_BUSY		BIT(1)
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun /* STM32F4 I2C Control Clock */
82*4882a593Smuzhiyun #define STM32F4_I2C_CCR_CCR_MASK	GENMASK(11, 0)
83*4882a593Smuzhiyun #define STM32F4_I2C_CCR_CCR(n)		((n) & STM32F4_I2C_CCR_CCR_MASK)
84*4882a593Smuzhiyun #define STM32F4_I2C_CCR_FS		BIT(15)
85*4882a593Smuzhiyun #define STM32F4_I2C_CCR_DUTY		BIT(14)
86*4882a593Smuzhiyun 
87*4882a593Smuzhiyun /* STM32F4 I2C Trise */
88*4882a593Smuzhiyun #define STM32F4_I2C_TRISE_VALUE_MASK	GENMASK(5, 0)
89*4882a593Smuzhiyun #define STM32F4_I2C_TRISE_VALUE(n)	((n) & STM32F4_I2C_TRISE_VALUE_MASK)
90*4882a593Smuzhiyun 
91*4882a593Smuzhiyun #define STM32F4_I2C_MIN_STANDARD_FREQ	2U
92*4882a593Smuzhiyun #define STM32F4_I2C_MIN_FAST_FREQ	6U
93*4882a593Smuzhiyun #define STM32F4_I2C_MAX_FREQ		46U
94*4882a593Smuzhiyun #define HZ_TO_MHZ			1000000
95*4882a593Smuzhiyun 
96*4882a593Smuzhiyun /**
97*4882a593Smuzhiyun  * struct stm32f4_i2c_msg - client specific data
98*4882a593Smuzhiyun  * @addr: 8-bit slave addr, including r/w bit
99*4882a593Smuzhiyun  * @count: number of bytes to be transferred
100*4882a593Smuzhiyun  * @buf: data buffer
101*4882a593Smuzhiyun  * @result: result of the transfer
102*4882a593Smuzhiyun  * @stop: last I2C msg to be sent, i.e. STOP to be generated
103*4882a593Smuzhiyun  */
104*4882a593Smuzhiyun struct stm32f4_i2c_msg {
105*4882a593Smuzhiyun 	u8 addr;
106*4882a593Smuzhiyun 	u32 count;
107*4882a593Smuzhiyun 	u8 *buf;
108*4882a593Smuzhiyun 	int result;
109*4882a593Smuzhiyun 	bool stop;
110*4882a593Smuzhiyun };
111*4882a593Smuzhiyun 
112*4882a593Smuzhiyun /**
113*4882a593Smuzhiyun  * struct stm32f4_i2c_dev - private data of the controller
114*4882a593Smuzhiyun  * @adap: I2C adapter for this controller
115*4882a593Smuzhiyun  * @dev: device for this controller
116*4882a593Smuzhiyun  * @base: virtual memory area
117*4882a593Smuzhiyun  * @complete: completion of I2C message
118*4882a593Smuzhiyun  * @clk: hw i2c clock
119*4882a593Smuzhiyun  * @speed: I2C clock frequency of the controller. Standard or Fast are supported
120*4882a593Smuzhiyun  * @parent_rate: I2C clock parent rate in MHz
121*4882a593Smuzhiyun  * @msg: I2C transfer information
122*4882a593Smuzhiyun  */
123*4882a593Smuzhiyun struct stm32f4_i2c_dev {
124*4882a593Smuzhiyun 	struct i2c_adapter adap;
125*4882a593Smuzhiyun 	struct device *dev;
126*4882a593Smuzhiyun 	void __iomem *base;
127*4882a593Smuzhiyun 	struct completion complete;
128*4882a593Smuzhiyun 	struct clk *clk;
129*4882a593Smuzhiyun 	int speed;
130*4882a593Smuzhiyun 	int parent_rate;
131*4882a593Smuzhiyun 	struct stm32f4_i2c_msg msg;
132*4882a593Smuzhiyun };
133*4882a593Smuzhiyun 
stm32f4_i2c_set_bits(void __iomem * reg,u32 mask)134*4882a593Smuzhiyun static inline void stm32f4_i2c_set_bits(void __iomem *reg, u32 mask)
135*4882a593Smuzhiyun {
136*4882a593Smuzhiyun 	writel_relaxed(readl_relaxed(reg) | mask, reg);
137*4882a593Smuzhiyun }
138*4882a593Smuzhiyun 
stm32f4_i2c_clr_bits(void __iomem * reg,u32 mask)139*4882a593Smuzhiyun static inline void stm32f4_i2c_clr_bits(void __iomem *reg, u32 mask)
140*4882a593Smuzhiyun {
141*4882a593Smuzhiyun 	writel_relaxed(readl_relaxed(reg) & ~mask, reg);
142*4882a593Smuzhiyun }
143*4882a593Smuzhiyun 
stm32f4_i2c_disable_irq(struct stm32f4_i2c_dev * i2c_dev)144*4882a593Smuzhiyun static void stm32f4_i2c_disable_irq(struct stm32f4_i2c_dev *i2c_dev)
145*4882a593Smuzhiyun {
146*4882a593Smuzhiyun 	void __iomem *reg = i2c_dev->base + STM32F4_I2C_CR2;
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun 	stm32f4_i2c_clr_bits(reg, STM32F4_I2C_CR2_IRQ_MASK);
149*4882a593Smuzhiyun }
150*4882a593Smuzhiyun 
stm32f4_i2c_set_periph_clk_freq(struct stm32f4_i2c_dev * i2c_dev)151*4882a593Smuzhiyun static int stm32f4_i2c_set_periph_clk_freq(struct stm32f4_i2c_dev *i2c_dev)
152*4882a593Smuzhiyun {
153*4882a593Smuzhiyun 	u32 freq;
154*4882a593Smuzhiyun 	u32 cr2 = 0;
155*4882a593Smuzhiyun 
156*4882a593Smuzhiyun 	i2c_dev->parent_rate = clk_get_rate(i2c_dev->clk);
157*4882a593Smuzhiyun 	freq = DIV_ROUND_UP(i2c_dev->parent_rate, HZ_TO_MHZ);
158*4882a593Smuzhiyun 
159*4882a593Smuzhiyun 	if (i2c_dev->speed == STM32_I2C_SPEED_STANDARD) {
160*4882a593Smuzhiyun 		/*
161*4882a593Smuzhiyun 		 * To reach 100 kHz, the parent clk frequency should be between
162*4882a593Smuzhiyun 		 * a minimum value of 2 MHz and a maximum value of 46 MHz due
163*4882a593Smuzhiyun 		 * to hardware limitation
164*4882a593Smuzhiyun 		 */
165*4882a593Smuzhiyun 		if (freq < STM32F4_I2C_MIN_STANDARD_FREQ ||
166*4882a593Smuzhiyun 		    freq > STM32F4_I2C_MAX_FREQ) {
167*4882a593Smuzhiyun 			dev_err(i2c_dev->dev,
168*4882a593Smuzhiyun 				"bad parent clk freq for standard mode\n");
169*4882a593Smuzhiyun 			return -EINVAL;
170*4882a593Smuzhiyun 		}
171*4882a593Smuzhiyun 	} else {
172*4882a593Smuzhiyun 		/*
173*4882a593Smuzhiyun 		 * To be as close as possible to 400 kHz, the parent clk
174*4882a593Smuzhiyun 		 * frequency should be between a minimum value of 6 MHz and a
175*4882a593Smuzhiyun 		 * maximum value of 46 MHz due to hardware limitation
176*4882a593Smuzhiyun 		 */
177*4882a593Smuzhiyun 		if (freq < STM32F4_I2C_MIN_FAST_FREQ ||
178*4882a593Smuzhiyun 		    freq > STM32F4_I2C_MAX_FREQ) {
179*4882a593Smuzhiyun 			dev_err(i2c_dev->dev,
180*4882a593Smuzhiyun 				"bad parent clk freq for fast mode\n");
181*4882a593Smuzhiyun 			return -EINVAL;
182*4882a593Smuzhiyun 		}
183*4882a593Smuzhiyun 	}
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun 	cr2 |= STM32F4_I2C_CR2_FREQ(freq);
186*4882a593Smuzhiyun 	writel_relaxed(cr2, i2c_dev->base + STM32F4_I2C_CR2);
187*4882a593Smuzhiyun 
188*4882a593Smuzhiyun 	return 0;
189*4882a593Smuzhiyun }
190*4882a593Smuzhiyun 
stm32f4_i2c_set_rise_time(struct stm32f4_i2c_dev * i2c_dev)191*4882a593Smuzhiyun static void stm32f4_i2c_set_rise_time(struct stm32f4_i2c_dev *i2c_dev)
192*4882a593Smuzhiyun {
193*4882a593Smuzhiyun 	u32 freq = DIV_ROUND_UP(i2c_dev->parent_rate, HZ_TO_MHZ);
194*4882a593Smuzhiyun 	u32 trise;
195*4882a593Smuzhiyun 
196*4882a593Smuzhiyun 	/*
197*4882a593Smuzhiyun 	 * These bits must be programmed with the maximum SCL rise time given in
198*4882a593Smuzhiyun 	 * the I2C bus specification, incremented by 1.
199*4882a593Smuzhiyun 	 *
200*4882a593Smuzhiyun 	 * In standard mode, the maximum allowed SCL rise time is 1000 ns.
201*4882a593Smuzhiyun 	 * If, in the I2C_CR2 register, the value of FREQ[5:0] bits is equal to
202*4882a593Smuzhiyun 	 * 0x08 so period = 125 ns therefore the TRISE[5:0] bits must be
203*4882a593Smuzhiyun 	 * programmed with 0x9. (1000 ns / 125 ns + 1)
204*4882a593Smuzhiyun 	 * So, for I2C standard mode TRISE = FREQ[5:0] + 1
205*4882a593Smuzhiyun 	 *
206*4882a593Smuzhiyun 	 * In fast mode, the maximum allowed SCL rise time is 300 ns.
207*4882a593Smuzhiyun 	 * If, in the I2C_CR2 register, the value of FREQ[5:0] bits is equal to
208*4882a593Smuzhiyun 	 * 0x08 so period = 125 ns therefore the TRISE[5:0] bits must be
209*4882a593Smuzhiyun 	 * programmed with 0x3. (300 ns / 125 ns + 1)
210*4882a593Smuzhiyun 	 * So, for I2C fast mode TRISE = FREQ[5:0] * 300 / 1000 + 1
211*4882a593Smuzhiyun 	 *
212*4882a593Smuzhiyun 	 * Function stm32f4_i2c_set_periph_clk_freq made sure that parent rate
213*4882a593Smuzhiyun 	 * is not higher than 46 MHz . As a result trise is at most 4 bits wide
214*4882a593Smuzhiyun 	 * and so fits into the TRISE bits [5:0].
215*4882a593Smuzhiyun 	 */
216*4882a593Smuzhiyun 	if (i2c_dev->speed == STM32_I2C_SPEED_STANDARD)
217*4882a593Smuzhiyun 		trise = freq + 1;
218*4882a593Smuzhiyun 	else
219*4882a593Smuzhiyun 		trise = freq * 3 / 10 + 1;
220*4882a593Smuzhiyun 
221*4882a593Smuzhiyun 	writel_relaxed(STM32F4_I2C_TRISE_VALUE(trise),
222*4882a593Smuzhiyun 		       i2c_dev->base + STM32F4_I2C_TRISE);
223*4882a593Smuzhiyun }
224*4882a593Smuzhiyun 
stm32f4_i2c_set_speed_mode(struct stm32f4_i2c_dev * i2c_dev)225*4882a593Smuzhiyun static void stm32f4_i2c_set_speed_mode(struct stm32f4_i2c_dev *i2c_dev)
226*4882a593Smuzhiyun {
227*4882a593Smuzhiyun 	u32 val;
228*4882a593Smuzhiyun 	u32 ccr = 0;
229*4882a593Smuzhiyun 
230*4882a593Smuzhiyun 	if (i2c_dev->speed == STM32_I2C_SPEED_STANDARD) {
231*4882a593Smuzhiyun 		/*
232*4882a593Smuzhiyun 		 * In standard mode:
233*4882a593Smuzhiyun 		 * t_scl_high = t_scl_low = CCR * I2C parent clk period
234*4882a593Smuzhiyun 		 * So to reach 100 kHz, we have:
235*4882a593Smuzhiyun 		 * CCR = I2C parent rate / (100 kHz * 2)
236*4882a593Smuzhiyun 		 *
237*4882a593Smuzhiyun 		 * For example with parent rate = 2 MHz:
238*4882a593Smuzhiyun 		 * CCR = 2000000 / (100000 * 2) = 10
239*4882a593Smuzhiyun 		 * t_scl_high = t_scl_low = 10 * (1 / 2000000) = 5000 ns
240*4882a593Smuzhiyun 		 * t_scl_high + t_scl_low = 10000 ns so 100 kHz is reached
241*4882a593Smuzhiyun 		 *
242*4882a593Smuzhiyun 		 * Function stm32f4_i2c_set_periph_clk_freq made sure that
243*4882a593Smuzhiyun 		 * parent rate is not higher than 46 MHz . As a result val
244*4882a593Smuzhiyun 		 * is at most 8 bits wide and so fits into the CCR bits [11:0].
245*4882a593Smuzhiyun 		 */
246*4882a593Smuzhiyun 		val = i2c_dev->parent_rate / (I2C_MAX_STANDARD_MODE_FREQ * 2);
247*4882a593Smuzhiyun 	} else {
248*4882a593Smuzhiyun 		/*
249*4882a593Smuzhiyun 		 * In fast mode, we compute CCR with duty = 0 as with low
250*4882a593Smuzhiyun 		 * frequencies we are not able to reach 400 kHz.
251*4882a593Smuzhiyun 		 * In that case:
252*4882a593Smuzhiyun 		 * t_scl_high = CCR * I2C parent clk period
253*4882a593Smuzhiyun 		 * t_scl_low = 2 * CCR * I2C parent clk period
254*4882a593Smuzhiyun 		 * So, CCR = I2C parent rate / (400 kHz * 3)
255*4882a593Smuzhiyun 		 *
256*4882a593Smuzhiyun 		 * For example with parent rate = 6 MHz:
257*4882a593Smuzhiyun 		 * CCR = 6000000 / (400000 * 3) = 5
258*4882a593Smuzhiyun 		 * t_scl_high = 5 * (1 / 6000000) = 833 ns > 600 ns
259*4882a593Smuzhiyun 		 * t_scl_low = 2 * 5 * (1 / 6000000) = 1667 ns > 1300 ns
260*4882a593Smuzhiyun 		 * t_scl_high + t_scl_low = 2500 ns so 400 kHz is reached
261*4882a593Smuzhiyun 		 *
262*4882a593Smuzhiyun 		 * Function stm32f4_i2c_set_periph_clk_freq made sure that
263*4882a593Smuzhiyun 		 * parent rate is not higher than 46 MHz . As a result val
264*4882a593Smuzhiyun 		 * is at most 6 bits wide and so fits into the CCR bits [11:0].
265*4882a593Smuzhiyun 		 */
266*4882a593Smuzhiyun 		val = DIV_ROUND_UP(i2c_dev->parent_rate, I2C_MAX_FAST_MODE_FREQ * 3);
267*4882a593Smuzhiyun 
268*4882a593Smuzhiyun 		/* Select Fast mode */
269*4882a593Smuzhiyun 		ccr |= STM32F4_I2C_CCR_FS;
270*4882a593Smuzhiyun 	}
271*4882a593Smuzhiyun 
272*4882a593Smuzhiyun 	ccr |= STM32F4_I2C_CCR_CCR(val);
273*4882a593Smuzhiyun 	writel_relaxed(ccr, i2c_dev->base + STM32F4_I2C_CCR);
274*4882a593Smuzhiyun }
275*4882a593Smuzhiyun 
276*4882a593Smuzhiyun /**
277*4882a593Smuzhiyun  * stm32f4_i2c_hw_config() - Prepare I2C block
278*4882a593Smuzhiyun  * @i2c_dev: Controller's private data
279*4882a593Smuzhiyun  */
stm32f4_i2c_hw_config(struct stm32f4_i2c_dev * i2c_dev)280*4882a593Smuzhiyun static int stm32f4_i2c_hw_config(struct stm32f4_i2c_dev *i2c_dev)
281*4882a593Smuzhiyun {
282*4882a593Smuzhiyun 	int ret;
283*4882a593Smuzhiyun 
284*4882a593Smuzhiyun 	ret = stm32f4_i2c_set_periph_clk_freq(i2c_dev);
285*4882a593Smuzhiyun 	if (ret)
286*4882a593Smuzhiyun 		return ret;
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun 	stm32f4_i2c_set_rise_time(i2c_dev);
289*4882a593Smuzhiyun 
290*4882a593Smuzhiyun 	stm32f4_i2c_set_speed_mode(i2c_dev);
291*4882a593Smuzhiyun 
292*4882a593Smuzhiyun 	/* Enable I2C */
293*4882a593Smuzhiyun 	writel_relaxed(STM32F4_I2C_CR1_PE, i2c_dev->base + STM32F4_I2C_CR1);
294*4882a593Smuzhiyun 
295*4882a593Smuzhiyun 	return 0;
296*4882a593Smuzhiyun }
297*4882a593Smuzhiyun 
stm32f4_i2c_wait_free_bus(struct stm32f4_i2c_dev * i2c_dev)298*4882a593Smuzhiyun static int stm32f4_i2c_wait_free_bus(struct stm32f4_i2c_dev *i2c_dev)
299*4882a593Smuzhiyun {
300*4882a593Smuzhiyun 	u32 status;
301*4882a593Smuzhiyun 	int ret;
302*4882a593Smuzhiyun 
303*4882a593Smuzhiyun 	ret = readl_relaxed_poll_timeout(i2c_dev->base + STM32F4_I2C_SR2,
304*4882a593Smuzhiyun 					 status,
305*4882a593Smuzhiyun 					 !(status & STM32F4_I2C_SR2_BUSY),
306*4882a593Smuzhiyun 					 10, 1000);
307*4882a593Smuzhiyun 	if (ret) {
308*4882a593Smuzhiyun 		dev_dbg(i2c_dev->dev, "bus not free\n");
309*4882a593Smuzhiyun 		ret = -EBUSY;
310*4882a593Smuzhiyun 	}
311*4882a593Smuzhiyun 
312*4882a593Smuzhiyun 	return ret;
313*4882a593Smuzhiyun }
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun /**
316*4882a593Smuzhiyun  * stm32f4_i2c_write_ byte() - Write a byte in the data register
317*4882a593Smuzhiyun  * @i2c_dev: Controller's private data
318*4882a593Smuzhiyun  * @byte: Data to write in the register
319*4882a593Smuzhiyun  */
stm32f4_i2c_write_byte(struct stm32f4_i2c_dev * i2c_dev,u8 byte)320*4882a593Smuzhiyun static void stm32f4_i2c_write_byte(struct stm32f4_i2c_dev *i2c_dev, u8 byte)
321*4882a593Smuzhiyun {
322*4882a593Smuzhiyun 	writel_relaxed(byte, i2c_dev->base + STM32F4_I2C_DR);
323*4882a593Smuzhiyun }
324*4882a593Smuzhiyun 
325*4882a593Smuzhiyun /**
326*4882a593Smuzhiyun  * stm32f4_i2c_write_msg() - Fill the data register in write mode
327*4882a593Smuzhiyun  * @i2c_dev: Controller's private data
328*4882a593Smuzhiyun  *
329*4882a593Smuzhiyun  * This function fills the data register with I2C transfer buffer
330*4882a593Smuzhiyun  */
stm32f4_i2c_write_msg(struct stm32f4_i2c_dev * i2c_dev)331*4882a593Smuzhiyun static void stm32f4_i2c_write_msg(struct stm32f4_i2c_dev *i2c_dev)
332*4882a593Smuzhiyun {
333*4882a593Smuzhiyun 	struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
334*4882a593Smuzhiyun 
335*4882a593Smuzhiyun 	stm32f4_i2c_write_byte(i2c_dev, *msg->buf++);
336*4882a593Smuzhiyun 	msg->count--;
337*4882a593Smuzhiyun }
338*4882a593Smuzhiyun 
stm32f4_i2c_read_msg(struct stm32f4_i2c_dev * i2c_dev)339*4882a593Smuzhiyun static void stm32f4_i2c_read_msg(struct stm32f4_i2c_dev *i2c_dev)
340*4882a593Smuzhiyun {
341*4882a593Smuzhiyun 	struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
342*4882a593Smuzhiyun 	u32 rbuf;
343*4882a593Smuzhiyun 
344*4882a593Smuzhiyun 	rbuf = readl_relaxed(i2c_dev->base + STM32F4_I2C_DR);
345*4882a593Smuzhiyun 	*msg->buf++ = rbuf;
346*4882a593Smuzhiyun 	msg->count--;
347*4882a593Smuzhiyun }
348*4882a593Smuzhiyun 
stm32f4_i2c_terminate_xfer(struct stm32f4_i2c_dev * i2c_dev)349*4882a593Smuzhiyun static void stm32f4_i2c_terminate_xfer(struct stm32f4_i2c_dev *i2c_dev)
350*4882a593Smuzhiyun {
351*4882a593Smuzhiyun 	struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
352*4882a593Smuzhiyun 	void __iomem *reg;
353*4882a593Smuzhiyun 
354*4882a593Smuzhiyun 	stm32f4_i2c_disable_irq(i2c_dev);
355*4882a593Smuzhiyun 
356*4882a593Smuzhiyun 	reg = i2c_dev->base + STM32F4_I2C_CR1;
357*4882a593Smuzhiyun 	if (msg->stop)
358*4882a593Smuzhiyun 		stm32f4_i2c_set_bits(reg, STM32F4_I2C_CR1_STOP);
359*4882a593Smuzhiyun 	else
360*4882a593Smuzhiyun 		stm32f4_i2c_set_bits(reg, STM32F4_I2C_CR1_START);
361*4882a593Smuzhiyun 
362*4882a593Smuzhiyun 	complete(&i2c_dev->complete);
363*4882a593Smuzhiyun }
364*4882a593Smuzhiyun 
365*4882a593Smuzhiyun /**
366*4882a593Smuzhiyun  * stm32f4_i2c_handle_write() - Handle FIFO empty interrupt in case of write
367*4882a593Smuzhiyun  * @i2c_dev: Controller's private data
368*4882a593Smuzhiyun  */
stm32f4_i2c_handle_write(struct stm32f4_i2c_dev * i2c_dev)369*4882a593Smuzhiyun static void stm32f4_i2c_handle_write(struct stm32f4_i2c_dev *i2c_dev)
370*4882a593Smuzhiyun {
371*4882a593Smuzhiyun 	struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
372*4882a593Smuzhiyun 	void __iomem *reg = i2c_dev->base + STM32F4_I2C_CR2;
373*4882a593Smuzhiyun 
374*4882a593Smuzhiyun 	if (msg->count) {
375*4882a593Smuzhiyun 		stm32f4_i2c_write_msg(i2c_dev);
376*4882a593Smuzhiyun 		if (!msg->count) {
377*4882a593Smuzhiyun 			/*
378*4882a593Smuzhiyun 			 * Disable buffer interrupts for RX not empty and TX
379*4882a593Smuzhiyun 			 * empty events
380*4882a593Smuzhiyun 			 */
381*4882a593Smuzhiyun 			stm32f4_i2c_clr_bits(reg, STM32F4_I2C_CR2_ITBUFEN);
382*4882a593Smuzhiyun 		}
383*4882a593Smuzhiyun 	} else {
384*4882a593Smuzhiyun 		stm32f4_i2c_terminate_xfer(i2c_dev);
385*4882a593Smuzhiyun 	}
386*4882a593Smuzhiyun }
387*4882a593Smuzhiyun 
388*4882a593Smuzhiyun /**
389*4882a593Smuzhiyun  * stm32f4_i2c_handle_read() - Handle FIFO empty interrupt in case of read
390*4882a593Smuzhiyun  * @i2c_dev: Controller's private data
391*4882a593Smuzhiyun  *
392*4882a593Smuzhiyun  * This function is called when a new data is received in data register
393*4882a593Smuzhiyun  */
stm32f4_i2c_handle_read(struct stm32f4_i2c_dev * i2c_dev)394*4882a593Smuzhiyun static void stm32f4_i2c_handle_read(struct stm32f4_i2c_dev *i2c_dev)
395*4882a593Smuzhiyun {
396*4882a593Smuzhiyun 	struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
397*4882a593Smuzhiyun 	void __iomem *reg = i2c_dev->base + STM32F4_I2C_CR2;
398*4882a593Smuzhiyun 
399*4882a593Smuzhiyun 	switch (msg->count) {
400*4882a593Smuzhiyun 	case 1:
401*4882a593Smuzhiyun 		stm32f4_i2c_disable_irq(i2c_dev);
402*4882a593Smuzhiyun 		stm32f4_i2c_read_msg(i2c_dev);
403*4882a593Smuzhiyun 		complete(&i2c_dev->complete);
404*4882a593Smuzhiyun 		break;
405*4882a593Smuzhiyun 	/*
406*4882a593Smuzhiyun 	 * For 2-byte reception, 3-byte reception and for Data N-2, N-1 and N
407*4882a593Smuzhiyun 	 * for N-byte reception with N > 3, we do not have to read the data
408*4882a593Smuzhiyun 	 * register when RX not empty event occurs as we have to wait for byte
409*4882a593Smuzhiyun 	 * transferred finished event before reading data.
410*4882a593Smuzhiyun 	 * So, here we just disable buffer interrupt in order to avoid another
411*4882a593Smuzhiyun 	 * system preemption due to RX not empty event.
412*4882a593Smuzhiyun 	 */
413*4882a593Smuzhiyun 	case 2:
414*4882a593Smuzhiyun 	case 3:
415*4882a593Smuzhiyun 		stm32f4_i2c_clr_bits(reg, STM32F4_I2C_CR2_ITBUFEN);
416*4882a593Smuzhiyun 		break;
417*4882a593Smuzhiyun 	/*
418*4882a593Smuzhiyun 	 * For N byte reception with N > 3 we directly read data register
419*4882a593Smuzhiyun 	 * until N-2 data.
420*4882a593Smuzhiyun 	 */
421*4882a593Smuzhiyun 	default:
422*4882a593Smuzhiyun 		stm32f4_i2c_read_msg(i2c_dev);
423*4882a593Smuzhiyun 	}
424*4882a593Smuzhiyun }
425*4882a593Smuzhiyun 
426*4882a593Smuzhiyun /**
427*4882a593Smuzhiyun  * stm32f4_i2c_handle_rx_done() - Handle byte transfer finished interrupt
428*4882a593Smuzhiyun  * in case of read
429*4882a593Smuzhiyun  * @i2c_dev: Controller's private data
430*4882a593Smuzhiyun  *
431*4882a593Smuzhiyun  * This function is called when a new data is received in the shift register
432*4882a593Smuzhiyun  * but data register has not been read yet.
433*4882a593Smuzhiyun  */
stm32f4_i2c_handle_rx_done(struct stm32f4_i2c_dev * i2c_dev)434*4882a593Smuzhiyun static void stm32f4_i2c_handle_rx_done(struct stm32f4_i2c_dev *i2c_dev)
435*4882a593Smuzhiyun {
436*4882a593Smuzhiyun 	struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
437*4882a593Smuzhiyun 	void __iomem *reg;
438*4882a593Smuzhiyun 	u32 mask;
439*4882a593Smuzhiyun 	int i;
440*4882a593Smuzhiyun 
441*4882a593Smuzhiyun 	switch (msg->count) {
442*4882a593Smuzhiyun 	case 2:
443*4882a593Smuzhiyun 		/*
444*4882a593Smuzhiyun 		 * In order to correctly send the Stop or Repeated Start
445*4882a593Smuzhiyun 		 * condition on the I2C bus, the STOP/START bit has to be set
446*4882a593Smuzhiyun 		 * before reading the last two bytes (data N-1 and N).
447*4882a593Smuzhiyun 		 * After that, we could read the last two bytes, disable
448*4882a593Smuzhiyun 		 * remaining interrupts and notify the end of xfer to the
449*4882a593Smuzhiyun 		 * client
450*4882a593Smuzhiyun 		 */
451*4882a593Smuzhiyun 		reg = i2c_dev->base + STM32F4_I2C_CR1;
452*4882a593Smuzhiyun 		if (msg->stop)
453*4882a593Smuzhiyun 			stm32f4_i2c_set_bits(reg, STM32F4_I2C_CR1_STOP);
454*4882a593Smuzhiyun 		else
455*4882a593Smuzhiyun 			stm32f4_i2c_set_bits(reg, STM32F4_I2C_CR1_START);
456*4882a593Smuzhiyun 
457*4882a593Smuzhiyun 		for (i = 2; i > 0; i--)
458*4882a593Smuzhiyun 			stm32f4_i2c_read_msg(i2c_dev);
459*4882a593Smuzhiyun 
460*4882a593Smuzhiyun 		reg = i2c_dev->base + STM32F4_I2C_CR2;
461*4882a593Smuzhiyun 		mask = STM32F4_I2C_CR2_ITEVTEN | STM32F4_I2C_CR2_ITERREN;
462*4882a593Smuzhiyun 		stm32f4_i2c_clr_bits(reg, mask);
463*4882a593Smuzhiyun 
464*4882a593Smuzhiyun 		complete(&i2c_dev->complete);
465*4882a593Smuzhiyun 		break;
466*4882a593Smuzhiyun 	case 3:
467*4882a593Smuzhiyun 		/*
468*4882a593Smuzhiyun 		 * In order to correctly generate the NACK pulse after the last
469*4882a593Smuzhiyun 		 * received data byte, we have to enable NACK before reading N-2
470*4882a593Smuzhiyun 		 * data
471*4882a593Smuzhiyun 		 */
472*4882a593Smuzhiyun 		reg = i2c_dev->base + STM32F4_I2C_CR1;
473*4882a593Smuzhiyun 		stm32f4_i2c_clr_bits(reg, STM32F4_I2C_CR1_ACK);
474*4882a593Smuzhiyun 		stm32f4_i2c_read_msg(i2c_dev);
475*4882a593Smuzhiyun 		break;
476*4882a593Smuzhiyun 	default:
477*4882a593Smuzhiyun 		stm32f4_i2c_read_msg(i2c_dev);
478*4882a593Smuzhiyun 	}
479*4882a593Smuzhiyun }
480*4882a593Smuzhiyun 
481*4882a593Smuzhiyun /**
482*4882a593Smuzhiyun  * stm32f4_i2c_handle_rx_addr() - Handle address matched interrupt in case of
483*4882a593Smuzhiyun  * master receiver
484*4882a593Smuzhiyun  * @i2c_dev: Controller's private data
485*4882a593Smuzhiyun  */
stm32f4_i2c_handle_rx_addr(struct stm32f4_i2c_dev * i2c_dev)486*4882a593Smuzhiyun static void stm32f4_i2c_handle_rx_addr(struct stm32f4_i2c_dev *i2c_dev)
487*4882a593Smuzhiyun {
488*4882a593Smuzhiyun 	struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
489*4882a593Smuzhiyun 	u32 cr1;
490*4882a593Smuzhiyun 
491*4882a593Smuzhiyun 	switch (msg->count) {
492*4882a593Smuzhiyun 	case 0:
493*4882a593Smuzhiyun 		stm32f4_i2c_terminate_xfer(i2c_dev);
494*4882a593Smuzhiyun 
495*4882a593Smuzhiyun 		/* Clear ADDR flag */
496*4882a593Smuzhiyun 		readl_relaxed(i2c_dev->base + STM32F4_I2C_SR2);
497*4882a593Smuzhiyun 		break;
498*4882a593Smuzhiyun 	case 1:
499*4882a593Smuzhiyun 		/*
500*4882a593Smuzhiyun 		 * Single byte reception:
501*4882a593Smuzhiyun 		 * Enable NACK and reset POS (Acknowledge position).
502*4882a593Smuzhiyun 		 * Then, clear ADDR flag and set STOP or RepSTART.
503*4882a593Smuzhiyun 		 * In that way, the NACK and STOP or RepStart pulses will be
504*4882a593Smuzhiyun 		 * sent as soon as the byte will be received in shift register
505*4882a593Smuzhiyun 		 */
506*4882a593Smuzhiyun 		cr1 = readl_relaxed(i2c_dev->base + STM32F4_I2C_CR1);
507*4882a593Smuzhiyun 		cr1 &= ~(STM32F4_I2C_CR1_ACK | STM32F4_I2C_CR1_POS);
508*4882a593Smuzhiyun 		writel_relaxed(cr1, i2c_dev->base + STM32F4_I2C_CR1);
509*4882a593Smuzhiyun 
510*4882a593Smuzhiyun 		readl_relaxed(i2c_dev->base + STM32F4_I2C_SR2);
511*4882a593Smuzhiyun 
512*4882a593Smuzhiyun 		if (msg->stop)
513*4882a593Smuzhiyun 			cr1 |= STM32F4_I2C_CR1_STOP;
514*4882a593Smuzhiyun 		else
515*4882a593Smuzhiyun 			cr1 |= STM32F4_I2C_CR1_START;
516*4882a593Smuzhiyun 		writel_relaxed(cr1, i2c_dev->base + STM32F4_I2C_CR1);
517*4882a593Smuzhiyun 		break;
518*4882a593Smuzhiyun 	case 2:
519*4882a593Smuzhiyun 		/*
520*4882a593Smuzhiyun 		 * 2-byte reception:
521*4882a593Smuzhiyun 		 * Enable NACK, set POS (NACK position) and clear ADDR flag.
522*4882a593Smuzhiyun 		 * In that way, NACK will be sent for the next byte which will
523*4882a593Smuzhiyun 		 * be received in the shift register instead of the current
524*4882a593Smuzhiyun 		 * one.
525*4882a593Smuzhiyun 		 */
526*4882a593Smuzhiyun 		cr1 = readl_relaxed(i2c_dev->base + STM32F4_I2C_CR1);
527*4882a593Smuzhiyun 		cr1 &= ~STM32F4_I2C_CR1_ACK;
528*4882a593Smuzhiyun 		cr1 |= STM32F4_I2C_CR1_POS;
529*4882a593Smuzhiyun 		writel_relaxed(cr1, i2c_dev->base + STM32F4_I2C_CR1);
530*4882a593Smuzhiyun 
531*4882a593Smuzhiyun 		readl_relaxed(i2c_dev->base + STM32F4_I2C_SR2);
532*4882a593Smuzhiyun 		break;
533*4882a593Smuzhiyun 
534*4882a593Smuzhiyun 	default:
535*4882a593Smuzhiyun 		/*
536*4882a593Smuzhiyun 		 * N-byte reception:
537*4882a593Smuzhiyun 		 * Enable ACK, reset POS (ACK postion) and clear ADDR flag.
538*4882a593Smuzhiyun 		 * In that way, ACK will be sent as soon as the current byte
539*4882a593Smuzhiyun 		 * will be received in the shift register
540*4882a593Smuzhiyun 		 */
541*4882a593Smuzhiyun 		cr1 = readl_relaxed(i2c_dev->base + STM32F4_I2C_CR1);
542*4882a593Smuzhiyun 		cr1 |= STM32F4_I2C_CR1_ACK;
543*4882a593Smuzhiyun 		cr1 &= ~STM32F4_I2C_CR1_POS;
544*4882a593Smuzhiyun 		writel_relaxed(cr1, i2c_dev->base + STM32F4_I2C_CR1);
545*4882a593Smuzhiyun 
546*4882a593Smuzhiyun 		readl_relaxed(i2c_dev->base + STM32F4_I2C_SR2);
547*4882a593Smuzhiyun 		break;
548*4882a593Smuzhiyun 	}
549*4882a593Smuzhiyun }
550*4882a593Smuzhiyun 
551*4882a593Smuzhiyun /**
552*4882a593Smuzhiyun  * stm32f4_i2c_isr_event() - Interrupt routine for I2C bus event
553*4882a593Smuzhiyun  * @irq: interrupt number
554*4882a593Smuzhiyun  * @data: Controller's private data
555*4882a593Smuzhiyun  */
stm32f4_i2c_isr_event(int irq,void * data)556*4882a593Smuzhiyun static irqreturn_t stm32f4_i2c_isr_event(int irq, void *data)
557*4882a593Smuzhiyun {
558*4882a593Smuzhiyun 	struct stm32f4_i2c_dev *i2c_dev = data;
559*4882a593Smuzhiyun 	struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
560*4882a593Smuzhiyun 	u32 possible_status = STM32F4_I2C_SR1_ITEVTEN_MASK;
561*4882a593Smuzhiyun 	u32 status, ien, event, cr2;
562*4882a593Smuzhiyun 
563*4882a593Smuzhiyun 	cr2 = readl_relaxed(i2c_dev->base + STM32F4_I2C_CR2);
564*4882a593Smuzhiyun 	ien = cr2 & STM32F4_I2C_CR2_IRQ_MASK;
565*4882a593Smuzhiyun 
566*4882a593Smuzhiyun 	/* Update possible_status if buffer interrupt is enabled */
567*4882a593Smuzhiyun 	if (ien & STM32F4_I2C_CR2_ITBUFEN)
568*4882a593Smuzhiyun 		possible_status |= STM32F4_I2C_SR1_ITBUFEN_MASK;
569*4882a593Smuzhiyun 
570*4882a593Smuzhiyun 	status = readl_relaxed(i2c_dev->base + STM32F4_I2C_SR1);
571*4882a593Smuzhiyun 	event = status & possible_status;
572*4882a593Smuzhiyun 	if (!event) {
573*4882a593Smuzhiyun 		dev_dbg(i2c_dev->dev,
574*4882a593Smuzhiyun 			"spurious evt irq (status=0x%08x, ien=0x%08x)\n",
575*4882a593Smuzhiyun 			status, ien);
576*4882a593Smuzhiyun 		return IRQ_NONE;
577*4882a593Smuzhiyun 	}
578*4882a593Smuzhiyun 
579*4882a593Smuzhiyun 	/* Start condition generated */
580*4882a593Smuzhiyun 	if (event & STM32F4_I2C_SR1_SB)
581*4882a593Smuzhiyun 		stm32f4_i2c_write_byte(i2c_dev, msg->addr);
582*4882a593Smuzhiyun 
583*4882a593Smuzhiyun 	/* I2C Address sent */
584*4882a593Smuzhiyun 	if (event & STM32F4_I2C_SR1_ADDR) {
585*4882a593Smuzhiyun 		if (msg->addr & I2C_M_RD)
586*4882a593Smuzhiyun 			stm32f4_i2c_handle_rx_addr(i2c_dev);
587*4882a593Smuzhiyun 		else
588*4882a593Smuzhiyun 			readl_relaxed(i2c_dev->base + STM32F4_I2C_SR2);
589*4882a593Smuzhiyun 
590*4882a593Smuzhiyun 		/*
591*4882a593Smuzhiyun 		 * Enable buffer interrupts for RX not empty and TX empty
592*4882a593Smuzhiyun 		 * events
593*4882a593Smuzhiyun 		 */
594*4882a593Smuzhiyun 		cr2 |= STM32F4_I2C_CR2_ITBUFEN;
595*4882a593Smuzhiyun 		writel_relaxed(cr2, i2c_dev->base + STM32F4_I2C_CR2);
596*4882a593Smuzhiyun 	}
597*4882a593Smuzhiyun 
598*4882a593Smuzhiyun 	/* TX empty */
599*4882a593Smuzhiyun 	if ((event & STM32F4_I2C_SR1_TXE) && !(msg->addr & I2C_M_RD))
600*4882a593Smuzhiyun 		stm32f4_i2c_handle_write(i2c_dev);
601*4882a593Smuzhiyun 
602*4882a593Smuzhiyun 	/* RX not empty */
603*4882a593Smuzhiyun 	if ((event & STM32F4_I2C_SR1_RXNE) && (msg->addr & I2C_M_RD))
604*4882a593Smuzhiyun 		stm32f4_i2c_handle_read(i2c_dev);
605*4882a593Smuzhiyun 
606*4882a593Smuzhiyun 	/*
607*4882a593Smuzhiyun 	 * The BTF (Byte Transfer finished) event occurs when:
608*4882a593Smuzhiyun 	 * - in reception : a new byte is received in the shift register
609*4882a593Smuzhiyun 	 * but the previous byte has not been read yet from data register
610*4882a593Smuzhiyun 	 * - in transmission: a new byte should be sent but the data register
611*4882a593Smuzhiyun 	 * has not been written yet
612*4882a593Smuzhiyun 	 */
613*4882a593Smuzhiyun 	if (event & STM32F4_I2C_SR1_BTF) {
614*4882a593Smuzhiyun 		if (msg->addr & I2C_M_RD)
615*4882a593Smuzhiyun 			stm32f4_i2c_handle_rx_done(i2c_dev);
616*4882a593Smuzhiyun 		else
617*4882a593Smuzhiyun 			stm32f4_i2c_handle_write(i2c_dev);
618*4882a593Smuzhiyun 	}
619*4882a593Smuzhiyun 
620*4882a593Smuzhiyun 	return IRQ_HANDLED;
621*4882a593Smuzhiyun }
622*4882a593Smuzhiyun 
623*4882a593Smuzhiyun /**
624*4882a593Smuzhiyun  * stm32f4_i2c_isr_error() - Interrupt routine for I2C bus error
625*4882a593Smuzhiyun  * @irq: interrupt number
626*4882a593Smuzhiyun  * @data: Controller's private data
627*4882a593Smuzhiyun  */
stm32f4_i2c_isr_error(int irq,void * data)628*4882a593Smuzhiyun static irqreturn_t stm32f4_i2c_isr_error(int irq, void *data)
629*4882a593Smuzhiyun {
630*4882a593Smuzhiyun 	struct stm32f4_i2c_dev *i2c_dev = data;
631*4882a593Smuzhiyun 	struct stm32f4_i2c_msg *msg = &i2c_dev->msg;
632*4882a593Smuzhiyun 	void __iomem *reg;
633*4882a593Smuzhiyun 	u32 status;
634*4882a593Smuzhiyun 
635*4882a593Smuzhiyun 	status = readl_relaxed(i2c_dev->base + STM32F4_I2C_SR1);
636*4882a593Smuzhiyun 
637*4882a593Smuzhiyun 	/* Arbitration lost */
638*4882a593Smuzhiyun 	if (status & STM32F4_I2C_SR1_ARLO) {
639*4882a593Smuzhiyun 		status &= ~STM32F4_I2C_SR1_ARLO;
640*4882a593Smuzhiyun 		writel_relaxed(status, i2c_dev->base + STM32F4_I2C_SR1);
641*4882a593Smuzhiyun 		msg->result = -EAGAIN;
642*4882a593Smuzhiyun 	}
643*4882a593Smuzhiyun 
644*4882a593Smuzhiyun 	/*
645*4882a593Smuzhiyun 	 * Acknowledge failure:
646*4882a593Smuzhiyun 	 * In master transmitter mode a Stop must be generated by software
647*4882a593Smuzhiyun 	 */
648*4882a593Smuzhiyun 	if (status & STM32F4_I2C_SR1_AF) {
649*4882a593Smuzhiyun 		if (!(msg->addr & I2C_M_RD)) {
650*4882a593Smuzhiyun 			reg = i2c_dev->base + STM32F4_I2C_CR1;
651*4882a593Smuzhiyun 			stm32f4_i2c_set_bits(reg, STM32F4_I2C_CR1_STOP);
652*4882a593Smuzhiyun 		}
653*4882a593Smuzhiyun 		status &= ~STM32F4_I2C_SR1_AF;
654*4882a593Smuzhiyun 		writel_relaxed(status, i2c_dev->base + STM32F4_I2C_SR1);
655*4882a593Smuzhiyun 		msg->result = -EIO;
656*4882a593Smuzhiyun 	}
657*4882a593Smuzhiyun 
658*4882a593Smuzhiyun 	/* Bus error */
659*4882a593Smuzhiyun 	if (status & STM32F4_I2C_SR1_BERR) {
660*4882a593Smuzhiyun 		status &= ~STM32F4_I2C_SR1_BERR;
661*4882a593Smuzhiyun 		writel_relaxed(status, i2c_dev->base + STM32F4_I2C_SR1);
662*4882a593Smuzhiyun 		msg->result = -EIO;
663*4882a593Smuzhiyun 	}
664*4882a593Smuzhiyun 
665*4882a593Smuzhiyun 	stm32f4_i2c_disable_irq(i2c_dev);
666*4882a593Smuzhiyun 	complete(&i2c_dev->complete);
667*4882a593Smuzhiyun 
668*4882a593Smuzhiyun 	return IRQ_HANDLED;
669*4882a593Smuzhiyun }
670*4882a593Smuzhiyun 
671*4882a593Smuzhiyun /**
672*4882a593Smuzhiyun  * stm32f4_i2c_xfer_msg() - Transfer a single I2C message
673*4882a593Smuzhiyun  * @i2c_dev: Controller's private data
674*4882a593Smuzhiyun  * @msg: I2C message to transfer
675*4882a593Smuzhiyun  * @is_first: first message of the sequence
676*4882a593Smuzhiyun  * @is_last: last message of the sequence
677*4882a593Smuzhiyun  */
stm32f4_i2c_xfer_msg(struct stm32f4_i2c_dev * i2c_dev,struct i2c_msg * msg,bool is_first,bool is_last)678*4882a593Smuzhiyun static int stm32f4_i2c_xfer_msg(struct stm32f4_i2c_dev *i2c_dev,
679*4882a593Smuzhiyun 				struct i2c_msg *msg, bool is_first,
680*4882a593Smuzhiyun 				bool is_last)
681*4882a593Smuzhiyun {
682*4882a593Smuzhiyun 	struct stm32f4_i2c_msg *f4_msg = &i2c_dev->msg;
683*4882a593Smuzhiyun 	void __iomem *reg = i2c_dev->base + STM32F4_I2C_CR1;
684*4882a593Smuzhiyun 	unsigned long timeout;
685*4882a593Smuzhiyun 	u32 mask;
686*4882a593Smuzhiyun 	int ret;
687*4882a593Smuzhiyun 
688*4882a593Smuzhiyun 	f4_msg->addr = i2c_8bit_addr_from_msg(msg);
689*4882a593Smuzhiyun 	f4_msg->buf = msg->buf;
690*4882a593Smuzhiyun 	f4_msg->count = msg->len;
691*4882a593Smuzhiyun 	f4_msg->result = 0;
692*4882a593Smuzhiyun 	f4_msg->stop = is_last;
693*4882a593Smuzhiyun 
694*4882a593Smuzhiyun 	reinit_completion(&i2c_dev->complete);
695*4882a593Smuzhiyun 
696*4882a593Smuzhiyun 	/* Enable events and errors interrupts */
697*4882a593Smuzhiyun 	mask = STM32F4_I2C_CR2_ITEVTEN | STM32F4_I2C_CR2_ITERREN;
698*4882a593Smuzhiyun 	stm32f4_i2c_set_bits(i2c_dev->base + STM32F4_I2C_CR2, mask);
699*4882a593Smuzhiyun 
700*4882a593Smuzhiyun 	if (is_first) {
701*4882a593Smuzhiyun 		ret = stm32f4_i2c_wait_free_bus(i2c_dev);
702*4882a593Smuzhiyun 		if (ret)
703*4882a593Smuzhiyun 			return ret;
704*4882a593Smuzhiyun 
705*4882a593Smuzhiyun 		/* START generation */
706*4882a593Smuzhiyun 		stm32f4_i2c_set_bits(reg, STM32F4_I2C_CR1_START);
707*4882a593Smuzhiyun 	}
708*4882a593Smuzhiyun 
709*4882a593Smuzhiyun 	timeout = wait_for_completion_timeout(&i2c_dev->complete,
710*4882a593Smuzhiyun 					      i2c_dev->adap.timeout);
711*4882a593Smuzhiyun 	ret = f4_msg->result;
712*4882a593Smuzhiyun 
713*4882a593Smuzhiyun 	if (!timeout)
714*4882a593Smuzhiyun 		ret = -ETIMEDOUT;
715*4882a593Smuzhiyun 
716*4882a593Smuzhiyun 	return ret;
717*4882a593Smuzhiyun }
718*4882a593Smuzhiyun 
719*4882a593Smuzhiyun /**
720*4882a593Smuzhiyun  * stm32f4_i2c_xfer() - Transfer combined I2C message
721*4882a593Smuzhiyun  * @i2c_adap: Adapter pointer to the controller
722*4882a593Smuzhiyun  * @msgs: Pointer to data to be written.
723*4882a593Smuzhiyun  * @num: Number of messages to be executed
724*4882a593Smuzhiyun  */
stm32f4_i2c_xfer(struct i2c_adapter * i2c_adap,struct i2c_msg msgs[],int num)725*4882a593Smuzhiyun static int stm32f4_i2c_xfer(struct i2c_adapter *i2c_adap, struct i2c_msg msgs[],
726*4882a593Smuzhiyun 			    int num)
727*4882a593Smuzhiyun {
728*4882a593Smuzhiyun 	struct stm32f4_i2c_dev *i2c_dev = i2c_get_adapdata(i2c_adap);
729*4882a593Smuzhiyun 	int ret, i;
730*4882a593Smuzhiyun 
731*4882a593Smuzhiyun 	ret = clk_enable(i2c_dev->clk);
732*4882a593Smuzhiyun 	if (ret) {
733*4882a593Smuzhiyun 		dev_err(i2c_dev->dev, "Failed to enable clock\n");
734*4882a593Smuzhiyun 		return ret;
735*4882a593Smuzhiyun 	}
736*4882a593Smuzhiyun 
737*4882a593Smuzhiyun 	for (i = 0; i < num && !ret; i++)
738*4882a593Smuzhiyun 		ret = stm32f4_i2c_xfer_msg(i2c_dev, &msgs[i], i == 0,
739*4882a593Smuzhiyun 					   i == num - 1);
740*4882a593Smuzhiyun 
741*4882a593Smuzhiyun 	clk_disable(i2c_dev->clk);
742*4882a593Smuzhiyun 
743*4882a593Smuzhiyun 	return (ret < 0) ? ret : num;
744*4882a593Smuzhiyun }
745*4882a593Smuzhiyun 
stm32f4_i2c_func(struct i2c_adapter * adap)746*4882a593Smuzhiyun static u32 stm32f4_i2c_func(struct i2c_adapter *adap)
747*4882a593Smuzhiyun {
748*4882a593Smuzhiyun 	return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
749*4882a593Smuzhiyun }
750*4882a593Smuzhiyun 
751*4882a593Smuzhiyun static const struct i2c_algorithm stm32f4_i2c_algo = {
752*4882a593Smuzhiyun 	.master_xfer = stm32f4_i2c_xfer,
753*4882a593Smuzhiyun 	.functionality = stm32f4_i2c_func,
754*4882a593Smuzhiyun };
755*4882a593Smuzhiyun 
stm32f4_i2c_probe(struct platform_device * pdev)756*4882a593Smuzhiyun static int stm32f4_i2c_probe(struct platform_device *pdev)
757*4882a593Smuzhiyun {
758*4882a593Smuzhiyun 	struct device_node *np = pdev->dev.of_node;
759*4882a593Smuzhiyun 	struct stm32f4_i2c_dev *i2c_dev;
760*4882a593Smuzhiyun 	struct resource *res;
761*4882a593Smuzhiyun 	u32 irq_event, irq_error, clk_rate;
762*4882a593Smuzhiyun 	struct i2c_adapter *adap;
763*4882a593Smuzhiyun 	struct reset_control *rst;
764*4882a593Smuzhiyun 	int ret;
765*4882a593Smuzhiyun 
766*4882a593Smuzhiyun 	i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL);
767*4882a593Smuzhiyun 	if (!i2c_dev)
768*4882a593Smuzhiyun 		return -ENOMEM;
769*4882a593Smuzhiyun 
770*4882a593Smuzhiyun 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
771*4882a593Smuzhiyun 	i2c_dev->base = devm_ioremap_resource(&pdev->dev, res);
772*4882a593Smuzhiyun 	if (IS_ERR(i2c_dev->base))
773*4882a593Smuzhiyun 		return PTR_ERR(i2c_dev->base);
774*4882a593Smuzhiyun 
775*4882a593Smuzhiyun 	irq_event = irq_of_parse_and_map(np, 0);
776*4882a593Smuzhiyun 	if (!irq_event) {
777*4882a593Smuzhiyun 		dev_err(&pdev->dev, "IRQ event missing or invalid\n");
778*4882a593Smuzhiyun 		return -EINVAL;
779*4882a593Smuzhiyun 	}
780*4882a593Smuzhiyun 
781*4882a593Smuzhiyun 	irq_error = irq_of_parse_and_map(np, 1);
782*4882a593Smuzhiyun 	if (!irq_error) {
783*4882a593Smuzhiyun 		dev_err(&pdev->dev, "IRQ error missing or invalid\n");
784*4882a593Smuzhiyun 		return -EINVAL;
785*4882a593Smuzhiyun 	}
786*4882a593Smuzhiyun 
787*4882a593Smuzhiyun 	i2c_dev->clk = devm_clk_get(&pdev->dev, NULL);
788*4882a593Smuzhiyun 	if (IS_ERR(i2c_dev->clk)) {
789*4882a593Smuzhiyun 		dev_err(&pdev->dev, "Error: Missing controller clock\n");
790*4882a593Smuzhiyun 		return PTR_ERR(i2c_dev->clk);
791*4882a593Smuzhiyun 	}
792*4882a593Smuzhiyun 	ret = clk_prepare_enable(i2c_dev->clk);
793*4882a593Smuzhiyun 	if (ret) {
794*4882a593Smuzhiyun 		dev_err(i2c_dev->dev, "Failed to prepare_enable clock\n");
795*4882a593Smuzhiyun 		return ret;
796*4882a593Smuzhiyun 	}
797*4882a593Smuzhiyun 
798*4882a593Smuzhiyun 	rst = devm_reset_control_get_exclusive(&pdev->dev, NULL);
799*4882a593Smuzhiyun 	if (IS_ERR(rst)) {
800*4882a593Smuzhiyun 		ret = dev_err_probe(&pdev->dev, PTR_ERR(rst),
801*4882a593Smuzhiyun 				    "Error: Missing reset ctrl\n");
802*4882a593Smuzhiyun 		goto clk_free;
803*4882a593Smuzhiyun 	}
804*4882a593Smuzhiyun 	reset_control_assert(rst);
805*4882a593Smuzhiyun 	udelay(2);
806*4882a593Smuzhiyun 	reset_control_deassert(rst);
807*4882a593Smuzhiyun 
808*4882a593Smuzhiyun 	i2c_dev->speed = STM32_I2C_SPEED_STANDARD;
809*4882a593Smuzhiyun 	ret = of_property_read_u32(np, "clock-frequency", &clk_rate);
810*4882a593Smuzhiyun 	if (!ret && clk_rate >= I2C_MAX_FAST_MODE_FREQ)
811*4882a593Smuzhiyun 		i2c_dev->speed = STM32_I2C_SPEED_FAST;
812*4882a593Smuzhiyun 
813*4882a593Smuzhiyun 	i2c_dev->dev = &pdev->dev;
814*4882a593Smuzhiyun 
815*4882a593Smuzhiyun 	ret = devm_request_irq(&pdev->dev, irq_event, stm32f4_i2c_isr_event, 0,
816*4882a593Smuzhiyun 			       pdev->name, i2c_dev);
817*4882a593Smuzhiyun 	if (ret) {
818*4882a593Smuzhiyun 		dev_err(&pdev->dev, "Failed to request irq event %i\n",
819*4882a593Smuzhiyun 			irq_event);
820*4882a593Smuzhiyun 		goto clk_free;
821*4882a593Smuzhiyun 	}
822*4882a593Smuzhiyun 
823*4882a593Smuzhiyun 	ret = devm_request_irq(&pdev->dev, irq_error, stm32f4_i2c_isr_error, 0,
824*4882a593Smuzhiyun 			       pdev->name, i2c_dev);
825*4882a593Smuzhiyun 	if (ret) {
826*4882a593Smuzhiyun 		dev_err(&pdev->dev, "Failed to request irq error %i\n",
827*4882a593Smuzhiyun 			irq_error);
828*4882a593Smuzhiyun 		goto clk_free;
829*4882a593Smuzhiyun 	}
830*4882a593Smuzhiyun 
831*4882a593Smuzhiyun 	ret = stm32f4_i2c_hw_config(i2c_dev);
832*4882a593Smuzhiyun 	if (ret)
833*4882a593Smuzhiyun 		goto clk_free;
834*4882a593Smuzhiyun 
835*4882a593Smuzhiyun 	adap = &i2c_dev->adap;
836*4882a593Smuzhiyun 	i2c_set_adapdata(adap, i2c_dev);
837*4882a593Smuzhiyun 	snprintf(adap->name, sizeof(adap->name), "STM32 I2C(%pa)", &res->start);
838*4882a593Smuzhiyun 	adap->owner = THIS_MODULE;
839*4882a593Smuzhiyun 	adap->timeout = 2 * HZ;
840*4882a593Smuzhiyun 	adap->retries = 0;
841*4882a593Smuzhiyun 	adap->algo = &stm32f4_i2c_algo;
842*4882a593Smuzhiyun 	adap->dev.parent = &pdev->dev;
843*4882a593Smuzhiyun 	adap->dev.of_node = pdev->dev.of_node;
844*4882a593Smuzhiyun 
845*4882a593Smuzhiyun 	init_completion(&i2c_dev->complete);
846*4882a593Smuzhiyun 
847*4882a593Smuzhiyun 	ret = i2c_add_adapter(adap);
848*4882a593Smuzhiyun 	if (ret)
849*4882a593Smuzhiyun 		goto clk_free;
850*4882a593Smuzhiyun 
851*4882a593Smuzhiyun 	platform_set_drvdata(pdev, i2c_dev);
852*4882a593Smuzhiyun 
853*4882a593Smuzhiyun 	clk_disable(i2c_dev->clk);
854*4882a593Smuzhiyun 
855*4882a593Smuzhiyun 	dev_info(i2c_dev->dev, "STM32F4 I2C driver registered\n");
856*4882a593Smuzhiyun 
857*4882a593Smuzhiyun 	return 0;
858*4882a593Smuzhiyun 
859*4882a593Smuzhiyun clk_free:
860*4882a593Smuzhiyun 	clk_disable_unprepare(i2c_dev->clk);
861*4882a593Smuzhiyun 	return ret;
862*4882a593Smuzhiyun }
863*4882a593Smuzhiyun 
stm32f4_i2c_remove(struct platform_device * pdev)864*4882a593Smuzhiyun static int stm32f4_i2c_remove(struct platform_device *pdev)
865*4882a593Smuzhiyun {
866*4882a593Smuzhiyun 	struct stm32f4_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
867*4882a593Smuzhiyun 
868*4882a593Smuzhiyun 	i2c_del_adapter(&i2c_dev->adap);
869*4882a593Smuzhiyun 
870*4882a593Smuzhiyun 	clk_unprepare(i2c_dev->clk);
871*4882a593Smuzhiyun 
872*4882a593Smuzhiyun 	return 0;
873*4882a593Smuzhiyun }
874*4882a593Smuzhiyun 
875*4882a593Smuzhiyun static const struct of_device_id stm32f4_i2c_match[] = {
876*4882a593Smuzhiyun 	{ .compatible = "st,stm32f4-i2c", },
877*4882a593Smuzhiyun 	{},
878*4882a593Smuzhiyun };
879*4882a593Smuzhiyun MODULE_DEVICE_TABLE(of, stm32f4_i2c_match);
880*4882a593Smuzhiyun 
881*4882a593Smuzhiyun static struct platform_driver stm32f4_i2c_driver = {
882*4882a593Smuzhiyun 	.driver = {
883*4882a593Smuzhiyun 		.name = "stm32f4-i2c",
884*4882a593Smuzhiyun 		.of_match_table = stm32f4_i2c_match,
885*4882a593Smuzhiyun 	},
886*4882a593Smuzhiyun 	.probe = stm32f4_i2c_probe,
887*4882a593Smuzhiyun 	.remove = stm32f4_i2c_remove,
888*4882a593Smuzhiyun };
889*4882a593Smuzhiyun 
890*4882a593Smuzhiyun module_platform_driver(stm32f4_i2c_driver);
891*4882a593Smuzhiyun 
892*4882a593Smuzhiyun MODULE_AUTHOR("M'boumba Cedric Madianga <cedric.madianga@gmail.com>");
893*4882a593Smuzhiyun MODULE_DESCRIPTION("STMicroelectronics STM32F4 I2C driver");
894*4882a593Smuzhiyun MODULE_LICENSE("GPL v2");
895