2 * Copyright (C) 2009 ST-Ericsson SA
3 * Copyright (C) 2009 STMicroelectronics
5 * I2C master mode controller driver, used in Nomadik 8815
8 * Author: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
9 * Author: Sachin Verma <sachin.verma@st.com>
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.
15 #include <linux/init.h>
16 #include <linux/module.h>
17 #include <linux/amba/bus.h>
18 #include <linux/slab.h>
19 #include <linux/interrupt.h>
20 #include <linux/i2c.h>
21 #include <linux/err.h>
22 #include <linux/clk.h>
24 #include <linux/pm_runtime.h>
26 #include <linux/pinctrl/consumer.h>
28 #define DRIVER_NAME "nmk-i2c"
30 /* I2C Controller register offsets */
31 #define I2C_CR (0x000)
32 #define I2C_SCR (0x004)
33 #define I2C_HSMCR (0x008)
34 #define I2C_MCR (0x00C)
35 #define I2C_TFR (0x010)
36 #define I2C_SR (0x014)
37 #define I2C_RFR (0x018)
38 #define I2C_TFTR (0x01C)
39 #define I2C_RFTR (0x020)
40 #define I2C_DMAR (0x024)
41 #define I2C_BRCR (0x028)
42 #define I2C_IMSCR (0x02C)
43 #define I2C_RISR (0x030)
44 #define I2C_MISR (0x034)
45 #define I2C_ICR (0x038)
47 /* Control registers */
48 #define I2C_CR_PE (0x1 << 0) /* Peripheral Enable */
49 #define I2C_CR_OM (0x3 << 1) /* Operating mode */
50 #define I2C_CR_SAM (0x1 << 3) /* Slave addressing mode */
51 #define I2C_CR_SM (0x3 << 4) /* Speed mode */
52 #define I2C_CR_SGCM (0x1 << 6) /* Slave general call mode */
53 #define I2C_CR_FTX (0x1 << 7) /* Flush Transmit */
54 #define I2C_CR_FRX (0x1 << 8) /* Flush Receive */
55 #define I2C_CR_DMA_TX_EN (0x1 << 9) /* DMA Tx enable */
56 #define I2C_CR_DMA_RX_EN (0x1 << 10) /* DMA Rx Enable */
57 #define I2C_CR_DMA_SLE (0x1 << 11) /* DMA sync. logic enable */
58 #define I2C_CR_LM (0x1 << 12) /* Loopback mode */
59 #define I2C_CR_FON (0x3 << 13) /* Filtering on */
60 #define I2C_CR_FS (0x3 << 15) /* Force stop enable */
62 /* Master controller (MCR) register */
63 #define I2C_MCR_OP (0x1 << 0) /* Operation */
64 #define I2C_MCR_A7 (0x7f << 1) /* 7-bit address */
65 #define I2C_MCR_EA10 (0x7 << 8) /* 10-bit Extended address */
66 #define I2C_MCR_SB (0x1 << 11) /* Extended address */
67 #define I2C_MCR_AM (0x3 << 12) /* Address type */
68 #define I2C_MCR_STOP (0x1 << 14) /* Stop condition */
69 #define I2C_MCR_LENGTH (0x7ff << 15) /* Transaction length */
71 /* Status register (SR) */
72 #define I2C_SR_OP (0x3 << 0) /* Operation */
73 #define I2C_SR_STATUS (0x3 << 2) /* controller status */
74 #define I2C_SR_CAUSE (0x7 << 4) /* Abort cause */
75 #define I2C_SR_TYPE (0x3 << 7) /* Receive type */
76 #define I2C_SR_LENGTH (0x7ff << 9) /* Transfer length */
78 /* Interrupt mask set/clear (IMSCR) bits */
79 #define I2C_IT_TXFE (0x1 << 0)
80 #define I2C_IT_TXFNE (0x1 << 1)
81 #define I2C_IT_TXFF (0x1 << 2)
82 #define I2C_IT_TXFOVR (0x1 << 3)
83 #define I2C_IT_RXFE (0x1 << 4)
84 #define I2C_IT_RXFNF (0x1 << 5)
85 #define I2C_IT_RXFF (0x1 << 6)
86 #define I2C_IT_RFSR (0x1 << 16)
87 #define I2C_IT_RFSE (0x1 << 17)
88 #define I2C_IT_WTSR (0x1 << 18)
89 #define I2C_IT_MTD (0x1 << 19)
90 #define I2C_IT_STD (0x1 << 20)
91 #define I2C_IT_MAL (0x1 << 24)
92 #define I2C_IT_BERR (0x1 << 25)
93 #define I2C_IT_MTDWS (0x1 << 28)
95 #define GEN_MASK(val, mask, sb) (((val) << (sb)) & (mask))
97 /* some bits in ICR are reserved */
98 #define I2C_CLEAR_ALL_INTS 0x131f007f
100 /* first three msb bits are reserved */
101 #define IRQ_MASK(mask) (mask & 0x1fffffff)
103 /* maximum threshold value */
104 #define MAX_I2C_FIFO_THRESHOLD 15
107 I2C_FREQ_MODE_STANDARD
, /* up to 100 Kb/s */
108 I2C_FREQ_MODE_FAST
, /* up to 400 Kb/s */
109 I2C_FREQ_MODE_HIGH_SPEED
, /* up to 3.4 Mb/s */
110 I2C_FREQ_MODE_FAST_PLUS
, /* up to 1 Mb/s */
114 * struct nmk_i2c_controller - client specific controller configuration
115 * @clk_freq: clock frequency for the operation mode
116 * @tft: Tx FIFO Threshold in bytes
117 * @rft: Rx FIFO Threshold in bytes
118 * @timeout Slave response timeout(ms)
121 struct nmk_i2c_controller
{
126 enum i2c_freq_mode sm
;
130 * struct i2c_vendor_data - per-vendor variations
131 * @has_mtdws: variant has the MTDWS bit
132 * @fifodepth: variant FIFO depth
134 struct i2c_vendor_data
{
148 I2C_NO_OPERATION
= 0xff,
154 * struct i2c_nmk_client - client specific data
155 * @slave_adr: 7-bit slave address
156 * @count: no. bytes to be transferred
157 * @buffer: client data buffer
158 * @xfer_bytes: bytes transferred till now
159 * @operation: current I2C operation
161 struct i2c_nmk_client
{
162 unsigned short slave_adr
;
164 unsigned char *buffer
;
165 unsigned long xfer_bytes
;
166 enum i2c_operation operation
;
170 * struct nmk_i2c_dev - private data structure of the controller.
171 * @vendor: vendor data for this variant.
172 * @adev: parent amba device.
173 * @adap: corresponding I2C adapter.
174 * @irq: interrupt line for the controller.
175 * @virtbase: virtual io memory area.
176 * @clk: hardware i2c block clock.
177 * @cfg: machine provided controller configuration.
178 * @cli: holder of client specific data.
179 * @stop: stop condition.
180 * @xfer_complete: acknowledge completion for a I2C message.
181 * @result: controller propogated result.
182 * @busy: Busy doing transfer.
185 struct i2c_vendor_data
*vendor
;
186 struct amba_device
*adev
;
187 struct i2c_adapter adap
;
189 void __iomem
*virtbase
;
191 struct nmk_i2c_controller cfg
;
192 struct i2c_nmk_client cli
;
194 struct completion xfer_complete
;
199 /* controller's abort causes */
200 static const char *abort_causes
[] = {
201 "no ack received after address transmission",
202 "no ack received during data phase",
203 "ack received after xmission of master code",
204 "master lost arbitration",
207 "overflow, maxsize is 2047 bytes",
210 static inline void i2c_set_bit(void __iomem
*reg
, u32 mask
)
212 writel(readl(reg
) | mask
, reg
);
215 static inline void i2c_clr_bit(void __iomem
*reg
, u32 mask
)
217 writel(readl(reg
) & ~mask
, reg
);
221 * flush_i2c_fifo() - This function flushes the I2C FIFO
222 * @dev: private data of I2C Driver
224 * This function flushes the I2C Tx and Rx FIFOs. It returns
225 * 0 on successful flushing of FIFO
227 static int flush_i2c_fifo(struct nmk_i2c_dev
*dev
)
229 #define LOOP_ATTEMPTS 10
231 unsigned long timeout
;
234 * flush the transmit and receive FIFO. The flushing
235 * operation takes several cycles before to be completed.
236 * On the completion, the I2C internal logic clears these
237 * bits, until then no one must access Tx, Rx FIFO and
238 * should poll on these bits waiting for the completion.
240 writel((I2C_CR_FTX
| I2C_CR_FRX
), dev
->virtbase
+ I2C_CR
);
242 for (i
= 0; i
< LOOP_ATTEMPTS
; i
++) {
243 timeout
= jiffies
+ dev
->adap
.timeout
;
245 while (!time_after(jiffies
, timeout
)) {
246 if ((readl(dev
->virtbase
+ I2C_CR
) &
247 (I2C_CR_FTX
| I2C_CR_FRX
)) == 0)
252 dev_err(&dev
->adev
->dev
,
253 "flushing operation timed out giving up after %d attempts",
260 * disable_all_interrupts() - Disable all interrupts of this I2c Bus
261 * @dev: private data of I2C Driver
263 static void disable_all_interrupts(struct nmk_i2c_dev
*dev
)
265 u32 mask
= IRQ_MASK(0);
266 writel(mask
, dev
->virtbase
+ I2C_IMSCR
);
270 * clear_all_interrupts() - Clear all interrupts of I2C Controller
271 * @dev: private data of I2C Driver
273 static void clear_all_interrupts(struct nmk_i2c_dev
*dev
)
276 mask
= IRQ_MASK(I2C_CLEAR_ALL_INTS
);
277 writel(mask
, dev
->virtbase
+ I2C_ICR
);
281 * init_hw() - initialize the I2C hardware
282 * @dev: private data of I2C Driver
284 static int init_hw(struct nmk_i2c_dev
*dev
)
288 stat
= flush_i2c_fifo(dev
);
292 /* disable the controller */
293 i2c_clr_bit(dev
->virtbase
+ I2C_CR
, I2C_CR_PE
);
295 disable_all_interrupts(dev
);
297 clear_all_interrupts(dev
);
299 dev
->cli
.operation
= I2C_NO_OPERATION
;
305 /* enable peripheral, master mode operation */
306 #define DEFAULT_I2C_REG_CR ((1 << 1) | I2C_CR_PE)
309 * load_i2c_mcr_reg() - load the MCR register
310 * @dev: private data of controller
311 * @flags: message flags
313 static u32
load_i2c_mcr_reg(struct nmk_i2c_dev
*dev
, u16 flags
)
316 unsigned short slave_adr_3msb_bits
;
318 mcr
|= GEN_MASK(dev
->cli
.slave_adr
, I2C_MCR_A7
, 1);
320 if (unlikely(flags
& I2C_M_TEN
)) {
321 /* 10-bit address transaction */
322 mcr
|= GEN_MASK(2, I2C_MCR_AM
, 12);
324 * Get the top 3 bits.
325 * EA10 represents extended address in MCR. This includes
326 * the extension (MSB bits) of the 7 bit address loaded
329 slave_adr_3msb_bits
= (dev
->cli
.slave_adr
>> 7) & 0x7;
331 mcr
|= GEN_MASK(slave_adr_3msb_bits
, I2C_MCR_EA10
, 8);
333 /* 7-bit address transaction */
334 mcr
|= GEN_MASK(1, I2C_MCR_AM
, 12);
337 /* start byte procedure not applied */
338 mcr
|= GEN_MASK(0, I2C_MCR_SB
, 11);
340 /* check the operation, master read/write? */
341 if (dev
->cli
.operation
== I2C_WRITE
)
342 mcr
|= GEN_MASK(I2C_WRITE
, I2C_MCR_OP
, 0);
344 mcr
|= GEN_MASK(I2C_READ
, I2C_MCR_OP
, 0);
346 /* stop or repeated start? */
348 mcr
|= GEN_MASK(1, I2C_MCR_STOP
, 14);
350 mcr
&= ~(GEN_MASK(1, I2C_MCR_STOP
, 14));
352 mcr
|= GEN_MASK(dev
->cli
.count
, I2C_MCR_LENGTH
, 15);
358 * setup_i2c_controller() - setup the controller
359 * @dev: private data of controller
361 static void setup_i2c_controller(struct nmk_i2c_dev
*dev
)
368 writel(0x0, dev
->virtbase
+ I2C_CR
);
369 writel(0x0, dev
->virtbase
+ I2C_HSMCR
);
370 writel(0x0, dev
->virtbase
+ I2C_TFTR
);
371 writel(0x0, dev
->virtbase
+ I2C_RFTR
);
372 writel(0x0, dev
->virtbase
+ I2C_DMAR
);
374 i2c_clk
= clk_get_rate(dev
->clk
);
379 * slsu defines the data setup time after SCL clock
380 * stretching in terms of i2c clk cycles + 1 (zero means
381 * "wait one cycle"), the needed setup time for the three
382 * modes are 250ns, 100ns, 10ns respectively.
384 * As the time for one cycle T in nanoseconds is
385 * T = (1/f) * 1000000000 =>
386 * slsu = cycles / (1000000000 / f) + 1
388 ns
= DIV_ROUND_UP_ULL(1000000000ULL, i2c_clk
);
389 switch (dev
->cfg
.sm
) {
390 case I2C_FREQ_MODE_FAST
:
391 case I2C_FREQ_MODE_FAST_PLUS
:
392 slsu
= DIV_ROUND_UP(100, ns
); /* Fast */
394 case I2C_FREQ_MODE_HIGH_SPEED
:
395 slsu
= DIV_ROUND_UP(10, ns
); /* High */
397 case I2C_FREQ_MODE_STANDARD
:
399 slsu
= DIV_ROUND_UP(250, ns
); /* Standard */
404 dev_dbg(&dev
->adev
->dev
, "calculated SLSU = %04x\n", slsu
);
405 writel(slsu
<< 16, dev
->virtbase
+ I2C_SCR
);
408 * The spec says, in case of std. mode the divider is
409 * 2 whereas it is 3 for fast and fastplus mode of
410 * operation. TODO - high speed support.
412 div
= (dev
->cfg
.clk_freq
> 100000) ? 3 : 2;
415 * generate the mask for baud rate counters. The controller
416 * has two baud rate counters. One is used for High speed
417 * operation, and the other is for std, fast mode, fast mode
418 * plus operation. Currently we do not supprt high speed mode
422 brcr2
= (i2c_clk
/(dev
->cfg
.clk_freq
* div
)) & 0xffff;
424 /* set the baud rate counter register */
425 writel((brcr1
| brcr2
), dev
->virtbase
+ I2C_BRCR
);
428 * set the speed mode. Currently we support
429 * only standard and fast mode of operation
430 * TODO - support for fast mode plus (up to 1Mb/s)
431 * and high speed (up to 3.4 Mb/s)
433 if (dev
->cfg
.sm
> I2C_FREQ_MODE_FAST
) {
434 dev_err(&dev
->adev
->dev
,
435 "do not support this mode defaulting to std. mode\n");
436 brcr2
= i2c_clk
/(100000 * 2) & 0xffff;
437 writel((brcr1
| brcr2
), dev
->virtbase
+ I2C_BRCR
);
438 writel(I2C_FREQ_MODE_STANDARD
<< 4,
439 dev
->virtbase
+ I2C_CR
);
441 writel(dev
->cfg
.sm
<< 4, dev
->virtbase
+ I2C_CR
);
443 /* set the Tx and Rx FIFO threshold */
444 writel(dev
->cfg
.tft
, dev
->virtbase
+ I2C_TFTR
);
445 writel(dev
->cfg
.rft
, dev
->virtbase
+ I2C_RFTR
);
449 * read_i2c() - Read from I2C client device
450 * @dev: private data of I2C Driver
451 * @flags: message flags
453 * This function reads from i2c client device when controller is in
454 * master mode. There is a completion timeout. If there is no transfer
455 * before timeout error is returned.
457 static int read_i2c(struct nmk_i2c_dev
*dev
, u16 flags
)
463 mcr
= load_i2c_mcr_reg(dev
, flags
);
464 writel(mcr
, dev
->virtbase
+ I2C_MCR
);
466 /* load the current CR value */
467 writel(readl(dev
->virtbase
+ I2C_CR
) | DEFAULT_I2C_REG_CR
,
468 dev
->virtbase
+ I2C_CR
);
470 /* enable the controller */
471 i2c_set_bit(dev
->virtbase
+ I2C_CR
, I2C_CR_PE
);
473 init_completion(&dev
->xfer_complete
);
475 /* enable interrupts by setting the mask */
476 irq_mask
= (I2C_IT_RXFNF
| I2C_IT_RXFF
|
477 I2C_IT_MAL
| I2C_IT_BERR
);
479 if (dev
->stop
|| !dev
->vendor
->has_mtdws
)
480 irq_mask
|= I2C_IT_MTD
;
482 irq_mask
|= I2C_IT_MTDWS
;
484 irq_mask
= I2C_CLEAR_ALL_INTS
& IRQ_MASK(irq_mask
);
486 writel(readl(dev
->virtbase
+ I2C_IMSCR
) | irq_mask
,
487 dev
->virtbase
+ I2C_IMSCR
);
489 timeout
= wait_for_completion_timeout(
490 &dev
->xfer_complete
, dev
->adap
.timeout
);
493 /* Controller timed out */
494 dev_err(&dev
->adev
->dev
, "read from slave 0x%x timed out\n",
501 static void fill_tx_fifo(struct nmk_i2c_dev
*dev
, int no_bytes
)
505 for (count
= (no_bytes
- 2);
507 (dev
->cli
.count
!= 0);
509 /* write to the Tx FIFO */
510 writeb(*dev
->cli
.buffer
,
511 dev
->virtbase
+ I2C_TFR
);
514 dev
->cli
.xfer_bytes
++;
520 * write_i2c() - Write data to I2C client.
521 * @dev: private data of I2C Driver
522 * @flags: message flags
524 * This function writes data to I2C client
526 static int write_i2c(struct nmk_i2c_dev
*dev
, u16 flags
)
532 mcr
= load_i2c_mcr_reg(dev
, flags
);
534 writel(mcr
, dev
->virtbase
+ I2C_MCR
);
536 /* load the current CR value */
537 writel(readl(dev
->virtbase
+ I2C_CR
) | DEFAULT_I2C_REG_CR
,
538 dev
->virtbase
+ I2C_CR
);
540 /* enable the controller */
541 i2c_set_bit(dev
->virtbase
+ I2C_CR
, I2C_CR_PE
);
543 init_completion(&dev
->xfer_complete
);
545 /* enable interrupts by settings the masks */
546 irq_mask
= (I2C_IT_TXFOVR
| I2C_IT_MAL
| I2C_IT_BERR
);
548 /* Fill the TX FIFO with transmit data */
549 fill_tx_fifo(dev
, MAX_I2C_FIFO_THRESHOLD
);
551 if (dev
->cli
.count
!= 0)
552 irq_mask
|= I2C_IT_TXFNE
;
555 * check if we want to transfer a single or multiple bytes, if so
556 * set the MTDWS bit (Master Transaction Done Without Stop)
557 * to start repeated start operation
559 if (dev
->stop
|| !dev
->vendor
->has_mtdws
)
560 irq_mask
|= I2C_IT_MTD
;
562 irq_mask
|= I2C_IT_MTDWS
;
564 irq_mask
= I2C_CLEAR_ALL_INTS
& IRQ_MASK(irq_mask
);
566 writel(readl(dev
->virtbase
+ I2C_IMSCR
) | irq_mask
,
567 dev
->virtbase
+ I2C_IMSCR
);
569 timeout
= wait_for_completion_timeout(
570 &dev
->xfer_complete
, dev
->adap
.timeout
);
573 /* Controller timed out */
574 dev_err(&dev
->adev
->dev
, "write to slave 0x%x timed out\n",
583 * nmk_i2c_xfer_one() - transmit a single I2C message
584 * @dev: device with a message encoded into it
585 * @flags: message flags
587 static int nmk_i2c_xfer_one(struct nmk_i2c_dev
*dev
, u16 flags
)
591 if (flags
& I2C_M_RD
) {
593 dev
->cli
.operation
= I2C_READ
;
594 status
= read_i2c(dev
, flags
);
596 /* write operation */
597 dev
->cli
.operation
= I2C_WRITE
;
598 status
= write_i2c(dev
, flags
);
601 if (status
|| (dev
->result
)) {
605 i2c_sr
= readl(dev
->virtbase
+ I2C_SR
);
607 * Check if the controller I2C operation status
608 * is set to ABORT(11b).
610 if (((i2c_sr
>> 2) & 0x3) == 0x3) {
611 /* get the abort cause */
612 cause
= (i2c_sr
>> 4) & 0x7;
613 dev_err(&dev
->adev
->dev
, "%s\n",
614 cause
>= ARRAY_SIZE(abort_causes
) ?
616 abort_causes
[cause
]);
621 status
= status
? status
: dev
->result
;
628 * nmk_i2c_xfer() - I2C transfer function used by kernel framework
629 * @i2c_adap: Adapter pointer to the controller
630 * @msgs: Pointer to data to be written.
631 * @num_msgs: Number of messages to be executed
633 * This is the function called by the generic kernel i2c_transfer()
634 * or i2c_smbus...() API calls. Note that this code is protected by the
635 * semaphore set in the kernel i2c_transfer() function.
638 * READ TRANSFER : We impose a restriction of the first message to be the
639 * index message for any read transaction.
640 * - a no index is coded as '0',
641 * - 2byte big endian index is coded as '3'
642 * !!! msg[0].buf holds the actual index.
643 * This is compatible with generic messages of smbus emulator
644 * that send a one byte index.
645 * eg. a I2C transation to read 2 bytes from index 0
647 * msg[0].addr = client->addr;
648 * msg[0].flags = 0x0;
652 * msg[1].addr = client->addr;
653 * msg[1].flags = I2C_M_RD;
655 * msg[1].buf = rd_buff
656 * i2c_transfer(adap, msg, 2);
658 * WRITE TRANSFER : The I2C standard interface interprets all data as payload.
659 * If you want to emulate an SMBUS write transaction put the
660 * index as first byte(or first and second) in the payload.
661 * eg. a I2C transation to write 2 bytes from index 1
665 * msg[0].flags = 0x0;
667 * msg[0].buf = wr_buff;
668 * i2c_transfer(adap, msg, 1);
670 * To read or write a block of data (multiple bytes) using SMBUS emulation
671 * please use the i2c_smbus_read_i2c_block_data()
672 * or i2c_smbus_write_i2c_block_data() API
674 static int nmk_i2c_xfer(struct i2c_adapter
*i2c_adap
,
675 struct i2c_msg msgs
[], int num_msgs
)
679 struct nmk_i2c_dev
*dev
= i2c_get_adapdata(i2c_adap
);
684 pm_runtime_get_sync(&dev
->adev
->dev
);
686 status
= clk_prepare_enable(dev
->clk
);
688 dev_err(&dev
->adev
->dev
, "can't prepare_enable clock\n");
692 /* Optionaly enable pins to be muxed in and configured */
693 pinctrl_pm_select_default_state(&dev
->adev
->dev
);
695 status
= init_hw(dev
);
699 /* Attempt three times to send the message queue */
700 for (j
= 0; j
< 3; j
++) {
701 /* setup the i2c controller */
702 setup_i2c_controller(dev
);
704 for (i
= 0; i
< num_msgs
; i
++) {
705 dev
->cli
.slave_adr
= msgs
[i
].addr
;
706 dev
->cli
.buffer
= msgs
[i
].buf
;
707 dev
->cli
.count
= msgs
[i
].len
;
708 dev
->stop
= (i
< (num_msgs
- 1)) ? 0 : 1;
711 status
= nmk_i2c_xfer_one(dev
, msgs
[i
].flags
);
720 clk_disable_unprepare(dev
->clk
);
722 /* Optionally let pins go into idle state */
723 pinctrl_pm_select_idle_state(&dev
->adev
->dev
);
725 pm_runtime_put_sync(&dev
->adev
->dev
);
729 /* return the no. messages processed */
737 * disable_interrupts() - disable the interrupts
738 * @dev: private data of controller
739 * @irq: interrupt number
741 static int disable_interrupts(struct nmk_i2c_dev
*dev
, u32 irq
)
744 writel(readl(dev
->virtbase
+ I2C_IMSCR
) & ~(I2C_CLEAR_ALL_INTS
& irq
),
745 dev
->virtbase
+ I2C_IMSCR
);
750 * i2c_irq_handler() - interrupt routine
751 * @irq: interrupt number
752 * @arg: data passed to the handler
754 * This is the interrupt handler for the i2c driver. Currently
755 * it handles the major interrupts like Rx & Tx FIFO management
756 * interrupts, master transaction interrupts, arbitration and
757 * bus error interrupts. The rest of the interrupts are treated as
760 static irqreturn_t
i2c_irq_handler(int irq
, void *arg
)
762 struct nmk_i2c_dev
*dev
= arg
;
767 /* load Tx FIFO and Rx FIFO threshold values */
768 tft
= readl(dev
->virtbase
+ I2C_TFTR
);
769 rft
= readl(dev
->virtbase
+ I2C_RFTR
);
771 /* read interrupt status register */
772 misr
= readl(dev
->virtbase
+ I2C_MISR
);
775 switch ((1 << src
)) {
777 /* Transmit FIFO nearly empty interrupt */
780 if (dev
->cli
.operation
== I2C_READ
) {
782 * in read operation why do we care for writing?
783 * so disable the Transmit FIFO interrupt
785 disable_interrupts(dev
, I2C_IT_TXFNE
);
787 fill_tx_fifo(dev
, (MAX_I2C_FIFO_THRESHOLD
- tft
));
789 * if done, close the transfer by disabling the
790 * corresponding TXFNE interrupt
792 if (dev
->cli
.count
== 0)
793 disable_interrupts(dev
, I2C_IT_TXFNE
);
799 * Rx FIFO nearly full interrupt.
800 * This is set when the numer of entries in Rx FIFO is
801 * greater or equal than the threshold value programmed
805 for (count
= rft
; count
> 0; count
--) {
806 /* Read the Rx FIFO */
807 *dev
->cli
.buffer
= readb(dev
->virtbase
+ I2C_RFR
);
810 dev
->cli
.count
-= rft
;
811 dev
->cli
.xfer_bytes
+= rft
;
816 for (count
= MAX_I2C_FIFO_THRESHOLD
; count
> 0; count
--) {
817 *dev
->cli
.buffer
= readb(dev
->virtbase
+ I2C_RFR
);
820 dev
->cli
.count
-= MAX_I2C_FIFO_THRESHOLD
;
821 dev
->cli
.xfer_bytes
+= MAX_I2C_FIFO_THRESHOLD
;
824 /* Master Transaction Done with/without stop */
827 if (dev
->cli
.operation
== I2C_READ
) {
828 while (!(readl(dev
->virtbase
+ I2C_RISR
)
830 if (dev
->cli
.count
== 0)
833 readb(dev
->virtbase
+ I2C_RFR
);
836 dev
->cli
.xfer_bytes
++;
840 disable_all_interrupts(dev
);
841 clear_all_interrupts(dev
);
843 if (dev
->cli
.count
) {
845 dev_err(&dev
->adev
->dev
,
846 "%lu bytes still remain to be xfered\n",
850 complete(&dev
->xfer_complete
);
854 /* Master Arbitration lost interrupt */
859 i2c_set_bit(dev
->virtbase
+ I2C_ICR
, I2C_IT_MAL
);
860 complete(&dev
->xfer_complete
);
865 * Bus Error interrupt.
866 * This happens when an unexpected start/stop condition occurs
867 * during the transaction.
872 if (((readl(dev
->virtbase
+ I2C_SR
) >> 2) & 0x3) == I2C_ABORT
)
875 i2c_set_bit(dev
->virtbase
+ I2C_ICR
, I2C_IT_BERR
);
876 complete(&dev
->xfer_complete
);
881 * Tx FIFO overrun interrupt.
882 * This is set when a write operation in Tx FIFO is performed and
883 * the Tx FIFO is full.
889 dev_err(&dev
->adev
->dev
, "Tx Fifo Over run\n");
890 complete(&dev
->xfer_complete
);
894 /* unhandled interrupts by this driver - TODO*/
902 dev_err(&dev
->adev
->dev
, "unhandled Interrupt\n");
905 dev_err(&dev
->adev
->dev
, "spurious Interrupt..\n");
914 static int nmk_i2c_suspend(struct device
*dev
)
916 struct amba_device
*adev
= to_amba_device(dev
);
917 struct nmk_i2c_dev
*nmk_i2c
= amba_get_drvdata(adev
);
922 pinctrl_pm_select_sleep_state(dev
);
927 static int nmk_i2c_resume(struct device
*dev
)
929 /* First go to the default state */
930 pinctrl_pm_select_default_state(dev
);
931 /* Then let's idle the pins until the next transfer happens */
932 pinctrl_pm_select_idle_state(dev
);
937 #define nmk_i2c_suspend NULL
938 #define nmk_i2c_resume NULL
942 * We use noirq so that we suspend late and resume before the wakeup interrupt
943 * to ensure that we do the !pm_runtime_suspended() check in resume before
944 * there has been a regular pm runtime resume (via pm_runtime_get_sync()).
946 static const struct dev_pm_ops nmk_i2c_pm
= {
947 .suspend_noirq
= nmk_i2c_suspend
,
948 .resume_noirq
= nmk_i2c_resume
,
951 static unsigned int nmk_i2c_functionality(struct i2c_adapter
*adap
)
953 return I2C_FUNC_I2C
| I2C_FUNC_SMBUS_EMUL
| I2C_FUNC_10BIT_ADDR
;
956 static const struct i2c_algorithm nmk_i2c_algo
= {
957 .master_xfer
= nmk_i2c_xfer
,
958 .functionality
= nmk_i2c_functionality
961 static struct nmk_i2c_controller u8500_i2c
= {
962 .tft
= 1, /* Tx FIFO threshold */
963 .rft
= 8, /* Rx FIFO threshold */
964 .clk_freq
= 400000, /* fast mode operation */
965 .timeout
= 200, /* Slave response timeout(ms) */
966 .sm
= I2C_FREQ_MODE_FAST
,
969 static void nmk_i2c_of_probe(struct device_node
*np
,
970 struct nmk_i2c_controller
*pdata
)
972 of_property_read_u32(np
, "clock-frequency", &pdata
->clk_freq
);
974 /* This driver only supports 'standard' and 'fast' modes of operation. */
975 if (pdata
->clk_freq
<= 100000)
976 pdata
->sm
= I2C_FREQ_MODE_STANDARD
;
978 pdata
->sm
= I2C_FREQ_MODE_FAST
;
981 static int nmk_i2c_probe(struct amba_device
*adev
, const struct amba_id
*id
)
984 struct nmk_i2c_controller
*pdata
= dev_get_platdata(&adev
->dev
);
985 struct device_node
*np
= adev
->dev
.of_node
;
986 struct nmk_i2c_dev
*dev
;
987 struct i2c_adapter
*adap
;
988 struct i2c_vendor_data
*vendor
= id
->data
;
989 u32 max_fifo_threshold
= (vendor
->fifodepth
/ 2) - 1;
993 pdata
= devm_kzalloc(&adev
->dev
, sizeof(*pdata
), GFP_KERNEL
);
998 /* Provide the default configuration as a base. */
999 memcpy(pdata
, &u8500_i2c
, sizeof(struct nmk_i2c_controller
));
1000 nmk_i2c_of_probe(np
, pdata
);
1002 /* No i2c configuration found, using the default. */
1006 if (pdata
->tft
> max_fifo_threshold
) {
1007 dev_warn(&adev
->dev
, "requested TX FIFO threshold %u, adjusted down to %u\n",
1008 pdata
->tft
, max_fifo_threshold
);
1009 pdata
->tft
= max_fifo_threshold
;
1012 if (pdata
->rft
> max_fifo_threshold
) {
1013 dev_warn(&adev
->dev
, "requested RX FIFO threshold %u, adjusted down to %u\n",
1014 pdata
->rft
, max_fifo_threshold
);
1015 pdata
->rft
= max_fifo_threshold
;
1018 dev
= kzalloc(sizeof(struct nmk_i2c_dev
), GFP_KERNEL
);
1020 dev_err(&adev
->dev
, "cannot allocate memory\n");
1024 dev
->vendor
= vendor
;
1027 amba_set_drvdata(adev
, dev
);
1029 /* Select default pin state */
1030 pinctrl_pm_select_default_state(&adev
->dev
);
1031 /* If possible, let's go to idle until the first transfer */
1032 pinctrl_pm_select_idle_state(&adev
->dev
);
1034 dev
->virtbase
= ioremap(adev
->res
.start
, resource_size(&adev
->res
));
1035 if (!dev
->virtbase
) {
1037 goto err_no_ioremap
;
1040 dev
->irq
= adev
->irq
[0];
1041 ret
= request_irq(dev
->irq
, i2c_irq_handler
, 0,
1044 dev_err(&adev
->dev
, "cannot claim the irq %d\n", dev
->irq
);
1048 pm_suspend_ignore_children(&adev
->dev
, true);
1050 dev
->clk
= clk_get(&adev
->dev
, NULL
);
1051 if (IS_ERR(dev
->clk
)) {
1052 dev_err(&adev
->dev
, "could not get i2c clock\n");
1053 ret
= PTR_ERR(dev
->clk
);
1058 adap
->dev
.of_node
= np
;
1059 adap
->dev
.parent
= &adev
->dev
;
1060 adap
->owner
= THIS_MODULE
;
1061 adap
->class = I2C_CLASS_HWMON
| I2C_CLASS_SPD
;
1062 adap
->algo
= &nmk_i2c_algo
;
1063 adap
->timeout
= msecs_to_jiffies(pdata
->timeout
);
1064 snprintf(adap
->name
, sizeof(adap
->name
),
1065 "Nomadik I2C at %pR", &adev
->res
);
1067 /* fetch the controller configuration from machine */
1068 dev
->cfg
.clk_freq
= pdata
->clk_freq
;
1069 dev
->cfg
.tft
= pdata
->tft
;
1070 dev
->cfg
.rft
= pdata
->rft
;
1071 dev
->cfg
.sm
= pdata
->sm
;
1073 i2c_set_adapdata(adap
, dev
);
1075 dev_info(&adev
->dev
,
1076 "initialize %s on virtual base %p\n",
1077 adap
->name
, dev
->virtbase
);
1079 ret
= i2c_add_adapter(adap
);
1081 dev_err(&adev
->dev
, "failed to add adapter\n");
1085 pm_runtime_put(&adev
->dev
);
1092 free_irq(dev
->irq
, dev
);
1094 iounmap(dev
->virtbase
);
1102 static int nmk_i2c_remove(struct amba_device
*adev
)
1104 struct resource
*res
= &adev
->res
;
1105 struct nmk_i2c_dev
*dev
= amba_get_drvdata(adev
);
1107 i2c_del_adapter(&dev
->adap
);
1108 flush_i2c_fifo(dev
);
1109 disable_all_interrupts(dev
);
1110 clear_all_interrupts(dev
);
1111 /* disable the controller */
1112 i2c_clr_bit(dev
->virtbase
+ I2C_CR
, I2C_CR_PE
);
1113 free_irq(dev
->irq
, dev
);
1114 iounmap(dev
->virtbase
);
1116 release_mem_region(res
->start
, resource_size(res
));
1118 pm_runtime_disable(&adev
->dev
);
1124 static struct i2c_vendor_data vendor_stn8815
= {
1126 .fifodepth
= 16, /* Guessed from TFTR/RFTR = 7 */
1129 static struct i2c_vendor_data vendor_db8500
= {
1131 .fifodepth
= 32, /* Guessed from TFTR/RFTR = 15 */
1134 static struct amba_id nmk_i2c_ids
[] = {
1138 .data
= &vendor_stn8815
,
1143 .data
= &vendor_db8500
,
1148 MODULE_DEVICE_TABLE(amba
, nmk_i2c_ids
);
1150 static struct amba_driver nmk_i2c_driver
= {
1152 .owner
= THIS_MODULE
,
1153 .name
= DRIVER_NAME
,
1156 .id_table
= nmk_i2c_ids
,
1157 .probe
= nmk_i2c_probe
,
1158 .remove
= nmk_i2c_remove
,
1161 static int __init
nmk_i2c_init(void)
1163 return amba_driver_register(&nmk_i2c_driver
);
1166 static void __exit
nmk_i2c_exit(void)
1168 amba_driver_unregister(&nmk_i2c_driver
);
1171 subsys_initcall(nmk_i2c_init
);
1172 module_exit(nmk_i2c_exit
);
1174 MODULE_AUTHOR("Sachin Verma, Srinidhi KASAGAR");
1175 MODULE_DESCRIPTION("Nomadik/Ux500 I2C driver");
1176 MODULE_LICENSE("GPL");