blob: ab7c7ee56daf39625ce8d40e3a86f8e4268babdf [file] [log] [blame]
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001/* drivers/i2c/busses/i2c-msm.c
2 *
3 * Copyright (C) 2007 Google, Inc.
4 * Copyright (c) 2009, Code Aurora Forum. All rights reserved.
5 *
6 * This software is licensed under the terms of the GNU General Public
7 * License version 2, as published by the Free Software Foundation, and
8 * may be copied, distributed, and modified under those terms.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 */
16
17/* #define DEBUG */
18
19#include <linux/slab.h>
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/irq.h>
26#include <linux/platform_device.h>
27#include <linux/delay.h>
28#include <linux/io.h>
29#include <mach/board.h>
30#include <linux/mutex.h>
31#include <linux/timer.h>
32#include <linux/remote_spinlock.h>
33#include <linux/pm_qos_params.h>
34#include <mach/gpio.h>
35
36
37enum {
38 I2C_WRITE_DATA = 0x00,
39 I2C_CLK_CTL = 0x04,
40 I2C_STATUS = 0x08,
41 I2C_READ_DATA = 0x0c,
42 I2C_INTERFACE_SELECT = 0x10,
43
44 I2C_WRITE_DATA_DATA_BYTE = 0xff,
45 I2C_WRITE_DATA_ADDR_BYTE = 1U << 8,
46 I2C_WRITE_DATA_LAST_BYTE = 1U << 9,
47
48 I2C_CLK_CTL_FS_DIVIDER_VALUE = 0xff,
49 I2C_CLK_CTL_HS_DIVIDER_VALUE = 7U << 8,
50
51 I2C_STATUS_WR_BUFFER_FULL = 1U << 0,
52 I2C_STATUS_RD_BUFFER_FULL = 1U << 1,
53 I2C_STATUS_BUS_ERROR = 1U << 2,
54 I2C_STATUS_PACKET_NACKED = 1U << 3,
55 I2C_STATUS_ARB_LOST = 1U << 4,
56 I2C_STATUS_INVALID_WRITE = 1U << 5,
57 I2C_STATUS_FAILED = 3U << 6,
58 I2C_STATUS_BUS_ACTIVE = 1U << 8,
59 I2C_STATUS_BUS_MASTER = 1U << 9,
60 I2C_STATUS_ERROR_MASK = 0xfc,
61
62 I2C_INTERFACE_SELECT_INTF_SELECT = 1U << 0,
63 I2C_INTERFACE_SELECT_SCL = 1U << 8,
64 I2C_INTERFACE_SELECT_SDA = 1U << 9,
65 I2C_STATUS_RX_DATA_STATE = 3U << 11,
66 I2C_STATUS_LOW_CLK_STATE = 3U << 13,
67};
68
69struct msm_i2c_dev {
70 struct device *dev;
71 void __iomem *base; /* virtual */
72 int irq;
73 struct clk *clk;
74 struct i2c_adapter adap_pri;
75 struct i2c_adapter adap_aux;
76
77 spinlock_t lock;
78
79 struct i2c_msg *msg;
80 int rem;
81 int pos;
82 int cnt;
83 int err;
84 int flush_cnt;
85 int rd_acked;
86 int one_bit_t;
87 remote_mutex_t r_lock;
88 int suspended;
89 struct mutex mlock;
90 struct msm_i2c_platform_data *pdata;
91 struct timer_list pwr_timer;
92 int clk_state;
93 void *complete;
94
95 struct pm_qos_request_list pm_qos_req;
96};
97
98static void
99msm_i2c_pwr_mgmt(struct msm_i2c_dev *dev, unsigned int state)
100{
101 dev->clk_state = state;
102 if (state != 0)
103 clk_enable(dev->clk);
104 else
105 clk_disable(dev->clk);
106}
107
108static void
109msm_i2c_pwr_timer(unsigned long data)
110{
111 struct msm_i2c_dev *dev = (struct msm_i2c_dev *) data;
112 dev_dbg(dev->dev, "I2C_Power: Inactivity based power management\n");
113 if (dev->clk_state == 1)
114 msm_i2c_pwr_mgmt(dev, 0);
115}
116
117#ifdef DEBUG
118static void
119dump_status(uint32_t status)
120{
121 printk("STATUS (0x%.8x): ", status);
122 if (status & I2C_STATUS_BUS_MASTER)
123 printk("MST ");
124 if (status & I2C_STATUS_BUS_ACTIVE)
125 printk("ACT ");
126 if (status & I2C_STATUS_INVALID_WRITE)
127 printk("INV_WR ");
128 if (status & I2C_STATUS_ARB_LOST)
129 printk("ARB_LST ");
130 if (status & I2C_STATUS_PACKET_NACKED)
131 printk("NAK ");
132 if (status & I2C_STATUS_BUS_ERROR)
133 printk("BUS_ERR ");
134 if (status & I2C_STATUS_RD_BUFFER_FULL)
135 printk("RD_FULL ");
136 if (status & I2C_STATUS_WR_BUFFER_FULL)
137 printk("WR_FULL ");
138 if (status & I2C_STATUS_FAILED)
139 printk("FAIL 0x%x", (status & I2C_STATUS_FAILED));
140 printk("\n");
141}
142#endif
143
144static irqreturn_t
145msm_i2c_interrupt(int irq, void *devid)
146{
147 struct msm_i2c_dev *dev = devid;
148 uint32_t status = readl(dev->base + I2C_STATUS);
149 int err = 0;
150
151#ifdef DEBUG
152 dump_status(status);
153#endif
154
155 spin_lock(&dev->lock);
156 if (!dev->msg) {
157 printk(KERN_ERR "%s: IRQ but nothing to do!\n", __func__);
158 spin_unlock(&dev->lock);
159 return IRQ_HANDLED;
160 }
161
162 if (status & I2C_STATUS_ERROR_MASK) {
163 err = -EIO;
164 goto out_err;
165 }
166
167 if (dev->msg->flags & I2C_M_RD) {
168 if (status & I2C_STATUS_RD_BUFFER_FULL) {
169
170 /*
171 * Theres something in the FIFO.
172 * Are we expecting data or flush crap?
173 */
174 if (dev->cnt) { /* DATA */
175 uint8_t *data = &dev->msg->buf[dev->pos];
176
177 /* This is in spin-lock. So there will be no
178 * scheduling between reading the second-last
179 * byte and writing LAST_BYTE to the controller.
180 * So extra read-cycle-clock won't be generated
181 * Per I2C MSM HW Specs: Write LAST_BYTE befure
182 * reading 2nd last byte
183 */
184 if (dev->cnt == 2)
185 writel(I2C_WRITE_DATA_LAST_BYTE,
186 dev->base + I2C_WRITE_DATA);
187 *data = readl(dev->base + I2C_READ_DATA);
188 dev->cnt--;
189 dev->pos++;
190 if (dev->msg->len == 1)
191 dev->rd_acked = 0;
192 if (dev->cnt == 0)
193 goto out_complete;
194
195 } else {
196 /* Now that extra read-cycle-clocks aren't
197 * generated, this becomes error condition
198 */
199 dev_err(dev->dev,
200 "read did not stop, status - %x\n",
201 status);
202 err = -EIO;
203 goto out_err;
204 }
205 } else if (dev->msg->len == 1 && dev->rd_acked == 0 &&
206 ((status & I2C_STATUS_RX_DATA_STATE) ==
207 I2C_STATUS_RX_DATA_STATE))
208 writel(I2C_WRITE_DATA_LAST_BYTE,
209 dev->base + I2C_WRITE_DATA);
210 } else {
211 uint16_t data;
212
213 if (status & I2C_STATUS_WR_BUFFER_FULL) {
214 dev_err(dev->dev,
215 "Write buffer full in ISR on write?\n");
216 err = -EIO;
217 goto out_err;
218 }
219
220 if (dev->cnt) {
221 /* Ready to take a byte */
222 data = dev->msg->buf[dev->pos];
223 if (dev->cnt == 1 && dev->rem == 1)
224 data |= I2C_WRITE_DATA_LAST_BYTE;
225
226 status = readl(dev->base + I2C_STATUS);
227 /*
228 * Due to a hardware timing issue, data line setup time
229 * may be reduced to less than recommended 250 ns.
230 * This happens when next byte is written in a
231 * particular window of clock line being low and master
232 * not stretching the clock line. Due to setup time
233 * violation, some slaves may miss first-bit of data, or
234 * misinterprete data as start condition.
235 * We introduce delay of just over 1/2 clock cycle to
236 * ensure master stretches the clock line thereby
237 * avoiding setup time violation. Delay is introduced
238 * only if I2C clock FSM is LOW. The delay is not needed
239 * if I2C clock FSM is HIGH or FORCED_LOW.
240 */
241 if ((status & I2C_STATUS_LOW_CLK_STATE) ==
242 I2C_STATUS_LOW_CLK_STATE)
243 udelay((dev->one_bit_t >> 1) + 1);
244 writel(data, dev->base + I2C_WRITE_DATA);
245 dev->pos++;
246 dev->cnt--;
247 } else
248 goto out_complete;
249 }
250
251 spin_unlock(&dev->lock);
252 return IRQ_HANDLED;
253
254 out_err:
255 dev->err = err;
256 out_complete:
257 complete(dev->complete);
258 spin_unlock(&dev->lock);
259 return IRQ_HANDLED;
260}
261
262static int
263msm_i2c_poll_writeready(struct msm_i2c_dev *dev)
264{
265 uint32_t retries = 0;
266
267 while (retries != 2000) {
268 uint32_t status = readl(dev->base + I2C_STATUS);
269
270 if (!(status & I2C_STATUS_WR_BUFFER_FULL))
271 return 0;
272 if (retries++ > 1000)
273 usleep_range(100, 200);
274 }
275 return -ETIMEDOUT;
276}
277
278static int
279msm_i2c_poll_notbusy(struct msm_i2c_dev *dev)
280{
281 uint32_t retries = 0;
282
283 while (retries != 2000) {
284 uint32_t status = readl(dev->base + I2C_STATUS);
285
286 if (!(status & I2C_STATUS_BUS_ACTIVE))
287 return 0;
288 if (retries++ > 1000)
289 usleep_range(100, 200);
290 }
291 return -ETIMEDOUT;
292}
293
294static int
295msm_i2c_recover_bus_busy(struct msm_i2c_dev *dev, struct i2c_adapter *adap)
296{
297 int i;
298 int gpio_clk;
299 int gpio_dat;
300 uint32_t status = readl(dev->base + I2C_STATUS);
301 bool gpio_clk_status = false;
302
303 if (!(status & (I2C_STATUS_BUS_ACTIVE | I2C_STATUS_WR_BUFFER_FULL)))
304 return 0;
305
306 dev->pdata->msm_i2c_config_gpio(adap->nr, 0);
307 /* Even adapter is primary and Odd adapter is AUX */
308 if (adap->nr % 2) {
309 gpio_clk = dev->pdata->aux_clk;
310 gpio_dat = dev->pdata->aux_dat;
311 } else {
312 gpio_clk = dev->pdata->pri_clk;
313 gpio_dat = dev->pdata->pri_dat;
314 }
315
316 disable_irq(dev->irq);
317 if (status & I2C_STATUS_RD_BUFFER_FULL) {
318 dev_warn(dev->dev, "Read buffer full, status %x, intf %x\n",
319 status, readl(dev->base + I2C_INTERFACE_SELECT));
320 writel(I2C_WRITE_DATA_LAST_BYTE, dev->base + I2C_WRITE_DATA);
321 readl(dev->base + I2C_READ_DATA);
322 } else if (status & I2C_STATUS_BUS_MASTER) {
323 dev_warn(dev->dev, "Still the bus master, status %x, intf %x\n",
324 status, readl(dev->base + I2C_INTERFACE_SELECT));
325 writel(I2C_WRITE_DATA_LAST_BYTE | 0xff,
326 dev->base + I2C_WRITE_DATA);
327 }
328
329 for (i = 0; i < 9; i++) {
330 if (gpio_get_value(gpio_dat) && gpio_clk_status)
331 break;
332 gpio_direction_output(gpio_clk, 0);
333 udelay(5);
334 gpio_direction_output(gpio_dat, 0);
335 udelay(5);
336 gpio_direction_input(gpio_clk);
337 udelay(5);
338 if (!gpio_get_value(gpio_clk))
339 usleep_range(20, 30);
340 if (!gpio_get_value(gpio_clk))
341 msleep(10);
342 gpio_clk_status = gpio_get_value(gpio_clk);
343 gpio_direction_input(gpio_dat);
344 udelay(5);
345 }
346 dev->pdata->msm_i2c_config_gpio(adap->nr, 1);
347 udelay(10);
348
349 status = readl(dev->base + I2C_STATUS);
350 if (!(status & I2C_STATUS_BUS_ACTIVE)) {
351 dev_info(dev->dev, "Bus busy cleared after %d clock cycles, "
352 "status %x, intf %x\n",
353 i, status, readl(dev->base + I2C_INTERFACE_SELECT));
354 enable_irq(dev->irq);
355 return 0;
356 }
357
358 dev_err(dev->dev, "Bus still busy, status %x, intf %x\n",
359 status, readl(dev->base + I2C_INTERFACE_SELECT));
360 enable_irq(dev->irq);
361 return -EBUSY;
362}
363
364static int
365msm_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
366{
367 DECLARE_COMPLETION_ONSTACK(complete);
368 struct msm_i2c_dev *dev = i2c_get_adapdata(adap);
369 int ret;
370 int rem = num;
371 uint16_t addr;
372 long timeout;
373 unsigned long flags;
374 int check_busy = 1;
375
376 del_timer_sync(&dev->pwr_timer);
377 mutex_lock(&dev->mlock);
378 if (dev->suspended) {
379 mutex_unlock(&dev->mlock);
380 return -EIO;
381 }
382
383 if (dev->clk_state == 0) {
384 dev_dbg(dev->dev, "I2C_Power: Enable I2C clock(s)\n");
385 msm_i2c_pwr_mgmt(dev, 1);
386 }
387
388 /* Don't allow power collapse until we release remote spinlock */
389 pm_qos_update_request(&dev->pm_qos_req, dev->pdata->pm_lat);
390 if (dev->pdata->rmutex) {
391 remote_mutex_lock(&dev->r_lock);
392 /* If other processor did some transactions, we may have
393 * interrupt pending. Clear it
394 */
395 irq_get_chip(dev->irq)->irq_ack(irq_get_irq_data(dev->irq));
396 }
397
398 if (adap == &dev->adap_pri)
399 writel(0, dev->base + I2C_INTERFACE_SELECT);
400 else
401 writel(I2C_INTERFACE_SELECT_INTF_SELECT,
402 dev->base + I2C_INTERFACE_SELECT);
403 enable_irq(dev->irq);
404 while (rem) {
405 addr = msgs->addr << 1;
406 if (msgs->flags & I2C_M_RD)
407 addr |= 1;
408
409 spin_lock_irqsave(&dev->lock, flags);
410 dev->msg = msgs;
411 dev->rem = rem;
412 dev->pos = 0;
413 dev->err = 0;
414 dev->flush_cnt = 0;
415 dev->cnt = msgs->len;
416 dev->complete = &complete;
417 spin_unlock_irqrestore(&dev->lock, flags);
418
419 if (check_busy) {
420 ret = msm_i2c_poll_notbusy(dev);
421 if (ret)
422 ret = msm_i2c_recover_bus_busy(dev, adap);
423 if (ret) {
424 dev_err(dev->dev,
425 "Error waiting for notbusy\n");
426 goto out_err;
427 }
428 check_busy = 0;
429 }
430
431 if (rem == 1 && msgs->len == 0)
432 addr |= I2C_WRITE_DATA_LAST_BYTE;
433
434 /* Wait for WR buffer not full */
435 ret = msm_i2c_poll_writeready(dev);
436 if (ret) {
437 ret = msm_i2c_recover_bus_busy(dev, adap);
438 if (ret) {
439 dev_err(dev->dev,
440 "Error waiting for write ready before addr\n");
441 goto out_err;
442 }
443 }
444
445 /* special case for doing 1 byte read.
446 * There should be no scheduling between I2C controller becoming
447 * ready to read and writing LAST-BYTE to I2C controller
448 * This will avoid potential of I2C controller starting to latch
449 * another extra byte.
450 */
451 if ((msgs->len == 1) && (msgs->flags & I2C_M_RD)) {
452 uint32_t retries = 0;
453 spin_lock_irqsave(&dev->lock, flags);
454
455 writel(I2C_WRITE_DATA_ADDR_BYTE | addr,
456 dev->base + I2C_WRITE_DATA);
457
458 /* Poll for I2C controller going into RX_DATA mode to
459 * ensure controller goes into receive mode.
460 * Just checking write_buffer_full may not work since
461 * there is delay between the write-buffer becoming
462 * empty and the slave sending ACK to ensure I2C
463 * controller goes in receive mode to receive data.
464 */
465 while (retries != 2000) {
466 uint32_t status = readl(dev->base + I2C_STATUS);
467
468 if ((status & I2C_STATUS_RX_DATA_STATE)
469 == I2C_STATUS_RX_DATA_STATE)
470 break;
471 retries++;
472 }
473 if (retries >= 2000) {
474 dev->rd_acked = 0;
475 spin_unlock_irqrestore(&dev->lock, flags);
476 /* 1-byte-reads from slow devices in interrupt
477 * context
478 */
479 goto wait_for_int;
480 }
481
482 dev->rd_acked = 1;
483 writel(I2C_WRITE_DATA_LAST_BYTE,
484 dev->base + I2C_WRITE_DATA);
485 spin_unlock_irqrestore(&dev->lock, flags);
486 } else {
487 writel(I2C_WRITE_DATA_ADDR_BYTE | addr,
488 dev->base + I2C_WRITE_DATA);
489 }
490 /* Polling and waiting for write_buffer_empty is not necessary.
491 * Even worse, if we do, it can result in invalid status and
492 * error if interrupt(s) occur while polling.
493 */
494
495 /*
496 * Now that we've setup the xfer, the ISR will transfer the data
497 * and wake us up with dev->err set if there was an error
498 */
499wait_for_int:
500
501 timeout = wait_for_completion_timeout(&complete, HZ);
502 if (!timeout) {
503 dev_err(dev->dev, "Transaction timed out\n");
504 writel(I2C_WRITE_DATA_LAST_BYTE,
505 dev->base + I2C_WRITE_DATA);
506 msleep(100);
507 /* FLUSH */
508 readl(dev->base + I2C_READ_DATA);
509 readl(dev->base + I2C_STATUS);
510 ret = -ETIMEDOUT;
511 goto out_err;
512 }
513 if (dev->err) {
514 dev_err(dev->dev,
515 "(%04x) Error during data xfer (%d)\n",
516 addr, dev->err);
517 ret = dev->err;
518 goto out_err;
519 }
520
521 if (msgs->flags & I2C_M_RD)
522 check_busy = 1;
523
524 msgs++;
525 rem--;
526 }
527
528 ret = num;
529 out_err:
530 spin_lock_irqsave(&dev->lock, flags);
531 dev->complete = NULL;
532 dev->msg = NULL;
533 dev->rem = 0;
534 dev->pos = 0;
535 dev->err = 0;
536 dev->flush_cnt = 0;
537 dev->cnt = 0;
538 spin_unlock_irqrestore(&dev->lock, flags);
539 disable_irq(dev->irq);
540 if (dev->pdata->rmutex)
541 remote_mutex_unlock(&dev->r_lock);
542 pm_qos_update_request(&dev->pm_qos_req,
543 PM_QOS_DEFAULT_VALUE);
544 mod_timer(&dev->pwr_timer, (jiffies + 3*HZ));
545 mutex_unlock(&dev->mlock);
546 return ret;
547}
548
549static u32
550msm_i2c_func(struct i2c_adapter *adap)
551{
552 return I2C_FUNC_I2C | (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK);
553}
554
555static const struct i2c_algorithm msm_i2c_algo = {
556 .master_xfer = msm_i2c_xfer,
557 .functionality = msm_i2c_func,
558};
559
560static int
561msm_i2c_probe(struct platform_device *pdev)
562{
563 struct msm_i2c_dev *dev;
564 struct resource *mem, *irq, *ioarea;
565 int ret;
566 int fs_div;
567 int hs_div;
568 int i2c_clk;
569 int clk_ctl;
570 struct clk *clk;
571 struct msm_i2c_platform_data *pdata;
572
573 printk(KERN_INFO "msm_i2c_probe\n");
574
575 /* NOTE: driver uses the static register mapping */
576 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
577 if (!mem) {
578 dev_err(&pdev->dev, "no mem resource?\n");
579 return -ENODEV;
580 }
581 irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
582 if (!irq) {
583 dev_err(&pdev->dev, "no irq resource?\n");
584 return -ENODEV;
585 }
586
587 ioarea = request_mem_region(mem->start, (mem->end - mem->start) + 1,
588 pdev->name);
589 if (!ioarea) {
590 dev_err(&pdev->dev, "I2C region already claimed\n");
591 return -EBUSY;
592 }
Matt Wagantallac294852011-08-17 15:44:58 -0700593 clk = clk_get(&pdev->dev, "core_clk");
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700594 if (IS_ERR(clk)) {
595 dev_err(&pdev->dev, "Could not get clock\n");
596 ret = PTR_ERR(clk);
597 goto err_clk_get_failed;
598 }
599
600 pdata = pdev->dev.platform_data;
601 if (!pdata) {
602 dev_err(&pdev->dev, "platform data not initialized\n");
603 ret = -ENOSYS;
604 goto err_clk_get_failed;
605 }
606 if (!pdata->msm_i2c_config_gpio) {
607 dev_err(&pdev->dev, "config_gpio function not initialized\n");
608 ret = -ENOSYS;
609 goto err_clk_get_failed;
610 }
611 /* We support frequencies upto FAST Mode(400KHz) */
612 if (pdata->clk_freq <= 0 || pdata->clk_freq > 400000) {
613 dev_err(&pdev->dev, "clock frequency not supported\n");
614 ret = -EIO;
615 goto err_clk_get_failed;
616 }
617
618 dev = kzalloc(sizeof(struct msm_i2c_dev), GFP_KERNEL);
619 if (!dev) {
620 ret = -ENOMEM;
621 goto err_alloc_dev_failed;
622 }
623
624 dev->dev = &pdev->dev;
625 dev->irq = irq->start;
626 dev->clk = clk;
627 dev->pdata = pdata;
628 dev->base = ioremap(mem->start, (mem->end - mem->start) + 1);
629 if (!dev->base) {
630 ret = -ENOMEM;
631 goto err_ioremap_failed;
632 }
633
634 dev->one_bit_t = USEC_PER_SEC/pdata->clk_freq;
635 spin_lock_init(&dev->lock);
636 platform_set_drvdata(pdev, dev);
637
638 clk_enable(clk);
639
640 if (pdata->rmutex) {
641 struct remote_mutex_id rmid;
642 rmid.r_spinlock_id = pdata->rsl_id;
643 rmid.delay_us = 10000000/pdata->clk_freq;
644 if (remote_mutex_init(&dev->r_lock, &rmid) != 0)
645 pdata->rmutex = 0;
646 }
647 /* I2C_HS_CLK = I2C_CLK/(3*(HS_DIVIDER_VALUE+1) */
648 /* I2C_FS_CLK = I2C_CLK/(2*(FS_DIVIDER_VALUE+3) */
649 /* FS_DIVIDER_VALUE = ((I2C_CLK / I2C_FS_CLK) / 2) - 3 */
650 i2c_clk = 19200000; /* input clock */
651 fs_div = ((i2c_clk / pdata->clk_freq) / 2) - 3;
652 hs_div = 3;
653 clk_ctl = ((hs_div & 0x7) << 8) | (fs_div & 0xff);
654 writel(clk_ctl, dev->base + I2C_CLK_CTL);
655 printk(KERN_INFO "msm_i2c_probe: clk_ctl %x, %d Hz\n",
656 clk_ctl, i2c_clk / (2 * ((clk_ctl & 0xff) + 3)));
657
658 i2c_set_adapdata(&dev->adap_pri, dev);
659 dev->adap_pri.algo = &msm_i2c_algo;
660 strlcpy(dev->adap_pri.name,
661 "MSM I2C adapter-PRI",
662 sizeof(dev->adap_pri.name));
663
664 dev->adap_pri.nr = pdev->id;
665 ret = i2c_add_numbered_adapter(&dev->adap_pri);
666 if (ret) {
667 dev_err(&pdev->dev, "Primary i2c_add_adapter failed\n");
668 goto err_i2c_add_adapter_failed;
669 }
670
671 i2c_set_adapdata(&dev->adap_aux, dev);
672 dev->adap_aux.algo = &msm_i2c_algo;
673 strlcpy(dev->adap_aux.name,
674 "MSM I2C adapter-AUX",
675 sizeof(dev->adap_aux.name));
676
677 dev->adap_aux.nr = pdev->id + 1;
678 ret = i2c_add_numbered_adapter(&dev->adap_aux);
679 if (ret) {
680 dev_err(&pdev->dev, "auxiliary i2c_add_adapter failed\n");
681 i2c_del_adapter(&dev->adap_pri);
682 goto err_i2c_add_adapter_failed;
683 }
684 ret = request_irq(dev->irq, msm_i2c_interrupt,
685 IRQF_TRIGGER_RISING, pdev->name, dev);
686 if (ret) {
687 dev_err(&pdev->dev, "request_irq failed\n");
688 goto err_request_irq_failed;
689 }
690 pm_qos_add_request(&dev->pm_qos_req, PM_QOS_CPU_DMA_LATENCY,
691 PM_QOS_DEFAULT_VALUE);
692 disable_irq(dev->irq);
693 dev->suspended = 0;
694 mutex_init(&dev->mlock);
695 dev->clk_state = 0;
696 /* Config GPIOs for primary and secondary lines */
697 pdata->msm_i2c_config_gpio(dev->adap_pri.nr, 1);
698 pdata->msm_i2c_config_gpio(dev->adap_aux.nr, 1);
699 clk_disable(dev->clk);
700 setup_timer(&dev->pwr_timer, msm_i2c_pwr_timer, (unsigned long) dev);
701
702 return 0;
703
704err_request_irq_failed:
705 i2c_del_adapter(&dev->adap_pri);
706 i2c_del_adapter(&dev->adap_aux);
707err_i2c_add_adapter_failed:
708 clk_disable(clk);
709 iounmap(dev->base);
710err_ioremap_failed:
711 kfree(dev);
712err_alloc_dev_failed:
713 clk_put(clk);
714err_clk_get_failed:
715 release_mem_region(mem->start, (mem->end - mem->start) + 1);
716 return ret;
717}
718
719static int
720msm_i2c_remove(struct platform_device *pdev)
721{
722 struct msm_i2c_dev *dev = platform_get_drvdata(pdev);
723 struct resource *mem;
724
725 /* Grab mutex to ensure ongoing transaction is over */
726 mutex_lock(&dev->mlock);
727 dev->suspended = 1;
728 mutex_unlock(&dev->mlock);
729 mutex_destroy(&dev->mlock);
730 del_timer_sync(&dev->pwr_timer);
731 if (dev->clk_state != 0)
732 msm_i2c_pwr_mgmt(dev, 0);
733 platform_set_drvdata(pdev, NULL);
734 pm_qos_remove_request(&dev->pm_qos_req);
735 free_irq(dev->irq, dev);
736 i2c_del_adapter(&dev->adap_pri);
737 i2c_del_adapter(&dev->adap_aux);
738 clk_put(dev->clk);
739 iounmap(dev->base);
740 kfree(dev);
741 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
742 if (mem)
743 release_mem_region(mem->start, (mem->end - mem->start) + 1);
744 return 0;
745}
746
747static int msm_i2c_suspend(struct platform_device *pdev, pm_message_t state)
748{
749 struct msm_i2c_dev *dev = platform_get_drvdata(pdev);
750 /* Wait until current transaction finishes
751 * Make sure remote lock is released before we suspend
752 */
753 if (dev) {
754 /* Grab mutex to ensure ongoing transaction is over */
755 mutex_lock(&dev->mlock);
756 dev->suspended = 1;
757 mutex_unlock(&dev->mlock);
758 del_timer_sync(&dev->pwr_timer);
759 if (dev->clk_state != 0)
760 msm_i2c_pwr_mgmt(dev, 0);
761 }
762
763 return 0;
764}
765
766static int msm_i2c_resume(struct platform_device *pdev)
767{
768 struct msm_i2c_dev *dev = platform_get_drvdata(pdev);
769 dev->suspended = 0;
770 return 0;
771}
772
773static struct platform_driver msm_i2c_driver = {
774 .probe = msm_i2c_probe,
775 .remove = msm_i2c_remove,
776 .suspend = msm_i2c_suspend,
777 .resume = msm_i2c_resume,
778 .driver = {
779 .name = "msm_i2c",
780 .owner = THIS_MODULE,
781 },
782};
783
784/* I2C may be needed to bring up other drivers */
785static int __init
786msm_i2c_init_driver(void)
787{
788 return platform_driver_register(&msm_i2c_driver);
789}
790subsys_initcall(msm_i2c_init_driver);
791
792static void __exit msm_i2c_exit_driver(void)
793{
794 platform_driver_unregister(&msm_i2c_driver);
795}
796module_exit(msm_i2c_exit_driver);
797