blob: 2d69256d2ce1b25dcdea64e367b2c77fa80c2a0d [file] [log] [blame]
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001/* Copyright (c) 2009-2011, Code Aurora Forum. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 */
13/*
14 * QUP driver for Qualcomm MSM platforms
15 *
16 */
17
18/* #define DEBUG */
19
20#include <linux/clk.h>
21#include <linux/err.h>
22#include <linux/init.h>
23#include <linux/i2c.h>
24#include <linux/interrupt.h>
25#include <linux/platform_device.h>
26#include <linux/delay.h>
27#include <linux/io.h>
28#include <linux/mutex.h>
29#include <linux/timer.h>
30#include <linux/slab.h>
31#include <mach/board.h>
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -070032#include <mach/gpiomux.h>
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070033#include <linux/slab.h>
34#include <linux/pm_runtime.h>
35#include <linux/gpio.h>
36
37MODULE_LICENSE("GPL v2");
38MODULE_VERSION("0.2");
39MODULE_ALIAS("platform:i2c_qup");
40
41/* QUP Registers */
42enum {
43 QUP_CONFIG = 0x0,
44 QUP_STATE = 0x4,
45 QUP_IO_MODE = 0x8,
46 QUP_SW_RESET = 0xC,
47 QUP_OPERATIONAL = 0x18,
48 QUP_ERROR_FLAGS = 0x1C,
49 QUP_ERROR_FLAGS_EN = 0x20,
50 QUP_MX_READ_CNT = 0x208,
51 QUP_MX_INPUT_CNT = 0x200,
52 QUP_MX_WR_CNT = 0x100,
53 QUP_OUT_DEBUG = 0x108,
54 QUP_OUT_FIFO_CNT = 0x10C,
55 QUP_OUT_FIFO_BASE = 0x110,
56 QUP_IN_READ_CUR = 0x20C,
57 QUP_IN_DEBUG = 0x210,
58 QUP_IN_FIFO_CNT = 0x214,
59 QUP_IN_FIFO_BASE = 0x218,
60 QUP_I2C_CLK_CTL = 0x400,
61 QUP_I2C_STATUS = 0x404,
62};
63
64/* QUP States and reset values */
65enum {
66 QUP_RESET_STATE = 0,
67 QUP_RUN_STATE = 1U,
68 QUP_STATE_MASK = 3U,
69 QUP_PAUSE_STATE = 3U,
70 QUP_STATE_VALID = 1U << 2,
71 QUP_I2C_MAST_GEN = 1U << 4,
72 QUP_OPERATIONAL_RESET = 0xFF0,
73 QUP_I2C_STATUS_RESET = 0xFFFFFC,
74};
75
76/* QUP OPERATIONAL FLAGS */
77enum {
78 QUP_OUT_SVC_FLAG = 1U << 8,
79 QUP_IN_SVC_FLAG = 1U << 9,
80 QUP_MX_INPUT_DONE = 1U << 11,
81};
82
83/* I2C mini core related values */
84enum {
85 I2C_MINI_CORE = 2U << 8,
86 I2C_N_VAL = 0xF,
87
88};
89
90/* Packing Unpacking words in FIFOs , and IO modes*/
91enum {
92 QUP_WR_BLK_MODE = 1U << 10,
93 QUP_RD_BLK_MODE = 1U << 12,
94 QUP_UNPACK_EN = 1U << 14,
95 QUP_PACK_EN = 1U << 15,
96};
97
98/* QUP tags */
99enum {
100 QUP_OUT_NOP = 0,
101 QUP_OUT_START = 1U << 8,
102 QUP_OUT_DATA = 2U << 8,
103 QUP_OUT_STOP = 3U << 8,
104 QUP_OUT_REC = 4U << 8,
105 QUP_IN_DATA = 5U << 8,
106 QUP_IN_STOP = 6U << 8,
107 QUP_IN_NACK = 7U << 8,
108};
109
110/* Status, Error flags */
111enum {
112 I2C_STATUS_WR_BUFFER_FULL = 1U << 0,
113 I2C_STATUS_BUS_ACTIVE = 1U << 8,
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -0700114 I2C_STATUS_BUS_MASTER = 1U << 9,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700115 I2C_STATUS_ERROR_MASK = 0x38000FC,
116 QUP_I2C_NACK_FLAG = 1U << 3,
117 QUP_IN_NOT_EMPTY = 1U << 5,
118 QUP_STATUS_ERROR_FLAGS = 0x7C,
119};
120
121/* Master status clock states */
122enum {
123 I2C_CLK_RESET_BUSIDLE_STATE = 0,
124 I2C_CLK_FORCED_LOW_STATE = 5,
125};
126
127#define QUP_MAX_CLK_STATE_RETRIES 300
128
129static char const * const i2c_rsrcs[] = {"i2c_clk", "i2c_sda"};
130
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -0700131static struct gpiomux_setting recovery_config = {
132 .func = GPIOMUX_FUNC_GPIO,
133 .drv = GPIOMUX_DRV_8MA,
134 .pull = GPIOMUX_PULL_NONE,
135};
136
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700137struct qup_i2c_dev {
138 struct device *dev;
139 void __iomem *base; /* virtual */
140 void __iomem *gsbi; /* virtual */
141 int in_irq;
142 int out_irq;
143 int err_irq;
144 int num_irqs;
145 struct clk *clk;
146 struct clk *pclk;
147 struct i2c_adapter adapter;
148
149 struct i2c_msg *msg;
150 int pos;
151 int cnt;
152 int err;
153 int mode;
154 int clk_ctl;
155 int one_bit_t;
156 int out_fifo_sz;
157 int in_fifo_sz;
158 int out_blk_sz;
159 int in_blk_sz;
160 int wr_sz;
161 struct msm_i2c_platform_data *pdata;
162 int suspended;
163 int clk_state;
164 struct timer_list pwr_timer;
165 struct mutex mlock;
166 void *complete;
167 int i2c_gpios[ARRAY_SIZE(i2c_rsrcs)];
168};
169
170#ifdef DEBUG
171static void
172qup_print_status(struct qup_i2c_dev *dev)
173{
174 uint32_t val;
175 val = readl_relaxed(dev->base+QUP_CONFIG);
176 dev_dbg(dev->dev, "Qup config is :0x%x\n", val);
177 val = readl_relaxed(dev->base+QUP_STATE);
178 dev_dbg(dev->dev, "Qup state is :0x%x\n", val);
179 val = readl_relaxed(dev->base+QUP_IO_MODE);
180 dev_dbg(dev->dev, "Qup mode is :0x%x\n", val);
181}
182#else
183static inline void qup_print_status(struct qup_i2c_dev *dev)
184{
185}
186#endif
187
188static irqreturn_t
189qup_i2c_interrupt(int irq, void *devid)
190{
191 struct qup_i2c_dev *dev = devid;
192 uint32_t status = readl_relaxed(dev->base + QUP_I2C_STATUS);
193 uint32_t status1 = readl_relaxed(dev->base + QUP_ERROR_FLAGS);
194 uint32_t op_flgs = readl_relaxed(dev->base + QUP_OPERATIONAL);
195 int err = 0;
196
197 if (!dev->msg || !dev->complete) {
198 /* Clear Error interrupt if it's a level triggered interrupt*/
199 if (dev->num_irqs == 1) {
200 writel_relaxed(QUP_RESET_STATE, dev->base+QUP_STATE);
201 /* Ensure that state is written before ISR exits */
202 mb();
203 }
204 return IRQ_HANDLED;
205 }
206
207 if (status & I2C_STATUS_ERROR_MASK) {
208 dev_err(dev->dev, "QUP: I2C status flags :0x%x, irq:%d\n",
209 status, irq);
210 err = status;
211 /* Clear Error interrupt if it's a level triggered interrupt*/
212 if (dev->num_irqs == 1) {
213 writel_relaxed(QUP_RESET_STATE, dev->base+QUP_STATE);
214 /* Ensure that state is written before ISR exits */
215 mb();
216 }
217 goto intr_done;
218 }
219
220 if (status1 & 0x7F) {
221 dev_err(dev->dev, "QUP: QUP status flags :0x%x\n", status1);
222 err = -status1;
223 /* Clear Error interrupt if it's a level triggered interrupt*/
224 if (dev->num_irqs == 1) {
225 writel_relaxed((status1 & QUP_STATUS_ERROR_FLAGS),
226 dev->base + QUP_ERROR_FLAGS);
227 /* Ensure that error flags are cleared before ISR
228 * exits
229 */
230 mb();
231 }
232 goto intr_done;
233 }
234
235 if ((dev->num_irqs == 3) && (dev->msg->flags == I2C_M_RD)
236 && (irq == dev->out_irq))
237 return IRQ_HANDLED;
238 if (op_flgs & QUP_OUT_SVC_FLAG) {
239 writel_relaxed(QUP_OUT_SVC_FLAG, dev->base + QUP_OPERATIONAL);
240 /* Ensure that service flag is acknowledged before ISR exits */
241 mb();
242 }
243 if (dev->msg->flags == I2C_M_RD) {
244 if ((op_flgs & QUP_MX_INPUT_DONE) ||
245 (op_flgs & QUP_IN_SVC_FLAG)) {
246 writel_relaxed(QUP_IN_SVC_FLAG, dev->base
247 + QUP_OPERATIONAL);
248 /* Ensure that service flag is acknowledged before ISR
249 * exits
250 */
251 mb();
252 } else
253 return IRQ_HANDLED;
254 }
255
256intr_done:
257 dev_dbg(dev->dev, "QUP intr= %d, i2c status=0x%x, qup status = 0x%x\n",
258 irq, status, status1);
259 qup_print_status(dev);
260 dev->err = err;
261 complete(dev->complete);
262 return IRQ_HANDLED;
263}
264
Sagar Dharia57ac1ac2011-08-06 15:12:44 -0600265static int
266qup_i2c_poll_state(struct qup_i2c_dev *dev, uint32_t req_state, bool only_valid)
267{
268 uint32_t retries = 0;
269
270 dev_dbg(dev->dev, "Polling for state:0x%x, or valid-only:%d\n",
271 req_state, only_valid);
272
273 while (retries != 2000) {
274 uint32_t status = readl_relaxed(dev->base + QUP_STATE);
275
276 /*
277 * If only valid bit needs to be checked, requested state is
278 * 'don't care'
279 */
280 if (status & QUP_STATE_VALID) {
281 if (only_valid)
282 return 0;
283 else if ((req_state & QUP_I2C_MAST_GEN) &&
284 (status & QUP_I2C_MAST_GEN))
285 return 0;
286 else if ((status & QUP_STATE_MASK) == req_state)
287 return 0;
288 }
289 if (retries++ == 1000)
290 udelay(100);
291 }
292 return -ETIMEDOUT;
293}
294
295static int
296qup_update_state(struct qup_i2c_dev *dev, uint32_t state)
297{
298 if (qup_i2c_poll_state(dev, 0, true) != 0)
299 return -EIO;
300 writel_relaxed(state, dev->base + QUP_STATE);
301 if (qup_i2c_poll_state(dev, state, false) != 0)
302 return -EIO;
303 return 0;
304}
305
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700306static void
307qup_i2c_pwr_mgmt(struct qup_i2c_dev *dev, unsigned int state)
308{
309 dev->clk_state = state;
310 if (state != 0) {
311 clk_enable(dev->clk);
Matt Wagantallac294852011-08-17 15:44:58 -0700312 clk_enable(dev->pclk);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700313 } else {
Sagar Dharia57ac1ac2011-08-06 15:12:44 -0600314 qup_update_state(dev, QUP_RESET_STATE);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700315 clk_disable(dev->clk);
Matt Wagantallac294852011-08-17 15:44:58 -0700316 clk_disable(dev->pclk);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700317 }
318}
319
320static void
321qup_i2c_pwr_timer(unsigned long data)
322{
323 struct qup_i2c_dev *dev = (struct qup_i2c_dev *) data;
324 dev_dbg(dev->dev, "QUP_Power: Inactivity based power management\n");
325 if (dev->clk_state == 1)
326 qup_i2c_pwr_mgmt(dev, 0);
327}
328
329static int
330qup_i2c_poll_writeready(struct qup_i2c_dev *dev, int rem)
331{
332 uint32_t retries = 0;
333
334 while (retries != 2000) {
335 uint32_t status = readl_relaxed(dev->base + QUP_I2C_STATUS);
336
337 if (!(status & I2C_STATUS_WR_BUFFER_FULL)) {
338 if (((dev->msg->flags & I2C_M_RD) || (rem == 0)) &&
339 !(status & I2C_STATUS_BUS_ACTIVE))
340 return 0;
341 else if ((dev->msg->flags == 0) && (rem > 0))
342 return 0;
343 else /* 1-bit delay before we check for bus busy */
344 udelay(dev->one_bit_t);
345 }
Harini Jayaramand997b3b2011-10-11 14:25:29 -0600346 if (retries++ == 1000) {
347 /*
348 * Wait for FIFO number of bytes to be absolutely sure
349 * that I2C write state machine is not idle. Each byte
350 * takes 9 clock cycles. (8 bits + 1 ack)
351 */
352 usleep_range((dev->one_bit_t * (dev->out_fifo_sz * 9)),
353 (dev->one_bit_t * (dev->out_fifo_sz * 9)));
354 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700355 }
356 qup_print_status(dev);
357 return -ETIMEDOUT;
358}
359
360static int qup_i2c_poll_clock_ready(struct qup_i2c_dev *dev)
361{
362 uint32_t retries = 0;
363
364 /*
365 * Wait for the clock state to transition to either IDLE or FORCED
366 * LOW. This will usually happen within one cycle of the i2c clock.
367 */
368
369 while (retries++ < QUP_MAX_CLK_STATE_RETRIES) {
370 uint32_t status = readl_relaxed(dev->base + QUP_I2C_STATUS);
371 uint32_t clk_state = (status >> 13) & 0x7;
372
373 if (clk_state == I2C_CLK_RESET_BUSIDLE_STATE ||
374 clk_state == I2C_CLK_FORCED_LOW_STATE)
375 return 0;
376 /* 1-bit delay before we check again */
377 udelay(dev->one_bit_t);
378 }
379
380 dev_err(dev->dev, "Error waiting for clk ready\n");
381 return -ETIMEDOUT;
382}
383
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700384static inline int qup_i2c_request_gpios(struct qup_i2c_dev *dev)
385{
386 int i;
387 int result = 0;
388
389 for (i = 0; i < ARRAY_SIZE(i2c_rsrcs); ++i) {
390 if (dev->i2c_gpios[i] >= 0) {
391 result = gpio_request(dev->i2c_gpios[i], i2c_rsrcs[i]);
392 if (result) {
393 dev_err(dev->dev,
394 "gpio_request for pin %d failed\
395 with error %d\n", dev->i2c_gpios[i],
396 result);
397 goto error;
398 }
399 }
400 }
401 return 0;
402
403error:
404 for (; --i >= 0;) {
405 if (dev->i2c_gpios[i] >= 0)
406 gpio_free(dev->i2c_gpios[i]);
407 }
408 return result;
409}
410
411static inline void qup_i2c_free_gpios(struct qup_i2c_dev *dev)
412{
413 int i;
414
415 for (i = 0; i < ARRAY_SIZE(i2c_rsrcs); ++i) {
416 if (dev->i2c_gpios[i] >= 0)
417 gpio_free(dev->i2c_gpios[i]);
418 }
419}
420
421#ifdef DEBUG
422static void qup_verify_fifo(struct qup_i2c_dev *dev, uint32_t val,
423 uint32_t addr, int rdwr)
424{
425 if (rdwr)
426 dev_dbg(dev->dev, "RD:Wrote 0x%x to out_ff:0x%x\n", val, addr);
427 else
428 dev_dbg(dev->dev, "WR:Wrote 0x%x to out_ff:0x%x\n", val, addr);
429}
430#else
431static inline void qup_verify_fifo(struct qup_i2c_dev *dev, uint32_t val,
432 uint32_t addr, int rdwr)
433{
434}
435#endif
436
437static void
438qup_issue_read(struct qup_i2c_dev *dev, struct i2c_msg *msg, int *idx,
439 uint32_t carry_over)
440{
441 uint16_t addr = (msg->addr << 1) | 1;
442 /* QUP limit 256 bytes per read. By HW design, 0 in the 8-bit field
443 * is treated as 256 byte read.
444 */
445 uint16_t rd_len = ((dev->cnt == 256) ? 0 : dev->cnt);
446
447 if (*idx % 4) {
448 writel_relaxed(carry_over | ((QUP_OUT_START | addr) << 16),
449 dev->base + QUP_OUT_FIFO_BASE);/* + (*idx-2)); */
450
451 qup_verify_fifo(dev, carry_over |
452 ((QUP_OUT_START | addr) << 16), (uint32_t)dev->base
453 + QUP_OUT_FIFO_BASE + (*idx - 2), 1);
454 writel_relaxed((QUP_OUT_REC | rd_len),
455 dev->base + QUP_OUT_FIFO_BASE);/* + (*idx+2)); */
456
457 qup_verify_fifo(dev, (QUP_OUT_REC | rd_len),
458 (uint32_t)dev->base + QUP_OUT_FIFO_BASE + (*idx + 2), 1);
459 } else {
460 writel_relaxed(((QUP_OUT_REC | rd_len) << 16)
461 | QUP_OUT_START | addr,
462 dev->base + QUP_OUT_FIFO_BASE);/* + (*idx)); */
463
464 qup_verify_fifo(dev, QUP_OUT_REC << 16 | rd_len << 16 |
465 QUP_OUT_START | addr,
466 (uint32_t)dev->base + QUP_OUT_FIFO_BASE + (*idx), 1);
467 }
468 *idx += 4;
469}
470
471static void
472qup_issue_write(struct qup_i2c_dev *dev, struct i2c_msg *msg, int rem,
473 int *idx, uint32_t *carry_over)
474{
475 int entries = dev->cnt;
476 int empty_sl = dev->wr_sz - ((*idx) >> 1);
477 int i = 0;
478 uint32_t val = 0;
479 uint32_t last_entry = 0;
480 uint16_t addr = msg->addr << 1;
481
482 if (dev->pos == 0) {
483 if (*idx % 4) {
484 writel_relaxed(*carry_over | ((QUP_OUT_START |
485 addr) << 16),
486 dev->base + QUP_OUT_FIFO_BASE);
487
Harini Jayaramanbe7e45d2011-11-02 12:12:03 -0600488 qup_verify_fifo(dev, *carry_over | QUP_OUT_START << 16 |
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700489 addr << 16, (uint32_t)dev->base +
490 QUP_OUT_FIFO_BASE + (*idx) - 2, 0);
491 } else
492 val = QUP_OUT_START | addr;
493 *idx += 2;
494 i++;
495 entries++;
496 } else {
497 /* Avoid setp time issue by adding 1 NOP when number of bytes
498 * are more than FIFO/BLOCK size. setup time issue can't appear
499 * otherwise since next byte to be written will always be ready
500 */
501 val = (QUP_OUT_NOP | 1);
502 *idx += 2;
503 i++;
504 entries++;
505 }
506 if (entries > empty_sl)
507 entries = empty_sl;
508
509 for (; i < (entries - 1); i++) {
510 if (*idx % 4) {
511 writel_relaxed(val | ((QUP_OUT_DATA |
512 msg->buf[dev->pos]) << 16),
513 dev->base + QUP_OUT_FIFO_BASE);
514
515 qup_verify_fifo(dev, val | QUP_OUT_DATA << 16 |
516 msg->buf[dev->pos] << 16, (uint32_t)dev->base +
517 QUP_OUT_FIFO_BASE + (*idx) - 2, 0);
518 } else
519 val = QUP_OUT_DATA | msg->buf[dev->pos];
520 (*idx) += 2;
521 dev->pos++;
522 }
523 if (dev->pos < (msg->len - 1))
524 last_entry = QUP_OUT_DATA;
525 else if (rem > 1) /* not last array entry */
526 last_entry = QUP_OUT_DATA;
527 else
528 last_entry = QUP_OUT_STOP;
529 if ((*idx % 4) == 0) {
530 /*
531 * If read-start and read-command end up in different fifos, it
532 * may result in extra-byte being read due to extra-read cycle.
533 * Avoid that by inserting NOP as the last entry of fifo only
534 * if write command(s) leave 1 space in fifo.
535 */
536 if (rem > 1) {
537 struct i2c_msg *next = msg + 1;
Harini Jayaraman24bea432011-10-11 16:06:28 -0600538 if (next->addr == msg->addr && (next->flags & I2C_M_RD)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700539 && *idx == ((dev->wr_sz*2) - 4)) {
540 writel_relaxed(((last_entry |
541 msg->buf[dev->pos]) |
542 ((1 | QUP_OUT_NOP) << 16)), dev->base +
543 QUP_OUT_FIFO_BASE);/* + (*idx) - 2); */
544
545 qup_verify_fifo(dev,
546 ((last_entry | msg->buf[dev->pos]) |
547 ((1 | QUP_OUT_NOP) << 16)),
548 (uint32_t)dev->base +
549 QUP_OUT_FIFO_BASE + (*idx), 0);
550 *idx += 2;
551 } else if (next->flags == 0 && dev->pos == msg->len - 1
Harini Jayaramanbe7e45d2011-11-02 12:12:03 -0600552 && *idx < (dev->wr_sz*2) &&
553 (next->addr != msg->addr)) {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700554 /* Last byte of an intermittent write */
Harini Jayaramanbe7e45d2011-11-02 12:12:03 -0600555 writel_relaxed((QUP_OUT_STOP |
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700556 msg->buf[dev->pos]),
557 dev->base + QUP_OUT_FIFO_BASE);
558
559 qup_verify_fifo(dev,
Harini Jayaramanbe7e45d2011-11-02 12:12:03 -0600560 QUP_OUT_STOP | msg->buf[dev->pos],
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700561 (uint32_t)dev->base +
562 QUP_OUT_FIFO_BASE + (*idx), 0);
563 *idx += 2;
564 } else
565 *carry_over = (last_entry | msg->buf[dev->pos]);
566 } else {
567 writel_relaxed((last_entry | msg->buf[dev->pos]),
568 dev->base + QUP_OUT_FIFO_BASE);/* + (*idx) - 2); */
569
570 qup_verify_fifo(dev, last_entry | msg->buf[dev->pos],
571 (uint32_t)dev->base + QUP_OUT_FIFO_BASE +
572 (*idx), 0);
573 }
574 } else {
575 writel_relaxed(val | ((last_entry | msg->buf[dev->pos]) << 16),
576 dev->base + QUP_OUT_FIFO_BASE);/* + (*idx) - 2); */
577
578 qup_verify_fifo(dev, val | (last_entry << 16) |
579 (msg->buf[dev->pos] << 16), (uint32_t)dev->base +
580 QUP_OUT_FIFO_BASE + (*idx) - 2, 0);
581 }
582
583 *idx += 2;
584 dev->pos++;
585 dev->cnt = msg->len - dev->pos;
586}
587
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700588static void
589qup_set_read_mode(struct qup_i2c_dev *dev, int rd_len)
590{
591 uint32_t wr_mode = (dev->wr_sz < dev->out_fifo_sz) ?
592 QUP_WR_BLK_MODE : 0;
593 if (rd_len > 256) {
594 dev_dbg(dev->dev, "HW limit: Breaking reads in chunk of 256\n");
595 rd_len = 256;
596 }
597 if (rd_len <= dev->in_fifo_sz) {
598 writel_relaxed(wr_mode | QUP_PACK_EN | QUP_UNPACK_EN,
599 dev->base + QUP_IO_MODE);
600 writel_relaxed(rd_len, dev->base + QUP_MX_READ_CNT);
601 } else {
602 writel_relaxed(wr_mode | QUP_RD_BLK_MODE |
603 QUP_PACK_EN | QUP_UNPACK_EN, dev->base + QUP_IO_MODE);
604 writel_relaxed(rd_len, dev->base + QUP_MX_INPUT_CNT);
605 }
606}
607
608static int
609qup_set_wr_mode(struct qup_i2c_dev *dev, int rem)
610{
611 int total_len = 0;
612 int ret = 0;
Kenneth Heitke6a852e92011-10-20 17:56:03 -0600613 int len = dev->msg->len;
614 struct i2c_msg *next = NULL;
615 if (rem > 1)
616 next = dev->msg + 1;
Harini Jayaramanbe7e45d2011-11-02 12:12:03 -0600617 while (rem > 1 && next->flags == 0 && (next->addr == dev->msg->addr)) {
Kenneth Heitke6a852e92011-10-20 17:56:03 -0600618 len += next->len + 1;
619 next = next + 1;
620 rem--;
621 }
622 if (len >= (dev->out_fifo_sz - 1)) {
623 total_len = len + 1 + (len/(dev->out_blk_sz-1));
624
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700625 writel_relaxed(QUP_WR_BLK_MODE | QUP_PACK_EN | QUP_UNPACK_EN,
626 dev->base + QUP_IO_MODE);
627 dev->wr_sz = dev->out_blk_sz;
628 } else
629 writel_relaxed(QUP_PACK_EN | QUP_UNPACK_EN,
630 dev->base + QUP_IO_MODE);
631
632 if (rem > 1) {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700633 if (next->addr == dev->msg->addr &&
634 next->flags == I2C_M_RD) {
635 qup_set_read_mode(dev, next->len);
636 /* make sure read start & read command are in 1 blk */
637 if ((total_len % dev->out_blk_sz) ==
638 (dev->out_blk_sz - 1))
639 total_len += 3;
640 else
641 total_len += 2;
642 }
643 }
644 /* WRITE COUNT register valid/used only in block mode */
645 if (dev->wr_sz == dev->out_blk_sz)
646 writel_relaxed(total_len, dev->base + QUP_MX_WR_CNT);
647 return ret;
648}
649
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -0700650
651static void qup_i2c_recover_bus_busy(struct qup_i2c_dev *dev)
652{
653 int i;
654 int gpio_clk;
655 int gpio_dat;
656 bool gpio_clk_status = false;
657 uint32_t status = readl_relaxed(dev->base + QUP_I2C_STATUS);
658 struct gpiomux_setting old_gpio_setting;
659
660 if (dev->pdata->msm_i2c_config_gpio)
661 return;
662
663 if (!(status & (I2C_STATUS_BUS_ACTIVE)) ||
664 (status & (I2C_STATUS_BUS_MASTER)))
665 return;
666
667 gpio_clk = dev->i2c_gpios[0];
668 gpio_dat = dev->i2c_gpios[1];
669
670 if ((gpio_clk == -1) && (gpio_dat == -1)) {
671 dev_err(dev->dev, "Recovery failed due to undefined GPIO's\n");
672 return;
673 }
674
675 disable_irq(dev->err_irq);
676 for (i = 0; i < ARRAY_SIZE(i2c_rsrcs); ++i) {
677 if (msm_gpiomux_write(dev->i2c_gpios[i], GPIOMUX_ACTIVE,
678 &recovery_config, &old_gpio_setting)) {
679 dev_err(dev->dev, "GPIO pins have no active setting\n");
680 goto recovery_end;
681 }
682 }
683
684 dev_warn(dev->dev, "i2c_scl: %d, i2c_sda: %d\n",
685 gpio_get_value(gpio_clk), gpio_get_value(gpio_dat));
686
687 for (i = 0; i < 9; i++) {
688 if (gpio_get_value(gpio_dat) && gpio_clk_status)
689 break;
690 gpio_direction_output(gpio_clk, 0);
691 udelay(5);
692 gpio_direction_output(gpio_dat, 0);
693 udelay(5);
694 gpio_direction_input(gpio_clk);
695 udelay(5);
696 if (!gpio_get_value(gpio_clk))
697 udelay(20);
698 if (!gpio_get_value(gpio_clk))
699 usleep_range(10000, 10000);
700 gpio_clk_status = gpio_get_value(gpio_clk);
701 gpio_direction_input(gpio_dat);
702 udelay(5);
703 }
704
705 /* Configure ALT funciton to QUP I2C*/
706 for (i = 0; i < ARRAY_SIZE(i2c_rsrcs); ++i) {
707 msm_gpiomux_write(dev->i2c_gpios[i], GPIOMUX_ACTIVE,
708 &old_gpio_setting, NULL);
709 }
710
711 udelay(10);
712
713 status = readl_relaxed(dev->base + QUP_I2C_STATUS);
714 if (!(status & I2C_STATUS_BUS_ACTIVE)) {
715 dev_info(dev->dev, "Bus busy cleared after %d clock cycles, "
716 "status %x\n",
717 i, status);
718 goto recovery_end;
719 }
720
721 dev_warn(dev->dev, "Bus still busy, status %x\n", status);
722
723recovery_end:
724 enable_irq(dev->err_irq);
725}
726
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700727static int
728qup_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
729{
730 DECLARE_COMPLETION_ONSTACK(complete);
731 struct qup_i2c_dev *dev = i2c_get_adapdata(adap);
732 int ret;
733 int rem = num;
734 long timeout;
735 int err;
736
737 del_timer_sync(&dev->pwr_timer);
738 mutex_lock(&dev->mlock);
739
740 if (dev->suspended) {
741 mutex_unlock(&dev->mlock);
742 return -EIO;
743 }
744
745 if (dev->clk_state == 0) {
746 if (dev->clk_ctl == 0) {
747 if (dev->pdata->src_clk_rate > 0)
748 clk_set_rate(dev->clk,
749 dev->pdata->src_clk_rate);
750 else
751 dev->pdata->src_clk_rate = 19200000;
752 }
753 qup_i2c_pwr_mgmt(dev, 1);
754 }
755 /* Initialize QUP registers during first transfer */
756 if (dev->clk_ctl == 0) {
757 int fs_div;
758 int hs_div;
759 uint32_t fifo_reg;
760
761 if (dev->gsbi) {
762 writel_relaxed(0x2 << 4, dev->gsbi);
763 /* GSBI memory is not in the same 1K region as other
764 * QUP registers. mb() here ensures that the GSBI
765 * register is updated in correct order and that the
766 * write has gone through before programming QUP core
767 * registers
768 */
769 mb();
770 }
771
772 fs_div = ((dev->pdata->src_clk_rate
773 / dev->pdata->clk_freq) / 2) - 3;
774 hs_div = 3;
775 dev->clk_ctl = ((hs_div & 0x7) << 8) | (fs_div & 0xff);
776 fifo_reg = readl_relaxed(dev->base + QUP_IO_MODE);
777 if (fifo_reg & 0x3)
778 dev->out_blk_sz = (fifo_reg & 0x3) * 16;
779 else
780 dev->out_blk_sz = 16;
781 if (fifo_reg & 0x60)
782 dev->in_blk_sz = ((fifo_reg & 0x60) >> 5) * 16;
783 else
784 dev->in_blk_sz = 16;
785 /*
786 * The block/fifo size w.r.t. 'actual data' is 1/2 due to 'tag'
787 * associated with each byte written/received
788 */
789 dev->out_blk_sz /= 2;
790 dev->in_blk_sz /= 2;
791 dev->out_fifo_sz = dev->out_blk_sz *
792 (2 << ((fifo_reg & 0x1C) >> 2));
793 dev->in_fifo_sz = dev->in_blk_sz *
794 (2 << ((fifo_reg & 0x380) >> 7));
795 dev_dbg(dev->dev, "QUP IN:bl:%d, ff:%d, OUT:bl:%d, ff:%d\n",
796 dev->in_blk_sz, dev->in_fifo_sz,
797 dev->out_blk_sz, dev->out_fifo_sz);
798 }
799
800 writel_relaxed(1, dev->base + QUP_SW_RESET);
Sagar Dharia518e2302011-08-05 11:03:03 -0600801 ret = qup_i2c_poll_state(dev, QUP_RESET_STATE, false);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700802 if (ret) {
803 dev_err(dev->dev, "QUP Busy:Trying to recover\n");
804 goto out_err;
805 }
806
807 if (dev->num_irqs == 3) {
808 enable_irq(dev->in_irq);
809 enable_irq(dev->out_irq);
810 }
811 enable_irq(dev->err_irq);
812
813 /* Initialize QUP registers */
814 writel_relaxed(0, dev->base + QUP_CONFIG);
815 writel_relaxed(QUP_OPERATIONAL_RESET, dev->base + QUP_OPERATIONAL);
816 writel_relaxed(QUP_STATUS_ERROR_FLAGS, dev->base + QUP_ERROR_FLAGS_EN);
817
818 writel_relaxed(I2C_MINI_CORE | I2C_N_VAL, dev->base + QUP_CONFIG);
819
820 /* Initialize I2C mini core registers */
821 writel_relaxed(0, dev->base + QUP_I2C_CLK_CTL);
822 writel_relaxed(QUP_I2C_STATUS_RESET, dev->base + QUP_I2C_STATUS);
823
824 while (rem) {
825 bool filled = false;
826
827 dev->cnt = msgs->len - dev->pos;
828 dev->msg = msgs;
829
830 dev->wr_sz = dev->out_fifo_sz;
831 dev->err = 0;
832 dev->complete = &complete;
833
Sagar Dharia518e2302011-08-05 11:03:03 -0600834 if (qup_i2c_poll_state(dev, QUP_I2C_MAST_GEN, false) != 0) {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700835 ret = -EIO;
836 goto out_err;
837 }
838
839 qup_print_status(dev);
840 /* HW limits Read upto 256 bytes in 1 read without stop */
841 if (dev->msg->flags & I2C_M_RD) {
842 qup_set_read_mode(dev, dev->cnt);
843 if (dev->cnt > 256)
844 dev->cnt = 256;
845 } else {
846 ret = qup_set_wr_mode(dev, rem);
847 if (ret != 0)
848 goto out_err;
849 /* Don't fill block till we get interrupt */
850 if (dev->wr_sz == dev->out_blk_sz)
851 filled = true;
852 }
853
854 err = qup_update_state(dev, QUP_RUN_STATE);
855 if (err < 0) {
856 ret = err;
857 goto out_err;
858 }
859
860 qup_print_status(dev);
861 writel_relaxed(dev->clk_ctl, dev->base + QUP_I2C_CLK_CTL);
862 /* CLK_CTL register is not in the same 1K region as other QUP
863 * registers. Ensure that clock control is written before
864 * programming other QUP registers
865 */
866 mb();
867
868 do {
869 int idx = 0;
870 uint32_t carry_over = 0;
871
872 /* Transition to PAUSE state only possible from RUN */
873 err = qup_update_state(dev, QUP_PAUSE_STATE);
874 if (err < 0) {
875 ret = err;
876 goto out_err;
877 }
878
879 qup_print_status(dev);
880 /* This operation is Write, check the next operation
881 * and decide mode
882 */
883 while (filled == false) {
884 if ((msgs->flags & I2C_M_RD))
885 qup_issue_read(dev, msgs, &idx,
886 carry_over);
887 else if (!(msgs->flags & I2C_M_RD))
888 qup_issue_write(dev, msgs, rem, &idx,
889 &carry_over);
890 if (idx >= (dev->wr_sz << 1))
891 filled = true;
892 /* Start new message */
893 if (filled == false) {
894 if (msgs->flags & I2C_M_RD)
895 filled = true;
896 else if (rem > 1) {
897 /* Only combine operations with
898 * same address
899 */
900 struct i2c_msg *next = msgs + 1;
901 if (next->addr != msgs->addr)
902 filled = true;
903 else {
904 rem--;
905 msgs++;
906 dev->msg = msgs;
907 dev->pos = 0;
908 dev->cnt = msgs->len;
909 if (msgs->len > 256)
910 dev->cnt = 256;
911 }
912 } else
913 filled = true;
914 }
915 }
916 err = qup_update_state(dev, QUP_RUN_STATE);
917 if (err < 0) {
918 ret = err;
919 goto out_err;
920 }
921 dev_dbg(dev->dev, "idx:%d, rem:%d, num:%d, mode:%d\n",
922 idx, rem, num, dev->mode);
923
924 qup_print_status(dev);
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -0700925 timeout = wait_for_completion_timeout(&complete,
926 msecs_to_jiffies(dev->out_fifo_sz));
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700927 if (!timeout) {
928 uint32_t istatus = readl_relaxed(dev->base +
929 QUP_I2C_STATUS);
930 uint32_t qstatus = readl_relaxed(dev->base +
931 QUP_ERROR_FLAGS);
932 uint32_t op_flgs = readl_relaxed(dev->base +
933 QUP_OPERATIONAL);
934
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -0700935 /*
936 * Dont wait for 1 sec if i2c sees the bus
937 * active and controller is not master.
938 * A slave has pulled line low. Try to recover
939 */
940 if (!(istatus & I2C_STATUS_BUS_ACTIVE) ||
941 (istatus & I2C_STATUS_BUS_MASTER)) {
942 timeout =
943 wait_for_completion_timeout(&complete,
944 HZ);
945 if (timeout)
946 goto timeout_err;
947 }
948 qup_i2c_recover_bus_busy(dev);
949 dev_err(dev->dev,
950 "Transaction timed out, SL-AD = 0x%x\n",
951 dev->msg->addr);
952
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700953 dev_err(dev->dev, "I2C Status: %x\n", istatus);
954 dev_err(dev->dev, "QUP Status: %x\n", qstatus);
955 dev_err(dev->dev, "OP Flags: %x\n", op_flgs);
956 writel_relaxed(1, dev->base + QUP_SW_RESET);
957 /* Make sure that the write has gone through
958 * before returning from the function
959 */
960 mb();
961 ret = -ETIMEDOUT;
962 goto out_err;
963 }
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -0700964timeout_err:
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700965 if (dev->err) {
966 if (dev->err > 0 &&
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -0700967 dev->err & QUP_I2C_NACK_FLAG) {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700968 dev_err(dev->dev,
969 "I2C slave addr:0x%x not connected\n",
970 dev->msg->addr);
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -0700971 dev->err = ENOTCONN;
972 } else if (dev->err < 0) {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700973 dev_err(dev->dev,
974 "QUP data xfer error %d\n", dev->err);
975 ret = dev->err;
976 goto out_err;
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -0700977 } else if (dev->err > 0) {
978 /*
979 * ISR returns +ve error if error code
980 * is I2C related, e.g. unexpected start
981 * So you may call recover-bus-busy when
982 * this error happens
983 */
984 qup_i2c_recover_bus_busy(dev);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700985 }
986 ret = -dev->err;
987 goto out_err;
988 }
989 if (dev->msg->flags & I2C_M_RD) {
990 int i;
991 uint32_t dval = 0;
992 for (i = 0; dev->pos < dev->msg->len; i++,
993 dev->pos++) {
994 uint32_t rd_status =
995 readl_relaxed(dev->base
996 + QUP_OPERATIONAL);
997 if (i % 2 == 0) {
998 if ((rd_status &
999 QUP_IN_NOT_EMPTY) == 0)
1000 break;
1001 dval = readl_relaxed(dev->base +
1002 QUP_IN_FIFO_BASE);
1003 dev->msg->buf[dev->pos] =
1004 dval & 0xFF;
1005 } else
1006 dev->msg->buf[dev->pos] =
1007 ((dval & 0xFF0000) >>
1008 16);
1009 }
1010 dev->cnt -= i;
1011 } else
1012 filled = false; /* refill output FIFO */
1013 dev_dbg(dev->dev, "pos:%d, len:%d, cnt:%d\n",
1014 dev->pos, msgs->len, dev->cnt);
1015 } while (dev->cnt > 0);
1016 if (dev->cnt == 0) {
1017 if (msgs->len == dev->pos) {
1018 rem--;
1019 msgs++;
1020 dev->pos = 0;
1021 }
1022 if (rem) {
1023 err = qup_i2c_poll_clock_ready(dev);
1024 if (err < 0) {
1025 ret = err;
1026 goto out_err;
1027 }
1028 err = qup_update_state(dev, QUP_RESET_STATE);
1029 if (err < 0) {
1030 ret = err;
1031 goto out_err;
1032 }
1033 }
1034 }
1035 /* Wait for I2C bus to be idle */
1036 ret = qup_i2c_poll_writeready(dev, rem);
1037 if (ret) {
1038 dev_err(dev->dev,
1039 "Error waiting for write ready\n");
1040 goto out_err;
1041 }
1042 }
1043
1044 ret = num;
1045 out_err:
1046 disable_irq(dev->err_irq);
1047 if (dev->num_irqs == 3) {
1048 disable_irq(dev->in_irq);
1049 disable_irq(dev->out_irq);
1050 }
1051 dev->complete = NULL;
1052 dev->msg = NULL;
1053 dev->pos = 0;
1054 dev->err = 0;
1055 dev->cnt = 0;
1056 dev->pwr_timer.expires = jiffies + 3*HZ;
1057 add_timer(&dev->pwr_timer);
1058 mutex_unlock(&dev->mlock);
1059 return ret;
1060}
1061
1062static u32
1063qup_i2c_func(struct i2c_adapter *adap)
1064{
1065 return I2C_FUNC_I2C | (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK);
1066}
1067
1068static const struct i2c_algorithm qup_i2c_algo = {
1069 .master_xfer = qup_i2c_xfer,
1070 .functionality = qup_i2c_func,
1071};
1072
1073static int __devinit
1074qup_i2c_probe(struct platform_device *pdev)
1075{
1076 struct qup_i2c_dev *dev;
1077 struct resource *qup_mem, *gsbi_mem, *qup_io, *gsbi_io, *res;
1078 struct resource *in_irq, *out_irq, *err_irq;
1079 struct clk *clk, *pclk;
1080 int ret = 0;
1081 int i;
1082 struct msm_i2c_platform_data *pdata;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001083
1084 gsbi_mem = NULL;
1085 dev_dbg(&pdev->dev, "qup_i2c_probe\n");
1086
1087 pdata = pdev->dev.platform_data;
1088 if (!pdata) {
1089 dev_err(&pdev->dev, "platform data not initialized\n");
1090 return -ENOSYS;
1091 }
1092 qup_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,
1093 "qup_phys_addr");
1094 if (!qup_mem) {
1095 dev_err(&pdev->dev, "no qup mem resource?\n");
1096 return -ENODEV;
1097 }
1098
1099 /*
1100 * We only have 1 interrupt for new hardware targets and in_irq,
1101 * out_irq will be NULL for those platforms
1102 */
1103 in_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ,
1104 "qup_in_intr");
1105
1106 out_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ,
1107 "qup_out_intr");
1108
1109 err_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ,
1110 "qup_err_intr");
1111 if (!err_irq) {
1112 dev_err(&pdev->dev, "no error irq resource?\n");
1113 return -ENODEV;
1114 }
1115
1116 qup_io = request_mem_region(qup_mem->start, resource_size(qup_mem),
1117 pdev->name);
1118 if (!qup_io) {
1119 dev_err(&pdev->dev, "QUP region already claimed\n");
1120 return -EBUSY;
1121 }
1122 if (!pdata->use_gsbi_shared_mode) {
1123 gsbi_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,
1124 "gsbi_qup_i2c_addr");
1125 if (!gsbi_mem) {
1126 dev_err(&pdev->dev, "no gsbi mem resource?\n");
Harini Jayaramanee31ae92011-09-20 18:32:34 -06001127 ret = -ENODEV;
1128 goto err_res_failed;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001129 }
1130 gsbi_io = request_mem_region(gsbi_mem->start,
1131 resource_size(gsbi_mem),
1132 pdev->name);
1133 if (!gsbi_io) {
1134 dev_err(&pdev->dev, "GSBI region already claimed\n");
Harini Jayaramanee31ae92011-09-20 18:32:34 -06001135 ret = -EBUSY;
1136 goto err_res_failed;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001137 }
1138 }
1139
Matt Wagantallac294852011-08-17 15:44:58 -07001140 clk = clk_get(&pdev->dev, "core_clk");
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001141 if (IS_ERR(clk)) {
Matt Wagantallac294852011-08-17 15:44:58 -07001142 dev_err(&pdev->dev, "Could not get core_clk\n");
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001143 ret = PTR_ERR(clk);
1144 goto err_clk_get_failed;
1145 }
1146
Matt Wagantallac294852011-08-17 15:44:58 -07001147 pclk = clk_get(&pdev->dev, "iface_clk");
1148 if (IS_ERR(pclk)) {
1149 dev_err(&pdev->dev, "Could not get iface_clk\n");
1150 ret = PTR_ERR(pclk);
1151 clk_put(clk);
1152 goto err_clk_get_failed;
1153 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001154
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001155 /* We support frequencies upto FAST Mode(400KHz) */
1156 if (pdata->clk_freq <= 0 ||
1157 pdata->clk_freq > 400000) {
1158 dev_err(&pdev->dev, "clock frequency not supported\n");
1159 ret = -EIO;
1160 goto err_config_failed;
1161 }
1162
1163 dev = kzalloc(sizeof(struct qup_i2c_dev), GFP_KERNEL);
1164 if (!dev) {
1165 ret = -ENOMEM;
1166 goto err_alloc_dev_failed;
1167 }
1168
1169 dev->dev = &pdev->dev;
1170 if (in_irq)
1171 dev->in_irq = in_irq->start;
1172 if (out_irq)
1173 dev->out_irq = out_irq->start;
1174 dev->err_irq = err_irq->start;
1175 if (in_irq && out_irq)
1176 dev->num_irqs = 3;
1177 else
1178 dev->num_irqs = 1;
1179 dev->clk = clk;
1180 dev->pclk = pclk;
1181 dev->base = ioremap(qup_mem->start, resource_size(qup_mem));
1182 if (!dev->base) {
1183 ret = -ENOMEM;
1184 goto err_ioremap_failed;
1185 }
1186
1187 /* Configure GSBI block to use I2C functionality */
1188 if (gsbi_mem) {
1189 dev->gsbi = ioremap(gsbi_mem->start, resource_size(gsbi_mem));
1190 if (!dev->gsbi) {
1191 ret = -ENOMEM;
1192 goto err_gsbi_failed;
1193 }
1194 }
1195
1196 for (i = 0; i < ARRAY_SIZE(i2c_rsrcs); ++i) {
1197 res = platform_get_resource_byname(pdev, IORESOURCE_IO,
1198 i2c_rsrcs[i]);
1199 dev->i2c_gpios[i] = res ? res->start : -1;
1200 }
1201
1202 ret = qup_i2c_request_gpios(dev);
1203 if (ret)
1204 goto err_request_gpio_failed;
1205
1206 platform_set_drvdata(pdev, dev);
1207
Harini Jayaramand997b3b2011-10-11 14:25:29 -06001208 dev->one_bit_t = (USEC_PER_SEC/pdata->clk_freq) + 1;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001209 dev->pdata = pdata;
1210 dev->clk_ctl = 0;
1211 dev->pos = 0;
1212
1213 /*
1214 * We use num_irqs to also indicate if we got 3 interrupts or just 1.
1215 * If we have just 1, we use err_irq as the general purpose irq
1216 * and handle the changes in ISR accordingly
1217 * Per Hardware guidelines, if we have 3 interrupts, they are always
1218 * edge triggering, and if we have 1, it's always level-triggering
1219 */
1220 if (dev->num_irqs == 3) {
1221 ret = request_irq(dev->in_irq, qup_i2c_interrupt,
1222 IRQF_TRIGGER_RISING, "qup_in_intr", dev);
1223 if (ret) {
1224 dev_err(&pdev->dev, "request_in_irq failed\n");
1225 goto err_request_irq_failed;
1226 }
1227 /*
1228 * We assume out_irq exists if in_irq does since platform
1229 * configuration either has 3 interrupts assigned to QUP or 1
1230 */
1231 ret = request_irq(dev->out_irq, qup_i2c_interrupt,
1232 IRQF_TRIGGER_RISING, "qup_out_intr", dev);
1233 if (ret) {
1234 dev_err(&pdev->dev, "request_out_irq failed\n");
1235 free_irq(dev->in_irq, dev);
1236 goto err_request_irq_failed;
1237 }
1238 ret = request_irq(dev->err_irq, qup_i2c_interrupt,
1239 IRQF_TRIGGER_RISING, "qup_err_intr", dev);
1240 if (ret) {
1241 dev_err(&pdev->dev, "request_err_irq failed\n");
1242 free_irq(dev->out_irq, dev);
1243 free_irq(dev->in_irq, dev);
1244 goto err_request_irq_failed;
1245 }
1246 } else {
1247 ret = request_irq(dev->err_irq, qup_i2c_interrupt,
1248 IRQF_TRIGGER_HIGH, "qup_err_intr", dev);
1249 if (ret) {
1250 dev_err(&pdev->dev, "request_err_irq failed\n");
1251 goto err_request_irq_failed;
1252 }
1253 }
1254 disable_irq(dev->err_irq);
1255 if (dev->num_irqs == 3) {
1256 disable_irq(dev->in_irq);
1257 disable_irq(dev->out_irq);
1258 }
1259 i2c_set_adapdata(&dev->adapter, dev);
1260 dev->adapter.algo = &qup_i2c_algo;
1261 strlcpy(dev->adapter.name,
1262 "QUP I2C adapter",
1263 sizeof(dev->adapter.name));
1264 dev->adapter.nr = pdev->id;
Harini Jayaramance67cf82011-08-05 09:26:06 -06001265 if (pdata->msm_i2c_config_gpio)
1266 pdata->msm_i2c_config_gpio(dev->adapter.nr, 1);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001267
1268 dev->suspended = 0;
1269 mutex_init(&dev->mlock);
1270 dev->clk_state = 0;
1271 setup_timer(&dev->pwr_timer, qup_i2c_pwr_timer, (unsigned long) dev);
1272
1273 pm_runtime_set_active(&pdev->dev);
1274 pm_runtime_enable(&pdev->dev);
1275
1276 ret = i2c_add_numbered_adapter(&dev->adapter);
1277 if (ret) {
1278 dev_err(&pdev->dev, "i2c_add_adapter failed\n");
1279 if (dev->num_irqs == 3) {
1280 free_irq(dev->out_irq, dev);
1281 free_irq(dev->in_irq, dev);
1282 }
1283 free_irq(dev->err_irq, dev);
1284 } else
1285 return 0;
1286
1287
1288err_request_irq_failed:
1289 qup_i2c_free_gpios(dev);
1290 if (dev->gsbi)
1291 iounmap(dev->gsbi);
1292err_request_gpio_failed:
1293err_gsbi_failed:
1294 iounmap(dev->base);
1295err_ioremap_failed:
1296 kfree(dev);
1297err_alloc_dev_failed:
1298err_config_failed:
1299 clk_put(clk);
Matt Wagantallac294852011-08-17 15:44:58 -07001300 clk_put(pclk);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001301err_clk_get_failed:
1302 if (gsbi_mem)
1303 release_mem_region(gsbi_mem->start, resource_size(gsbi_mem));
Harini Jayaramanee31ae92011-09-20 18:32:34 -06001304err_res_failed:
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001305 release_mem_region(qup_mem->start, resource_size(qup_mem));
1306 return ret;
1307}
1308
1309static int __devexit
1310qup_i2c_remove(struct platform_device *pdev)
1311{
1312 struct qup_i2c_dev *dev = platform_get_drvdata(pdev);
1313 struct resource *qup_mem, *gsbi_mem;
1314
1315 /* Grab mutex to ensure ongoing transaction is over */
1316 mutex_lock(&dev->mlock);
1317 dev->suspended = 1;
1318 mutex_unlock(&dev->mlock);
1319 mutex_destroy(&dev->mlock);
1320 del_timer_sync(&dev->pwr_timer);
1321 if (dev->clk_state != 0)
1322 qup_i2c_pwr_mgmt(dev, 0);
1323 platform_set_drvdata(pdev, NULL);
1324 if (dev->num_irqs == 3) {
1325 free_irq(dev->out_irq, dev);
1326 free_irq(dev->in_irq, dev);
1327 }
1328 free_irq(dev->err_irq, dev);
1329 i2c_del_adapter(&dev->adapter);
1330 clk_put(dev->clk);
Matt Wagantallac294852011-08-17 15:44:58 -07001331 clk_put(dev->pclk);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001332 qup_i2c_free_gpios(dev);
1333 if (dev->gsbi)
1334 iounmap(dev->gsbi);
1335 iounmap(dev->base);
1336
1337 pm_runtime_disable(&pdev->dev);
1338
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001339 if (!(dev->pdata->use_gsbi_shared_mode)) {
1340 gsbi_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,
1341 "gsbi_qup_i2c_addr");
1342 release_mem_region(gsbi_mem->start, resource_size(gsbi_mem));
1343 }
1344 qup_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,
1345 "qup_phys_addr");
1346 release_mem_region(qup_mem->start, resource_size(qup_mem));
Harini Jayaramanee31ae92011-09-20 18:32:34 -06001347 kfree(dev);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001348 return 0;
1349}
1350
1351#ifdef CONFIG_PM
1352static int qup_i2c_suspend(struct device *device)
1353{
1354 struct platform_device *pdev = to_platform_device(device);
1355 struct qup_i2c_dev *dev = platform_get_drvdata(pdev);
1356
1357 /* Grab mutex to ensure ongoing transaction is over */
1358 mutex_lock(&dev->mlock);
1359 dev->suspended = 1;
1360 mutex_unlock(&dev->mlock);
1361 del_timer_sync(&dev->pwr_timer);
1362 if (dev->clk_state != 0)
1363 qup_i2c_pwr_mgmt(dev, 0);
1364 qup_i2c_free_gpios(dev);
1365 return 0;
1366}
1367
1368static int qup_i2c_resume(struct device *device)
1369{
1370 struct platform_device *pdev = to_platform_device(device);
1371 struct qup_i2c_dev *dev = platform_get_drvdata(pdev);
1372 BUG_ON(qup_i2c_request_gpios(dev) != 0);
1373 dev->suspended = 0;
1374 return 0;
1375}
1376#endif /* CONFIG_PM */
1377
1378#ifdef CONFIG_PM_RUNTIME
1379static int i2c_qup_runtime_idle(struct device *dev)
1380{
1381 dev_dbg(dev, "pm_runtime: idle...\n");
1382 return 0;
1383}
1384
1385static int i2c_qup_runtime_suspend(struct device *dev)
1386{
1387 dev_dbg(dev, "pm_runtime: suspending...\n");
1388 return 0;
1389}
1390
1391static int i2c_qup_runtime_resume(struct device *dev)
1392{
1393 dev_dbg(dev, "pm_runtime: resuming...\n");
1394 return 0;
1395}
1396#endif
1397
1398static const struct dev_pm_ops i2c_qup_dev_pm_ops = {
1399 SET_SYSTEM_SLEEP_PM_OPS(
1400 qup_i2c_suspend,
1401 qup_i2c_resume
1402 )
1403 SET_RUNTIME_PM_OPS(
1404 i2c_qup_runtime_suspend,
1405 i2c_qup_runtime_resume,
1406 i2c_qup_runtime_idle
1407 )
1408};
1409
1410static struct platform_driver qup_i2c_driver = {
1411 .probe = qup_i2c_probe,
1412 .remove = __devexit_p(qup_i2c_remove),
1413 .driver = {
1414 .name = "qup_i2c",
1415 .owner = THIS_MODULE,
1416 .pm = &i2c_qup_dev_pm_ops,
1417 },
1418};
1419
1420/* QUP may be needed to bring up other drivers */
1421static int __init
1422qup_i2c_init_driver(void)
1423{
1424 return platform_driver_register(&qup_i2c_driver);
1425}
1426arch_initcall(qup_i2c_init_driver);
1427
1428static void __exit qup_i2c_exit_driver(void)
1429{
1430 platform_driver_unregister(&qup_i2c_driver);
1431}
1432module_exit(qup_i2c_exit_driver);
1433