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