blob: 4988313d764da499976425917353b6baa95d696c [file] [log] [blame]
Harini Jayaraman9fffe012012-01-23 17:01:14 -07001/* Copyright (c) 2009-2012, Code Aurora Forum. All rights reserved.
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07002 *
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
Trilok Sonif0274f12011-08-19 12:26:13 +0530306/*
307 * Before calling qup_config_core_on_en(), please make
308 * sure that QuPE core is in RESET state.
Trilok Sonif0274f12011-08-19 12:26:13 +0530309 */
310static void
311qup_config_core_on_en(struct qup_i2c_dev *dev)
312{
313 uint32_t status;
314
Trilok Sonif0274f12011-08-19 12:26:13 +0530315 status = readl_relaxed(dev->base + QUP_CONFIG);
316 status |= BIT(13);
317 writel_relaxed(status, dev->base + QUP_CONFIG);
318 /* making sure that write has really gone through */
319 mb();
320}
321
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700322static void
323qup_i2c_pwr_mgmt(struct qup_i2c_dev *dev, unsigned int state)
324{
325 dev->clk_state = state;
326 if (state != 0) {
Sagar Dharia75a57192012-02-12 20:47:32 -0700327 clk_enable(dev->clk);
328 clk_enable(dev->pclk);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700329 } else {
Sagar Dharia57ac1ac2011-08-06 15:12:44 -0600330 qup_update_state(dev, QUP_RESET_STATE);
Sagar Dharia75a57192012-02-12 20:47:32 -0700331 clk_disable(dev->clk);
Trilok Sonif0274f12011-08-19 12:26:13 +0530332 qup_config_core_on_en(dev);
Sagar Dharia75a57192012-02-12 20:47:32 -0700333 clk_disable(dev->pclk);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700334 }
335}
336
337static void
338qup_i2c_pwr_timer(unsigned long data)
339{
340 struct qup_i2c_dev *dev = (struct qup_i2c_dev *) data;
341 dev_dbg(dev->dev, "QUP_Power: Inactivity based power management\n");
342 if (dev->clk_state == 1)
343 qup_i2c_pwr_mgmt(dev, 0);
344}
345
346static int
347qup_i2c_poll_writeready(struct qup_i2c_dev *dev, int rem)
348{
349 uint32_t retries = 0;
350
351 while (retries != 2000) {
352 uint32_t status = readl_relaxed(dev->base + QUP_I2C_STATUS);
353
354 if (!(status & I2C_STATUS_WR_BUFFER_FULL)) {
355 if (((dev->msg->flags & I2C_M_RD) || (rem == 0)) &&
356 !(status & I2C_STATUS_BUS_ACTIVE))
357 return 0;
358 else if ((dev->msg->flags == 0) && (rem > 0))
359 return 0;
360 else /* 1-bit delay before we check for bus busy */
361 udelay(dev->one_bit_t);
362 }
Harini Jayaramand997b3b2011-10-11 14:25:29 -0600363 if (retries++ == 1000) {
364 /*
365 * Wait for FIFO number of bytes to be absolutely sure
366 * that I2C write state machine is not idle. Each byte
367 * takes 9 clock cycles. (8 bits + 1 ack)
368 */
369 usleep_range((dev->one_bit_t * (dev->out_fifo_sz * 9)),
370 (dev->one_bit_t * (dev->out_fifo_sz * 9)));
371 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700372 }
373 qup_print_status(dev);
374 return -ETIMEDOUT;
375}
376
377static int qup_i2c_poll_clock_ready(struct qup_i2c_dev *dev)
378{
379 uint32_t retries = 0;
380
381 /*
382 * Wait for the clock state to transition to either IDLE or FORCED
383 * LOW. This will usually happen within one cycle of the i2c clock.
384 */
385
386 while (retries++ < QUP_MAX_CLK_STATE_RETRIES) {
387 uint32_t status = readl_relaxed(dev->base + QUP_I2C_STATUS);
388 uint32_t clk_state = (status >> 13) & 0x7;
389
390 if (clk_state == I2C_CLK_RESET_BUSIDLE_STATE ||
391 clk_state == I2C_CLK_FORCED_LOW_STATE)
392 return 0;
393 /* 1-bit delay before we check again */
394 udelay(dev->one_bit_t);
395 }
396
397 dev_err(dev->dev, "Error waiting for clk ready\n");
398 return -ETIMEDOUT;
399}
400
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700401static inline int qup_i2c_request_gpios(struct qup_i2c_dev *dev)
402{
403 int i;
404 int result = 0;
405
406 for (i = 0; i < ARRAY_SIZE(i2c_rsrcs); ++i) {
407 if (dev->i2c_gpios[i] >= 0) {
408 result = gpio_request(dev->i2c_gpios[i], i2c_rsrcs[i]);
409 if (result) {
410 dev_err(dev->dev,
411 "gpio_request for pin %d failed\
412 with error %d\n", dev->i2c_gpios[i],
413 result);
414 goto error;
415 }
416 }
417 }
418 return 0;
419
420error:
421 for (; --i >= 0;) {
422 if (dev->i2c_gpios[i] >= 0)
423 gpio_free(dev->i2c_gpios[i]);
424 }
425 return result;
426}
427
428static inline void qup_i2c_free_gpios(struct qup_i2c_dev *dev)
429{
430 int i;
431
432 for (i = 0; i < ARRAY_SIZE(i2c_rsrcs); ++i) {
433 if (dev->i2c_gpios[i] >= 0)
434 gpio_free(dev->i2c_gpios[i]);
435 }
436}
437
438#ifdef DEBUG
439static void qup_verify_fifo(struct qup_i2c_dev *dev, uint32_t val,
440 uint32_t addr, int rdwr)
441{
442 if (rdwr)
443 dev_dbg(dev->dev, "RD:Wrote 0x%x to out_ff:0x%x\n", val, addr);
444 else
445 dev_dbg(dev->dev, "WR:Wrote 0x%x to out_ff:0x%x\n", val, addr);
446}
447#else
448static inline void qup_verify_fifo(struct qup_i2c_dev *dev, uint32_t val,
449 uint32_t addr, int rdwr)
450{
451}
452#endif
453
454static void
455qup_issue_read(struct qup_i2c_dev *dev, struct i2c_msg *msg, int *idx,
456 uint32_t carry_over)
457{
458 uint16_t addr = (msg->addr << 1) | 1;
459 /* QUP limit 256 bytes per read. By HW design, 0 in the 8-bit field
460 * is treated as 256 byte read.
461 */
462 uint16_t rd_len = ((dev->cnt == 256) ? 0 : dev->cnt);
463
464 if (*idx % 4) {
465 writel_relaxed(carry_over | ((QUP_OUT_START | addr) << 16),
466 dev->base + QUP_OUT_FIFO_BASE);/* + (*idx-2)); */
467
468 qup_verify_fifo(dev, carry_over |
469 ((QUP_OUT_START | addr) << 16), (uint32_t)dev->base
470 + QUP_OUT_FIFO_BASE + (*idx - 2), 1);
471 writel_relaxed((QUP_OUT_REC | rd_len),
472 dev->base + QUP_OUT_FIFO_BASE);/* + (*idx+2)); */
473
474 qup_verify_fifo(dev, (QUP_OUT_REC | rd_len),
475 (uint32_t)dev->base + QUP_OUT_FIFO_BASE + (*idx + 2), 1);
476 } else {
477 writel_relaxed(((QUP_OUT_REC | rd_len) << 16)
478 | QUP_OUT_START | addr,
479 dev->base + QUP_OUT_FIFO_BASE);/* + (*idx)); */
480
481 qup_verify_fifo(dev, QUP_OUT_REC << 16 | rd_len << 16 |
482 QUP_OUT_START | addr,
483 (uint32_t)dev->base + QUP_OUT_FIFO_BASE + (*idx), 1);
484 }
485 *idx += 4;
486}
487
488static void
489qup_issue_write(struct qup_i2c_dev *dev, struct i2c_msg *msg, int rem,
490 int *idx, uint32_t *carry_over)
491{
492 int entries = dev->cnt;
493 int empty_sl = dev->wr_sz - ((*idx) >> 1);
494 int i = 0;
495 uint32_t val = 0;
496 uint32_t last_entry = 0;
497 uint16_t addr = msg->addr << 1;
498
499 if (dev->pos == 0) {
500 if (*idx % 4) {
501 writel_relaxed(*carry_over | ((QUP_OUT_START |
502 addr) << 16),
503 dev->base + QUP_OUT_FIFO_BASE);
504
Harini Jayaramanbe7e45d2011-11-02 12:12:03 -0600505 qup_verify_fifo(dev, *carry_over | QUP_OUT_START << 16 |
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700506 addr << 16, (uint32_t)dev->base +
507 QUP_OUT_FIFO_BASE + (*idx) - 2, 0);
508 } else
509 val = QUP_OUT_START | addr;
510 *idx += 2;
511 i++;
512 entries++;
513 } else {
514 /* Avoid setp time issue by adding 1 NOP when number of bytes
515 * are more than FIFO/BLOCK size. setup time issue can't appear
516 * otherwise since next byte to be written will always be ready
517 */
518 val = (QUP_OUT_NOP | 1);
519 *idx += 2;
520 i++;
521 entries++;
522 }
523 if (entries > empty_sl)
524 entries = empty_sl;
525
526 for (; i < (entries - 1); i++) {
527 if (*idx % 4) {
528 writel_relaxed(val | ((QUP_OUT_DATA |
529 msg->buf[dev->pos]) << 16),
530 dev->base + QUP_OUT_FIFO_BASE);
531
532 qup_verify_fifo(dev, val | QUP_OUT_DATA << 16 |
533 msg->buf[dev->pos] << 16, (uint32_t)dev->base +
534 QUP_OUT_FIFO_BASE + (*idx) - 2, 0);
535 } else
536 val = QUP_OUT_DATA | msg->buf[dev->pos];
537 (*idx) += 2;
538 dev->pos++;
539 }
540 if (dev->pos < (msg->len - 1))
541 last_entry = QUP_OUT_DATA;
542 else if (rem > 1) /* not last array entry */
543 last_entry = QUP_OUT_DATA;
544 else
545 last_entry = QUP_OUT_STOP;
546 if ((*idx % 4) == 0) {
547 /*
548 * If read-start and read-command end up in different fifos, it
549 * may result in extra-byte being read due to extra-read cycle.
550 * Avoid that by inserting NOP as the last entry of fifo only
551 * if write command(s) leave 1 space in fifo.
552 */
553 if (rem > 1) {
554 struct i2c_msg *next = msg + 1;
Harini Jayaraman24bea432011-10-11 16:06:28 -0600555 if (next->addr == msg->addr && (next->flags & I2C_M_RD)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700556 && *idx == ((dev->wr_sz*2) - 4)) {
557 writel_relaxed(((last_entry |
558 msg->buf[dev->pos]) |
559 ((1 | QUP_OUT_NOP) << 16)), dev->base +
560 QUP_OUT_FIFO_BASE);/* + (*idx) - 2); */
561
562 qup_verify_fifo(dev,
563 ((last_entry | msg->buf[dev->pos]) |
564 ((1 | QUP_OUT_NOP) << 16)),
565 (uint32_t)dev->base +
566 QUP_OUT_FIFO_BASE + (*idx), 0);
567 *idx += 2;
568 } else if (next->flags == 0 && dev->pos == msg->len - 1
Harini Jayaramanbe7e45d2011-11-02 12:12:03 -0600569 && *idx < (dev->wr_sz*2) &&
570 (next->addr != msg->addr)) {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700571 /* Last byte of an intermittent write */
Harini Jayaramanbe7e45d2011-11-02 12:12:03 -0600572 writel_relaxed((QUP_OUT_STOP |
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700573 msg->buf[dev->pos]),
574 dev->base + QUP_OUT_FIFO_BASE);
575
576 qup_verify_fifo(dev,
Harini Jayaramanbe7e45d2011-11-02 12:12:03 -0600577 QUP_OUT_STOP | msg->buf[dev->pos],
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700578 (uint32_t)dev->base +
579 QUP_OUT_FIFO_BASE + (*idx), 0);
580 *idx += 2;
581 } else
582 *carry_over = (last_entry | msg->buf[dev->pos]);
583 } else {
584 writel_relaxed((last_entry | msg->buf[dev->pos]),
585 dev->base + QUP_OUT_FIFO_BASE);/* + (*idx) - 2); */
586
587 qup_verify_fifo(dev, last_entry | msg->buf[dev->pos],
588 (uint32_t)dev->base + QUP_OUT_FIFO_BASE +
589 (*idx), 0);
590 }
591 } else {
592 writel_relaxed(val | ((last_entry | msg->buf[dev->pos]) << 16),
593 dev->base + QUP_OUT_FIFO_BASE);/* + (*idx) - 2); */
594
595 qup_verify_fifo(dev, val | (last_entry << 16) |
596 (msg->buf[dev->pos] << 16), (uint32_t)dev->base +
597 QUP_OUT_FIFO_BASE + (*idx) - 2, 0);
598 }
599
600 *idx += 2;
601 dev->pos++;
602 dev->cnt = msg->len - dev->pos;
603}
604
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700605static void
606qup_set_read_mode(struct qup_i2c_dev *dev, int rd_len)
607{
608 uint32_t wr_mode = (dev->wr_sz < dev->out_fifo_sz) ?
609 QUP_WR_BLK_MODE : 0;
610 if (rd_len > 256) {
611 dev_dbg(dev->dev, "HW limit: Breaking reads in chunk of 256\n");
612 rd_len = 256;
613 }
614 if (rd_len <= dev->in_fifo_sz) {
615 writel_relaxed(wr_mode | QUP_PACK_EN | QUP_UNPACK_EN,
616 dev->base + QUP_IO_MODE);
617 writel_relaxed(rd_len, dev->base + QUP_MX_READ_CNT);
618 } else {
619 writel_relaxed(wr_mode | QUP_RD_BLK_MODE |
620 QUP_PACK_EN | QUP_UNPACK_EN, dev->base + QUP_IO_MODE);
621 writel_relaxed(rd_len, dev->base + QUP_MX_INPUT_CNT);
622 }
623}
624
625static int
626qup_set_wr_mode(struct qup_i2c_dev *dev, int rem)
627{
628 int total_len = 0;
629 int ret = 0;
Kenneth Heitke6a852e92011-10-20 17:56:03 -0600630 int len = dev->msg->len;
631 struct i2c_msg *next = NULL;
632 if (rem > 1)
633 next = dev->msg + 1;
Harini Jayaramanbe7e45d2011-11-02 12:12:03 -0600634 while (rem > 1 && next->flags == 0 && (next->addr == dev->msg->addr)) {
Kenneth Heitke6a852e92011-10-20 17:56:03 -0600635 len += next->len + 1;
636 next = next + 1;
637 rem--;
638 }
639 if (len >= (dev->out_fifo_sz - 1)) {
640 total_len = len + 1 + (len/(dev->out_blk_sz-1));
641
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700642 writel_relaxed(QUP_WR_BLK_MODE | QUP_PACK_EN | QUP_UNPACK_EN,
643 dev->base + QUP_IO_MODE);
644 dev->wr_sz = dev->out_blk_sz;
645 } else
646 writel_relaxed(QUP_PACK_EN | QUP_UNPACK_EN,
647 dev->base + QUP_IO_MODE);
648
649 if (rem > 1) {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700650 if (next->addr == dev->msg->addr &&
651 next->flags == I2C_M_RD) {
652 qup_set_read_mode(dev, next->len);
653 /* make sure read start & read command are in 1 blk */
654 if ((total_len % dev->out_blk_sz) ==
655 (dev->out_blk_sz - 1))
656 total_len += 3;
657 else
658 total_len += 2;
659 }
660 }
661 /* WRITE COUNT register valid/used only in block mode */
662 if (dev->wr_sz == dev->out_blk_sz)
663 writel_relaxed(total_len, dev->base + QUP_MX_WR_CNT);
664 return ret;
665}
666
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -0700667
668static void qup_i2c_recover_bus_busy(struct qup_i2c_dev *dev)
669{
670 int i;
671 int gpio_clk;
672 int gpio_dat;
673 bool gpio_clk_status = false;
674 uint32_t status = readl_relaxed(dev->base + QUP_I2C_STATUS);
675 struct gpiomux_setting old_gpio_setting;
676
677 if (dev->pdata->msm_i2c_config_gpio)
678 return;
679
680 if (!(status & (I2C_STATUS_BUS_ACTIVE)) ||
681 (status & (I2C_STATUS_BUS_MASTER)))
682 return;
683
684 gpio_clk = dev->i2c_gpios[0];
685 gpio_dat = dev->i2c_gpios[1];
686
687 if ((gpio_clk == -1) && (gpio_dat == -1)) {
688 dev_err(dev->dev, "Recovery failed due to undefined GPIO's\n");
689 return;
690 }
691
692 disable_irq(dev->err_irq);
693 for (i = 0; i < ARRAY_SIZE(i2c_rsrcs); ++i) {
694 if (msm_gpiomux_write(dev->i2c_gpios[i], GPIOMUX_ACTIVE,
695 &recovery_config, &old_gpio_setting)) {
696 dev_err(dev->dev, "GPIO pins have no active setting\n");
697 goto recovery_end;
698 }
699 }
700
701 dev_warn(dev->dev, "i2c_scl: %d, i2c_sda: %d\n",
702 gpio_get_value(gpio_clk), gpio_get_value(gpio_dat));
703
704 for (i = 0; i < 9; i++) {
705 if (gpio_get_value(gpio_dat) && gpio_clk_status)
706 break;
707 gpio_direction_output(gpio_clk, 0);
708 udelay(5);
709 gpio_direction_output(gpio_dat, 0);
710 udelay(5);
711 gpio_direction_input(gpio_clk);
712 udelay(5);
713 if (!gpio_get_value(gpio_clk))
714 udelay(20);
715 if (!gpio_get_value(gpio_clk))
716 usleep_range(10000, 10000);
717 gpio_clk_status = gpio_get_value(gpio_clk);
718 gpio_direction_input(gpio_dat);
719 udelay(5);
720 }
721
722 /* Configure ALT funciton to QUP I2C*/
723 for (i = 0; i < ARRAY_SIZE(i2c_rsrcs); ++i) {
724 msm_gpiomux_write(dev->i2c_gpios[i], GPIOMUX_ACTIVE,
725 &old_gpio_setting, NULL);
726 }
727
728 udelay(10);
729
730 status = readl_relaxed(dev->base + QUP_I2C_STATUS);
731 if (!(status & I2C_STATUS_BUS_ACTIVE)) {
732 dev_info(dev->dev, "Bus busy cleared after %d clock cycles, "
733 "status %x\n",
734 i, status);
735 goto recovery_end;
736 }
737
738 dev_warn(dev->dev, "Bus still busy, status %x\n", status);
739
740recovery_end:
741 enable_irq(dev->err_irq);
742}
743
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700744static int
745qup_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
746{
747 DECLARE_COMPLETION_ONSTACK(complete);
748 struct qup_i2c_dev *dev = i2c_get_adapdata(adap);
749 int ret;
750 int rem = num;
751 long timeout;
752 int err;
753
754 del_timer_sync(&dev->pwr_timer);
755 mutex_lock(&dev->mlock);
756
757 if (dev->suspended) {
758 mutex_unlock(&dev->mlock);
759 return -EIO;
760 }
761
762 if (dev->clk_state == 0) {
763 if (dev->clk_ctl == 0) {
764 if (dev->pdata->src_clk_rate > 0)
765 clk_set_rate(dev->clk,
766 dev->pdata->src_clk_rate);
767 else
768 dev->pdata->src_clk_rate = 19200000;
769 }
770 qup_i2c_pwr_mgmt(dev, 1);
771 }
772 /* Initialize QUP registers during first transfer */
773 if (dev->clk_ctl == 0) {
774 int fs_div;
775 int hs_div;
776 uint32_t fifo_reg;
777
778 if (dev->gsbi) {
779 writel_relaxed(0x2 << 4, dev->gsbi);
780 /* GSBI memory is not in the same 1K region as other
781 * QUP registers. mb() here ensures that the GSBI
782 * register is updated in correct order and that the
783 * write has gone through before programming QUP core
784 * registers
785 */
786 mb();
787 }
788
789 fs_div = ((dev->pdata->src_clk_rate
790 / dev->pdata->clk_freq) / 2) - 3;
791 hs_div = 3;
792 dev->clk_ctl = ((hs_div & 0x7) << 8) | (fs_div & 0xff);
793 fifo_reg = readl_relaxed(dev->base + QUP_IO_MODE);
794 if (fifo_reg & 0x3)
795 dev->out_blk_sz = (fifo_reg & 0x3) * 16;
796 else
797 dev->out_blk_sz = 16;
798 if (fifo_reg & 0x60)
799 dev->in_blk_sz = ((fifo_reg & 0x60) >> 5) * 16;
800 else
801 dev->in_blk_sz = 16;
802 /*
803 * The block/fifo size w.r.t. 'actual data' is 1/2 due to 'tag'
804 * associated with each byte written/received
805 */
806 dev->out_blk_sz /= 2;
807 dev->in_blk_sz /= 2;
808 dev->out_fifo_sz = dev->out_blk_sz *
809 (2 << ((fifo_reg & 0x1C) >> 2));
810 dev->in_fifo_sz = dev->in_blk_sz *
811 (2 << ((fifo_reg & 0x380) >> 7));
812 dev_dbg(dev->dev, "QUP IN:bl:%d, ff:%d, OUT:bl:%d, ff:%d\n",
813 dev->in_blk_sz, dev->in_fifo_sz,
814 dev->out_blk_sz, dev->out_fifo_sz);
815 }
816
817 writel_relaxed(1, dev->base + QUP_SW_RESET);
Sagar Dharia518e2302011-08-05 11:03:03 -0600818 ret = qup_i2c_poll_state(dev, QUP_RESET_STATE, false);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700819 if (ret) {
820 dev_err(dev->dev, "QUP Busy:Trying to recover\n");
821 goto out_err;
822 }
823
824 if (dev->num_irqs == 3) {
825 enable_irq(dev->in_irq);
826 enable_irq(dev->out_irq);
827 }
828 enable_irq(dev->err_irq);
829
830 /* Initialize QUP registers */
831 writel_relaxed(0, dev->base + QUP_CONFIG);
832 writel_relaxed(QUP_OPERATIONAL_RESET, dev->base + QUP_OPERATIONAL);
833 writel_relaxed(QUP_STATUS_ERROR_FLAGS, dev->base + QUP_ERROR_FLAGS_EN);
834
835 writel_relaxed(I2C_MINI_CORE | I2C_N_VAL, dev->base + QUP_CONFIG);
836
837 /* Initialize I2C mini core registers */
838 writel_relaxed(0, dev->base + QUP_I2C_CLK_CTL);
839 writel_relaxed(QUP_I2C_STATUS_RESET, dev->base + QUP_I2C_STATUS);
840
841 while (rem) {
842 bool filled = false;
843
844 dev->cnt = msgs->len - dev->pos;
845 dev->msg = msgs;
846
847 dev->wr_sz = dev->out_fifo_sz;
848 dev->err = 0;
849 dev->complete = &complete;
850
Sagar Dharia518e2302011-08-05 11:03:03 -0600851 if (qup_i2c_poll_state(dev, QUP_I2C_MAST_GEN, false) != 0) {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700852 ret = -EIO;
853 goto out_err;
854 }
855
856 qup_print_status(dev);
857 /* HW limits Read upto 256 bytes in 1 read without stop */
858 if (dev->msg->flags & I2C_M_RD) {
859 qup_set_read_mode(dev, dev->cnt);
860 if (dev->cnt > 256)
861 dev->cnt = 256;
862 } else {
863 ret = qup_set_wr_mode(dev, rem);
864 if (ret != 0)
865 goto out_err;
866 /* Don't fill block till we get interrupt */
867 if (dev->wr_sz == dev->out_blk_sz)
868 filled = true;
869 }
870
871 err = qup_update_state(dev, QUP_RUN_STATE);
872 if (err < 0) {
873 ret = err;
874 goto out_err;
875 }
876
877 qup_print_status(dev);
878 writel_relaxed(dev->clk_ctl, dev->base + QUP_I2C_CLK_CTL);
879 /* CLK_CTL register is not in the same 1K region as other QUP
880 * registers. Ensure that clock control is written before
881 * programming other QUP registers
882 */
883 mb();
884
885 do {
886 int idx = 0;
887 uint32_t carry_over = 0;
888
889 /* Transition to PAUSE state only possible from RUN */
890 err = qup_update_state(dev, QUP_PAUSE_STATE);
891 if (err < 0) {
892 ret = err;
893 goto out_err;
894 }
895
896 qup_print_status(dev);
897 /* This operation is Write, check the next operation
898 * and decide mode
899 */
900 while (filled == false) {
901 if ((msgs->flags & I2C_M_RD))
902 qup_issue_read(dev, msgs, &idx,
903 carry_over);
904 else if (!(msgs->flags & I2C_M_RD))
905 qup_issue_write(dev, msgs, rem, &idx,
906 &carry_over);
907 if (idx >= (dev->wr_sz << 1))
908 filled = true;
909 /* Start new message */
910 if (filled == false) {
911 if (msgs->flags & I2C_M_RD)
912 filled = true;
913 else if (rem > 1) {
914 /* Only combine operations with
915 * same address
916 */
917 struct i2c_msg *next = msgs + 1;
918 if (next->addr != msgs->addr)
919 filled = true;
920 else {
921 rem--;
922 msgs++;
923 dev->msg = msgs;
924 dev->pos = 0;
925 dev->cnt = msgs->len;
926 if (msgs->len > 256)
927 dev->cnt = 256;
928 }
929 } else
930 filled = true;
931 }
932 }
933 err = qup_update_state(dev, QUP_RUN_STATE);
934 if (err < 0) {
935 ret = err;
936 goto out_err;
937 }
938 dev_dbg(dev->dev, "idx:%d, rem:%d, num:%d, mode:%d\n",
939 idx, rem, num, dev->mode);
940
941 qup_print_status(dev);
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -0700942 timeout = wait_for_completion_timeout(&complete,
943 msecs_to_jiffies(dev->out_fifo_sz));
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700944 if (!timeout) {
945 uint32_t istatus = readl_relaxed(dev->base +
946 QUP_I2C_STATUS);
947 uint32_t qstatus = readl_relaxed(dev->base +
948 QUP_ERROR_FLAGS);
949 uint32_t op_flgs = readl_relaxed(dev->base +
950 QUP_OPERATIONAL);
951
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -0700952 /*
953 * Dont wait for 1 sec if i2c sees the bus
954 * active and controller is not master.
955 * A slave has pulled line low. Try to recover
956 */
957 if (!(istatus & I2C_STATUS_BUS_ACTIVE) ||
958 (istatus & I2C_STATUS_BUS_MASTER)) {
959 timeout =
960 wait_for_completion_timeout(&complete,
961 HZ);
962 if (timeout)
963 goto timeout_err;
964 }
965 qup_i2c_recover_bus_busy(dev);
966 dev_err(dev->dev,
967 "Transaction timed out, SL-AD = 0x%x\n",
968 dev->msg->addr);
969
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700970 dev_err(dev->dev, "I2C Status: %x\n", istatus);
971 dev_err(dev->dev, "QUP Status: %x\n", qstatus);
972 dev_err(dev->dev, "OP Flags: %x\n", op_flgs);
973 writel_relaxed(1, dev->base + QUP_SW_RESET);
974 /* Make sure that the write has gone through
975 * before returning from the function
976 */
977 mb();
978 ret = -ETIMEDOUT;
979 goto out_err;
980 }
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -0700981timeout_err:
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700982 if (dev->err) {
983 if (dev->err > 0 &&
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -0700984 dev->err & QUP_I2C_NACK_FLAG) {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700985 dev_err(dev->dev,
986 "I2C slave addr:0x%x not connected\n",
987 dev->msg->addr);
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -0700988 dev->err = ENOTCONN;
989 } else if (dev->err < 0) {
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700990 dev_err(dev->dev,
991 "QUP data xfer error %d\n", dev->err);
992 ret = dev->err;
993 goto out_err;
Harini Jayaraman17f8e0e2011-12-01 18:01:43 -0700994 } else if (dev->err > 0) {
995 /*
996 * ISR returns +ve error if error code
997 * is I2C related, e.g. unexpected start
998 * So you may call recover-bus-busy when
999 * this error happens
1000 */
1001 qup_i2c_recover_bus_busy(dev);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001002 }
1003 ret = -dev->err;
1004 goto out_err;
1005 }
1006 if (dev->msg->flags & I2C_M_RD) {
1007 int i;
1008 uint32_t dval = 0;
1009 for (i = 0; dev->pos < dev->msg->len; i++,
1010 dev->pos++) {
1011 uint32_t rd_status =
1012 readl_relaxed(dev->base
1013 + QUP_OPERATIONAL);
1014 if (i % 2 == 0) {
1015 if ((rd_status &
1016 QUP_IN_NOT_EMPTY) == 0)
1017 break;
1018 dval = readl_relaxed(dev->base +
1019 QUP_IN_FIFO_BASE);
1020 dev->msg->buf[dev->pos] =
1021 dval & 0xFF;
1022 } else
1023 dev->msg->buf[dev->pos] =
1024 ((dval & 0xFF0000) >>
1025 16);
1026 }
1027 dev->cnt -= i;
1028 } else
1029 filled = false; /* refill output FIFO */
1030 dev_dbg(dev->dev, "pos:%d, len:%d, cnt:%d\n",
1031 dev->pos, msgs->len, dev->cnt);
1032 } while (dev->cnt > 0);
1033 if (dev->cnt == 0) {
1034 if (msgs->len == dev->pos) {
1035 rem--;
1036 msgs++;
1037 dev->pos = 0;
1038 }
1039 if (rem) {
1040 err = qup_i2c_poll_clock_ready(dev);
1041 if (err < 0) {
1042 ret = err;
1043 goto out_err;
1044 }
1045 err = qup_update_state(dev, QUP_RESET_STATE);
1046 if (err < 0) {
1047 ret = err;
1048 goto out_err;
1049 }
1050 }
1051 }
1052 /* Wait for I2C bus to be idle */
1053 ret = qup_i2c_poll_writeready(dev, rem);
1054 if (ret) {
1055 dev_err(dev->dev,
1056 "Error waiting for write ready\n");
1057 goto out_err;
1058 }
1059 }
1060
1061 ret = num;
1062 out_err:
1063 disable_irq(dev->err_irq);
1064 if (dev->num_irqs == 3) {
1065 disable_irq(dev->in_irq);
1066 disable_irq(dev->out_irq);
1067 }
1068 dev->complete = NULL;
1069 dev->msg = NULL;
1070 dev->pos = 0;
1071 dev->err = 0;
1072 dev->cnt = 0;
1073 dev->pwr_timer.expires = jiffies + 3*HZ;
1074 add_timer(&dev->pwr_timer);
1075 mutex_unlock(&dev->mlock);
1076 return ret;
1077}
1078
1079static u32
1080qup_i2c_func(struct i2c_adapter *adap)
1081{
1082 return I2C_FUNC_I2C | (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK);
1083}
1084
1085static const struct i2c_algorithm qup_i2c_algo = {
1086 .master_xfer = qup_i2c_xfer,
1087 .functionality = qup_i2c_func,
1088};
1089
1090static int __devinit
1091qup_i2c_probe(struct platform_device *pdev)
1092{
1093 struct qup_i2c_dev *dev;
1094 struct resource *qup_mem, *gsbi_mem, *qup_io, *gsbi_io, *res;
1095 struct resource *in_irq, *out_irq, *err_irq;
1096 struct clk *clk, *pclk;
1097 int ret = 0;
1098 int i;
1099 struct msm_i2c_platform_data *pdata;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001100
1101 gsbi_mem = NULL;
1102 dev_dbg(&pdev->dev, "qup_i2c_probe\n");
1103
1104 pdata = pdev->dev.platform_data;
1105 if (!pdata) {
1106 dev_err(&pdev->dev, "platform data not initialized\n");
1107 return -ENOSYS;
1108 }
1109 qup_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,
1110 "qup_phys_addr");
1111 if (!qup_mem) {
1112 dev_err(&pdev->dev, "no qup mem resource?\n");
1113 return -ENODEV;
1114 }
1115
1116 /*
1117 * We only have 1 interrupt for new hardware targets and in_irq,
1118 * out_irq will be NULL for those platforms
1119 */
1120 in_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ,
1121 "qup_in_intr");
1122
1123 out_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ,
1124 "qup_out_intr");
1125
1126 err_irq = platform_get_resource_byname(pdev, IORESOURCE_IRQ,
1127 "qup_err_intr");
1128 if (!err_irq) {
1129 dev_err(&pdev->dev, "no error irq resource?\n");
1130 return -ENODEV;
1131 }
1132
1133 qup_io = request_mem_region(qup_mem->start, resource_size(qup_mem),
1134 pdev->name);
1135 if (!qup_io) {
1136 dev_err(&pdev->dev, "QUP region already claimed\n");
1137 return -EBUSY;
1138 }
1139 if (!pdata->use_gsbi_shared_mode) {
1140 gsbi_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,
1141 "gsbi_qup_i2c_addr");
1142 if (!gsbi_mem) {
1143 dev_err(&pdev->dev, "no gsbi mem resource?\n");
Harini Jayaramanee31ae92011-09-20 18:32:34 -06001144 ret = -ENODEV;
1145 goto err_res_failed;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001146 }
1147 gsbi_io = request_mem_region(gsbi_mem->start,
1148 resource_size(gsbi_mem),
1149 pdev->name);
1150 if (!gsbi_io) {
1151 dev_err(&pdev->dev, "GSBI region already claimed\n");
Harini Jayaramanee31ae92011-09-20 18:32:34 -06001152 ret = -EBUSY;
1153 goto err_res_failed;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001154 }
1155 }
1156
Matt Wagantallac294852011-08-17 15:44:58 -07001157 clk = clk_get(&pdev->dev, "core_clk");
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001158 if (IS_ERR(clk)) {
Matt Wagantallac294852011-08-17 15:44:58 -07001159 dev_err(&pdev->dev, "Could not get core_clk\n");
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001160 ret = PTR_ERR(clk);
1161 goto err_clk_get_failed;
1162 }
1163
Matt Wagantallac294852011-08-17 15:44:58 -07001164 pclk = clk_get(&pdev->dev, "iface_clk");
1165 if (IS_ERR(pclk)) {
1166 dev_err(&pdev->dev, "Could not get iface_clk\n");
1167 ret = PTR_ERR(pclk);
1168 clk_put(clk);
1169 goto err_clk_get_failed;
1170 }
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001171
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001172 /* We support frequencies upto FAST Mode(400KHz) */
1173 if (pdata->clk_freq <= 0 ||
1174 pdata->clk_freq > 400000) {
1175 dev_err(&pdev->dev, "clock frequency not supported\n");
1176 ret = -EIO;
1177 goto err_config_failed;
1178 }
1179
1180 dev = kzalloc(sizeof(struct qup_i2c_dev), GFP_KERNEL);
1181 if (!dev) {
1182 ret = -ENOMEM;
1183 goto err_alloc_dev_failed;
1184 }
1185
1186 dev->dev = &pdev->dev;
1187 if (in_irq)
1188 dev->in_irq = in_irq->start;
1189 if (out_irq)
1190 dev->out_irq = out_irq->start;
1191 dev->err_irq = err_irq->start;
1192 if (in_irq && out_irq)
1193 dev->num_irqs = 3;
1194 else
1195 dev->num_irqs = 1;
1196 dev->clk = clk;
1197 dev->pclk = pclk;
1198 dev->base = ioremap(qup_mem->start, resource_size(qup_mem));
1199 if (!dev->base) {
1200 ret = -ENOMEM;
1201 goto err_ioremap_failed;
1202 }
1203
1204 /* Configure GSBI block to use I2C functionality */
1205 if (gsbi_mem) {
1206 dev->gsbi = ioremap(gsbi_mem->start, resource_size(gsbi_mem));
1207 if (!dev->gsbi) {
1208 ret = -ENOMEM;
1209 goto err_gsbi_failed;
1210 }
1211 }
1212
1213 for (i = 0; i < ARRAY_SIZE(i2c_rsrcs); ++i) {
1214 res = platform_get_resource_byname(pdev, IORESOURCE_IO,
1215 i2c_rsrcs[i]);
1216 dev->i2c_gpios[i] = res ? res->start : -1;
1217 }
1218
1219 ret = qup_i2c_request_gpios(dev);
1220 if (ret)
1221 goto err_request_gpio_failed;
1222
1223 platform_set_drvdata(pdev, dev);
1224
Harini Jayaramand997b3b2011-10-11 14:25:29 -06001225 dev->one_bit_t = (USEC_PER_SEC/pdata->clk_freq) + 1;
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001226 dev->pdata = pdata;
1227 dev->clk_ctl = 0;
1228 dev->pos = 0;
1229
1230 /*
1231 * We use num_irqs to also indicate if we got 3 interrupts or just 1.
1232 * If we have just 1, we use err_irq as the general purpose irq
1233 * and handle the changes in ISR accordingly
1234 * Per Hardware guidelines, if we have 3 interrupts, they are always
1235 * edge triggering, and if we have 1, it's always level-triggering
1236 */
1237 if (dev->num_irqs == 3) {
1238 ret = request_irq(dev->in_irq, qup_i2c_interrupt,
1239 IRQF_TRIGGER_RISING, "qup_in_intr", dev);
1240 if (ret) {
1241 dev_err(&pdev->dev, "request_in_irq failed\n");
1242 goto err_request_irq_failed;
1243 }
1244 /*
1245 * We assume out_irq exists if in_irq does since platform
1246 * configuration either has 3 interrupts assigned to QUP or 1
1247 */
1248 ret = request_irq(dev->out_irq, qup_i2c_interrupt,
1249 IRQF_TRIGGER_RISING, "qup_out_intr", dev);
1250 if (ret) {
1251 dev_err(&pdev->dev, "request_out_irq failed\n");
1252 free_irq(dev->in_irq, dev);
1253 goto err_request_irq_failed;
1254 }
1255 ret = request_irq(dev->err_irq, qup_i2c_interrupt,
1256 IRQF_TRIGGER_RISING, "qup_err_intr", dev);
1257 if (ret) {
1258 dev_err(&pdev->dev, "request_err_irq failed\n");
1259 free_irq(dev->out_irq, dev);
1260 free_irq(dev->in_irq, dev);
1261 goto err_request_irq_failed;
1262 }
1263 } else {
1264 ret = request_irq(dev->err_irq, qup_i2c_interrupt,
1265 IRQF_TRIGGER_HIGH, "qup_err_intr", dev);
1266 if (ret) {
1267 dev_err(&pdev->dev, "request_err_irq failed\n");
1268 goto err_request_irq_failed;
1269 }
1270 }
1271 disable_irq(dev->err_irq);
1272 if (dev->num_irqs == 3) {
1273 disable_irq(dev->in_irq);
1274 disable_irq(dev->out_irq);
1275 }
1276 i2c_set_adapdata(&dev->adapter, dev);
1277 dev->adapter.algo = &qup_i2c_algo;
1278 strlcpy(dev->adapter.name,
1279 "QUP I2C adapter",
1280 sizeof(dev->adapter.name));
1281 dev->adapter.nr = pdev->id;
Harini Jayaramance67cf82011-08-05 09:26:06 -06001282 if (pdata->msm_i2c_config_gpio)
1283 pdata->msm_i2c_config_gpio(dev->adapter.nr, 1);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001284
1285 dev->suspended = 0;
1286 mutex_init(&dev->mlock);
1287 dev->clk_state = 0;
Sagar Dharia75a57192012-02-12 20:47:32 -07001288 clk_prepare(dev->clk);
1289 clk_prepare(dev->pclk);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001290 setup_timer(&dev->pwr_timer, qup_i2c_pwr_timer, (unsigned long) dev);
1291
1292 pm_runtime_set_active(&pdev->dev);
1293 pm_runtime_enable(&pdev->dev);
1294
1295 ret = i2c_add_numbered_adapter(&dev->adapter);
1296 if (ret) {
1297 dev_err(&pdev->dev, "i2c_add_adapter failed\n");
1298 if (dev->num_irqs == 3) {
1299 free_irq(dev->out_irq, dev);
1300 free_irq(dev->in_irq, dev);
1301 }
1302 free_irq(dev->err_irq, dev);
1303 } else
1304 return 0;
1305
1306
1307err_request_irq_failed:
1308 qup_i2c_free_gpios(dev);
1309 if (dev->gsbi)
1310 iounmap(dev->gsbi);
1311err_request_gpio_failed:
1312err_gsbi_failed:
1313 iounmap(dev->base);
1314err_ioremap_failed:
1315 kfree(dev);
1316err_alloc_dev_failed:
1317err_config_failed:
1318 clk_put(clk);
Matt Wagantallac294852011-08-17 15:44:58 -07001319 clk_put(pclk);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001320err_clk_get_failed:
1321 if (gsbi_mem)
1322 release_mem_region(gsbi_mem->start, resource_size(gsbi_mem));
Harini Jayaramanee31ae92011-09-20 18:32:34 -06001323err_res_failed:
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001324 release_mem_region(qup_mem->start, resource_size(qup_mem));
1325 return ret;
1326}
1327
1328static int __devexit
1329qup_i2c_remove(struct platform_device *pdev)
1330{
1331 struct qup_i2c_dev *dev = platform_get_drvdata(pdev);
1332 struct resource *qup_mem, *gsbi_mem;
1333
1334 /* Grab mutex to ensure ongoing transaction is over */
1335 mutex_lock(&dev->mlock);
1336 dev->suspended = 1;
1337 mutex_unlock(&dev->mlock);
1338 mutex_destroy(&dev->mlock);
1339 del_timer_sync(&dev->pwr_timer);
1340 if (dev->clk_state != 0)
1341 qup_i2c_pwr_mgmt(dev, 0);
1342 platform_set_drvdata(pdev, NULL);
1343 if (dev->num_irqs == 3) {
1344 free_irq(dev->out_irq, dev);
1345 free_irq(dev->in_irq, dev);
1346 }
1347 free_irq(dev->err_irq, dev);
1348 i2c_del_adapter(&dev->adapter);
Sagar Dharia75a57192012-02-12 20:47:32 -07001349 clk_unprepare(dev->clk);
1350 clk_unprepare(dev->pclk);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001351 clk_put(dev->clk);
Matt Wagantallac294852011-08-17 15:44:58 -07001352 clk_put(dev->pclk);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001353 qup_i2c_free_gpios(dev);
1354 if (dev->gsbi)
1355 iounmap(dev->gsbi);
1356 iounmap(dev->base);
1357
1358 pm_runtime_disable(&pdev->dev);
1359
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001360 if (!(dev->pdata->use_gsbi_shared_mode)) {
1361 gsbi_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,
1362 "gsbi_qup_i2c_addr");
1363 release_mem_region(gsbi_mem->start, resource_size(gsbi_mem));
1364 }
1365 qup_mem = platform_get_resource_byname(pdev, IORESOURCE_MEM,
1366 "qup_phys_addr");
1367 release_mem_region(qup_mem->start, resource_size(qup_mem));
Harini Jayaramanee31ae92011-09-20 18:32:34 -06001368 kfree(dev);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001369 return 0;
1370}
1371
1372#ifdef CONFIG_PM
1373static int qup_i2c_suspend(struct device *device)
1374{
1375 struct platform_device *pdev = to_platform_device(device);
1376 struct qup_i2c_dev *dev = platform_get_drvdata(pdev);
1377
1378 /* Grab mutex to ensure ongoing transaction is over */
1379 mutex_lock(&dev->mlock);
1380 dev->suspended = 1;
1381 mutex_unlock(&dev->mlock);
1382 del_timer_sync(&dev->pwr_timer);
1383 if (dev->clk_state != 0)
1384 qup_i2c_pwr_mgmt(dev, 0);
Sagar Dharia75a57192012-02-12 20:47:32 -07001385 clk_unprepare(dev->clk);
1386 clk_unprepare(dev->pclk);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001387 qup_i2c_free_gpios(dev);
1388 return 0;
1389}
1390
1391static int qup_i2c_resume(struct device *device)
1392{
1393 struct platform_device *pdev = to_platform_device(device);
1394 struct qup_i2c_dev *dev = platform_get_drvdata(pdev);
1395 BUG_ON(qup_i2c_request_gpios(dev) != 0);
Sagar Dharia75a57192012-02-12 20:47:32 -07001396 clk_prepare(dev->clk);
1397 clk_prepare(dev->pclk);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001398 dev->suspended = 0;
1399 return 0;
1400}
1401#endif /* CONFIG_PM */
1402
1403#ifdef CONFIG_PM_RUNTIME
1404static int i2c_qup_runtime_idle(struct device *dev)
1405{
1406 dev_dbg(dev, "pm_runtime: idle...\n");
1407 return 0;
1408}
1409
1410static int i2c_qup_runtime_suspend(struct device *dev)
1411{
1412 dev_dbg(dev, "pm_runtime: suspending...\n");
1413 return 0;
1414}
1415
1416static int i2c_qup_runtime_resume(struct device *dev)
1417{
1418 dev_dbg(dev, "pm_runtime: resuming...\n");
1419 return 0;
1420}
1421#endif
1422
1423static const struct dev_pm_ops i2c_qup_dev_pm_ops = {
1424 SET_SYSTEM_SLEEP_PM_OPS(
1425 qup_i2c_suspend,
1426 qup_i2c_resume
1427 )
1428 SET_RUNTIME_PM_OPS(
1429 i2c_qup_runtime_suspend,
1430 i2c_qup_runtime_resume,
1431 i2c_qup_runtime_idle
1432 )
1433};
1434
1435static struct platform_driver qup_i2c_driver = {
1436 .probe = qup_i2c_probe,
1437 .remove = __devexit_p(qup_i2c_remove),
1438 .driver = {
1439 .name = "qup_i2c",
1440 .owner = THIS_MODULE,
1441 .pm = &i2c_qup_dev_pm_ops,
1442 },
1443};
1444
1445/* QUP may be needed to bring up other drivers */
1446static int __init
1447qup_i2c_init_driver(void)
1448{
1449 return platform_driver_register(&qup_i2c_driver);
1450}
1451arch_initcall(qup_i2c_init_driver);
1452
1453static void __exit qup_i2c_exit_driver(void)
1454{
1455 platform_driver_unregister(&qup_i2c_driver);
1456}
1457module_exit(qup_i2c_exit_driver);
1458