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