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