1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-or-later
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun * Synopsys DesignWare I2C adapter driver.
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Based on the TI DAVINCI I2C adapter driver.
6*4882a593Smuzhiyun *
7*4882a593Smuzhiyun * Copyright (C) 2006 Texas Instruments.
8*4882a593Smuzhiyun * Copyright (C) 2007 MontaVista Software Inc.
9*4882a593Smuzhiyun * Copyright (C) 2009 Provigent Ltd.
10*4882a593Smuzhiyun */
11*4882a593Smuzhiyun #include <linux/acpi.h>
12*4882a593Smuzhiyun #include <linux/clk.h>
13*4882a593Smuzhiyun #include <linux/delay.h>
14*4882a593Smuzhiyun #include <linux/device.h>
15*4882a593Smuzhiyun #include <linux/err.h>
16*4882a593Smuzhiyun #include <linux/errno.h>
17*4882a593Smuzhiyun #include <linux/export.h>
18*4882a593Smuzhiyun #include <linux/i2c.h>
19*4882a593Smuzhiyun #include <linux/interrupt.h>
20*4882a593Smuzhiyun #include <linux/io.h>
21*4882a593Smuzhiyun #include <linux/kernel.h>
22*4882a593Smuzhiyun #include <linux/module.h>
23*4882a593Smuzhiyun #include <linux/pm_runtime.h>
24*4882a593Smuzhiyun #include <linux/regmap.h>
25*4882a593Smuzhiyun #include <linux/swab.h>
26*4882a593Smuzhiyun #include <linux/types.h>
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun #include "i2c-designware-core.h"
29*4882a593Smuzhiyun
30*4882a593Smuzhiyun static char *abort_sources[] = {
31*4882a593Smuzhiyun [ABRT_7B_ADDR_NOACK] =
32*4882a593Smuzhiyun "slave address not acknowledged (7bit mode)",
33*4882a593Smuzhiyun [ABRT_10ADDR1_NOACK] =
34*4882a593Smuzhiyun "first address byte not acknowledged (10bit mode)",
35*4882a593Smuzhiyun [ABRT_10ADDR2_NOACK] =
36*4882a593Smuzhiyun "second address byte not acknowledged (10bit mode)",
37*4882a593Smuzhiyun [ABRT_TXDATA_NOACK] =
38*4882a593Smuzhiyun "data not acknowledged",
39*4882a593Smuzhiyun [ABRT_GCALL_NOACK] =
40*4882a593Smuzhiyun "no acknowledgement for a general call",
41*4882a593Smuzhiyun [ABRT_GCALL_READ] =
42*4882a593Smuzhiyun "read after general call",
43*4882a593Smuzhiyun [ABRT_SBYTE_ACKDET] =
44*4882a593Smuzhiyun "start byte acknowledged",
45*4882a593Smuzhiyun [ABRT_SBYTE_NORSTRT] =
46*4882a593Smuzhiyun "trying to send start byte when restart is disabled",
47*4882a593Smuzhiyun [ABRT_10B_RD_NORSTRT] =
48*4882a593Smuzhiyun "trying to read when restart is disabled (10bit mode)",
49*4882a593Smuzhiyun [ABRT_MASTER_DIS] =
50*4882a593Smuzhiyun "trying to use disabled adapter",
51*4882a593Smuzhiyun [ARB_LOST] =
52*4882a593Smuzhiyun "lost arbitration",
53*4882a593Smuzhiyun [ABRT_SLAVE_FLUSH_TXFIFO] =
54*4882a593Smuzhiyun "read command so flush old data in the TX FIFO",
55*4882a593Smuzhiyun [ABRT_SLAVE_ARBLOST] =
56*4882a593Smuzhiyun "slave lost the bus while transmitting data to a remote master",
57*4882a593Smuzhiyun [ABRT_SLAVE_RD_INTX] =
58*4882a593Smuzhiyun "incorrect slave-transmitter mode configuration",
59*4882a593Smuzhiyun };
60*4882a593Smuzhiyun
dw_reg_read(void * context,unsigned int reg,unsigned int * val)61*4882a593Smuzhiyun static int dw_reg_read(void *context, unsigned int reg, unsigned int *val)
62*4882a593Smuzhiyun {
63*4882a593Smuzhiyun struct dw_i2c_dev *dev = context;
64*4882a593Smuzhiyun
65*4882a593Smuzhiyun *val = readl_relaxed(dev->base + reg);
66*4882a593Smuzhiyun
67*4882a593Smuzhiyun return 0;
68*4882a593Smuzhiyun }
69*4882a593Smuzhiyun
dw_reg_write(void * context,unsigned int reg,unsigned int val)70*4882a593Smuzhiyun static int dw_reg_write(void *context, unsigned int reg, unsigned int val)
71*4882a593Smuzhiyun {
72*4882a593Smuzhiyun struct dw_i2c_dev *dev = context;
73*4882a593Smuzhiyun
74*4882a593Smuzhiyun writel_relaxed(val, dev->base + reg);
75*4882a593Smuzhiyun
76*4882a593Smuzhiyun return 0;
77*4882a593Smuzhiyun }
78*4882a593Smuzhiyun
dw_reg_read_swab(void * context,unsigned int reg,unsigned int * val)79*4882a593Smuzhiyun static int dw_reg_read_swab(void *context, unsigned int reg, unsigned int *val)
80*4882a593Smuzhiyun {
81*4882a593Smuzhiyun struct dw_i2c_dev *dev = context;
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun *val = swab32(readl_relaxed(dev->base + reg));
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun return 0;
86*4882a593Smuzhiyun }
87*4882a593Smuzhiyun
dw_reg_write_swab(void * context,unsigned int reg,unsigned int val)88*4882a593Smuzhiyun static int dw_reg_write_swab(void *context, unsigned int reg, unsigned int val)
89*4882a593Smuzhiyun {
90*4882a593Smuzhiyun struct dw_i2c_dev *dev = context;
91*4882a593Smuzhiyun
92*4882a593Smuzhiyun writel_relaxed(swab32(val), dev->base + reg);
93*4882a593Smuzhiyun
94*4882a593Smuzhiyun return 0;
95*4882a593Smuzhiyun }
96*4882a593Smuzhiyun
dw_reg_read_word(void * context,unsigned int reg,unsigned int * val)97*4882a593Smuzhiyun static int dw_reg_read_word(void *context, unsigned int reg, unsigned int *val)
98*4882a593Smuzhiyun {
99*4882a593Smuzhiyun struct dw_i2c_dev *dev = context;
100*4882a593Smuzhiyun
101*4882a593Smuzhiyun *val = readw_relaxed(dev->base + reg) |
102*4882a593Smuzhiyun (readw_relaxed(dev->base + reg + 2) << 16);
103*4882a593Smuzhiyun
104*4882a593Smuzhiyun return 0;
105*4882a593Smuzhiyun }
106*4882a593Smuzhiyun
dw_reg_write_word(void * context,unsigned int reg,unsigned int val)107*4882a593Smuzhiyun static int dw_reg_write_word(void *context, unsigned int reg, unsigned int val)
108*4882a593Smuzhiyun {
109*4882a593Smuzhiyun struct dw_i2c_dev *dev = context;
110*4882a593Smuzhiyun
111*4882a593Smuzhiyun writew_relaxed(val, dev->base + reg);
112*4882a593Smuzhiyun writew_relaxed(val >> 16, dev->base + reg + 2);
113*4882a593Smuzhiyun
114*4882a593Smuzhiyun return 0;
115*4882a593Smuzhiyun }
116*4882a593Smuzhiyun
117*4882a593Smuzhiyun /**
118*4882a593Smuzhiyun * i2c_dw_init_regmap() - Initialize registers map
119*4882a593Smuzhiyun * @dev: device private data
120*4882a593Smuzhiyun *
121*4882a593Smuzhiyun * Autodetects needed register access mode and creates the regmap with
122*4882a593Smuzhiyun * corresponding read/write callbacks. This must be called before doing any
123*4882a593Smuzhiyun * other register access.
124*4882a593Smuzhiyun */
i2c_dw_init_regmap(struct dw_i2c_dev * dev)125*4882a593Smuzhiyun int i2c_dw_init_regmap(struct dw_i2c_dev *dev)
126*4882a593Smuzhiyun {
127*4882a593Smuzhiyun struct regmap_config map_cfg = {
128*4882a593Smuzhiyun .reg_bits = 32,
129*4882a593Smuzhiyun .val_bits = 32,
130*4882a593Smuzhiyun .reg_stride = 4,
131*4882a593Smuzhiyun .disable_locking = true,
132*4882a593Smuzhiyun .reg_read = dw_reg_read,
133*4882a593Smuzhiyun .reg_write = dw_reg_write,
134*4882a593Smuzhiyun .max_register = DW_IC_COMP_TYPE,
135*4882a593Smuzhiyun };
136*4882a593Smuzhiyun u32 reg;
137*4882a593Smuzhiyun int ret;
138*4882a593Smuzhiyun
139*4882a593Smuzhiyun /*
140*4882a593Smuzhiyun * Skip detecting the registers map configuration if the regmap has
141*4882a593Smuzhiyun * already been provided by a higher code.
142*4882a593Smuzhiyun */
143*4882a593Smuzhiyun if (dev->map)
144*4882a593Smuzhiyun return 0;
145*4882a593Smuzhiyun
146*4882a593Smuzhiyun ret = i2c_dw_acquire_lock(dev);
147*4882a593Smuzhiyun if (ret)
148*4882a593Smuzhiyun return ret;
149*4882a593Smuzhiyun
150*4882a593Smuzhiyun reg = readl(dev->base + DW_IC_COMP_TYPE);
151*4882a593Smuzhiyun i2c_dw_release_lock(dev);
152*4882a593Smuzhiyun
153*4882a593Smuzhiyun if (reg == swab32(DW_IC_COMP_TYPE_VALUE)) {
154*4882a593Smuzhiyun map_cfg.reg_read = dw_reg_read_swab;
155*4882a593Smuzhiyun map_cfg.reg_write = dw_reg_write_swab;
156*4882a593Smuzhiyun } else if (reg == (DW_IC_COMP_TYPE_VALUE & 0x0000ffff)) {
157*4882a593Smuzhiyun map_cfg.reg_read = dw_reg_read_word;
158*4882a593Smuzhiyun map_cfg.reg_write = dw_reg_write_word;
159*4882a593Smuzhiyun } else if (reg != DW_IC_COMP_TYPE_VALUE) {
160*4882a593Smuzhiyun dev_err(dev->dev,
161*4882a593Smuzhiyun "Unknown Synopsys component type: 0x%08x\n", reg);
162*4882a593Smuzhiyun return -ENODEV;
163*4882a593Smuzhiyun }
164*4882a593Smuzhiyun
165*4882a593Smuzhiyun /*
166*4882a593Smuzhiyun * Note we'll check the return value of the regmap IO accessors only
167*4882a593Smuzhiyun * at the probe stage. The rest of the code won't do this because
168*4882a593Smuzhiyun * basically we have MMIO-based regmap so non of the read/write methods
169*4882a593Smuzhiyun * can fail.
170*4882a593Smuzhiyun */
171*4882a593Smuzhiyun dev->map = devm_regmap_init(dev->dev, NULL, dev, &map_cfg);
172*4882a593Smuzhiyun if (IS_ERR(dev->map)) {
173*4882a593Smuzhiyun dev_err(dev->dev, "Failed to init the registers map\n");
174*4882a593Smuzhiyun return PTR_ERR(dev->map);
175*4882a593Smuzhiyun }
176*4882a593Smuzhiyun
177*4882a593Smuzhiyun return 0;
178*4882a593Smuzhiyun }
179*4882a593Smuzhiyun
180*4882a593Smuzhiyun static const u32 supported_speeds[] = {
181*4882a593Smuzhiyun I2C_MAX_HIGH_SPEED_MODE_FREQ,
182*4882a593Smuzhiyun I2C_MAX_FAST_MODE_PLUS_FREQ,
183*4882a593Smuzhiyun I2C_MAX_FAST_MODE_FREQ,
184*4882a593Smuzhiyun I2C_MAX_STANDARD_MODE_FREQ,
185*4882a593Smuzhiyun };
186*4882a593Smuzhiyun
i2c_dw_validate_speed(struct dw_i2c_dev * dev)187*4882a593Smuzhiyun int i2c_dw_validate_speed(struct dw_i2c_dev *dev)
188*4882a593Smuzhiyun {
189*4882a593Smuzhiyun struct i2c_timings *t = &dev->timings;
190*4882a593Smuzhiyun unsigned int i;
191*4882a593Smuzhiyun
192*4882a593Smuzhiyun /*
193*4882a593Smuzhiyun * Only standard mode at 100kHz, fast mode at 400kHz,
194*4882a593Smuzhiyun * fast mode plus at 1MHz and high speed mode at 3.4MHz are supported.
195*4882a593Smuzhiyun */
196*4882a593Smuzhiyun for (i = 0; i < ARRAY_SIZE(supported_speeds); i++) {
197*4882a593Smuzhiyun if (t->bus_freq_hz == supported_speeds[i])
198*4882a593Smuzhiyun return 0;
199*4882a593Smuzhiyun }
200*4882a593Smuzhiyun
201*4882a593Smuzhiyun dev_err(dev->dev,
202*4882a593Smuzhiyun "%d Hz is unsupported, only 100kHz, 400kHz, 1MHz and 3.4MHz are supported\n",
203*4882a593Smuzhiyun t->bus_freq_hz);
204*4882a593Smuzhiyun
205*4882a593Smuzhiyun return -EINVAL;
206*4882a593Smuzhiyun }
207*4882a593Smuzhiyun EXPORT_SYMBOL_GPL(i2c_dw_validate_speed);
208*4882a593Smuzhiyun
209*4882a593Smuzhiyun #ifdef CONFIG_ACPI
210*4882a593Smuzhiyun
211*4882a593Smuzhiyun #include <linux/dmi.h>
212*4882a593Smuzhiyun
213*4882a593Smuzhiyun /*
214*4882a593Smuzhiyun * The HCNT/LCNT information coming from ACPI should be the most accurate
215*4882a593Smuzhiyun * for given platform. However, some systems get it wrong. On such systems
216*4882a593Smuzhiyun * we get better results by calculating those based on the input clock.
217*4882a593Smuzhiyun */
218*4882a593Smuzhiyun static const struct dmi_system_id i2c_dw_no_acpi_params[] = {
219*4882a593Smuzhiyun {
220*4882a593Smuzhiyun .ident = "Dell Inspiron 7348",
221*4882a593Smuzhiyun .matches = {
222*4882a593Smuzhiyun DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
223*4882a593Smuzhiyun DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 7348"),
224*4882a593Smuzhiyun },
225*4882a593Smuzhiyun },
226*4882a593Smuzhiyun {}
227*4882a593Smuzhiyun };
228*4882a593Smuzhiyun
i2c_dw_acpi_params(struct device * device,char method[],u16 * hcnt,u16 * lcnt,u32 * sda_hold)229*4882a593Smuzhiyun static void i2c_dw_acpi_params(struct device *device, char method[],
230*4882a593Smuzhiyun u16 *hcnt, u16 *lcnt, u32 *sda_hold)
231*4882a593Smuzhiyun {
232*4882a593Smuzhiyun struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER };
233*4882a593Smuzhiyun acpi_handle handle = ACPI_HANDLE(device);
234*4882a593Smuzhiyun union acpi_object *obj;
235*4882a593Smuzhiyun
236*4882a593Smuzhiyun if (dmi_check_system(i2c_dw_no_acpi_params))
237*4882a593Smuzhiyun return;
238*4882a593Smuzhiyun
239*4882a593Smuzhiyun if (ACPI_FAILURE(acpi_evaluate_object(handle, method, NULL, &buf)))
240*4882a593Smuzhiyun return;
241*4882a593Smuzhiyun
242*4882a593Smuzhiyun obj = (union acpi_object *)buf.pointer;
243*4882a593Smuzhiyun if (obj->type == ACPI_TYPE_PACKAGE && obj->package.count == 3) {
244*4882a593Smuzhiyun const union acpi_object *objs = obj->package.elements;
245*4882a593Smuzhiyun
246*4882a593Smuzhiyun *hcnt = (u16)objs[0].integer.value;
247*4882a593Smuzhiyun *lcnt = (u16)objs[1].integer.value;
248*4882a593Smuzhiyun *sda_hold = (u32)objs[2].integer.value;
249*4882a593Smuzhiyun }
250*4882a593Smuzhiyun
251*4882a593Smuzhiyun kfree(buf.pointer);
252*4882a593Smuzhiyun }
253*4882a593Smuzhiyun
i2c_dw_acpi_configure(struct device * device)254*4882a593Smuzhiyun int i2c_dw_acpi_configure(struct device *device)
255*4882a593Smuzhiyun {
256*4882a593Smuzhiyun struct dw_i2c_dev *dev = dev_get_drvdata(device);
257*4882a593Smuzhiyun struct i2c_timings *t = &dev->timings;
258*4882a593Smuzhiyun u32 ss_ht = 0, fp_ht = 0, hs_ht = 0, fs_ht = 0;
259*4882a593Smuzhiyun
260*4882a593Smuzhiyun /*
261*4882a593Smuzhiyun * Try to get SDA hold time and *CNT values from an ACPI method for
262*4882a593Smuzhiyun * selected speed modes.
263*4882a593Smuzhiyun */
264*4882a593Smuzhiyun i2c_dw_acpi_params(device, "SSCN", &dev->ss_hcnt, &dev->ss_lcnt, &ss_ht);
265*4882a593Smuzhiyun i2c_dw_acpi_params(device, "FPCN", &dev->fp_hcnt, &dev->fp_lcnt, &fp_ht);
266*4882a593Smuzhiyun i2c_dw_acpi_params(device, "HSCN", &dev->hs_hcnt, &dev->hs_lcnt, &hs_ht);
267*4882a593Smuzhiyun i2c_dw_acpi_params(device, "FMCN", &dev->fs_hcnt, &dev->fs_lcnt, &fs_ht);
268*4882a593Smuzhiyun
269*4882a593Smuzhiyun switch (t->bus_freq_hz) {
270*4882a593Smuzhiyun case I2C_MAX_STANDARD_MODE_FREQ:
271*4882a593Smuzhiyun dev->sda_hold_time = ss_ht;
272*4882a593Smuzhiyun break;
273*4882a593Smuzhiyun case I2C_MAX_FAST_MODE_PLUS_FREQ:
274*4882a593Smuzhiyun dev->sda_hold_time = fp_ht;
275*4882a593Smuzhiyun break;
276*4882a593Smuzhiyun case I2C_MAX_HIGH_SPEED_MODE_FREQ:
277*4882a593Smuzhiyun dev->sda_hold_time = hs_ht;
278*4882a593Smuzhiyun break;
279*4882a593Smuzhiyun case I2C_MAX_FAST_MODE_FREQ:
280*4882a593Smuzhiyun default:
281*4882a593Smuzhiyun dev->sda_hold_time = fs_ht;
282*4882a593Smuzhiyun break;
283*4882a593Smuzhiyun }
284*4882a593Smuzhiyun
285*4882a593Smuzhiyun return 0;
286*4882a593Smuzhiyun }
287*4882a593Smuzhiyun EXPORT_SYMBOL_GPL(i2c_dw_acpi_configure);
288*4882a593Smuzhiyun
i2c_dw_acpi_round_bus_speed(struct device * device)289*4882a593Smuzhiyun static u32 i2c_dw_acpi_round_bus_speed(struct device *device)
290*4882a593Smuzhiyun {
291*4882a593Smuzhiyun u32 acpi_speed;
292*4882a593Smuzhiyun int i;
293*4882a593Smuzhiyun
294*4882a593Smuzhiyun acpi_speed = i2c_acpi_find_bus_speed(device);
295*4882a593Smuzhiyun /*
296*4882a593Smuzhiyun * Some DSTDs use a non standard speed, round down to the lowest
297*4882a593Smuzhiyun * standard speed.
298*4882a593Smuzhiyun */
299*4882a593Smuzhiyun for (i = 0; i < ARRAY_SIZE(supported_speeds); i++) {
300*4882a593Smuzhiyun if (acpi_speed >= supported_speeds[i])
301*4882a593Smuzhiyun return supported_speeds[i];
302*4882a593Smuzhiyun }
303*4882a593Smuzhiyun
304*4882a593Smuzhiyun return 0;
305*4882a593Smuzhiyun }
306*4882a593Smuzhiyun
307*4882a593Smuzhiyun #else /* CONFIG_ACPI */
308*4882a593Smuzhiyun
i2c_dw_acpi_round_bus_speed(struct device * device)309*4882a593Smuzhiyun static inline u32 i2c_dw_acpi_round_bus_speed(struct device *device) { return 0; }
310*4882a593Smuzhiyun
311*4882a593Smuzhiyun #endif /* CONFIG_ACPI */
312*4882a593Smuzhiyun
i2c_dw_adjust_bus_speed(struct dw_i2c_dev * dev)313*4882a593Smuzhiyun void i2c_dw_adjust_bus_speed(struct dw_i2c_dev *dev)
314*4882a593Smuzhiyun {
315*4882a593Smuzhiyun u32 acpi_speed = i2c_dw_acpi_round_bus_speed(dev->dev);
316*4882a593Smuzhiyun struct i2c_timings *t = &dev->timings;
317*4882a593Smuzhiyun
318*4882a593Smuzhiyun /*
319*4882a593Smuzhiyun * Find bus speed from the "clock-frequency" device property, ACPI
320*4882a593Smuzhiyun * or by using fast mode if neither is set.
321*4882a593Smuzhiyun */
322*4882a593Smuzhiyun if (acpi_speed && t->bus_freq_hz)
323*4882a593Smuzhiyun t->bus_freq_hz = min(t->bus_freq_hz, acpi_speed);
324*4882a593Smuzhiyun else if (acpi_speed || t->bus_freq_hz)
325*4882a593Smuzhiyun t->bus_freq_hz = max(t->bus_freq_hz, acpi_speed);
326*4882a593Smuzhiyun else
327*4882a593Smuzhiyun t->bus_freq_hz = I2C_MAX_FAST_MODE_FREQ;
328*4882a593Smuzhiyun }
329*4882a593Smuzhiyun EXPORT_SYMBOL_GPL(i2c_dw_adjust_bus_speed);
330*4882a593Smuzhiyun
i2c_dw_scl_hcnt(u32 ic_clk,u32 tSYMBOL,u32 tf,int cond,int offset)331*4882a593Smuzhiyun u32 i2c_dw_scl_hcnt(u32 ic_clk, u32 tSYMBOL, u32 tf, int cond, int offset)
332*4882a593Smuzhiyun {
333*4882a593Smuzhiyun /*
334*4882a593Smuzhiyun * DesignWare I2C core doesn't seem to have solid strategy to meet
335*4882a593Smuzhiyun * the tHD;STA timing spec. Configuring _HCNT based on tHIGH spec
336*4882a593Smuzhiyun * will result in violation of the tHD;STA spec.
337*4882a593Smuzhiyun */
338*4882a593Smuzhiyun if (cond)
339*4882a593Smuzhiyun /*
340*4882a593Smuzhiyun * Conditional expression:
341*4882a593Smuzhiyun *
342*4882a593Smuzhiyun * IC_[FS]S_SCL_HCNT + (1+4+3) >= IC_CLK * tHIGH
343*4882a593Smuzhiyun *
344*4882a593Smuzhiyun * This is based on the DW manuals, and represents an ideal
345*4882a593Smuzhiyun * configuration. The resulting I2C bus speed will be
346*4882a593Smuzhiyun * faster than any of the others.
347*4882a593Smuzhiyun *
348*4882a593Smuzhiyun * If your hardware is free from tHD;STA issue, try this one.
349*4882a593Smuzhiyun */
350*4882a593Smuzhiyun return (ic_clk * tSYMBOL + 500000) / 1000000 - 8 + offset;
351*4882a593Smuzhiyun else
352*4882a593Smuzhiyun /*
353*4882a593Smuzhiyun * Conditional expression:
354*4882a593Smuzhiyun *
355*4882a593Smuzhiyun * IC_[FS]S_SCL_HCNT + 3 >= IC_CLK * (tHD;STA + tf)
356*4882a593Smuzhiyun *
357*4882a593Smuzhiyun * This is just experimental rule; the tHD;STA period turned
358*4882a593Smuzhiyun * out to be proportinal to (_HCNT + 3). With this setting,
359*4882a593Smuzhiyun * we could meet both tHIGH and tHD;STA timing specs.
360*4882a593Smuzhiyun *
361*4882a593Smuzhiyun * If unsure, you'd better to take this alternative.
362*4882a593Smuzhiyun *
363*4882a593Smuzhiyun * The reason why we need to take into account "tf" here,
364*4882a593Smuzhiyun * is the same as described in i2c_dw_scl_lcnt().
365*4882a593Smuzhiyun */
366*4882a593Smuzhiyun return (ic_clk * (tSYMBOL + tf) + 500000) / 1000000
367*4882a593Smuzhiyun - 3 + offset;
368*4882a593Smuzhiyun }
369*4882a593Smuzhiyun
i2c_dw_scl_lcnt(u32 ic_clk,u32 tLOW,u32 tf,int offset)370*4882a593Smuzhiyun u32 i2c_dw_scl_lcnt(u32 ic_clk, u32 tLOW, u32 tf, int offset)
371*4882a593Smuzhiyun {
372*4882a593Smuzhiyun /*
373*4882a593Smuzhiyun * Conditional expression:
374*4882a593Smuzhiyun *
375*4882a593Smuzhiyun * IC_[FS]S_SCL_LCNT + 1 >= IC_CLK * (tLOW + tf)
376*4882a593Smuzhiyun *
377*4882a593Smuzhiyun * DW I2C core starts counting the SCL CNTs for the LOW period
378*4882a593Smuzhiyun * of the SCL clock (tLOW) as soon as it pulls the SCL line.
379*4882a593Smuzhiyun * In order to meet the tLOW timing spec, we need to take into
380*4882a593Smuzhiyun * account the fall time of SCL signal (tf). Default tf value
381*4882a593Smuzhiyun * should be 0.3 us, for safety.
382*4882a593Smuzhiyun */
383*4882a593Smuzhiyun return ((ic_clk * (tLOW + tf) + 500000) / 1000000) - 1 + offset;
384*4882a593Smuzhiyun }
385*4882a593Smuzhiyun
i2c_dw_set_sda_hold(struct dw_i2c_dev * dev)386*4882a593Smuzhiyun int i2c_dw_set_sda_hold(struct dw_i2c_dev *dev)
387*4882a593Smuzhiyun {
388*4882a593Smuzhiyun u32 reg;
389*4882a593Smuzhiyun int ret;
390*4882a593Smuzhiyun
391*4882a593Smuzhiyun ret = i2c_dw_acquire_lock(dev);
392*4882a593Smuzhiyun if (ret)
393*4882a593Smuzhiyun return ret;
394*4882a593Smuzhiyun
395*4882a593Smuzhiyun /* Configure SDA Hold Time if required */
396*4882a593Smuzhiyun ret = regmap_read(dev->map, DW_IC_COMP_VERSION, ®);
397*4882a593Smuzhiyun if (ret)
398*4882a593Smuzhiyun goto err_release_lock;
399*4882a593Smuzhiyun
400*4882a593Smuzhiyun if (reg >= DW_IC_SDA_HOLD_MIN_VERS) {
401*4882a593Smuzhiyun if (!dev->sda_hold_time) {
402*4882a593Smuzhiyun /* Keep previous hold time setting if no one set it */
403*4882a593Smuzhiyun ret = regmap_read(dev->map, DW_IC_SDA_HOLD,
404*4882a593Smuzhiyun &dev->sda_hold_time);
405*4882a593Smuzhiyun if (ret)
406*4882a593Smuzhiyun goto err_release_lock;
407*4882a593Smuzhiyun }
408*4882a593Smuzhiyun
409*4882a593Smuzhiyun /*
410*4882a593Smuzhiyun * Workaround for avoiding TX arbitration lost in case I2C
411*4882a593Smuzhiyun * slave pulls SDA down "too quickly" after falling edge of
412*4882a593Smuzhiyun * SCL by enabling non-zero SDA RX hold. Specification says it
413*4882a593Smuzhiyun * extends incoming SDA low to high transition while SCL is
414*4882a593Smuzhiyun * high but it appears to help also above issue.
415*4882a593Smuzhiyun */
416*4882a593Smuzhiyun if (!(dev->sda_hold_time & DW_IC_SDA_HOLD_RX_MASK))
417*4882a593Smuzhiyun dev->sda_hold_time |= 1 << DW_IC_SDA_HOLD_RX_SHIFT;
418*4882a593Smuzhiyun
419*4882a593Smuzhiyun dev_dbg(dev->dev, "SDA Hold Time TX:RX = %d:%d\n",
420*4882a593Smuzhiyun dev->sda_hold_time & ~(u32)DW_IC_SDA_HOLD_RX_MASK,
421*4882a593Smuzhiyun dev->sda_hold_time >> DW_IC_SDA_HOLD_RX_SHIFT);
422*4882a593Smuzhiyun } else if (dev->set_sda_hold_time) {
423*4882a593Smuzhiyun dev->set_sda_hold_time(dev);
424*4882a593Smuzhiyun } else if (dev->sda_hold_time) {
425*4882a593Smuzhiyun dev_warn(dev->dev,
426*4882a593Smuzhiyun "Hardware too old to adjust SDA hold time.\n");
427*4882a593Smuzhiyun dev->sda_hold_time = 0;
428*4882a593Smuzhiyun }
429*4882a593Smuzhiyun
430*4882a593Smuzhiyun err_release_lock:
431*4882a593Smuzhiyun i2c_dw_release_lock(dev);
432*4882a593Smuzhiyun
433*4882a593Smuzhiyun return ret;
434*4882a593Smuzhiyun }
435*4882a593Smuzhiyun
__i2c_dw_disable(struct dw_i2c_dev * dev)436*4882a593Smuzhiyun void __i2c_dw_disable(struct dw_i2c_dev *dev)
437*4882a593Smuzhiyun {
438*4882a593Smuzhiyun int timeout = 100;
439*4882a593Smuzhiyun u32 status;
440*4882a593Smuzhiyun
441*4882a593Smuzhiyun do {
442*4882a593Smuzhiyun __i2c_dw_disable_nowait(dev);
443*4882a593Smuzhiyun /*
444*4882a593Smuzhiyun * The enable status register may be unimplemented, but
445*4882a593Smuzhiyun * in that case this test reads zero and exits the loop.
446*4882a593Smuzhiyun */
447*4882a593Smuzhiyun regmap_read(dev->map, DW_IC_ENABLE_STATUS, &status);
448*4882a593Smuzhiyun if ((status & 1) == 0)
449*4882a593Smuzhiyun return;
450*4882a593Smuzhiyun
451*4882a593Smuzhiyun /*
452*4882a593Smuzhiyun * Wait 10 times the signaling period of the highest I2C
453*4882a593Smuzhiyun * transfer supported by the driver (for 400KHz this is
454*4882a593Smuzhiyun * 25us) as described in the DesignWare I2C databook.
455*4882a593Smuzhiyun */
456*4882a593Smuzhiyun usleep_range(25, 250);
457*4882a593Smuzhiyun } while (timeout--);
458*4882a593Smuzhiyun
459*4882a593Smuzhiyun dev_warn(dev->dev, "timeout in disabling adapter\n");
460*4882a593Smuzhiyun }
461*4882a593Smuzhiyun
i2c_dw_clk_rate(struct dw_i2c_dev * dev)462*4882a593Smuzhiyun unsigned long i2c_dw_clk_rate(struct dw_i2c_dev *dev)
463*4882a593Smuzhiyun {
464*4882a593Smuzhiyun /*
465*4882a593Smuzhiyun * Clock is not necessary if we got LCNT/HCNT values directly from
466*4882a593Smuzhiyun * the platform code.
467*4882a593Smuzhiyun */
468*4882a593Smuzhiyun if (WARN_ON_ONCE(!dev->get_clk_rate_khz))
469*4882a593Smuzhiyun return 0;
470*4882a593Smuzhiyun return dev->get_clk_rate_khz(dev);
471*4882a593Smuzhiyun }
472*4882a593Smuzhiyun
i2c_dw_prepare_clk(struct dw_i2c_dev * dev,bool prepare)473*4882a593Smuzhiyun int i2c_dw_prepare_clk(struct dw_i2c_dev *dev, bool prepare)
474*4882a593Smuzhiyun {
475*4882a593Smuzhiyun int ret;
476*4882a593Smuzhiyun
477*4882a593Smuzhiyun if (prepare) {
478*4882a593Smuzhiyun /* Optional interface clock */
479*4882a593Smuzhiyun ret = clk_prepare_enable(dev->pclk);
480*4882a593Smuzhiyun if (ret)
481*4882a593Smuzhiyun return ret;
482*4882a593Smuzhiyun
483*4882a593Smuzhiyun ret = clk_prepare_enable(dev->clk);
484*4882a593Smuzhiyun if (ret)
485*4882a593Smuzhiyun clk_disable_unprepare(dev->pclk);
486*4882a593Smuzhiyun
487*4882a593Smuzhiyun return ret;
488*4882a593Smuzhiyun }
489*4882a593Smuzhiyun
490*4882a593Smuzhiyun clk_disable_unprepare(dev->clk);
491*4882a593Smuzhiyun clk_disable_unprepare(dev->pclk);
492*4882a593Smuzhiyun
493*4882a593Smuzhiyun return 0;
494*4882a593Smuzhiyun }
495*4882a593Smuzhiyun EXPORT_SYMBOL_GPL(i2c_dw_prepare_clk);
496*4882a593Smuzhiyun
i2c_dw_acquire_lock(struct dw_i2c_dev * dev)497*4882a593Smuzhiyun int i2c_dw_acquire_lock(struct dw_i2c_dev *dev)
498*4882a593Smuzhiyun {
499*4882a593Smuzhiyun int ret;
500*4882a593Smuzhiyun
501*4882a593Smuzhiyun if (!dev->acquire_lock)
502*4882a593Smuzhiyun return 0;
503*4882a593Smuzhiyun
504*4882a593Smuzhiyun ret = dev->acquire_lock();
505*4882a593Smuzhiyun if (!ret)
506*4882a593Smuzhiyun return 0;
507*4882a593Smuzhiyun
508*4882a593Smuzhiyun dev_err(dev->dev, "couldn't acquire bus ownership\n");
509*4882a593Smuzhiyun
510*4882a593Smuzhiyun return ret;
511*4882a593Smuzhiyun }
512*4882a593Smuzhiyun
i2c_dw_release_lock(struct dw_i2c_dev * dev)513*4882a593Smuzhiyun void i2c_dw_release_lock(struct dw_i2c_dev *dev)
514*4882a593Smuzhiyun {
515*4882a593Smuzhiyun if (dev->release_lock)
516*4882a593Smuzhiyun dev->release_lock();
517*4882a593Smuzhiyun }
518*4882a593Smuzhiyun
519*4882a593Smuzhiyun /*
520*4882a593Smuzhiyun * Waiting for bus not busy
521*4882a593Smuzhiyun */
i2c_dw_wait_bus_not_busy(struct dw_i2c_dev * dev)522*4882a593Smuzhiyun int i2c_dw_wait_bus_not_busy(struct dw_i2c_dev *dev)
523*4882a593Smuzhiyun {
524*4882a593Smuzhiyun u32 status;
525*4882a593Smuzhiyun int ret;
526*4882a593Smuzhiyun
527*4882a593Smuzhiyun ret = regmap_read_poll_timeout(dev->map, DW_IC_STATUS, status,
528*4882a593Smuzhiyun !(status & DW_IC_STATUS_ACTIVITY),
529*4882a593Smuzhiyun 1100, 20000);
530*4882a593Smuzhiyun if (ret) {
531*4882a593Smuzhiyun dev_warn(dev->dev, "timeout waiting for bus ready\n");
532*4882a593Smuzhiyun
533*4882a593Smuzhiyun i2c_recover_bus(&dev->adapter);
534*4882a593Smuzhiyun
535*4882a593Smuzhiyun regmap_read(dev->map, DW_IC_STATUS, &status);
536*4882a593Smuzhiyun if (!(status & DW_IC_STATUS_ACTIVITY))
537*4882a593Smuzhiyun ret = 0;
538*4882a593Smuzhiyun }
539*4882a593Smuzhiyun
540*4882a593Smuzhiyun return ret;
541*4882a593Smuzhiyun }
542*4882a593Smuzhiyun
i2c_dw_handle_tx_abort(struct dw_i2c_dev * dev)543*4882a593Smuzhiyun int i2c_dw_handle_tx_abort(struct dw_i2c_dev *dev)
544*4882a593Smuzhiyun {
545*4882a593Smuzhiyun unsigned long abort_source = dev->abort_source;
546*4882a593Smuzhiyun int i;
547*4882a593Smuzhiyun
548*4882a593Smuzhiyun if (abort_source & DW_IC_TX_ABRT_NOACK) {
549*4882a593Smuzhiyun for_each_set_bit(i, &abort_source, ARRAY_SIZE(abort_sources))
550*4882a593Smuzhiyun dev_dbg(dev->dev,
551*4882a593Smuzhiyun "%s: %s\n", __func__, abort_sources[i]);
552*4882a593Smuzhiyun return -EREMOTEIO;
553*4882a593Smuzhiyun }
554*4882a593Smuzhiyun
555*4882a593Smuzhiyun for_each_set_bit(i, &abort_source, ARRAY_SIZE(abort_sources))
556*4882a593Smuzhiyun dev_err(dev->dev, "%s: %s\n", __func__, abort_sources[i]);
557*4882a593Smuzhiyun
558*4882a593Smuzhiyun if (abort_source & DW_IC_TX_ARB_LOST)
559*4882a593Smuzhiyun return -EAGAIN;
560*4882a593Smuzhiyun else if (abort_source & DW_IC_TX_ABRT_GCALL_READ)
561*4882a593Smuzhiyun return -EINVAL; /* wrong msgs[] data */
562*4882a593Smuzhiyun else
563*4882a593Smuzhiyun return -EIO;
564*4882a593Smuzhiyun }
565*4882a593Smuzhiyun
i2c_dw_set_fifo_size(struct dw_i2c_dev * dev)566*4882a593Smuzhiyun int i2c_dw_set_fifo_size(struct dw_i2c_dev *dev)
567*4882a593Smuzhiyun {
568*4882a593Smuzhiyun u32 param, tx_fifo_depth, rx_fifo_depth;
569*4882a593Smuzhiyun int ret;
570*4882a593Smuzhiyun
571*4882a593Smuzhiyun /*
572*4882a593Smuzhiyun * Try to detect the FIFO depth if not set by interface driver,
573*4882a593Smuzhiyun * the depth could be from 2 to 256 from HW spec.
574*4882a593Smuzhiyun */
575*4882a593Smuzhiyun ret = regmap_read(dev->map, DW_IC_COMP_PARAM_1, ¶m);
576*4882a593Smuzhiyun if (ret)
577*4882a593Smuzhiyun return ret;
578*4882a593Smuzhiyun
579*4882a593Smuzhiyun tx_fifo_depth = ((param >> 16) & 0xff) + 1;
580*4882a593Smuzhiyun rx_fifo_depth = ((param >> 8) & 0xff) + 1;
581*4882a593Smuzhiyun if (!dev->tx_fifo_depth) {
582*4882a593Smuzhiyun dev->tx_fifo_depth = tx_fifo_depth;
583*4882a593Smuzhiyun dev->rx_fifo_depth = rx_fifo_depth;
584*4882a593Smuzhiyun } else if (tx_fifo_depth >= 2) {
585*4882a593Smuzhiyun dev->tx_fifo_depth = min_t(u32, dev->tx_fifo_depth,
586*4882a593Smuzhiyun tx_fifo_depth);
587*4882a593Smuzhiyun dev->rx_fifo_depth = min_t(u32, dev->rx_fifo_depth,
588*4882a593Smuzhiyun rx_fifo_depth);
589*4882a593Smuzhiyun }
590*4882a593Smuzhiyun
591*4882a593Smuzhiyun return 0;
592*4882a593Smuzhiyun }
593*4882a593Smuzhiyun
i2c_dw_func(struct i2c_adapter * adap)594*4882a593Smuzhiyun u32 i2c_dw_func(struct i2c_adapter *adap)
595*4882a593Smuzhiyun {
596*4882a593Smuzhiyun struct dw_i2c_dev *dev = i2c_get_adapdata(adap);
597*4882a593Smuzhiyun
598*4882a593Smuzhiyun return dev->functionality;
599*4882a593Smuzhiyun }
600*4882a593Smuzhiyun
i2c_dw_disable(struct dw_i2c_dev * dev)601*4882a593Smuzhiyun void i2c_dw_disable(struct dw_i2c_dev *dev)
602*4882a593Smuzhiyun {
603*4882a593Smuzhiyun u32 dummy;
604*4882a593Smuzhiyun
605*4882a593Smuzhiyun /* Disable controller */
606*4882a593Smuzhiyun __i2c_dw_disable(dev);
607*4882a593Smuzhiyun
608*4882a593Smuzhiyun /* Disable all interrupts */
609*4882a593Smuzhiyun regmap_write(dev->map, DW_IC_INTR_MASK, 0);
610*4882a593Smuzhiyun regmap_read(dev->map, DW_IC_CLR_INTR, &dummy);
611*4882a593Smuzhiyun }
612*4882a593Smuzhiyun
i2c_dw_disable_int(struct dw_i2c_dev * dev)613*4882a593Smuzhiyun void i2c_dw_disable_int(struct dw_i2c_dev *dev)
614*4882a593Smuzhiyun {
615*4882a593Smuzhiyun regmap_write(dev->map, DW_IC_INTR_MASK, 0);
616*4882a593Smuzhiyun }
617*4882a593Smuzhiyun
618*4882a593Smuzhiyun MODULE_DESCRIPTION("Synopsys DesignWare I2C bus adapter core");
619*4882a593Smuzhiyun MODULE_LICENSE("GPL");
620