blob: 063e726dde117581e1a233d10e52d7a23d936dd3 [file] [log] [blame]
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301/*
Linus Walleij1804edd2010-09-23 09:03:40 +02002 * Copyright (C) 2009 ST-Ericsson SA
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05303 * Copyright (C) 2009 STMicroelectronics
4 *
5 * I2C master mode controller driver, used in Nomadik 8815
6 * and Ux500 platforms.
7 *
8 * Author: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
9 * Author: Sachin Verma <sachin.verma@st.com>
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2, as
13 * published by the Free Software Foundation.
14 */
15#include <linux/init.h>
16#include <linux/module.h>
Alessandro Rubini23560212012-06-11 22:56:38 +020017#include <linux/amba/bus.h>
Tejun Heo5a0e3ad2010-03-24 17:04:11 +090018#include <linux/slab.h>
srinidhi kasagar3f9900f2010-02-01 19:44:54 +053019#include <linux/interrupt.h>
20#include <linux/i2c.h>
21#include <linux/err.h>
22#include <linux/clk.h>
23#include <linux/io.h>
Rabin Vincentb0e751a2011-05-13 12:30:07 +020024#include <linux/pm_runtime.h>
Alessandro Rubiniaf97bac2012-06-11 22:56:26 +020025#include <linux/platform_data/i2c-nomadik.h>
Lee Jones43fea582012-08-06 11:09:57 +010026#include <linux/of.h>
27#include <linux/of_i2c.h>
Patrice Chotard24e9e152013-01-24 09:47:22 +010028#include <linux/pinctrl/consumer.h>
srinidhi kasagar3f9900f2010-02-01 19:44:54 +053029
30#define DRIVER_NAME "nmk-i2c"
31
32/* I2C Controller register offsets */
33#define I2C_CR (0x000)
34#define I2C_SCR (0x004)
35#define I2C_HSMCR (0x008)
36#define I2C_MCR (0x00C)
37#define I2C_TFR (0x010)
38#define I2C_SR (0x014)
39#define I2C_RFR (0x018)
40#define I2C_TFTR (0x01C)
41#define I2C_RFTR (0x020)
42#define I2C_DMAR (0x024)
43#define I2C_BRCR (0x028)
44#define I2C_IMSCR (0x02C)
45#define I2C_RISR (0x030)
46#define I2C_MISR (0x034)
47#define I2C_ICR (0x038)
48
49/* Control registers */
50#define I2C_CR_PE (0x1 << 0) /* Peripheral Enable */
51#define I2C_CR_OM (0x3 << 1) /* Operating mode */
52#define I2C_CR_SAM (0x1 << 3) /* Slave addressing mode */
53#define I2C_CR_SM (0x3 << 4) /* Speed mode */
54#define I2C_CR_SGCM (0x1 << 6) /* Slave general call mode */
55#define I2C_CR_FTX (0x1 << 7) /* Flush Transmit */
56#define I2C_CR_FRX (0x1 << 8) /* Flush Receive */
57#define I2C_CR_DMA_TX_EN (0x1 << 9) /* DMA Tx enable */
58#define I2C_CR_DMA_RX_EN (0x1 << 10) /* DMA Rx Enable */
59#define I2C_CR_DMA_SLE (0x1 << 11) /* DMA sync. logic enable */
60#define I2C_CR_LM (0x1 << 12) /* Loopback mode */
61#define I2C_CR_FON (0x3 << 13) /* Filtering on */
62#define I2C_CR_FS (0x3 << 15) /* Force stop enable */
63
64/* Master controller (MCR) register */
65#define I2C_MCR_OP (0x1 << 0) /* Operation */
66#define I2C_MCR_A7 (0x7f << 1) /* 7-bit address */
Jonas Aaberg8abf6fbb2011-10-20 18:23:01 +020067#define I2C_MCR_EA10 (0x7 << 8) /* 10-bit Extended address */
srinidhi kasagar3f9900f2010-02-01 19:44:54 +053068#define I2C_MCR_SB (0x1 << 11) /* Extended address */
69#define I2C_MCR_AM (0x3 << 12) /* Address type */
Jonas Aaberg8abf6fbb2011-10-20 18:23:01 +020070#define I2C_MCR_STOP (0x1 << 14) /* Stop condition */
71#define I2C_MCR_LENGTH (0x7ff << 15) /* Transaction length */
srinidhi kasagar3f9900f2010-02-01 19:44:54 +053072
73/* Status register (SR) */
74#define I2C_SR_OP (0x3 << 0) /* Operation */
75#define I2C_SR_STATUS (0x3 << 2) /* controller status */
76#define I2C_SR_CAUSE (0x7 << 4) /* Abort cause */
77#define I2C_SR_TYPE (0x3 << 7) /* Receive type */
78#define I2C_SR_LENGTH (0x7ff << 9) /* Transfer length */
79
80/* Interrupt mask set/clear (IMSCR) bits */
Jonas Aaberg8abf6fbb2011-10-20 18:23:01 +020081#define I2C_IT_TXFE (0x1 << 0)
srinidhi kasagar3f9900f2010-02-01 19:44:54 +053082#define I2C_IT_TXFNE (0x1 << 1)
83#define I2C_IT_TXFF (0x1 << 2)
84#define I2C_IT_TXFOVR (0x1 << 3)
85#define I2C_IT_RXFE (0x1 << 4)
86#define I2C_IT_RXFNF (0x1 << 5)
87#define I2C_IT_RXFF (0x1 << 6)
88#define I2C_IT_RFSR (0x1 << 16)
89#define I2C_IT_RFSE (0x1 << 17)
90#define I2C_IT_WTSR (0x1 << 18)
91#define I2C_IT_MTD (0x1 << 19)
92#define I2C_IT_STD (0x1 << 20)
93#define I2C_IT_MAL (0x1 << 24)
94#define I2C_IT_BERR (0x1 << 25)
95#define I2C_IT_MTDWS (0x1 << 28)
96
97#define GEN_MASK(val, mask, sb) (((val) << (sb)) & (mask))
98
99/* some bits in ICR are reserved */
100#define I2C_CLEAR_ALL_INTS 0x131f007f
101
102/* first three msb bits are reserved */
103#define IRQ_MASK(mask) (mask & 0x1fffffff)
104
105/* maximum threshold value */
106#define MAX_I2C_FIFO_THRESHOLD 15
107
Linus Walleij3a205be2013-06-10 00:00:58 +0200108/**
109 * struct i2c_vendor_data - per-vendor variations
110 * @has_mtdws: variant has the MTDWS bit
111 * @fifodepth: variant FIFO depth
112 */
113struct i2c_vendor_data {
114 bool has_mtdws;
115 u32 fifodepth;
116};
117
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530118enum i2c_status {
119 I2C_NOP,
120 I2C_ON_GOING,
121 I2C_OK,
122 I2C_ABORT
123};
124
125/* operation */
126enum i2c_operation {
127 I2C_NO_OPERATION = 0xff,
128 I2C_WRITE = 0x00,
129 I2C_READ = 0x01
130};
131
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530132/**
133 * struct i2c_nmk_client - client specific data
134 * @slave_adr: 7-bit slave address
Lucas De Marchi25985ed2011-03-30 22:57:33 -0300135 * @count: no. bytes to be transferred
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530136 * @buffer: client data buffer
Lucas De Marchi25985ed2011-03-30 22:57:33 -0300137 * @xfer_bytes: bytes transferred till now
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530138 * @operation: current I2C operation
139 */
140struct i2c_nmk_client {
141 unsigned short slave_adr;
142 unsigned long count;
143 unsigned char *buffer;
144 unsigned long xfer_bytes;
145 enum i2c_operation operation;
146};
147
148/**
Jonas Aaberg8abf6fbb2011-10-20 18:23:01 +0200149 * struct nmk_i2c_dev - private data structure of the controller.
Linus Walleij3a205be2013-06-10 00:00:58 +0200150 * @vendor: vendor data for this variant.
Alessandro Rubini23560212012-06-11 22:56:38 +0200151 * @adev: parent amba device.
Jonas Aaberg8abf6fbb2011-10-20 18:23:01 +0200152 * @adap: corresponding I2C adapter.
153 * @irq: interrupt line for the controller.
154 * @virtbase: virtual io memory area.
155 * @clk: hardware i2c block clock.
156 * @cfg: machine provided controller configuration.
157 * @cli: holder of client specific data.
158 * @stop: stop condition.
159 * @xfer_complete: acknowledge completion for a I2C message.
160 * @result: controller propogated result.
Patrice Chotard24e9e152013-01-24 09:47:22 +0100161 * @pinctrl: pinctrl handle.
162 * @pins_default: default state for the pins.
163 * @pins_idle: idle state for the pins.
164 * @pins_sleep: sleep state for the pins.
Jonas Aaberg8abf6fbb2011-10-20 18:23:01 +0200165 * @busy: Busy doing transfer.
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530166 */
167struct nmk_i2c_dev {
Linus Walleij3a205be2013-06-10 00:00:58 +0200168 struct i2c_vendor_data *vendor;
Alessandro Rubini23560212012-06-11 22:56:38 +0200169 struct amba_device *adev;
Jonas Aaberg8abf6fbb2011-10-20 18:23:01 +0200170 struct i2c_adapter adap;
171 int irq;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530172 void __iomem *virtbase;
173 struct clk *clk;
174 struct nmk_i2c_controller cfg;
175 struct i2c_nmk_client cli;
Jonas Aaberg8abf6fbb2011-10-20 18:23:01 +0200176 int stop;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530177 struct completion xfer_complete;
Jonas Aaberg8abf6fbb2011-10-20 18:23:01 +0200178 int result;
Patrice Chotard24e9e152013-01-24 09:47:22 +0100179 /* Three pin states - default, idle & sleep */
180 struct pinctrl *pinctrl;
181 struct pinctrl_state *pins_default;
182 struct pinctrl_state *pins_idle;
183 struct pinctrl_state *pins_sleep;
Jonas Aberga20d2392011-05-13 12:29:02 +0200184 bool busy;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530185};
186
187/* controller's abort causes */
188static const char *abort_causes[] = {
189 "no ack received after address transmission",
190 "no ack received during data phase",
191 "ack received after xmission of master code",
192 "master lost arbitration",
193 "slave restarts",
194 "slave reset",
195 "overflow, maxsize is 2047 bytes",
196};
197
198static inline void i2c_set_bit(void __iomem *reg, u32 mask)
199{
200 writel(readl(reg) | mask, reg);
201}
202
203static inline void i2c_clr_bit(void __iomem *reg, u32 mask)
204{
205 writel(readl(reg) & ~mask, reg);
206}
207
208/**
209 * flush_i2c_fifo() - This function flushes the I2C FIFO
210 * @dev: private data of I2C Driver
211 *
212 * This function flushes the I2C Tx and Rx FIFOs. It returns
213 * 0 on successful flushing of FIFO
214 */
215static int flush_i2c_fifo(struct nmk_i2c_dev *dev)
216{
217#define LOOP_ATTEMPTS 10
218 int i;
219 unsigned long timeout;
220
221 /*
222 * flush the transmit and receive FIFO. The flushing
223 * operation takes several cycles before to be completed.
224 * On the completion, the I2C internal logic clears these
225 * bits, until then no one must access Tx, Rx FIFO and
226 * should poll on these bits waiting for the completion.
227 */
228 writel((I2C_CR_FTX | I2C_CR_FRX), dev->virtbase + I2C_CR);
229
230 for (i = 0; i < LOOP_ATTEMPTS; i++) {
Virupax Sadashivpetimathcd20e4f2011-05-13 12:29:46 +0200231 timeout = jiffies + dev->adap.timeout;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530232
233 while (!time_after(jiffies, timeout)) {
234 if ((readl(dev->virtbase + I2C_CR) &
235 (I2C_CR_FTX | I2C_CR_FRX)) == 0)
236 return 0;
237 }
238 }
239
Alessandro Rubini23560212012-06-11 22:56:38 +0200240 dev_err(&dev->adev->dev,
Jonas Aaberg8abf6fbb2011-10-20 18:23:01 +0200241 "flushing operation timed out giving up after %d attempts",
242 LOOP_ATTEMPTS);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530243
244 return -ETIMEDOUT;
245}
246
247/**
248 * disable_all_interrupts() - Disable all interrupts of this I2c Bus
249 * @dev: private data of I2C Driver
250 */
251static void disable_all_interrupts(struct nmk_i2c_dev *dev)
252{
253 u32 mask = IRQ_MASK(0);
254 writel(mask, dev->virtbase + I2C_IMSCR);
255}
256
257/**
258 * clear_all_interrupts() - Clear all interrupts of I2C Controller
259 * @dev: private data of I2C Driver
260 */
261static void clear_all_interrupts(struct nmk_i2c_dev *dev)
262{
263 u32 mask;
264 mask = IRQ_MASK(I2C_CLEAR_ALL_INTS);
265 writel(mask, dev->virtbase + I2C_ICR);
266}
267
268/**
269 * init_hw() - initialize the I2C hardware
270 * @dev: private data of I2C Driver
271 */
272static int init_hw(struct nmk_i2c_dev *dev)
273{
274 int stat;
275
276 stat = flush_i2c_fifo(dev);
277 if (stat)
Jonas Aberga20d2392011-05-13 12:29:02 +0200278 goto exit;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530279
280 /* disable the controller */
281 i2c_clr_bit(dev->virtbase + I2C_CR , I2C_CR_PE);
282
283 disable_all_interrupts(dev);
284
285 clear_all_interrupts(dev);
286
287 dev->cli.operation = I2C_NO_OPERATION;
288
Jonas Aberga20d2392011-05-13 12:29:02 +0200289exit:
Jonas Aberga20d2392011-05-13 12:29:02 +0200290 return stat;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530291}
292
293/* enable peripheral, master mode operation */
Jonas Aaberg8abf6fbb2011-10-20 18:23:01 +0200294#define DEFAULT_I2C_REG_CR ((1 << 1) | I2C_CR_PE)
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530295
296/**
297 * load_i2c_mcr_reg() - load the MCR register
298 * @dev: private data of controller
Virupax Sadashivpetimath51a0c8d2012-06-25 17:56:07 +0530299 * @flags: message flags
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530300 */
Virupax Sadashivpetimath51a0c8d2012-06-25 17:56:07 +0530301static u32 load_i2c_mcr_reg(struct nmk_i2c_dev *dev, u16 flags)
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530302{
303 u32 mcr = 0;
Virupax Sadashivpetimath51a0c8d2012-06-25 17:56:07 +0530304 unsigned short slave_adr_3msb_bits;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530305
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530306 mcr |= GEN_MASK(dev->cli.slave_adr, I2C_MCR_A7, 1);
307
Virupax Sadashivpetimath51a0c8d2012-06-25 17:56:07 +0530308 if (unlikely(flags & I2C_M_TEN)) {
309 /* 10-bit address transaction */
310 mcr |= GEN_MASK(2, I2C_MCR_AM, 12);
311 /*
312 * Get the top 3 bits.
313 * EA10 represents extended address in MCR. This includes
314 * the extension (MSB bits) of the 7 bit address loaded
315 * in A7
316 */
317 slave_adr_3msb_bits = (dev->cli.slave_adr >> 7) & 0x7;
318
319 mcr |= GEN_MASK(slave_adr_3msb_bits, I2C_MCR_EA10, 8);
320 } else {
321 /* 7-bit address transaction */
322 mcr |= GEN_MASK(1, I2C_MCR_AM, 12);
323 }
324
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530325 /* start byte procedure not applied */
326 mcr |= GEN_MASK(0, I2C_MCR_SB, 11);
327
328 /* check the operation, master read/write? */
329 if (dev->cli.operation == I2C_WRITE)
330 mcr |= GEN_MASK(I2C_WRITE, I2C_MCR_OP, 0);
331 else
332 mcr |= GEN_MASK(I2C_READ, I2C_MCR_OP, 0);
333
334 /* stop or repeated start? */
335 if (dev->stop)
336 mcr |= GEN_MASK(1, I2C_MCR_STOP, 14);
337 else
338 mcr &= ~(GEN_MASK(1, I2C_MCR_STOP, 14));
339
340 mcr |= GEN_MASK(dev->cli.count, I2C_MCR_LENGTH, 15);
341
342 return mcr;
343}
344
345/**
346 * setup_i2c_controller() - setup the controller
347 * @dev: private data of controller
348 */
349static void setup_i2c_controller(struct nmk_i2c_dev *dev)
350{
351 u32 brcr1, brcr2;
352 u32 i2c_clk, div;
353
354 writel(0x0, dev->virtbase + I2C_CR);
355 writel(0x0, dev->virtbase + I2C_HSMCR);
356 writel(0x0, dev->virtbase + I2C_TFTR);
357 writel(0x0, dev->virtbase + I2C_RFTR);
358 writel(0x0, dev->virtbase + I2C_DMAR);
359
360 /*
361 * set the slsu:
362 *
363 * slsu defines the data setup time after SCL clock
364 * stretching in terms of i2c clk cycles. The
365 * needed setup time for the three modes are 250ns,
Lucas De Marchi25985ed2011-03-30 22:57:33 -0300366 * 100ns, 10ns respectively thus leading to the values
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530367 * of 14, 6, 2 for a 48 MHz i2c clk.
368 */
369 writel(dev->cfg.slsu << 16, dev->virtbase + I2C_SCR);
370
371 i2c_clk = clk_get_rate(dev->clk);
372
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530373 /*
374 * The spec says, in case of std. mode the divider is
375 * 2 whereas it is 3 for fast and fastplus mode of
376 * operation. TODO - high speed support.
377 */
378 div = (dev->cfg.clk_freq > 100000) ? 3 : 2;
379
380 /*
381 * generate the mask for baud rate counters. The controller
382 * has two baud rate counters. One is used for High speed
383 * operation, and the other is for std, fast mode, fast mode
384 * plus operation. Currently we do not supprt high speed mode
385 * so set brcr1 to 0.
386 */
387 brcr1 = 0 << 16;
388 brcr2 = (i2c_clk/(dev->cfg.clk_freq * div)) & 0xffff;
389
390 /* set the baud rate counter register */
391 writel((brcr1 | brcr2), dev->virtbase + I2C_BRCR);
392
393 /*
394 * set the speed mode. Currently we support
395 * only standard and fast mode of operation
Lucas De Marchi25985ed2011-03-30 22:57:33 -0300396 * TODO - support for fast mode plus (up to 1Mb/s)
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530397 * and high speed (up to 3.4 Mb/s)
398 */
399 if (dev->cfg.sm > I2C_FREQ_MODE_FAST) {
Alessandro Rubini23560212012-06-11 22:56:38 +0200400 dev_err(&dev->adev->dev,
Jonas Aaberg8abf6fbb2011-10-20 18:23:01 +0200401 "do not support this mode defaulting to std. mode\n");
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530402 brcr2 = i2c_clk/(100000 * 2) & 0xffff;
403 writel((brcr1 | brcr2), dev->virtbase + I2C_BRCR);
404 writel(I2C_FREQ_MODE_STANDARD << 4,
405 dev->virtbase + I2C_CR);
406 }
407 writel(dev->cfg.sm << 4, dev->virtbase + I2C_CR);
408
409 /* set the Tx and Rx FIFO threshold */
410 writel(dev->cfg.tft, dev->virtbase + I2C_TFTR);
411 writel(dev->cfg.rft, dev->virtbase + I2C_RFTR);
412}
413
414/**
415 * read_i2c() - Read from I2C client device
416 * @dev: private data of I2C Driver
Virupax Sadashivpetimath51a0c8d2012-06-25 17:56:07 +0530417 * @flags: message flags
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530418 *
419 * This function reads from i2c client device when controller is in
420 * master mode. There is a completion timeout. If there is no transfer
421 * before timeout error is returned.
422 */
Virupax Sadashivpetimath51a0c8d2012-06-25 17:56:07 +0530423static int read_i2c(struct nmk_i2c_dev *dev, u16 flags)
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530424{
425 u32 status = 0;
Wolfram Sang876ae852013-01-24 11:27:46 +0100426 u32 mcr, irq_mask;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530427 int timeout;
428
Virupax Sadashivpetimath51a0c8d2012-06-25 17:56:07 +0530429 mcr = load_i2c_mcr_reg(dev, flags);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530430 writel(mcr, dev->virtbase + I2C_MCR);
431
432 /* load the current CR value */
433 writel(readl(dev->virtbase + I2C_CR) | DEFAULT_I2C_REG_CR,
434 dev->virtbase + I2C_CR);
435
436 /* enable the controller */
437 i2c_set_bit(dev->virtbase + I2C_CR, I2C_CR_PE);
438
439 init_completion(&dev->xfer_complete);
440
441 /* enable interrupts by setting the mask */
442 irq_mask = (I2C_IT_RXFNF | I2C_IT_RXFF |
443 I2C_IT_MAL | I2C_IT_BERR);
444
Linus Walleij3a205be2013-06-10 00:00:58 +0200445 if (dev->stop || !dev->vendor->has_mtdws)
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530446 irq_mask |= I2C_IT_MTD;
447 else
448 irq_mask |= I2C_IT_MTDWS;
449
450 irq_mask = I2C_CLEAR_ALL_INTS & IRQ_MASK(irq_mask);
451
452 writel(readl(dev->virtbase + I2C_IMSCR) | irq_mask,
453 dev->virtbase + I2C_IMSCR);
454
srinidhi kasagar4b723a42011-08-09 20:17:22 +0200455 timeout = wait_for_completion_timeout(
Virupax Sadashivpetimathcd20e4f2011-05-13 12:29:46 +0200456 &dev->xfer_complete, dev->adap.timeout);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530457
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530458 if (timeout == 0) {
Virupax Sadashivpetimath0511f642011-05-13 12:30:53 +0200459 /* Controller timed out */
Alessandro Rubini23560212012-06-11 22:56:38 +0200460 dev_err(&dev->adev->dev, "read from slave 0x%x timed out\n",
Virupax Sadashivpetimath4cb3f532011-05-13 12:29:55 +0200461 dev->cli.slave_adr);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530462 status = -ETIMEDOUT;
463 }
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530464 return status;
465}
466
Virupax Sadashivpetimath55355342011-05-13 12:30:34 +0200467static void fill_tx_fifo(struct nmk_i2c_dev *dev, int no_bytes)
468{
469 int count;
470
471 for (count = (no_bytes - 2);
472 (count > 0) &&
473 (dev->cli.count != 0);
474 count--) {
475 /* write to the Tx FIFO */
476 writeb(*dev->cli.buffer,
477 dev->virtbase + I2C_TFR);
478 dev->cli.buffer++;
479 dev->cli.count--;
480 dev->cli.xfer_bytes++;
481 }
482
483}
484
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530485/**
486 * write_i2c() - Write data to I2C client.
487 * @dev: private data of I2C Driver
Virupax Sadashivpetimath51a0c8d2012-06-25 17:56:07 +0530488 * @flags: message flags
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530489 *
490 * This function writes data to I2C client
491 */
Virupax Sadashivpetimath51a0c8d2012-06-25 17:56:07 +0530492static int write_i2c(struct nmk_i2c_dev *dev, u16 flags)
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530493{
494 u32 status = 0;
Wolfram Sang876ae852013-01-24 11:27:46 +0100495 u32 mcr, irq_mask;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530496 int timeout;
497
Virupax Sadashivpetimath51a0c8d2012-06-25 17:56:07 +0530498 mcr = load_i2c_mcr_reg(dev, flags);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530499
500 writel(mcr, dev->virtbase + I2C_MCR);
501
502 /* load the current CR value */
503 writel(readl(dev->virtbase + I2C_CR) | DEFAULT_I2C_REG_CR,
504 dev->virtbase + I2C_CR);
505
506 /* enable the controller */
507 i2c_set_bit(dev->virtbase + I2C_CR , I2C_CR_PE);
508
509 init_completion(&dev->xfer_complete);
510
511 /* enable interrupts by settings the masks */
Virupax Sadashivpetimath55355342011-05-13 12:30:34 +0200512 irq_mask = (I2C_IT_TXFOVR | I2C_IT_MAL | I2C_IT_BERR);
513
514 /* Fill the TX FIFO with transmit data */
515 fill_tx_fifo(dev, MAX_I2C_FIFO_THRESHOLD);
516
517 if (dev->cli.count != 0)
518 irq_mask |= I2C_IT_TXFNE;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530519
520 /*
521 * check if we want to transfer a single or multiple bytes, if so
522 * set the MTDWS bit (Master Transaction Done Without Stop)
523 * to start repeated start operation
524 */
Linus Walleij3a205be2013-06-10 00:00:58 +0200525 if (dev->stop || !dev->vendor->has_mtdws)
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530526 irq_mask |= I2C_IT_MTD;
527 else
528 irq_mask |= I2C_IT_MTDWS;
529
530 irq_mask = I2C_CLEAR_ALL_INTS & IRQ_MASK(irq_mask);
531
532 writel(readl(dev->virtbase + I2C_IMSCR) | irq_mask,
533 dev->virtbase + I2C_IMSCR);
534
srinidhi kasagar4b723a42011-08-09 20:17:22 +0200535 timeout = wait_for_completion_timeout(
Virupax Sadashivpetimathcd20e4f2011-05-13 12:29:46 +0200536 &dev->xfer_complete, dev->adap.timeout);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530537
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530538 if (timeout == 0) {
Virupax Sadashivpetimath0511f642011-05-13 12:30:53 +0200539 /* Controller timed out */
Alessandro Rubini23560212012-06-11 22:56:38 +0200540 dev_err(&dev->adev->dev, "write to slave 0x%x timed out\n",
Virupax Sadashivpetimath4cb3f532011-05-13 12:29:55 +0200541 dev->cli.slave_adr);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530542 status = -ETIMEDOUT;
543 }
544
545 return status;
546}
547
548/**
Linus Walleij82a44132011-05-13 12:31:01 +0200549 * nmk_i2c_xfer_one() - transmit a single I2C message
550 * @dev: device with a message encoded into it
551 * @flags: message flags
552 */
553static int nmk_i2c_xfer_one(struct nmk_i2c_dev *dev, u16 flags)
554{
555 int status;
556
557 if (flags & I2C_M_RD) {
558 /* read operation */
559 dev->cli.operation = I2C_READ;
Virupax Sadashivpetimath51a0c8d2012-06-25 17:56:07 +0530560 status = read_i2c(dev, flags);
Linus Walleij82a44132011-05-13 12:31:01 +0200561 } else {
562 /* write operation */
563 dev->cli.operation = I2C_WRITE;
Virupax Sadashivpetimath51a0c8d2012-06-25 17:56:07 +0530564 status = write_i2c(dev, flags);
Linus Walleij82a44132011-05-13 12:31:01 +0200565 }
566
567 if (status || (dev->result)) {
568 u32 i2c_sr;
569 u32 cause;
570
571 i2c_sr = readl(dev->virtbase + I2C_SR);
572 /*
573 * Check if the controller I2C operation status
574 * is set to ABORT(11b).
575 */
576 if (((i2c_sr >> 2) & 0x3) == 0x3) {
577 /* get the abort cause */
578 cause = (i2c_sr >> 4) & 0x7;
Alessandro Rubini23560212012-06-11 22:56:38 +0200579 dev_err(&dev->adev->dev, "%s\n",
Jonas Aaberg8abf6fbb2011-10-20 18:23:01 +0200580 cause >= ARRAY_SIZE(abort_causes) ?
Linus Walleij82a44132011-05-13 12:31:01 +0200581 "unknown reason" :
582 abort_causes[cause]);
583 }
584
585 (void) init_hw(dev);
586
587 status = status ? status : dev->result;
588 }
589
590 return status;
591}
592
593/**
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530594 * nmk_i2c_xfer() - I2C transfer function used by kernel framework
Linus Walleij1804edd2010-09-23 09:03:40 +0200595 * @i2c_adap: Adapter pointer to the controller
596 * @msgs: Pointer to data to be written.
597 * @num_msgs: Number of messages to be executed
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530598 *
599 * This is the function called by the generic kernel i2c_transfer()
600 * or i2c_smbus...() API calls. Note that this code is protected by the
601 * semaphore set in the kernel i2c_transfer() function.
602 *
603 * NOTE:
604 * READ TRANSFER : We impose a restriction of the first message to be the
Jonas Aaberg8abf6fbb2011-10-20 18:23:01 +0200605 * index message for any read transaction.
606 * - a no index is coded as '0',
607 * - 2byte big endian index is coded as '3'
608 * !!! msg[0].buf holds the actual index.
609 * This is compatible with generic messages of smbus emulator
610 * that send a one byte index.
611 * eg. a I2C transation to read 2 bytes from index 0
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530612 * idx = 0;
613 * msg[0].addr = client->addr;
614 * msg[0].flags = 0x0;
615 * msg[0].len = 1;
616 * msg[0].buf = &idx;
617 *
618 * msg[1].addr = client->addr;
619 * msg[1].flags = I2C_M_RD;
620 * msg[1].len = 2;
621 * msg[1].buf = rd_buff
622 * i2c_transfer(adap, msg, 2);
623 *
624 * WRITE TRANSFER : The I2C standard interface interprets all data as payload.
625 * If you want to emulate an SMBUS write transaction put the
626 * index as first byte(or first and second) in the payload.
627 * eg. a I2C transation to write 2 bytes from index 1
628 * wr_buff[0] = 0x1;
629 * wr_buff[1] = 0x23;
630 * wr_buff[2] = 0x46;
631 * msg[0].flags = 0x0;
632 * msg[0].len = 3;
633 * msg[0].buf = wr_buff;
634 * i2c_transfer(adap, msg, 1);
635 *
636 * To read or write a block of data (multiple bytes) using SMBUS emulation
637 * please use the i2c_smbus_read_i2c_block_data()
638 * or i2c_smbus_write_i2c_block_data() API
639 */
640static int nmk_i2c_xfer(struct i2c_adapter *i2c_adap,
641 struct i2c_msg msgs[], int num_msgs)
642{
643 int status;
644 int i;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530645 struct nmk_i2c_dev *dev = i2c_get_adapdata(i2c_adap);
Virupax Sadashivpetimathebd10e02011-05-13 12:30:23 +0200646 int j;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530647
Jonas Aberga20d2392011-05-13 12:29:02 +0200648 dev->busy = true;
649
Alessandro Rubini23560212012-06-11 22:56:38 +0200650 pm_runtime_get_sync(&dev->adev->dev);
Jonas Aberga20d2392011-05-13 12:29:02 +0200651
Philippe Begnic817315f2012-10-10 13:02:26 +0200652 status = clk_prepare_enable(dev->clk);
653 if (status) {
654 dev_err(&dev->adev->dev, "can't prepare_enable clock\n");
655 goto out_clk;
656 }
Linus Walleij8ef4f4e2010-09-23 09:03:55 +0200657
Patrice Chotard24e9e152013-01-24 09:47:22 +0100658 /* Optionaly enable pins to be muxed in and configured */
659 if (!IS_ERR(dev->pins_default)) {
660 status = pinctrl_select_state(dev->pinctrl,
661 dev->pins_default);
662 if (status)
663 dev_err(&dev->adev->dev,
664 "could not set default pins\n");
665 }
666
Virupax Sadashivpetimathebd10e02011-05-13 12:30:23 +0200667 status = init_hw(dev);
668 if (status)
669 goto out;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530670
Linus Walleij82a44132011-05-13 12:31:01 +0200671 /* Attempt three times to send the message queue */
Virupax Sadashivpetimathebd10e02011-05-13 12:30:23 +0200672 for (j = 0; j < 3; j++) {
673 /* setup the i2c controller */
674 setup_i2c_controller(dev);
Jonas Aberga20d2392011-05-13 12:29:02 +0200675
Virupax Sadashivpetimathebd10e02011-05-13 12:30:23 +0200676 for (i = 0; i < num_msgs; i++) {
Virupax Sadashivpetimathebd10e02011-05-13 12:30:23 +0200677 dev->cli.slave_adr = msgs[i].addr;
678 dev->cli.buffer = msgs[i].buf;
679 dev->cli.count = msgs[i].len;
680 dev->stop = (i < (num_msgs - 1)) ? 0 : 1;
681 dev->result = 0;
682
Linus Walleij82a44132011-05-13 12:31:01 +0200683 status = nmk_i2c_xfer_one(dev, msgs[i].flags);
684 if (status != 0)
Virupax Sadashivpetimathebd10e02011-05-13 12:30:23 +0200685 break;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530686 }
Virupax Sadashivpetimathebd10e02011-05-13 12:30:23 +0200687 if (status == 0)
688 break;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530689 }
Jonas Aberga20d2392011-05-13 12:29:02 +0200690
691out:
Philippe Begnic817315f2012-10-10 13:02:26 +0200692 clk_disable_unprepare(dev->clk);
693out_clk:
Patrice Chotard24e9e152013-01-24 09:47:22 +0100694 /* Optionally let pins go into idle state */
695 if (!IS_ERR(dev->pins_idle)) {
696 status = pinctrl_select_state(dev->pinctrl,
697 dev->pins_idle);
698 if (status)
699 dev_err(&dev->adev->dev,
700 "could not set pins to idle state\n");
701 }
702
Alessandro Rubini23560212012-06-11 22:56:38 +0200703 pm_runtime_put_sync(&dev->adev->dev);
Jonas Aberga20d2392011-05-13 12:29:02 +0200704
705 dev->busy = false;
Linus Walleij8ef4f4e2010-09-23 09:03:55 +0200706
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530707 /* return the no. messages processed */
708 if (status)
709 return status;
710 else
711 return num_msgs;
712}
713
714/**
715 * disable_interrupts() - disable the interrupts
716 * @dev: private data of controller
Linus Walleij1804edd2010-09-23 09:03:40 +0200717 * @irq: interrupt number
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530718 */
719static int disable_interrupts(struct nmk_i2c_dev *dev, u32 irq)
720{
721 irq = IRQ_MASK(irq);
722 writel(readl(dev->virtbase + I2C_IMSCR) & ~(I2C_CLEAR_ALL_INTS & irq),
723 dev->virtbase + I2C_IMSCR);
724 return 0;
725}
726
727/**
728 * i2c_irq_handler() - interrupt routine
729 * @irq: interrupt number
730 * @arg: data passed to the handler
731 *
732 * This is the interrupt handler for the i2c driver. Currently
733 * it handles the major interrupts like Rx & Tx FIFO management
734 * interrupts, master transaction interrupts, arbitration and
735 * bus error interrupts. The rest of the interrupts are treated as
736 * unhandled.
737 */
738static irqreturn_t i2c_irq_handler(int irq, void *arg)
739{
740 struct nmk_i2c_dev *dev = arg;
741 u32 tft, rft;
742 u32 count;
Wolfram Sang876ae852013-01-24 11:27:46 +0100743 u32 misr, src;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530744
745 /* load Tx FIFO and Rx FIFO threshold values */
746 tft = readl(dev->virtbase + I2C_TFTR);
747 rft = readl(dev->virtbase + I2C_RFTR);
748
749 /* read interrupt status register */
750 misr = readl(dev->virtbase + I2C_MISR);
751
752 src = __ffs(misr);
753 switch ((1 << src)) {
754
755 /* Transmit FIFO nearly empty interrupt */
756 case I2C_IT_TXFNE:
757 {
758 if (dev->cli.operation == I2C_READ) {
759 /*
760 * in read operation why do we care for writing?
761 * so disable the Transmit FIFO interrupt
762 */
763 disable_interrupts(dev, I2C_IT_TXFNE);
764 } else {
Virupax Sadashivpetimath55355342011-05-13 12:30:34 +0200765 fill_tx_fifo(dev, (MAX_I2C_FIFO_THRESHOLD - tft));
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530766 /*
767 * if done, close the transfer by disabling the
768 * corresponding TXFNE interrupt
769 */
770 if (dev->cli.count == 0)
771 disable_interrupts(dev, I2C_IT_TXFNE);
772 }
773 }
774 break;
775
776 /*
777 * Rx FIFO nearly full interrupt.
778 * This is set when the numer of entries in Rx FIFO is
779 * greater or equal than the threshold value programmed
780 * in RFT
781 */
782 case I2C_IT_RXFNF:
783 for (count = rft; count > 0; count--) {
784 /* Read the Rx FIFO */
785 *dev->cli.buffer = readb(dev->virtbase + I2C_RFR);
786 dev->cli.buffer++;
787 }
788 dev->cli.count -= rft;
789 dev->cli.xfer_bytes += rft;
790 break;
791
792 /* Rx FIFO full */
793 case I2C_IT_RXFF:
794 for (count = MAX_I2C_FIFO_THRESHOLD; count > 0; count--) {
795 *dev->cli.buffer = readb(dev->virtbase + I2C_RFR);
796 dev->cli.buffer++;
797 }
798 dev->cli.count -= MAX_I2C_FIFO_THRESHOLD;
799 dev->cli.xfer_bytes += MAX_I2C_FIFO_THRESHOLD;
800 break;
801
802 /* Master Transaction Done with/without stop */
803 case I2C_IT_MTD:
804 case I2C_IT_MTDWS:
805 if (dev->cli.operation == I2C_READ) {
Rabin Vincent1df3ab12010-04-27 10:31:08 +0530806 while (!(readl(dev->virtbase + I2C_RISR)
807 & I2C_IT_RXFE)) {
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530808 if (dev->cli.count == 0)
809 break;
810 *dev->cli.buffer =
811 readb(dev->virtbase + I2C_RFR);
812 dev->cli.buffer++;
813 dev->cli.count--;
814 dev->cli.xfer_bytes++;
815 }
816 }
817
Virupax Sadashivpetimathb5e890f2011-05-13 12:30:42 +0200818 disable_all_interrupts(dev);
819 clear_all_interrupts(dev);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530820
821 if (dev->cli.count) {
Virupax Sadashivpetimath99381be2011-05-13 12:29:28 +0200822 dev->result = -EIO;
Alessandro Rubini23560212012-06-11 22:56:38 +0200823 dev_err(&dev->adev->dev,
Jonas Aaberg8abf6fbb2011-10-20 18:23:01 +0200824 "%lu bytes still remain to be xfered\n",
825 dev->cli.count);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530826 (void) init_hw(dev);
827 }
828 complete(&dev->xfer_complete);
829
830 break;
831
832 /* Master Arbitration lost interrupt */
833 case I2C_IT_MAL:
Virupax Sadashivpetimath99381be2011-05-13 12:29:28 +0200834 dev->result = -EIO;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530835 (void) init_hw(dev);
836
837 i2c_set_bit(dev->virtbase + I2C_ICR, I2C_IT_MAL);
838 complete(&dev->xfer_complete);
839
840 break;
841
842 /*
843 * Bus Error interrupt.
844 * This happens when an unexpected start/stop condition occurs
845 * during the transaction.
846 */
847 case I2C_IT_BERR:
Virupax Sadashivpetimath99381be2011-05-13 12:29:28 +0200848 dev->result = -EIO;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530849 /* get the status */
850 if (((readl(dev->virtbase + I2C_SR) >> 2) & 0x3) == I2C_ABORT)
851 (void) init_hw(dev);
852
853 i2c_set_bit(dev->virtbase + I2C_ICR, I2C_IT_BERR);
854 complete(&dev->xfer_complete);
855
856 break;
857
858 /*
859 * Tx FIFO overrun interrupt.
860 * This is set when a write operation in Tx FIFO is performed and
861 * the Tx FIFO is full.
862 */
863 case I2C_IT_TXFOVR:
Virupax Sadashivpetimath99381be2011-05-13 12:29:28 +0200864 dev->result = -EIO;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530865 (void) init_hw(dev);
866
Alessandro Rubini23560212012-06-11 22:56:38 +0200867 dev_err(&dev->adev->dev, "Tx Fifo Over run\n");
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530868 complete(&dev->xfer_complete);
869
870 break;
871
872 /* unhandled interrupts by this driver - TODO*/
873 case I2C_IT_TXFE:
874 case I2C_IT_TXFF:
875 case I2C_IT_RXFE:
876 case I2C_IT_RFSR:
877 case I2C_IT_RFSE:
878 case I2C_IT_WTSR:
879 case I2C_IT_STD:
Alessandro Rubini23560212012-06-11 22:56:38 +0200880 dev_err(&dev->adev->dev, "unhandled Interrupt\n");
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530881 break;
882 default:
Alessandro Rubini23560212012-06-11 22:56:38 +0200883 dev_err(&dev->adev->dev, "spurious Interrupt..\n");
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530884 break;
885 }
886
887 return IRQ_HANDLED;
888}
889
Jonas Aberga20d2392011-05-13 12:29:02 +0200890
891#ifdef CONFIG_PM
Rabin Vincentb0e751a2011-05-13 12:30:07 +0200892static int nmk_i2c_suspend(struct device *dev)
Jonas Aberga20d2392011-05-13 12:29:02 +0200893{
Alessandro Rubini23560212012-06-11 22:56:38 +0200894 struct amba_device *adev = to_amba_device(dev);
895 struct nmk_i2c_dev *nmk_i2c = amba_get_drvdata(adev);
Patrice Chotard24e9e152013-01-24 09:47:22 +0100896 int ret;
Jonas Aberga20d2392011-05-13 12:29:02 +0200897
Rabin Vincentb0e751a2011-05-13 12:30:07 +0200898 if (nmk_i2c->busy)
Jonas Aberga20d2392011-05-13 12:29:02 +0200899 return -EBUSY;
Rabin Vincentb0e751a2011-05-13 12:30:07 +0200900
Patrice Chotard24e9e152013-01-24 09:47:22 +0100901 if (!IS_ERR(nmk_i2c->pins_sleep)) {
902 ret = pinctrl_select_state(nmk_i2c->pinctrl,
903 nmk_i2c->pins_sleep);
904 if (ret)
905 dev_err(dev, "could not set pins to sleep state\n");
906 }
907
Rabin Vincentb0e751a2011-05-13 12:30:07 +0200908 return 0;
909}
910
911static int nmk_i2c_resume(struct device *dev)
912{
Patrice Chotard24e9e152013-01-24 09:47:22 +0100913 struct amba_device *adev = to_amba_device(dev);
914 struct nmk_i2c_dev *nmk_i2c = amba_get_drvdata(adev);
915 int ret;
916
917 /* First go to the default state */
918 if (!IS_ERR(nmk_i2c->pins_default)) {
919 ret = pinctrl_select_state(nmk_i2c->pinctrl,
920 nmk_i2c->pins_default);
921 if (ret)
922 dev_err(dev, "could not set pins to default state\n");
923 }
924 /* Then let's idle the pins until the next transfer happens */
925 if (!IS_ERR(nmk_i2c->pins_idle)) {
926 ret = pinctrl_select_state(nmk_i2c->pinctrl,
927 nmk_i2c->pins_idle);
928 if (ret)
929 dev_err(dev, "could not set pins to idle state\n");
930 }
Rabin Vincentb0e751a2011-05-13 12:30:07 +0200931 return 0;
Jonas Aberga20d2392011-05-13 12:29:02 +0200932}
933#else
934#define nmk_i2c_suspend NULL
Rabin Vincentb0e751a2011-05-13 12:30:07 +0200935#define nmk_i2c_resume NULL
Jonas Aberga20d2392011-05-13 12:29:02 +0200936#endif
937
Rabin Vincentb0e751a2011-05-13 12:30:07 +0200938/*
939 * We use noirq so that we suspend late and resume before the wakeup interrupt
940 * to ensure that we do the !pm_runtime_suspended() check in resume before
941 * there has been a regular pm runtime resume (via pm_runtime_get_sync()).
942 */
943static const struct dev_pm_ops nmk_i2c_pm = {
944 .suspend_noirq = nmk_i2c_suspend,
945 .resume_noirq = nmk_i2c_resume,
946};
947
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530948static unsigned int nmk_i2c_functionality(struct i2c_adapter *adap)
949{
Virupax Sadashivpetimath51a0c8d2012-06-25 17:56:07 +0530950 return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | I2C_FUNC_10BIT_ADDR;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530951}
952
953static const struct i2c_algorithm nmk_i2c_algo = {
954 .master_xfer = nmk_i2c_xfer,
955 .functionality = nmk_i2c_functionality
956};
957
Lee Jonesb007a3e2012-08-07 12:27:24 +0100958static struct nmk_i2c_controller u8500_i2c = {
959 /*
960 * Slave data setup time; 250ns, 100ns, and 10ns, which
961 * is 14, 6 and 2 respectively for a 48Mhz i2c clock.
962 */
963 .slsu = 0xe,
964 .tft = 1, /* Tx FIFO threshold */
965 .rft = 8, /* Rx FIFO threshold */
966 .clk_freq = 400000, /* fast mode operation */
967 .timeout = 200, /* Slave response timeout(ms) */
968 .sm = I2C_FREQ_MODE_FAST,
969};
970
Lee Jones43fea582012-08-06 11:09:57 +0100971static void nmk_i2c_of_probe(struct device_node *np,
972 struct nmk_i2c_controller *pdata)
973{
974 of_property_read_u32(np, "clock-frequency", &pdata->clk_freq);
975
976 /* This driver only supports 'standard' and 'fast' modes of operation. */
977 if (pdata->clk_freq <= 100000)
978 pdata->sm = I2C_FREQ_MODE_STANDARD;
979 else
980 pdata->sm = I2C_FREQ_MODE_FAST;
981}
982
Alessandro Rubini23560212012-06-11 22:56:38 +0200983static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id)
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530984{
985 int ret = 0;
Lee Jonesb007a3e2012-08-07 12:27:24 +0100986 struct nmk_i2c_controller *pdata = adev->dev.platform_data;
Lee Jones43fea582012-08-06 11:09:57 +0100987 struct device_node *np = adev->dev.of_node;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530988 struct nmk_i2c_dev *dev;
989 struct i2c_adapter *adap;
Linus Walleij3a205be2013-06-10 00:00:58 +0200990 struct i2c_vendor_data *vendor = id->data;
991 u32 max_fifo_threshold = (vendor->fifodepth / 2) - 1;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +0530992
Lee Jones43fea582012-08-06 11:09:57 +0100993 if (!pdata) {
994 if (np) {
995 pdata = devm_kzalloc(&adev->dev, sizeof(*pdata), GFP_KERNEL);
996 if (!pdata) {
997 ret = -ENOMEM;
998 goto err_no_mem;
999 }
1000 /* Provide the default configuration as a base. */
1001 memcpy(pdata, &u8500_i2c, sizeof(struct nmk_i2c_controller));
1002 nmk_i2c_of_probe(np, pdata);
1003 } else
1004 /* No i2c configuration found, using the default. */
1005 pdata = &u8500_i2c;
1006 }
Lee Jonesb007a3e2012-08-07 12:27:24 +01001007
Linus Walleij3a205be2013-06-10 00:00:58 +02001008 if (pdata->tft > max_fifo_threshold) {
1009 dev_warn(&adev->dev, "requested TX FIFO threshold %u, adjusted down to %u\n",
1010 pdata->tft, max_fifo_threshold);
1011 pdata->tft = max_fifo_threshold;
1012 }
1013
1014 if (pdata->rft > max_fifo_threshold) {
1015 dev_warn(&adev->dev, "requested RX FIFO threshold %u, adjusted down to %u\n",
1016 pdata->rft, max_fifo_threshold);
1017 pdata->rft = max_fifo_threshold;
1018 }
1019
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301020 dev = kzalloc(sizeof(struct nmk_i2c_dev), GFP_KERNEL);
1021 if (!dev) {
Alessandro Rubini23560212012-06-11 22:56:38 +02001022 dev_err(&adev->dev, "cannot allocate memory\n");
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301023 ret = -ENOMEM;
1024 goto err_no_mem;
1025 }
Linus Walleij3a205be2013-06-10 00:00:58 +02001026 dev->vendor = vendor;
Jonas Aberga20d2392011-05-13 12:29:02 +02001027 dev->busy = false;
Alessandro Rubini23560212012-06-11 22:56:38 +02001028 dev->adev = adev;
1029 amba_set_drvdata(adev, dev);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301030
Patrice Chotard24e9e152013-01-24 09:47:22 +01001031 dev->pinctrl = devm_pinctrl_get(&adev->dev);
1032 if (IS_ERR(dev->pinctrl)) {
1033 ret = PTR_ERR(dev->pinctrl);
1034 goto err_pinctrl;
1035 }
1036
1037 dev->pins_default = pinctrl_lookup_state(dev->pinctrl,
1038 PINCTRL_STATE_DEFAULT);
1039 if (IS_ERR(dev->pins_default)) {
1040 dev_err(&adev->dev, "could not get default pinstate\n");
1041 } else {
1042 ret = pinctrl_select_state(dev->pinctrl,
1043 dev->pins_default);
1044 if (ret)
1045 dev_dbg(&adev->dev, "could not set default pinstate\n");
1046 }
1047
1048 dev->pins_idle = pinctrl_lookup_state(dev->pinctrl,
1049 PINCTRL_STATE_IDLE);
1050 if (IS_ERR(dev->pins_idle)) {
1051 dev_dbg(&adev->dev, "could not get idle pinstate\n");
1052 } else {
1053 /* If possible, let's go to idle until the first transfer */
1054 ret = pinctrl_select_state(dev->pinctrl,
1055 dev->pins_idle);
1056 if (ret)
1057 dev_dbg(&adev->dev, "could not set idle pinstate\n");
1058 }
1059
1060 dev->pins_sleep = pinctrl_lookup_state(dev->pinctrl,
1061 PINCTRL_STATE_SLEEP);
1062 if (IS_ERR(dev->pins_sleep))
1063 dev_dbg(&adev->dev, "could not get sleep pinstate\n");
1064
Alessandro Rubini23560212012-06-11 22:56:38 +02001065 dev->virtbase = ioremap(adev->res.start, resource_size(&adev->res));
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301066 if (!dev->virtbase) {
1067 ret = -ENOMEM;
1068 goto err_no_ioremap;
1069 }
1070
Alessandro Rubini23560212012-06-11 22:56:38 +02001071 dev->irq = adev->irq[0];
Yong Zhang43110512011-09-21 17:28:33 +08001072 ret = request_irq(dev->irq, i2c_irq_handler, 0,
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301073 DRIVER_NAME, dev);
1074 if (ret) {
Alessandro Rubini23560212012-06-11 22:56:38 +02001075 dev_err(&adev->dev, "cannot claim the irq %d\n", dev->irq);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301076 goto err_irq;
1077 }
1078
Alessandro Rubini23560212012-06-11 22:56:38 +02001079 pm_suspend_ignore_children(&adev->dev, true);
Rabin Vincentb0e751a2011-05-13 12:30:07 +02001080
Alessandro Rubini23560212012-06-11 22:56:38 +02001081 dev->clk = clk_get(&adev->dev, NULL);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301082 if (IS_ERR(dev->clk)) {
Alessandro Rubini23560212012-06-11 22:56:38 +02001083 dev_err(&adev->dev, "could not get i2c clock\n");
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301084 ret = PTR_ERR(dev->clk);
1085 goto err_no_clk;
1086 }
1087
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301088 adap = &dev->adap;
Lee Jones43fea582012-08-06 11:09:57 +01001089 adap->dev.of_node = np;
Alessandro Rubini23560212012-06-11 22:56:38 +02001090 adap->dev.parent = &adev->dev;
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301091 adap->owner = THIS_MODULE;
1092 adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
1093 adap->algo = &nmk_i2c_algo;
Lee Jones98582d92012-04-17 15:52:26 +01001094 adap->timeout = msecs_to_jiffies(pdata->timeout);
Linus Walleij6d779a42010-11-30 16:59:29 +01001095 snprintf(adap->name, sizeof(adap->name),
Linus Walleijd15b8572013-06-15 22:38:14 +02001096 "Nomadik I2C at %pR", &adev->res);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301097
1098 /* fetch the controller configuration from machine */
1099 dev->cfg.clk_freq = pdata->clk_freq;
1100 dev->cfg.slsu = pdata->slsu;
1101 dev->cfg.tft = pdata->tft;
1102 dev->cfg.rft = pdata->rft;
1103 dev->cfg.sm = pdata->sm;
1104
1105 i2c_set_adapdata(adap, dev);
1106
Alessandro Rubini23560212012-06-11 22:56:38 +02001107 dev_info(&adev->dev,
Jonas Aaberg8abf6fbb2011-10-20 18:23:01 +02001108 "initialize %s on virtual base %p\n",
1109 adap->name, dev->virtbase);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301110
Linus Walleijd15b8572013-06-15 22:38:14 +02001111 ret = i2c_add_adapter(adap);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301112 if (ret) {
Alessandro Rubini23560212012-06-11 22:56:38 +02001113 dev_err(&adev->dev, "failed to add adapter\n");
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301114 goto err_add_adap;
1115 }
1116
Lee Jones43fea582012-08-06 11:09:57 +01001117 of_i2c_register_devices(adap);
1118
Alessandro Rubini23560212012-06-11 22:56:38 +02001119 pm_runtime_put(&adev->dev);
1120
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301121 return 0;
1122
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301123 err_add_adap:
1124 clk_put(dev->clk);
1125 err_no_clk:
1126 free_irq(dev->irq, dev);
1127 err_irq:
1128 iounmap(dev->virtbase);
1129 err_no_ioremap:
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301130 kfree(dev);
Patrice Chotard24e9e152013-01-24 09:47:22 +01001131 err_pinctrl:
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301132 err_no_mem:
1133
1134 return ret;
1135}
1136
Alessandro Rubini23560212012-06-11 22:56:38 +02001137static int nmk_i2c_remove(struct amba_device *adev)
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301138{
Alessandro Rubini23560212012-06-11 22:56:38 +02001139 struct resource *res = &adev->res;
1140 struct nmk_i2c_dev *dev = amba_get_drvdata(adev);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301141
1142 i2c_del_adapter(&dev->adap);
1143 flush_i2c_fifo(dev);
1144 disable_all_interrupts(dev);
1145 clear_all_interrupts(dev);
1146 /* disable the controller */
1147 i2c_clr_bit(dev->virtbase + I2C_CR, I2C_CR_PE);
1148 free_irq(dev->irq, dev);
1149 iounmap(dev->virtbase);
Rabin Vincenta1c27672010-04-27 10:31:07 +05301150 if (res)
1151 release_mem_region(res->start, resource_size(res));
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301152 clk_put(dev->clk);
Alessandro Rubini23560212012-06-11 22:56:38 +02001153 pm_runtime_disable(&adev->dev);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301154 kfree(dev);
1155
1156 return 0;
1157}
1158
Linus Walleij3a205be2013-06-10 00:00:58 +02001159static struct i2c_vendor_data vendor_stn8815 = {
1160 .has_mtdws = false,
1161 .fifodepth = 16, /* Guessed from TFTR/RFTR = 7 */
1162};
1163
1164static struct i2c_vendor_data vendor_db8500 = {
1165 .has_mtdws = true,
1166 .fifodepth = 32, /* Guessed from TFTR/RFTR = 15 */
1167};
1168
Alessandro Rubini23560212012-06-11 22:56:38 +02001169static struct amba_id nmk_i2c_ids[] = {
1170 {
1171 .id = 0x00180024,
1172 .mask = 0x00ffffff,
Linus Walleij3a205be2013-06-10 00:00:58 +02001173 .data = &vendor_stn8815,
Alessandro Rubini23560212012-06-11 22:56:38 +02001174 },
1175 {
1176 .id = 0x00380024,
1177 .mask = 0x00ffffff,
Linus Walleij3a205be2013-06-10 00:00:58 +02001178 .data = &vendor_db8500,
Alessandro Rubini23560212012-06-11 22:56:38 +02001179 },
1180 {},
1181};
1182
1183MODULE_DEVICE_TABLE(amba, nmk_i2c_ids);
1184
1185static struct amba_driver nmk_i2c_driver = {
1186 .drv = {
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301187 .owner = THIS_MODULE,
1188 .name = DRIVER_NAME,
Rabin Vincentb0e751a2011-05-13 12:30:07 +02001189 .pm = &nmk_i2c_pm,
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301190 },
Alessandro Rubini23560212012-06-11 22:56:38 +02001191 .id_table = nmk_i2c_ids,
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301192 .probe = nmk_i2c_probe,
Alessandro Rubini23560212012-06-11 22:56:38 +02001193 .remove = nmk_i2c_remove,
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301194};
1195
1196static int __init nmk_i2c_init(void)
1197{
Alessandro Rubini23560212012-06-11 22:56:38 +02001198 return amba_driver_register(&nmk_i2c_driver);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301199}
1200
1201static void __exit nmk_i2c_exit(void)
1202{
Alessandro Rubini23560212012-06-11 22:56:38 +02001203 amba_driver_unregister(&nmk_i2c_driver);
srinidhi kasagar3f9900f2010-02-01 19:44:54 +05301204}
1205
1206subsys_initcall(nmk_i2c_init);
1207module_exit(nmk_i2c_exit);
1208
1209MODULE_AUTHOR("Sachin Verma, Srinidhi KASAGAR");
1210MODULE_DESCRIPTION("Nomadik/Ux500 I2C driver");
1211MODULE_LICENSE("GPL");