1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (c) 2009-2013, 2016-2018, The Linux Foundation. All rights reserved.
4 * Copyright (c) 2014, Sony Mobile Communications AB.
8 #include <linux/acpi.h>
9 #include <linux/atomic.h>
10 #include <linux/clk.h>
11 #include <linux/delay.h>
12 #include <linux/dmaengine.h>
13 #include <linux/dmapool.h>
14 #include <linux/dma-mapping.h>
15 #include <linux/err.h>
16 #include <linux/i2c.h>
17 #include <linux/interrupt.h>
19 #include <linux/module.h>
21 #include <linux/platform_device.h>
22 #include <linux/pm_runtime.h>
23 #include <linux/scatterlist.h>
26 #define QUP_CONFIG 0x000
27 #define QUP_STATE 0x004
28 #define QUP_IO_MODE 0x008
29 #define QUP_SW_RESET 0x00c
30 #define QUP_OPERATIONAL 0x018
31 #define QUP_ERROR_FLAGS 0x01c
32 #define QUP_ERROR_FLAGS_EN 0x020
33 #define QUP_OPERATIONAL_MASK 0x028
34 #define QUP_HW_VERSION 0x030
35 #define QUP_MX_OUTPUT_CNT 0x100
36 #define QUP_OUT_FIFO_BASE 0x110
37 #define QUP_MX_WRITE_CNT 0x150
38 #define QUP_MX_INPUT_CNT 0x200
39 #define QUP_MX_READ_CNT 0x208
40 #define QUP_IN_FIFO_BASE 0x218
41 #define QUP_I2C_CLK_CTL 0x400
42 #define QUP_I2C_STATUS 0x404
43 #define QUP_I2C_MASTER_GEN 0x408
45 /* QUP States and reset values */
46 #define QUP_RESET_STATE 0
47 #define QUP_RUN_STATE 1
48 #define QUP_PAUSE_STATE 3
49 #define QUP_STATE_MASK 3
51 #define QUP_STATE_VALID BIT(2)
52 #define QUP_I2C_MAST_GEN BIT(4)
53 #define QUP_I2C_FLUSH BIT(6)
55 #define QUP_OPERATIONAL_RESET 0x000ff0
56 #define QUP_I2C_STATUS_RESET 0xfffffc
58 /* QUP OPERATIONAL FLAGS */
59 #define QUP_I2C_NACK_FLAG BIT(3)
60 #define QUP_OUT_NOT_EMPTY BIT(4)
61 #define QUP_IN_NOT_EMPTY BIT(5)
62 #define QUP_OUT_FULL BIT(6)
63 #define QUP_OUT_SVC_FLAG BIT(8)
64 #define QUP_IN_SVC_FLAG BIT(9)
65 #define QUP_MX_OUTPUT_DONE BIT(10)
66 #define QUP_MX_INPUT_DONE BIT(11)
67 #define OUT_BLOCK_WRITE_REQ BIT(12)
68 #define IN_BLOCK_READ_REQ BIT(13)
70 /* I2C mini core related values */
71 #define QUP_NO_INPUT BIT(7)
72 #define QUP_CLOCK_AUTO_GATE BIT(13)
73 #define I2C_MINI_CORE (2 << 8)
75 #define I2C_N_VAL_V2 7
77 /* Most significant word offset in FIFO port */
78 #define QUP_MSW_SHIFT (I2C_N_VAL + 1)
80 /* Packing/Unpacking words in FIFOs, and IO modes */
81 #define QUP_OUTPUT_BLK_MODE (1 << 10)
82 #define QUP_OUTPUT_BAM_MODE (3 << 10)
83 #define QUP_INPUT_BLK_MODE (1 << 12)
84 #define QUP_INPUT_BAM_MODE (3 << 12)
85 #define QUP_BAM_MODE (QUP_OUTPUT_BAM_MODE | QUP_INPUT_BAM_MODE)
86 #define QUP_UNPACK_EN BIT(14)
87 #define QUP_PACK_EN BIT(15)
89 #define QUP_REPACK_EN (QUP_UNPACK_EN | QUP_PACK_EN)
90 #define QUP_V2_TAGS_EN 1
92 #define QUP_OUTPUT_BLOCK_SIZE(x)(((x) >> 0) & 0x03)
93 #define QUP_OUTPUT_FIFO_SIZE(x) (((x) >> 2) & 0x07)
94 #define QUP_INPUT_BLOCK_SIZE(x) (((x) >> 5) & 0x03)
95 #define QUP_INPUT_FIFO_SIZE(x) (((x) >> 7) & 0x07)
98 #define QUP_TAG_START (1 << 8)
99 #define QUP_TAG_DATA (2 << 8)
100 #define QUP_TAG_STOP (3 << 8)
101 #define QUP_TAG_REC (4 << 8)
102 #define QUP_BAM_INPUT_EOT 0x93
103 #define QUP_BAM_FLUSH_STOP 0x96
106 #define QUP_TAG_V2_START 0x81
107 #define QUP_TAG_V2_DATAWR 0x82
108 #define QUP_TAG_V2_DATAWR_STOP 0x83
109 #define QUP_TAG_V2_DATARD 0x85
110 #define QUP_TAG_V2_DATARD_NACK 0x86
111 #define QUP_TAG_V2_DATARD_STOP 0x87
113 /* Status, Error flags */
114 #define I2C_STATUS_WR_BUFFER_FULL BIT(0)
115 #define I2C_STATUS_BUS_ACTIVE BIT(8)
116 #define I2C_STATUS_ERROR_MASK 0x38000fc
117 #define QUP_STATUS_ERROR_FLAGS 0x7c
119 #define QUP_READ_LIMIT 256
121 #define RESET_BIT 0x0
123 #define QUP_I2C_MX_CONFIG_DURING_RUN BIT(31)
125 /* Maximum transfer length for single DMA descriptor */
126 #define MX_TX_RX_LEN SZ_64K
127 #define MX_BLOCKS (MX_TX_RX_LEN / QUP_READ_LIMIT)
128 /* Maximum transfer length for all DMA descriptors */
129 #define MX_DMA_TX_RX_LEN (2 * MX_TX_RX_LEN)
130 #define MX_DMA_BLOCKS (MX_DMA_TX_RX_LEN / QUP_READ_LIMIT)
133 * Minimum transfer timeout for i2c transfers in seconds. It will be added on
134 * the top of maximum transfer time calculated from i2c bus speed to compensate
139 /* Default values. Use these if FW query fails */
140 #define DEFAULT_CLK_FREQ I2C_MAX_STANDARD_MODE_FREQ
141 #define DEFAULT_SRC_CLK 20000000
144 * Max tags length (start, stop and maximum 2 bytes address) for each QUP
147 #define QUP_MAX_TAGS_LEN 4
148 /* Max data length for each DATARD tags */
149 #define RECV_MAX_DATA_LEN 254
150 /* TAG length for DATA READ in RX FIFO */
151 #define READ_RX_TAGS_LEN 2
153 static unsigned int scl_freq
;
154 module_param_named(scl_freq
, scl_freq
, uint
, 0444);
155 MODULE_PARM_DESC(scl_freq
, "SCL frequency override");
158 * count: no of blocks
159 * pos: current block number
160 * tx_tag_len: tx tag length for current block
161 * rx_tag_len: rx tag length for current block
162 * data_len: remaining data length for current message
163 * cur_blk_len: data length for current block
164 * total_tx_len: total tx length including tag bytes for current QUP transfer
165 * total_rx_len: total rx length including tag bytes for current QUP transfer
166 * tx_fifo_data_pos: current byte number in TX FIFO word
167 * tx_fifo_free: number of free bytes in current QUP block write.
168 * rx_fifo_data_pos: current byte number in RX FIFO word
169 * fifo_available: number of available bytes in RX FIFO for current
171 * tx_fifo_data: QUP TX FIFO write works on word basis (4 bytes). New byte write
172 * to TX FIFO will be appended in this data and will be written to
173 * TX FIFO when all the 4 bytes are available.
174 * rx_fifo_data: QUP RX FIFO read works on word basis (4 bytes). This will
175 * contains the 4 bytes of RX data.
176 * cur_data: pointer to tell cur data position for current message
177 * cur_tx_tags: pointer to tell cur position in tags
178 * tx_tags_sent: all tx tag bytes have been written in FIFO word
179 * send_last_word: for tx FIFO, last word send is pending in current block
180 * rx_bytes_read: if all the bytes have been read from rx FIFO.
181 * rx_tags_fetched: all the rx tag bytes have been fetched from rx fifo word
182 * is_tx_blk_mode: whether tx uses block or FIFO mode in case of non BAM xfer.
183 * is_rx_blk_mode: whether rx uses block or FIFO mode in case of non BAM xfer.
184 * tags: contains tx tag bytes for current QUP transfer
186 struct qup_i2c_block
{
195 int tx_fifo_data_pos
;
197 int rx_fifo_data_pos
;
205 bool rx_tags_fetched
;
218 struct qup_i2c_tag tag
;
219 struct dma_chan
*dma
;
220 struct scatterlist
*sg
;
230 struct i2c_adapter adap
;
239 unsigned long one_byte_t
;
240 unsigned long xfer_timeout
;
241 struct qup_i2c_block blk
;
244 /* Current posion in user message buffer */
246 /* I2C protocol errors */
248 /* QUP core errors */
251 /* To check if this is the last msg */
255 /* To configure when bus is in run state */
260 /* To check if the current transfer is using DMA */
262 unsigned int max_xfer_sg_len
;
263 unsigned int tag_buf_pos
;
264 /* The threshold length above which block mode will be used */
265 unsigned int blk_mode_threshold
;
266 struct dma_pool
*dpool
;
267 struct qup_i2c_tag start_tag
;
268 struct qup_i2c_bam brx
;
269 struct qup_i2c_bam btx
;
271 struct completion xfer
;
272 /* function to write data in tx fifo */
273 void (*write_tx_fifo
)(struct qup_i2c_dev
*qup
);
274 /* function to read data from rx fifo */
275 void (*read_rx_fifo
)(struct qup_i2c_dev
*qup
);
276 /* function to write tags in tx fifo for i2c read transfer */
277 void (*write_rx_tags
)(struct qup_i2c_dev
*qup
);
280 static irqreturn_t
qup_i2c_interrupt(int irq
, void *dev
)
282 struct qup_i2c_dev
*qup
= dev
;
283 struct qup_i2c_block
*blk
= &qup
->blk
;
288 bus_err
= readl(qup
->base
+ QUP_I2C_STATUS
);
289 qup_err
= readl(qup
->base
+ QUP_ERROR_FLAGS
);
290 opflags
= readl(qup
->base
+ QUP_OPERATIONAL
);
293 /* Clear Error interrupt */
294 writel(QUP_RESET_STATE
, qup
->base
+ QUP_STATE
);
298 bus_err
&= I2C_STATUS_ERROR_MASK
;
299 qup_err
&= QUP_STATUS_ERROR_FLAGS
;
301 /* Clear the error bits in QUP_ERROR_FLAGS */
303 writel(qup_err
, qup
->base
+ QUP_ERROR_FLAGS
);
305 /* Clear the error bits in QUP_I2C_STATUS */
307 writel(bus_err
, qup
->base
+ QUP_I2C_STATUS
);
310 * Check for BAM mode and returns if already error has come for current
311 * transfer. In Error case, sometimes, QUP generates more than one
314 if (qup
->use_dma
&& (qup
->qup_err
|| qup
->bus_err
))
317 /* Reset the QUP State in case of error */
318 if (qup_err
|| bus_err
) {
320 * Don’t reset the QUP state in case of BAM mode. The BAM
321 * flush operation needs to be scheduled in transfer function
322 * which will clear the remaining schedule descriptors in BAM
323 * HW FIFO and generates the BAM interrupt.
326 writel(QUP_RESET_STATE
, qup
->base
+ QUP_STATE
);
330 if (opflags
& QUP_OUT_SVC_FLAG
) {
331 writel(QUP_OUT_SVC_FLAG
, qup
->base
+ QUP_OPERATIONAL
);
333 if (opflags
& OUT_BLOCK_WRITE_REQ
) {
334 blk
->tx_fifo_free
+= qup
->out_blk_sz
;
335 if (qup
->msg
->flags
& I2C_M_RD
)
336 qup
->write_rx_tags(qup
);
338 qup
->write_tx_fifo(qup
);
342 if (opflags
& QUP_IN_SVC_FLAG
) {
343 writel(QUP_IN_SVC_FLAG
, qup
->base
+ QUP_OPERATIONAL
);
345 if (!blk
->is_rx_blk_mode
) {
346 blk
->fifo_available
+= qup
->in_fifo_sz
;
347 qup
->read_rx_fifo(qup
);
348 } else if (opflags
& IN_BLOCK_READ_REQ
) {
349 blk
->fifo_available
+= qup
->in_blk_sz
;
350 qup
->read_rx_fifo(qup
);
354 if (qup
->msg
->flags
& I2C_M_RD
) {
355 if (!blk
->rx_bytes_read
)
359 * Ideally, QUP_MAX_OUTPUT_DONE_FLAG should be checked
360 * for FIFO mode also. But, QUP_MAX_OUTPUT_DONE_FLAG lags
361 * behind QUP_OUTPUT_SERVICE_FLAG sometimes. The only reason
362 * of interrupt for write message in FIFO mode is
363 * QUP_MAX_OUTPUT_DONE_FLAG condition.
365 if (blk
->is_tx_blk_mode
&& !(opflags
& QUP_MX_OUTPUT_DONE
))
370 qup
->qup_err
= qup_err
;
371 qup
->bus_err
= bus_err
;
372 complete(&qup
->xfer
);
376 static int qup_i2c_poll_state_mask(struct qup_i2c_dev
*qup
,
377 u32 req_state
, u32 req_mask
)
383 * State transition takes 3 AHB clocks cycles + 3 I2C master clock
384 * cycles. So retry once after a 1uS delay.
387 state
= readl(qup
->base
+ QUP_STATE
);
389 if (state
& QUP_STATE_VALID
&&
390 (state
& req_mask
) == req_state
)
399 static int qup_i2c_poll_state(struct qup_i2c_dev
*qup
, u32 req_state
)
401 return qup_i2c_poll_state_mask(qup
, req_state
, QUP_STATE_MASK
);
404 static void qup_i2c_flush(struct qup_i2c_dev
*qup
)
406 u32 val
= readl(qup
->base
+ QUP_STATE
);
408 val
|= QUP_I2C_FLUSH
;
409 writel(val
, qup
->base
+ QUP_STATE
);
412 static int qup_i2c_poll_state_valid(struct qup_i2c_dev
*qup
)
414 return qup_i2c_poll_state_mask(qup
, 0, 0);
417 static int qup_i2c_poll_state_i2c_master(struct qup_i2c_dev
*qup
)
419 return qup_i2c_poll_state_mask(qup
, QUP_I2C_MAST_GEN
, QUP_I2C_MAST_GEN
);
422 static int qup_i2c_change_state(struct qup_i2c_dev
*qup
, u32 state
)
424 if (qup_i2c_poll_state_valid(qup
) != 0)
427 writel(state
, qup
->base
+ QUP_STATE
);
429 if (qup_i2c_poll_state(qup
, state
) != 0)
434 /* Check if I2C bus returns to IDLE state */
435 static int qup_i2c_bus_active(struct qup_i2c_dev
*qup
, int len
)
437 unsigned long timeout
;
441 timeout
= jiffies
+ len
* 4;
443 status
= readl(qup
->base
+ QUP_I2C_STATUS
);
444 if (!(status
& I2C_STATUS_BUS_ACTIVE
))
447 if (time_after(jiffies
, timeout
))
450 usleep_range(len
, len
* 2);
456 static void qup_i2c_write_tx_fifo_v1(struct qup_i2c_dev
*qup
)
458 struct qup_i2c_block
*blk
= &qup
->blk
;
459 struct i2c_msg
*msg
= qup
->msg
;
460 u32 addr
= i2c_8bit_addr_from_msg(msg
);
466 val
= QUP_TAG_START
| addr
;
474 while (blk
->tx_fifo_free
&& qup
->pos
< msg
->len
) {
475 if (qup
->pos
== msg
->len
- 1)
476 qup_tag
= QUP_TAG_STOP
;
478 qup_tag
= QUP_TAG_DATA
;
481 val
|= (qup_tag
| msg
->buf
[qup
->pos
]) << QUP_MSW_SHIFT
;
483 val
= qup_tag
| msg
->buf
[qup
->pos
];
485 /* Write out the pair and the last odd value */
486 if (idx
& 1 || qup
->pos
== msg
->len
- 1)
487 writel(val
, qup
->base
+ QUP_OUT_FIFO_BASE
);
495 static void qup_i2c_set_blk_data(struct qup_i2c_dev
*qup
,
499 qup
->blk
.data_len
= msg
->len
;
500 qup
->blk
.count
= DIV_ROUND_UP(msg
->len
, qup
->blk_xfer_limit
);
503 static int qup_i2c_get_data_len(struct qup_i2c_dev
*qup
)
507 if (qup
->blk
.data_len
> qup
->blk_xfer_limit
)
508 data_len
= qup
->blk_xfer_limit
;
510 data_len
= qup
->blk
.data_len
;
515 static bool qup_i2c_check_msg_len(struct i2c_msg
*msg
)
517 return ((msg
->flags
& I2C_M_RD
) && (msg
->flags
& I2C_M_RECV_LEN
));
520 static int qup_i2c_set_tags_smb(u16 addr
, u8
*tags
, struct qup_i2c_dev
*qup
,
525 if (qup
->is_smbus_read
) {
526 tags
[len
++] = QUP_TAG_V2_DATARD_STOP
;
527 tags
[len
++] = qup_i2c_get_data_len(qup
);
529 tags
[len
++] = QUP_TAG_V2_START
;
530 tags
[len
++] = addr
& 0xff;
532 if (msg
->flags
& I2C_M_TEN
)
533 tags
[len
++] = addr
>> 8;
535 tags
[len
++] = QUP_TAG_V2_DATARD
;
536 /* Read 1 byte indicating the length of the SMBus message */
542 static int qup_i2c_set_tags(u8
*tags
, struct qup_i2c_dev
*qup
,
545 u16 addr
= i2c_8bit_addr_from_msg(msg
);
549 int last
= (qup
->blk
.pos
== (qup
->blk
.count
- 1)) && (qup
->is_last
);
551 /* Handle tags for SMBus block read */
552 if (qup_i2c_check_msg_len(msg
))
553 return qup_i2c_set_tags_smb(addr
, tags
, qup
, msg
);
555 if (qup
->blk
.pos
== 0) {
556 tags
[len
++] = QUP_TAG_V2_START
;
557 tags
[len
++] = addr
& 0xff;
559 if (msg
->flags
& I2C_M_TEN
)
560 tags
[len
++] = addr
>> 8;
563 /* Send _STOP commands for the last block */
565 if (msg
->flags
& I2C_M_RD
)
566 tags
[len
++] = QUP_TAG_V2_DATARD_STOP
;
568 tags
[len
++] = QUP_TAG_V2_DATAWR_STOP
;
570 if (msg
->flags
& I2C_M_RD
)
571 tags
[len
++] = qup
->blk
.pos
== (qup
->blk
.count
- 1) ?
572 QUP_TAG_V2_DATARD_NACK
:
575 tags
[len
++] = QUP_TAG_V2_DATAWR
;
578 data_len
= qup_i2c_get_data_len(qup
);
580 /* 0 implies 256 bytes */
581 if (data_len
== QUP_READ_LIMIT
)
584 tags
[len
++] = data_len
;
590 static void qup_i2c_bam_cb(void *data
)
592 struct qup_i2c_dev
*qup
= data
;
594 complete(&qup
->xfer
);
597 static int qup_sg_set_buf(struct scatterlist
*sg
, void *buf
,
598 unsigned int buflen
, struct qup_i2c_dev
*qup
,
603 sg_set_buf(sg
, buf
, buflen
);
604 ret
= dma_map_sg(qup
->dev
, sg
, 1, dir
);
611 static void qup_i2c_rel_dma(struct qup_i2c_dev
*qup
)
614 dma_release_channel(qup
->btx
.dma
);
616 dma_release_channel(qup
->brx
.dma
);
621 static int qup_i2c_req_dma(struct qup_i2c_dev
*qup
)
626 qup
->btx
.dma
= dma_request_chan(qup
->dev
, "tx");
627 if (IS_ERR(qup
->btx
.dma
)) {
628 err
= PTR_ERR(qup
->btx
.dma
);
630 dev_err(qup
->dev
, "\n tx channel not available");
636 qup
->brx
.dma
= dma_request_chan(qup
->dev
, "rx");
637 if (IS_ERR(qup
->brx
.dma
)) {
638 dev_err(qup
->dev
, "\n rx channel not available");
639 err
= PTR_ERR(qup
->brx
.dma
);
641 qup_i2c_rel_dma(qup
);
648 static int qup_i2c_bam_make_desc(struct qup_i2c_dev
*qup
, struct i2c_msg
*msg
)
650 int ret
= 0, limit
= QUP_READ_LIMIT
;
651 u32 len
= 0, blocks
, rem
;
652 u32 i
= 0, tlen
, tx_len
= 0;
655 qup
->blk_xfer_limit
= QUP_READ_LIMIT
;
656 qup_i2c_set_blk_data(qup
, msg
);
658 blocks
= qup
->blk
.count
;
659 rem
= msg
->len
- (blocks
- 1) * limit
;
661 if (msg
->flags
& I2C_M_RD
) {
662 while (qup
->blk
.pos
< blocks
) {
663 tlen
= (i
== (blocks
- 1)) ? rem
: limit
;
664 tags
= &qup
->start_tag
.start
[qup
->tag_buf_pos
+ len
];
665 len
+= qup_i2c_set_tags(tags
, qup
, msg
);
666 qup
->blk
.data_len
-= tlen
;
668 /* scratch buf to read the start and len tags */
669 ret
= qup_sg_set_buf(&qup
->brx
.sg
[qup
->brx
.sg_cnt
++],
670 &qup
->brx
.tag
.start
[0],
671 2, qup
, DMA_FROM_DEVICE
);
676 ret
= qup_sg_set_buf(&qup
->brx
.sg
[qup
->brx
.sg_cnt
++],
677 &msg
->buf
[limit
* i
],
686 ret
= qup_sg_set_buf(&qup
->btx
.sg
[qup
->btx
.sg_cnt
++],
687 &qup
->start_tag
.start
[qup
->tag_buf_pos
],
688 len
, qup
, DMA_TO_DEVICE
);
692 qup
->tag_buf_pos
+= len
;
694 while (qup
->blk
.pos
< blocks
) {
695 tlen
= (i
== (blocks
- 1)) ? rem
: limit
;
696 tags
= &qup
->start_tag
.start
[qup
->tag_buf_pos
+ tx_len
];
697 len
= qup_i2c_set_tags(tags
, qup
, msg
);
698 qup
->blk
.data_len
-= tlen
;
700 ret
= qup_sg_set_buf(&qup
->btx
.sg
[qup
->btx
.sg_cnt
++],
707 ret
= qup_sg_set_buf(&qup
->btx
.sg
[qup
->btx
.sg_cnt
++],
708 &msg
->buf
[limit
* i
],
709 tlen
, qup
, DMA_TO_DEVICE
);
716 qup
->tag_buf_pos
+= tx_len
;
722 static int qup_i2c_bam_schedule_desc(struct qup_i2c_dev
*qup
)
724 struct dma_async_tx_descriptor
*txd
, *rxd
= NULL
;
726 dma_cookie_t cookie_rx
, cookie_tx
;
728 u32 tx_cnt
= qup
->btx
.sg_cnt
, rx_cnt
= qup
->brx
.sg_cnt
;
730 /* schedule the EOT and FLUSH I2C tags */
733 qup
->btx
.tag
.start
[0] = QUP_BAM_INPUT_EOT
;
736 /* scratch buf to read the BAM EOT FLUSH tags */
737 ret
= qup_sg_set_buf(&qup
->brx
.sg
[rx_cnt
++],
738 &qup
->brx
.tag
.start
[0],
739 1, qup
, DMA_FROM_DEVICE
);
744 qup
->btx
.tag
.start
[len
- 1] = QUP_BAM_FLUSH_STOP
;
745 ret
= qup_sg_set_buf(&qup
->btx
.sg
[tx_cnt
++], &qup
->btx
.tag
.start
[0],
746 len
, qup
, DMA_TO_DEVICE
);
750 txd
= dmaengine_prep_slave_sg(qup
->btx
.dma
, qup
->btx
.sg
, tx_cnt
,
752 DMA_PREP_INTERRUPT
| DMA_PREP_FENCE
);
754 dev_err(qup
->dev
, "failed to get tx desc\n");
760 txd
->callback
= qup_i2c_bam_cb
;
761 txd
->callback_param
= qup
;
764 cookie_tx
= dmaengine_submit(txd
);
765 if (dma_submit_error(cookie_tx
)) {
770 dma_async_issue_pending(qup
->btx
.dma
);
773 rxd
= dmaengine_prep_slave_sg(qup
->brx
.dma
, qup
->brx
.sg
,
774 rx_cnt
, DMA_DEV_TO_MEM
,
777 dev_err(qup
->dev
, "failed to get rx desc\n");
780 /* abort TX descriptors */
781 dmaengine_terminate_all(qup
->btx
.dma
);
785 rxd
->callback
= qup_i2c_bam_cb
;
786 rxd
->callback_param
= qup
;
787 cookie_rx
= dmaengine_submit(rxd
);
788 if (dma_submit_error(cookie_rx
)) {
793 dma_async_issue_pending(qup
->brx
.dma
);
796 if (!wait_for_completion_timeout(&qup
->xfer
, qup
->xfer_timeout
)) {
797 dev_err(qup
->dev
, "normal trans timed out\n");
801 if (ret
|| qup
->bus_err
|| qup
->qup_err
) {
802 reinit_completion(&qup
->xfer
);
804 if (qup_i2c_change_state(qup
, QUP_RUN_STATE
)) {
805 dev_err(qup
->dev
, "change to run state timed out");
811 /* wait for remaining interrupts to occur */
812 if (!wait_for_completion_timeout(&qup
->xfer
, HZ
))
813 dev_err(qup
->dev
, "flush timed out\n");
815 ret
= (qup
->bus_err
& QUP_I2C_NACK_FLAG
) ? -ENXIO
: -EIO
;
819 dma_unmap_sg(qup
->dev
, qup
->btx
.sg
, tx_cnt
, DMA_TO_DEVICE
);
822 dma_unmap_sg(qup
->dev
, qup
->brx
.sg
, rx_cnt
,
828 static void qup_i2c_bam_clear_tag_buffers(struct qup_i2c_dev
*qup
)
832 qup
->tag_buf_pos
= 0;
835 static int qup_i2c_bam_xfer(struct i2c_adapter
*adap
, struct i2c_msg
*msg
,
838 struct qup_i2c_dev
*qup
= i2c_get_adapdata(adap
);
842 enable_irq(qup
->irq
);
843 ret
= qup_i2c_req_dma(qup
);
848 writel(0, qup
->base
+ QUP_MX_INPUT_CNT
);
849 writel(0, qup
->base
+ QUP_MX_OUTPUT_CNT
);
852 writel(QUP_REPACK_EN
| QUP_BAM_MODE
, qup
->base
+ QUP_IO_MODE
);
855 writel((0x3 << 8), qup
->base
+ QUP_OPERATIONAL_MASK
);
858 ret
= qup_i2c_change_state(qup
, QUP_RUN_STATE
);
862 writel(qup
->clk_ctl
, qup
->base
+ QUP_I2C_CLK_CTL
);
863 qup_i2c_bam_clear_tag_buffers(qup
);
865 for (idx
= 0; idx
< num
; idx
++) {
866 qup
->msg
= msg
+ idx
;
867 qup
->is_last
= idx
== (num
- 1);
869 ret
= qup_i2c_bam_make_desc(qup
, qup
->msg
);
874 * Make DMA descriptor and schedule the BAM transfer if its
875 * already crossed the maximum length. Since the memory for all
876 * tags buffers have been taken for 2 maximum possible
877 * transfers length so it will never cross the buffer actual
880 if (qup
->btx
.sg_cnt
> qup
->max_xfer_sg_len
||
881 qup
->brx
.sg_cnt
> qup
->max_xfer_sg_len
||
883 ret
= qup_i2c_bam_schedule_desc(qup
);
887 qup_i2c_bam_clear_tag_buffers(qup
);
892 disable_irq(qup
->irq
);
898 static int qup_i2c_wait_for_complete(struct qup_i2c_dev
*qup
,
904 left
= wait_for_completion_timeout(&qup
->xfer
, qup
->xfer_timeout
);
906 writel(1, qup
->base
+ QUP_SW_RESET
);
910 if (qup
->bus_err
|| qup
->qup_err
)
911 ret
= (qup
->bus_err
& QUP_I2C_NACK_FLAG
) ? -ENXIO
: -EIO
;
916 static void qup_i2c_read_rx_fifo_v1(struct qup_i2c_dev
*qup
)
918 struct qup_i2c_block
*blk
= &qup
->blk
;
919 struct i2c_msg
*msg
= qup
->msg
;
923 while (blk
->fifo_available
&& qup
->pos
< msg
->len
) {
924 if ((idx
& 1) == 0) {
925 /* Reading 2 words at time */
926 val
= readl(qup
->base
+ QUP_IN_FIFO_BASE
);
927 msg
->buf
[qup
->pos
++] = val
& 0xFF;
929 msg
->buf
[qup
->pos
++] = val
>> QUP_MSW_SHIFT
;
932 blk
->fifo_available
--;
935 if (qup
->pos
== msg
->len
)
936 blk
->rx_bytes_read
= true;
939 static void qup_i2c_write_rx_tags_v1(struct qup_i2c_dev
*qup
)
941 struct i2c_msg
*msg
= qup
->msg
;
944 addr
= i2c_8bit_addr_from_msg(msg
);
946 /* 0 is used to specify a length 256 (QUP_READ_LIMIT) */
947 len
= (msg
->len
== QUP_READ_LIMIT
) ? 0 : msg
->len
;
949 val
= ((QUP_TAG_REC
| len
) << QUP_MSW_SHIFT
) | QUP_TAG_START
| addr
;
950 writel(val
, qup
->base
+ QUP_OUT_FIFO_BASE
);
953 static void qup_i2c_conf_v1(struct qup_i2c_dev
*qup
)
955 struct qup_i2c_block
*blk
= &qup
->blk
;
956 u32 qup_config
= I2C_MINI_CORE
| I2C_N_VAL
;
957 u32 io_mode
= QUP_REPACK_EN
;
959 blk
->is_tx_blk_mode
=
960 blk
->total_tx_len
> qup
->out_fifo_sz
? true : false;
961 blk
->is_rx_blk_mode
=
962 blk
->total_rx_len
> qup
->in_fifo_sz
? true : false;
964 if (blk
->is_tx_blk_mode
) {
965 io_mode
|= QUP_OUTPUT_BLK_MODE
;
966 writel(0, qup
->base
+ QUP_MX_WRITE_CNT
);
967 writel(blk
->total_tx_len
, qup
->base
+ QUP_MX_OUTPUT_CNT
);
969 writel(0, qup
->base
+ QUP_MX_OUTPUT_CNT
);
970 writel(blk
->total_tx_len
, qup
->base
+ QUP_MX_WRITE_CNT
);
973 if (blk
->total_rx_len
) {
974 if (blk
->is_rx_blk_mode
) {
975 io_mode
|= QUP_INPUT_BLK_MODE
;
976 writel(0, qup
->base
+ QUP_MX_READ_CNT
);
977 writel(blk
->total_rx_len
, qup
->base
+ QUP_MX_INPUT_CNT
);
979 writel(0, qup
->base
+ QUP_MX_INPUT_CNT
);
980 writel(blk
->total_rx_len
, qup
->base
+ QUP_MX_READ_CNT
);
983 qup_config
|= QUP_NO_INPUT
;
986 writel(qup_config
, qup
->base
+ QUP_CONFIG
);
987 writel(io_mode
, qup
->base
+ QUP_IO_MODE
);
990 static void qup_i2c_clear_blk_v1(struct qup_i2c_block
*blk
)
992 blk
->tx_fifo_free
= 0;
993 blk
->fifo_available
= 0;
994 blk
->rx_bytes_read
= false;
997 static int qup_i2c_conf_xfer_v1(struct qup_i2c_dev
*qup
, bool is_rx
)
999 struct qup_i2c_block
*blk
= &qup
->blk
;
1002 qup_i2c_clear_blk_v1(blk
);
1003 qup_i2c_conf_v1(qup
);
1004 ret
= qup_i2c_change_state(qup
, QUP_RUN_STATE
);
1008 writel(qup
->clk_ctl
, qup
->base
+ QUP_I2C_CLK_CTL
);
1010 ret
= qup_i2c_change_state(qup
, QUP_PAUSE_STATE
);
1014 reinit_completion(&qup
->xfer
);
1015 enable_irq(qup
->irq
);
1016 if (!blk
->is_tx_blk_mode
) {
1017 blk
->tx_fifo_free
= qup
->out_fifo_sz
;
1020 qup_i2c_write_rx_tags_v1(qup
);
1022 qup_i2c_write_tx_fifo_v1(qup
);
1025 ret
= qup_i2c_change_state(qup
, QUP_RUN_STATE
);
1029 ret
= qup_i2c_wait_for_complete(qup
, qup
->msg
);
1033 ret
= qup_i2c_bus_active(qup
, ONE_BYTE
);
1036 disable_irq(qup
->irq
);
1040 static int qup_i2c_write_one(struct qup_i2c_dev
*qup
)
1042 struct i2c_msg
*msg
= qup
->msg
;
1043 struct qup_i2c_block
*blk
= &qup
->blk
;
1046 blk
->total_tx_len
= msg
->len
+ 1;
1047 blk
->total_rx_len
= 0;
1049 return qup_i2c_conf_xfer_v1(qup
, false);
1052 static int qup_i2c_read_one(struct qup_i2c_dev
*qup
)
1054 struct qup_i2c_block
*blk
= &qup
->blk
;
1057 blk
->total_tx_len
= 2;
1058 blk
->total_rx_len
= qup
->msg
->len
;
1060 return qup_i2c_conf_xfer_v1(qup
, true);
1063 static int qup_i2c_xfer(struct i2c_adapter
*adap
,
1064 struct i2c_msg msgs
[],
1067 struct qup_i2c_dev
*qup
= i2c_get_adapdata(adap
);
1070 ret
= pm_runtime_get_sync(qup
->dev
);
1077 writel(1, qup
->base
+ QUP_SW_RESET
);
1078 ret
= qup_i2c_poll_state(qup
, QUP_RESET_STATE
);
1082 /* Configure QUP as I2C mini core */
1083 writel(I2C_MINI_CORE
| I2C_N_VAL
, qup
->base
+ QUP_CONFIG
);
1085 for (idx
= 0; idx
< num
; idx
++) {
1086 if (qup_i2c_poll_state_i2c_master(qup
)) {
1091 if (qup_i2c_check_msg_len(&msgs
[idx
])) {
1096 qup
->msg
= &msgs
[idx
];
1097 if (msgs
[idx
].flags
& I2C_M_RD
)
1098 ret
= qup_i2c_read_one(qup
);
1100 ret
= qup_i2c_write_one(qup
);
1105 ret
= qup_i2c_change_state(qup
, QUP_RESET_STATE
);
1114 pm_runtime_mark_last_busy(qup
->dev
);
1115 pm_runtime_put_autosuspend(qup
->dev
);
1121 * Configure registers related with reconfiguration during run and call it
1122 * before each i2c sub transfer.
1124 static void qup_i2c_conf_count_v2(struct qup_i2c_dev
*qup
)
1126 struct qup_i2c_block
*blk
= &qup
->blk
;
1127 u32 qup_config
= I2C_MINI_CORE
| I2C_N_VAL_V2
;
1129 if (blk
->is_tx_blk_mode
)
1130 writel(qup
->config_run
| blk
->total_tx_len
,
1131 qup
->base
+ QUP_MX_OUTPUT_CNT
);
1133 writel(qup
->config_run
| blk
->total_tx_len
,
1134 qup
->base
+ QUP_MX_WRITE_CNT
);
1136 if (blk
->total_rx_len
) {
1137 if (blk
->is_rx_blk_mode
)
1138 writel(qup
->config_run
| blk
->total_rx_len
,
1139 qup
->base
+ QUP_MX_INPUT_CNT
);
1141 writel(qup
->config_run
| blk
->total_rx_len
,
1142 qup
->base
+ QUP_MX_READ_CNT
);
1144 qup_config
|= QUP_NO_INPUT
;
1147 writel(qup_config
, qup
->base
+ QUP_CONFIG
);
1151 * Configure registers related with transfer mode (FIFO/Block)
1152 * before starting of i2c transfer. It will be called only once in
1155 static void qup_i2c_conf_mode_v2(struct qup_i2c_dev
*qup
)
1157 struct qup_i2c_block
*blk
= &qup
->blk
;
1158 u32 io_mode
= QUP_REPACK_EN
;
1160 if (blk
->is_tx_blk_mode
) {
1161 io_mode
|= QUP_OUTPUT_BLK_MODE
;
1162 writel(0, qup
->base
+ QUP_MX_WRITE_CNT
);
1164 writel(0, qup
->base
+ QUP_MX_OUTPUT_CNT
);
1167 if (blk
->is_rx_blk_mode
) {
1168 io_mode
|= QUP_INPUT_BLK_MODE
;
1169 writel(0, qup
->base
+ QUP_MX_READ_CNT
);
1171 writel(0, qup
->base
+ QUP_MX_INPUT_CNT
);
1174 writel(io_mode
, qup
->base
+ QUP_IO_MODE
);
1177 /* Clear required variables before starting of any QUP v2 sub transfer. */
1178 static void qup_i2c_clear_blk_v2(struct qup_i2c_block
*blk
)
1180 blk
->send_last_word
= false;
1181 blk
->tx_tags_sent
= false;
1182 blk
->tx_fifo_data
= 0;
1183 blk
->tx_fifo_data_pos
= 0;
1184 blk
->tx_fifo_free
= 0;
1186 blk
->rx_tags_fetched
= false;
1187 blk
->rx_bytes_read
= false;
1188 blk
->rx_fifo_data
= 0;
1189 blk
->rx_fifo_data_pos
= 0;
1190 blk
->fifo_available
= 0;
1193 /* Receive data from RX FIFO for read message in QUP v2 i2c transfer. */
1194 static void qup_i2c_recv_data(struct qup_i2c_dev
*qup
)
1196 struct qup_i2c_block
*blk
= &qup
->blk
;
1199 for (j
= blk
->rx_fifo_data_pos
;
1200 blk
->cur_blk_len
&& blk
->fifo_available
;
1201 blk
->cur_blk_len
--, blk
->fifo_available
--) {
1203 blk
->rx_fifo_data
= readl(qup
->base
+ QUP_IN_FIFO_BASE
);
1205 *(blk
->cur_data
++) = blk
->rx_fifo_data
;
1206 blk
->rx_fifo_data
>>= 8;
1214 blk
->rx_fifo_data_pos
= j
;
1217 /* Receive tags for read message in QUP v2 i2c transfer. */
1218 static void qup_i2c_recv_tags(struct qup_i2c_dev
*qup
)
1220 struct qup_i2c_block
*blk
= &qup
->blk
;
1222 blk
->rx_fifo_data
= readl(qup
->base
+ QUP_IN_FIFO_BASE
);
1223 blk
->rx_fifo_data
>>= blk
->rx_tag_len
* 8;
1224 blk
->rx_fifo_data_pos
= blk
->rx_tag_len
;
1225 blk
->fifo_available
-= blk
->rx_tag_len
;
1229 * Read the data and tags from RX FIFO. Since in read case, the tags will be
1230 * preceded by received data bytes so
1231 * 1. Check if rx_tags_fetched is false i.e. the start of QUP block so receive
1232 * all tag bytes and discard that.
1233 * 2. Read the data from RX FIFO. When all the data bytes have been read then
1234 * set rx_bytes_read to true.
1236 static void qup_i2c_read_rx_fifo_v2(struct qup_i2c_dev
*qup
)
1238 struct qup_i2c_block
*blk
= &qup
->blk
;
1240 if (!blk
->rx_tags_fetched
) {
1241 qup_i2c_recv_tags(qup
);
1242 blk
->rx_tags_fetched
= true;
1245 qup_i2c_recv_data(qup
);
1246 if (!blk
->cur_blk_len
)
1247 blk
->rx_bytes_read
= true;
1251 * Write bytes in TX FIFO for write message in QUP v2 i2c transfer. QUP TX FIFO
1252 * write works on word basis (4 bytes). Append new data byte write for TX FIFO
1253 * in tx_fifo_data and write to TX FIFO when all the 4 bytes are present.
1256 qup_i2c_write_blk_data(struct qup_i2c_dev
*qup
, u8
**data
, unsigned int *len
)
1258 struct qup_i2c_block
*blk
= &qup
->blk
;
1261 for (j
= blk
->tx_fifo_data_pos
; *len
&& blk
->tx_fifo_free
;
1262 (*len
)--, blk
->tx_fifo_free
--) {
1263 blk
->tx_fifo_data
|= *(*data
)++ << (j
* 8);
1265 writel(blk
->tx_fifo_data
,
1266 qup
->base
+ QUP_OUT_FIFO_BASE
);
1267 blk
->tx_fifo_data
= 0x0;
1274 blk
->tx_fifo_data_pos
= j
;
1277 /* Transfer tags for read message in QUP v2 i2c transfer. */
1278 static void qup_i2c_write_rx_tags_v2(struct qup_i2c_dev
*qup
)
1280 struct qup_i2c_block
*blk
= &qup
->blk
;
1282 qup_i2c_write_blk_data(qup
, &blk
->cur_tx_tags
, &blk
->tx_tag_len
);
1283 if (blk
->tx_fifo_data_pos
)
1284 writel(blk
->tx_fifo_data
, qup
->base
+ QUP_OUT_FIFO_BASE
);
1288 * Write the data and tags in TX FIFO. Since in write case, both tags and data
1289 * need to be written and QUP write tags can have maximum 256 data length, so
1291 * 1. Check if tx_tags_sent is false i.e. the start of QUP block so write the
1292 * tags to TX FIFO and set tx_tags_sent to true.
1293 * 2. Check if send_last_word is true. It will be set when last few data bytes
1294 * (less than 4 bytes) are reamining to be written in FIFO because of no FIFO
1295 * space. All this data bytes are available in tx_fifo_data so write this
1297 * 3. Write the data to TX FIFO and check for cur_blk_len. If it is non zero
1298 * then more data is pending otherwise following 3 cases can be possible
1299 * a. if tx_fifo_data_pos is zero i.e. all the data bytes in this block
1300 * have been written in TX FIFO so nothing else is required.
1301 * b. tx_fifo_free is non zero i.e tx FIFO is free so copy the remaining data
1302 * from tx_fifo_data to tx FIFO. Since, qup_i2c_write_blk_data do write
1303 * in 4 bytes and FIFO space is in multiple of 4 bytes so tx_fifo_free
1304 * will be always greater than or equal to 4 bytes.
1305 * c. tx_fifo_free is zero. In this case, last few bytes (less than 4
1306 * bytes) are copied to tx_fifo_data but couldn't be sent because of
1307 * FIFO full so make send_last_word true.
1309 static void qup_i2c_write_tx_fifo_v2(struct qup_i2c_dev
*qup
)
1311 struct qup_i2c_block
*blk
= &qup
->blk
;
1313 if (!blk
->tx_tags_sent
) {
1314 qup_i2c_write_blk_data(qup
, &blk
->cur_tx_tags
,
1316 blk
->tx_tags_sent
= true;
1319 if (blk
->send_last_word
)
1320 goto send_last_word
;
1322 qup_i2c_write_blk_data(qup
, &blk
->cur_data
, &blk
->cur_blk_len
);
1323 if (!blk
->cur_blk_len
) {
1324 if (!blk
->tx_fifo_data_pos
)
1327 if (blk
->tx_fifo_free
)
1328 goto send_last_word
;
1330 blk
->send_last_word
= true;
1336 writel(blk
->tx_fifo_data
, qup
->base
+ QUP_OUT_FIFO_BASE
);
1340 * Main transfer function which read or write i2c data.
1341 * The QUP v2 supports reconfiguration during run in which multiple i2c sub
1342 * transfers can be scheduled.
1345 qup_i2c_conf_xfer_v2(struct qup_i2c_dev
*qup
, bool is_rx
, bool is_first
,
1346 bool change_pause_state
)
1348 struct qup_i2c_block
*blk
= &qup
->blk
;
1349 struct i2c_msg
*msg
= qup
->msg
;
1353 * Check if its SMBus Block read for which the top level read will be
1354 * done into 2 QUP reads. One with message length 1 while other one is
1355 * with actual length.
1357 if (qup_i2c_check_msg_len(msg
)) {
1358 if (qup
->is_smbus_read
) {
1360 * If the message length is already read in
1361 * the first byte of the buffer, account for
1362 * that by setting the offset
1367 change_pause_state
= false;
1371 qup
->config_run
= is_first
? 0 : QUP_I2C_MX_CONFIG_DURING_RUN
;
1373 qup_i2c_clear_blk_v2(blk
);
1374 qup_i2c_conf_count_v2(qup
);
1376 /* If it is first sub transfer, then configure i2c bus clocks */
1378 ret
= qup_i2c_change_state(qup
, QUP_RUN_STATE
);
1382 writel(qup
->clk_ctl
, qup
->base
+ QUP_I2C_CLK_CTL
);
1384 ret
= qup_i2c_change_state(qup
, QUP_PAUSE_STATE
);
1389 reinit_completion(&qup
->xfer
);
1390 enable_irq(qup
->irq
);
1392 * In FIFO mode, tx FIFO can be written directly while in block mode the
1393 * it will be written after getting OUT_BLOCK_WRITE_REQ interrupt
1395 if (!blk
->is_tx_blk_mode
) {
1396 blk
->tx_fifo_free
= qup
->out_fifo_sz
;
1399 qup_i2c_write_rx_tags_v2(qup
);
1401 qup_i2c_write_tx_fifo_v2(qup
);
1404 ret
= qup_i2c_change_state(qup
, QUP_RUN_STATE
);
1408 ret
= qup_i2c_wait_for_complete(qup
, msg
);
1412 /* Move to pause state for all the transfers, except last one */
1413 if (change_pause_state
) {
1414 ret
= qup_i2c_change_state(qup
, QUP_PAUSE_STATE
);
1420 disable_irq(qup
->irq
);
1425 * Transfer one read/write message in i2c transfer. It splits the message into
1426 * multiple of blk_xfer_limit data length blocks and schedule each
1427 * QUP block individually.
1429 static int qup_i2c_xfer_v2_msg(struct qup_i2c_dev
*qup
, int msg_id
, bool is_rx
)
1432 unsigned int data_len
, i
;
1433 struct i2c_msg
*msg
= qup
->msg
;
1434 struct qup_i2c_block
*blk
= &qup
->blk
;
1435 u8
*msg_buf
= msg
->buf
;
1437 qup
->blk_xfer_limit
= is_rx
? RECV_MAX_DATA_LEN
: QUP_READ_LIMIT
;
1438 qup_i2c_set_blk_data(qup
, msg
);
1440 for (i
= 0; i
< blk
->count
; i
++) {
1441 data_len
= qup_i2c_get_data_len(qup
);
1443 blk
->cur_tx_tags
= blk
->tags
;
1444 blk
->cur_blk_len
= data_len
;
1446 qup_i2c_set_tags(blk
->cur_tx_tags
, qup
, qup
->msg
);
1448 blk
->cur_data
= msg_buf
;
1451 blk
->total_tx_len
= blk
->tx_tag_len
;
1452 blk
->rx_tag_len
= 2;
1453 blk
->total_rx_len
= blk
->rx_tag_len
+ data_len
;
1455 blk
->total_tx_len
= blk
->tx_tag_len
+ data_len
;
1456 blk
->total_rx_len
= 0;
1459 ret
= qup_i2c_conf_xfer_v2(qup
, is_rx
, !msg_id
&& !i
,
1460 !qup
->is_last
|| i
< blk
->count
- 1);
1464 /* Handle SMBus block read length */
1465 if (qup_i2c_check_msg_len(msg
) && msg
->len
== 1 &&
1466 !qup
->is_smbus_read
) {
1467 if (msg
->buf
[0] > I2C_SMBUS_BLOCK_MAX
)
1470 msg
->len
= msg
->buf
[0];
1471 qup
->is_smbus_read
= true;
1472 ret
= qup_i2c_xfer_v2_msg(qup
, msg_id
, true);
1473 qup
->is_smbus_read
= false;
1480 msg_buf
+= data_len
;
1481 blk
->data_len
-= qup
->blk_xfer_limit
;
1488 * QUP v2 supports 3 modes
1489 * Programmed IO using FIFO mode : Less than FIFO size
1490 * Programmed IO using Block mode : Greater than FIFO size
1491 * DMA using BAM : Appropriate for any transaction size but the address should
1494 * This function determines the mode which will be used for this transfer. An
1495 * i2c transfer contains multiple message. Following are the rules to determine
1497 * 1. Determine complete length, maximum tx and rx length for complete transfer.
1498 * 2. If complete transfer length is greater than fifo size then use the DMA
1500 * 3. In FIFO or block mode, tx and rx can operate in different mode so check
1501 * for maximum tx and rx length to determine mode.
1504 qup_i2c_determine_mode_v2(struct qup_i2c_dev
*qup
,
1505 struct i2c_msg msgs
[], int num
)
1508 bool no_dma
= false;
1509 unsigned int max_tx_len
= 0, max_rx_len
= 0, total_len
= 0;
1511 /* All i2c_msgs should be transferred using either dma or cpu */
1512 for (idx
= 0; idx
< num
; idx
++) {
1513 if (msgs
[idx
].flags
& I2C_M_RD
)
1514 max_rx_len
= max_t(unsigned int, max_rx_len
,
1517 max_tx_len
= max_t(unsigned int, max_tx_len
,
1520 if (is_vmalloc_addr(msgs
[idx
].buf
))
1523 total_len
+= msgs
[idx
].len
;
1526 if (!no_dma
&& qup
->is_dma
&&
1527 (total_len
> qup
->out_fifo_sz
|| total_len
> qup
->in_fifo_sz
)) {
1528 qup
->use_dma
= true;
1530 qup
->blk
.is_tx_blk_mode
= max_tx_len
> qup
->out_fifo_sz
-
1531 QUP_MAX_TAGS_LEN
? true : false;
1532 qup
->blk
.is_rx_blk_mode
= max_rx_len
> qup
->in_fifo_sz
-
1533 READ_RX_TAGS_LEN
? true : false;
1539 static int qup_i2c_xfer_v2(struct i2c_adapter
*adap
,
1540 struct i2c_msg msgs
[],
1543 struct qup_i2c_dev
*qup
= i2c_get_adapdata(adap
);
1549 ret
= pm_runtime_get_sync(qup
->dev
);
1553 ret
= qup_i2c_determine_mode_v2(qup
, msgs
, num
);
1557 writel(1, qup
->base
+ QUP_SW_RESET
);
1558 ret
= qup_i2c_poll_state(qup
, QUP_RESET_STATE
);
1562 /* Configure QUP as I2C mini core */
1563 writel(I2C_MINI_CORE
| I2C_N_VAL_V2
, qup
->base
+ QUP_CONFIG
);
1564 writel(QUP_V2_TAGS_EN
, qup
->base
+ QUP_I2C_MASTER_GEN
);
1566 if (qup_i2c_poll_state_i2c_master(qup
)) {
1572 reinit_completion(&qup
->xfer
);
1573 ret
= qup_i2c_bam_xfer(adap
, &msgs
[0], num
);
1574 qup
->use_dma
= false;
1576 qup_i2c_conf_mode_v2(qup
);
1578 for (idx
= 0; idx
< num
; idx
++) {
1579 qup
->msg
= &msgs
[idx
];
1580 qup
->is_last
= idx
== (num
- 1);
1582 ret
= qup_i2c_xfer_v2_msg(qup
, idx
,
1583 !!(msgs
[idx
].flags
& I2C_M_RD
));
1591 ret
= qup_i2c_bus_active(qup
, ONE_BYTE
);
1594 qup_i2c_change_state(qup
, QUP_RESET_STATE
);
1599 pm_runtime_mark_last_busy(qup
->dev
);
1600 pm_runtime_put_autosuspend(qup
->dev
);
1605 static u32
qup_i2c_func(struct i2c_adapter
*adap
)
1607 return I2C_FUNC_I2C
| (I2C_FUNC_SMBUS_EMUL
& ~I2C_FUNC_SMBUS_QUICK
);
1610 static const struct i2c_algorithm qup_i2c_algo
= {
1611 .master_xfer
= qup_i2c_xfer
,
1612 .functionality
= qup_i2c_func
,
1615 static const struct i2c_algorithm qup_i2c_algo_v2
= {
1616 .master_xfer
= qup_i2c_xfer_v2
,
1617 .functionality
= qup_i2c_func
,
1621 * The QUP block will issue a NACK and STOP on the bus when reaching
1622 * the end of the read, the length of the read is specified as one byte
1623 * which limits the possible read to 256 (QUP_READ_LIMIT) bytes.
1625 static const struct i2c_adapter_quirks qup_i2c_quirks
= {
1626 .flags
= I2C_AQ_NO_ZERO_LEN
,
1627 .max_read_len
= QUP_READ_LIMIT
,
1630 static const struct i2c_adapter_quirks qup_i2c_quirks_v2
= {
1631 .flags
= I2C_AQ_NO_ZERO_LEN
,
1634 static void qup_i2c_enable_clocks(struct qup_i2c_dev
*qup
)
1636 clk_prepare_enable(qup
->clk
);
1637 clk_prepare_enable(qup
->pclk
);
1640 static void qup_i2c_disable_clocks(struct qup_i2c_dev
*qup
)
1644 qup_i2c_change_state(qup
, QUP_RESET_STATE
);
1645 clk_disable_unprepare(qup
->clk
);
1646 config
= readl(qup
->base
+ QUP_CONFIG
);
1647 config
|= QUP_CLOCK_AUTO_GATE
;
1648 writel(config
, qup
->base
+ QUP_CONFIG
);
1649 clk_disable_unprepare(qup
->pclk
);
1652 static const struct acpi_device_id qup_i2c_acpi_match
[] = {
1656 MODULE_DEVICE_TABLE(acpi
, qup_i2c_acpi_match
);
1658 static int qup_i2c_probe(struct platform_device
*pdev
)
1660 static const int blk_sizes
[] = {4, 16, 32};
1661 struct qup_i2c_dev
*qup
;
1662 unsigned long one_bit_t
;
1663 struct resource
*res
;
1664 u32 io_mode
, hw_ver
, size
;
1665 int ret
, fs_div
, hs_div
;
1666 u32 src_clk_freq
= DEFAULT_SRC_CLK
;
1667 u32 clk_freq
= DEFAULT_CLK_FREQ
;
1671 qup
= devm_kzalloc(&pdev
->dev
, sizeof(*qup
), GFP_KERNEL
);
1675 qup
->dev
= &pdev
->dev
;
1676 init_completion(&qup
->xfer
);
1677 platform_set_drvdata(pdev
, qup
);
1680 dev_notice(qup
->dev
, "Using override frequency of %u\n", scl_freq
);
1681 clk_freq
= scl_freq
;
1683 ret
= device_property_read_u32(qup
->dev
, "clock-frequency", &clk_freq
);
1685 dev_notice(qup
->dev
, "using default clock-frequency %d",
1690 if (of_device_is_compatible(pdev
->dev
.of_node
, "qcom,i2c-qup-v1.1.1")) {
1691 qup
->adap
.algo
= &qup_i2c_algo
;
1692 qup
->adap
.quirks
= &qup_i2c_quirks
;
1695 qup
->adap
.algo
= &qup_i2c_algo_v2
;
1696 qup
->adap
.quirks
= &qup_i2c_quirks_v2
;
1698 if (acpi_match_device(qup_i2c_acpi_match
, qup
->dev
))
1701 ret
= qup_i2c_req_dma(qup
);
1703 if (ret
== -EPROBE_DEFER
)
1708 qup
->max_xfer_sg_len
= (MX_BLOCKS
<< 1);
1709 blocks
= (MX_DMA_BLOCKS
<< 1) + 1;
1710 qup
->btx
.sg
= devm_kcalloc(&pdev
->dev
,
1711 blocks
, sizeof(*qup
->btx
.sg
),
1717 sg_init_table(qup
->btx
.sg
, blocks
);
1719 qup
->brx
.sg
= devm_kcalloc(&pdev
->dev
,
1720 blocks
, sizeof(*qup
->brx
.sg
),
1726 sg_init_table(qup
->brx
.sg
, blocks
);
1728 /* 2 tag bytes for each block + 5 for start, stop tags */
1729 size
= blocks
* 2 + 5;
1731 qup
->start_tag
.start
= devm_kzalloc(&pdev
->dev
,
1733 if (!qup
->start_tag
.start
) {
1738 qup
->brx
.tag
.start
= devm_kzalloc(&pdev
->dev
, 2, GFP_KERNEL
);
1739 if (!qup
->brx
.tag
.start
) {
1744 qup
->btx
.tag
.start
= devm_kzalloc(&pdev
->dev
, 2, GFP_KERNEL
);
1745 if (!qup
->btx
.tag
.start
) {
1753 /* We support frequencies up to FAST Mode Plus (1MHz) */
1754 if (!clk_freq
|| clk_freq
> I2C_MAX_FAST_MODE_PLUS_FREQ
) {
1755 dev_err(qup
->dev
, "clock frequency not supported %d\n",
1760 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1761 qup
->base
= devm_ioremap_resource(qup
->dev
, res
);
1762 if (IS_ERR(qup
->base
))
1763 return PTR_ERR(qup
->base
);
1765 qup
->irq
= platform_get_irq(pdev
, 0);
1767 dev_err(qup
->dev
, "No IRQ defined\n");
1771 if (has_acpi_companion(qup
->dev
)) {
1772 ret
= device_property_read_u32(qup
->dev
,
1773 "src-clock-hz", &src_clk_freq
);
1775 dev_notice(qup
->dev
, "using default src-clock-hz %d",
1778 ACPI_COMPANION_SET(&qup
->adap
.dev
, ACPI_COMPANION(qup
->dev
));
1780 qup
->clk
= devm_clk_get(qup
->dev
, "core");
1781 if (IS_ERR(qup
->clk
)) {
1782 dev_err(qup
->dev
, "Could not get core clock\n");
1783 return PTR_ERR(qup
->clk
);
1786 qup
->pclk
= devm_clk_get(qup
->dev
, "iface");
1787 if (IS_ERR(qup
->pclk
)) {
1788 dev_err(qup
->dev
, "Could not get iface clock\n");
1789 return PTR_ERR(qup
->pclk
);
1791 qup_i2c_enable_clocks(qup
);
1792 src_clk_freq
= clk_get_rate(qup
->clk
);
1796 * Bootloaders might leave a pending interrupt on certain QUP's,
1797 * so we reset the core before registering for interrupts.
1799 writel(1, qup
->base
+ QUP_SW_RESET
);
1800 ret
= qup_i2c_poll_state_valid(qup
);
1804 ret
= devm_request_irq(qup
->dev
, qup
->irq
, qup_i2c_interrupt
,
1805 IRQF_TRIGGER_HIGH
, "i2c_qup", qup
);
1807 dev_err(qup
->dev
, "Request %d IRQ failed\n", qup
->irq
);
1810 disable_irq(qup
->irq
);
1812 hw_ver
= readl(qup
->base
+ QUP_HW_VERSION
);
1813 dev_dbg(qup
->dev
, "Revision %x\n", hw_ver
);
1815 io_mode
= readl(qup
->base
+ QUP_IO_MODE
);
1818 * The block/fifo size w.r.t. 'actual data' is 1/2 due to 'tag'
1819 * associated with each byte written/received
1821 size
= QUP_OUTPUT_BLOCK_SIZE(io_mode
);
1822 if (size
>= ARRAY_SIZE(blk_sizes
)) {
1826 qup
->out_blk_sz
= blk_sizes
[size
];
1828 size
= QUP_INPUT_BLOCK_SIZE(io_mode
);
1829 if (size
>= ARRAY_SIZE(blk_sizes
)) {
1833 qup
->in_blk_sz
= blk_sizes
[size
];
1837 * in QUP v1, QUP_CONFIG uses N as 15 i.e 16 bits constitutes a
1838 * single transfer but the block size is in bytes so divide the
1839 * in_blk_sz and out_blk_sz by 2
1841 qup
->in_blk_sz
/= 2;
1842 qup
->out_blk_sz
/= 2;
1843 qup
->write_tx_fifo
= qup_i2c_write_tx_fifo_v1
;
1844 qup
->read_rx_fifo
= qup_i2c_read_rx_fifo_v1
;
1845 qup
->write_rx_tags
= qup_i2c_write_rx_tags_v1
;
1847 qup
->write_tx_fifo
= qup_i2c_write_tx_fifo_v2
;
1848 qup
->read_rx_fifo
= qup_i2c_read_rx_fifo_v2
;
1849 qup
->write_rx_tags
= qup_i2c_write_rx_tags_v2
;
1852 size
= QUP_OUTPUT_FIFO_SIZE(io_mode
);
1853 qup
->out_fifo_sz
= qup
->out_blk_sz
* (2 << size
);
1855 size
= QUP_INPUT_FIFO_SIZE(io_mode
);
1856 qup
->in_fifo_sz
= qup
->in_blk_sz
* (2 << size
);
1859 if (clk_freq
<= I2C_MAX_STANDARD_MODE_FREQ
) {
1860 fs_div
= ((src_clk_freq
/ clk_freq
) / 2) - 3;
1861 qup
->clk_ctl
= (hs_div
<< 8) | (fs_div
& 0xff);
1863 /* 33%/66% duty cycle */
1864 fs_div
= ((src_clk_freq
/ clk_freq
) - 6) * 2 / 3;
1865 qup
->clk_ctl
= ((fs_div
/ 2) << 16) | (hs_div
<< 8) | (fs_div
& 0xff);
1869 * Time it takes for a byte to be clocked out on the bus.
1870 * Each byte takes 9 clock cycles (8 bits + 1 ack).
1872 one_bit_t
= (USEC_PER_SEC
/ clk_freq
) + 1;
1873 qup
->one_byte_t
= one_bit_t
* 9;
1874 qup
->xfer_timeout
= TOUT_MIN
* HZ
+
1875 usecs_to_jiffies(MX_DMA_TX_RX_LEN
* qup
->one_byte_t
);
1877 dev_dbg(qup
->dev
, "IN:block:%d, fifo:%d, OUT:block:%d, fifo:%d\n",
1878 qup
->in_blk_sz
, qup
->in_fifo_sz
,
1879 qup
->out_blk_sz
, qup
->out_fifo_sz
);
1881 i2c_set_adapdata(&qup
->adap
, qup
);
1882 qup
->adap
.dev
.parent
= qup
->dev
;
1883 qup
->adap
.dev
.of_node
= pdev
->dev
.of_node
;
1884 qup
->is_last
= true;
1886 strlcpy(qup
->adap
.name
, "QUP I2C adapter", sizeof(qup
->adap
.name
));
1888 pm_runtime_set_autosuspend_delay(qup
->dev
, MSEC_PER_SEC
);
1889 pm_runtime_use_autosuspend(qup
->dev
);
1890 pm_runtime_set_active(qup
->dev
);
1891 pm_runtime_enable(qup
->dev
);
1893 ret
= i2c_add_adapter(&qup
->adap
);
1900 pm_runtime_disable(qup
->dev
);
1901 pm_runtime_set_suspended(qup
->dev
);
1903 qup_i2c_disable_clocks(qup
);
1906 dma_release_channel(qup
->btx
.dma
);
1908 dma_release_channel(qup
->brx
.dma
);
1912 static int qup_i2c_remove(struct platform_device
*pdev
)
1914 struct qup_i2c_dev
*qup
= platform_get_drvdata(pdev
);
1917 dma_release_channel(qup
->btx
.dma
);
1918 dma_release_channel(qup
->brx
.dma
);
1921 disable_irq(qup
->irq
);
1922 qup_i2c_disable_clocks(qup
);
1923 i2c_del_adapter(&qup
->adap
);
1924 pm_runtime_disable(qup
->dev
);
1925 pm_runtime_set_suspended(qup
->dev
);
1930 static int qup_i2c_pm_suspend_runtime(struct device
*device
)
1932 struct qup_i2c_dev
*qup
= dev_get_drvdata(device
);
1934 dev_dbg(device
, "pm_runtime: suspending...\n");
1935 qup_i2c_disable_clocks(qup
);
1939 static int qup_i2c_pm_resume_runtime(struct device
*device
)
1941 struct qup_i2c_dev
*qup
= dev_get_drvdata(device
);
1943 dev_dbg(device
, "pm_runtime: resuming...\n");
1944 qup_i2c_enable_clocks(qup
);
1949 #ifdef CONFIG_PM_SLEEP
1950 static int qup_i2c_suspend(struct device
*device
)
1952 if (!pm_runtime_suspended(device
))
1953 return qup_i2c_pm_suspend_runtime(device
);
1957 static int qup_i2c_resume(struct device
*device
)
1959 qup_i2c_pm_resume_runtime(device
);
1960 pm_runtime_mark_last_busy(device
);
1961 pm_request_autosuspend(device
);
1966 static const struct dev_pm_ops qup_i2c_qup_pm_ops
= {
1967 SET_SYSTEM_SLEEP_PM_OPS(
1971 qup_i2c_pm_suspend_runtime
,
1972 qup_i2c_pm_resume_runtime
,
1976 static const struct of_device_id qup_i2c_dt_match
[] = {
1977 { .compatible
= "qcom,i2c-qup-v1.1.1" },
1978 { .compatible
= "qcom,i2c-qup-v2.1.1" },
1979 { .compatible
= "qcom,i2c-qup-v2.2.1" },
1982 MODULE_DEVICE_TABLE(of
, qup_i2c_dt_match
);
1984 static struct platform_driver qup_i2c_driver
= {
1985 .probe
= qup_i2c_probe
,
1986 .remove
= qup_i2c_remove
,
1989 .pm
= &qup_i2c_qup_pm_ops
,
1990 .of_match_table
= qup_i2c_dt_match
,
1991 .acpi_match_table
= ACPI_PTR(qup_i2c_acpi_match
),
1995 module_platform_driver(qup_i2c_driver
);
1997 MODULE_LICENSE("GPL v2");
1998 MODULE_ALIAS("platform:i2c_qup");