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