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