1 /* drivers/i2c/busses/i2c_rk29.c
3 * Copyright (C) 2010 ROCKCHIP, Inc.
5 * This software is licensed under the terms of the GNU General Public
6 * License version 2, as published by the Free Software Foundation, and
7 * may be copied, distributed, and modified under those terms.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
15 #include <linux/kernel.h>
16 #include <linux/delay.h>
17 #include <linux/module.h>
18 #include <linux/completion.h>
19 #include <linux/init.h>
20 #include <linux/interrupt.h>
21 #include <linux/spinlock.h>
22 #include <linux/err.h>
23 #include <linux/platform_device.h>
24 #include <linux/cpufreq.h>
25 #include <linux/device.h>
26 #include <linux/clk.h>
27 #include <linux/delay.h>
28 #include <linux/i2c.h>
29 #include <mach/board.h>
33 #define DRV_NAME "rk29_i2c"
35 #define RK2818_I2C_TIMEOUT (msecs_to_jiffies(500))
36 #define RK2818_DELAY_TIME 2
39 #define i2c_dbg(dev, format, arg...) \
40 dev_printk(KERN_INFO , dev , format , ## arg)
42 #define i2c_dbg(dev, format, arg...)
46 RK2818_ERROR_NONE = 0,
47 RK2818_ERROR_ARBITR_LOSE,
52 RK2818_EVENT_NONE = 0,
53 /* master has received ack(MTX mode)
54 means that data has been sent to slave.
56 RK2818_EVENT_MTX_RCVD_ACK,
57 /* master needs to send ack to slave(MRX mode)
58 means that data has been received from slave.
60 RK2818_EVENT_MRX_NEED_ACK,
64 struct rk29_i2c_data {
66 struct i2c_adapter adap;
68 struct resource *ioarea;
70 unsigned int suspended:1;
71 unsigned long scl_rate;
72 unsigned long i2c_rate;
80 struct completion cmd_complete;
81 enum rk29_event cmd_event;
82 enum rk29_error cmd_err;
86 #ifdef CONFIG_CPU_FREQ
87 struct notifier_block freq_transition;
91 static void rk29_i2c_init_hw(struct rk29_i2c_data *i2c);
93 static inline void rk29_i2c_disable_irqs(struct rk29_i2c_data *i2c)
97 tmp = readl(i2c->regs + I2C_IER);
98 writel(tmp & IRQ_ALL_DISABLE, i2c->regs + I2C_IER);
100 static inline void rk29_i2c_enable_irqs(struct rk29_i2c_data *i2c)
104 tmp = readl(i2c->regs + I2C_IER);
105 writel(tmp | IRQ_MST_ENABLE, i2c->regs + I2C_IER);
108 /* scl = pclk/(5 *(rem+1) * 2^(exp+1)) */
109 static void rk29_i2c_calcdivisor(unsigned long pclk,
110 unsigned long scl_rate,
111 unsigned long *real_rate,
112 unsigned int *rem, unsigned int *exp)
114 unsigned int calc_rem = 0;
115 unsigned int calc_exp = 0;
117 for(calc_exp = 0; calc_exp < I2CCDVR_EXP_MAX; calc_exp++)
119 calc_rem = pclk / (5 * scl_rate * (1 <<(calc_exp +1)));
120 if(calc_rem < I2CCDVR_REM_MAX)
123 if(calc_rem >= I2CCDVR_REM_MAX || calc_exp >= I2CCDVR_EXP_MAX)
125 calc_rem = I2CCDVR_REM_MAX - 1;
126 calc_exp = I2CCDVR_EXP_MAX - 1;
130 *real_rate = pclk/(5 * (calc_rem + 1) * (1 <<(calc_exp +1)));
133 /* set i2c bus scl rate */
134 static void rk29_i2c_clockrate(struct rk29_i2c_data *i2c)
136 #ifdef CONFIG_ARCH_RK2818
137 struct rk2818_i2c_platform_data *pdata = i2c->dev->platform_data;
139 struct rk29_i2c_platform_data *pdata = i2c->dev->platform_data;
141 unsigned int rem = 0, exp = 0;
142 unsigned long scl_rate, real_rate = 0, tmp;
144 i2c->i2c_rate = clk_get_rate(i2c->clk);
146 scl_rate = (i2c->scl_rate) ? i2c->scl_rate : ((pdata->scl_rate)? pdata->scl_rate:100000);
148 rk29_i2c_calcdivisor(i2c->i2c_rate, scl_rate, &real_rate, &rem, &exp);
150 tmp = readl(i2c->regs + I2C_OPR);
152 tmp |= rem<<I2CCDVR_EXP_BITS;
153 writel(tmp, i2c->regs + I2C_OPR);
154 if(real_rate > 400000)
155 dev_warn(i2c->dev, "i2c_rate[%luKhz], scl_rate[%luKhz], real_rate[%luKhz] > 400Khz\n",
156 i2c->i2c_rate/1000, scl_rate/1000, real_rate/1000);
158 i2c_dbg(i2c->dev, "i2c_rate[%luKhz], scl_rate[%luKhz], real_rate[%luKhz]\n",
159 i2c->i2c_rate/1000, scl_rate/1000, real_rate/1000);
162 static int rk29_event_occurred(struct rk29_i2c_data *i2c)
166 isr = readl(i2c->regs + I2C_ISR);
167 i2c_dbg(i2c->dev,"event occurred, isr = %lx\n", isr);
168 if(isr & I2C_ISR_ARBITR_LOSE)
170 isr &= ~I2C_ISR_ARBITR_LOSE;
171 writel(isr, i2c->regs + I2C_ISR);
172 i2c->cmd_err = RK2818_ERROR_ARBITR_LOSE;
173 dev_err(i2c->dev, "<error>arbitration loss\n");
177 switch(i2c->cmd_event)
179 case RK2818_EVENT_MTX_RCVD_ACK:
180 if(isr & I2C_ISR_MTX_RCVD_ACK)
182 isr &= ~I2C_ISR_MTX_RCVD_ACK;
183 writel(isr, i2c->regs + I2C_ISR);
187 case RK2818_EVENT_MRX_NEED_ACK:
188 if(isr & I2C_ISR_MRX_NEED_ACK)
190 isr &= ~I2C_ISR_MRX_NEED_ACK;
191 writel(isr, i2c->regs + I2C_ISR);
198 i2c->cmd_err = RK2818_ERROR_UNKNOWN;
202 static irqreturn_t rk29_i2c_irq(int irq, void *data)
204 struct rk29_i2c_data *i2c = (struct rk29_i2c_data *)data;
207 rk29_i2c_disable_irqs(i2c);
208 spin_lock(&i2c->cmd_lock);
209 res = rk29_event_occurred(i2c);
211 //if(res || i2c->cmd_err != RK2818_ERROR_NONE)
212 complete(&i2c->cmd_complete);
213 spin_unlock(&i2c->cmd_lock);
216 static int wait_for_completion_poll_timeout(struct rk29_i2c_data *i2c, unsigned long timeout)
218 unsigned int time = RK2818_DELAY_TIME;
221 while(!time_after(jiffies, jiffies + timeout))
223 res = rk29_event_occurred(i2c);
225 //if(res || (i2c->cmd_err != RK2818_ERROR_NONE && i2c->cmd_err != RK2818_ERROR_UNKNOWN))
233 static int rk29_wait_event(struct rk29_i2c_data *i2c,
234 enum rk29_event mr_event)
238 if(i2c->mode == I2C_MODE_IRQ)
240 if(unlikely(irqs_disabled()))
242 dev_err(i2c->dev, "irqs are disabled on this system!\n");
246 spin_lock_irqsave(&i2c->cmd_lock,flags);
247 i2c->cmd_err = RK2818_ERROR_NONE;
248 i2c->cmd_event = mr_event;
250 init_completion(&i2c->cmd_complete);
252 spin_unlock_irqrestore(&i2c->cmd_lock,flags);
254 rk29_i2c_enable_irqs(i2c);
255 if(i2c->mode == I2C_MODE_IRQ)
256 ret = wait_for_completion_interruptible_timeout(&i2c->cmd_complete,
259 ret = wait_for_completion_poll_timeout(i2c, RK2818_I2C_TIMEOUT);
263 dev_err(i2c->dev, "i2c wait for event %04x, retrun %d \n", mr_event, ret);
273 static int rk29_wait_while_busy(struct rk29_i2c_data *i2c)
275 unsigned long timeout = jiffies + RK2818_I2C_TIMEOUT;
277 unsigned int time = RK2818_DELAY_TIME;
279 while(!time_after(jiffies, timeout))
281 lsr = readl(i2c->regs + I2C_LSR);
282 if(!(lsr & I2C_LSR_BUSY))
289 static int rk29_i2c_stop(struct rk29_i2c_data *i2c)
291 unsigned long timeout = jiffies + RK2818_I2C_TIMEOUT;
292 unsigned int time = RK2818_DELAY_TIME;
294 writel(I2C_LCMR_STOP|I2C_LCMR_RESUME, i2c->regs + I2C_LCMR);
295 while(!time_after(jiffies, timeout))
297 if(!(readl(i2c->regs + I2C_LCMR) & I2C_LCMR_STOP))
299 i2c_dbg(i2c->dev, "i2c stop successfully\n");
308 static int rk29_send_2nd_addr(struct rk29_i2c_data *i2c,
309 struct i2c_msg *msg, int start)
312 unsigned long addr_2nd = msg->addr & 0xff;
313 unsigned long conr = readl(i2c->regs + I2C_CONR);
315 conr |= I2C_CONR_MTX_MODE;
316 //conr &= I2C_CONR_ACK;
317 writel(conr, i2c->regs + I2C_CONR);
319 i2c_dbg(i2c->dev, "i2c send addr_2nd: %lx\n", addr_2nd);
320 writel(addr_2nd, i2c->regs + I2C_MTXR);
321 writel(I2C_LCMR_RESUME, i2c->regs + I2C_LCMR);
322 if((ret = rk29_wait_event(i2c, RK2818_EVENT_MTX_RCVD_ACK)) != 0)
324 dev_err(i2c->dev, "after sent addr_2nd, i2c wait for ACK timeout\n");
329 static int rk29_send_address(struct rk29_i2c_data *i2c,
330 struct i2c_msg *msg, int start)
332 unsigned long addr_1st;
333 unsigned long conr = readl(i2c->regs + I2C_CONR);
336 if(msg->flags & I2C_M_TEN)
337 addr_1st = (0xf0 | (((unsigned long) msg->addr & 0x300) >> 7)) & 0xff;
339 addr_1st = ((msg->addr << 1) & 0xff);
341 if (msg->flags & I2C_M_RD)
346 conr |= I2C_CONR_MTX_MODE;
347 //conr &= I2C_CONR_ACK;
348 writel(conr, i2c->regs + I2C_CONR);
349 i2c_dbg(i2c->dev, "i2c send addr_1st: %lx\n", addr_1st);
351 writel(addr_1st, i2c->regs + I2C_MTXR);
355 if((ret = rk29_wait_while_busy(i2c)) != 0)
357 dev_err(i2c->dev, "i2c is busy, when send address\n");
360 writel(I2C_LCMR_START, i2c->regs + I2C_LCMR);
363 writel(I2C_LCMR_START|I2C_LCMR_RESUME, i2c->regs + I2C_LCMR);
365 if((ret = rk29_wait_event(i2c, RK2818_EVENT_MTX_RCVD_ACK)) != 0)
367 dev_err(i2c->dev, "after sent addr_1st, i2c wait for ACK timeout\n");
370 if(start && (msg->flags & I2C_M_TEN))
371 ret = rk29_send_2nd_addr(i2c, msg, start);
375 static int rk29_i2c_send_msg(struct rk29_i2c_data *i2c, struct i2c_msg *msg)
378 unsigned long conr = readl(i2c->regs + I2C_CONR);
380 conr = readl(i2c->regs + I2C_CONR);
381 conr |= I2C_CONR_MTX_MODE;
382 writel(conr, i2c->regs + I2C_CONR);
383 for(i = 0; i < msg->len; i++)
385 i2c_dbg(i2c->dev, "i2c send buf[%d]: %x\n", i, msg->buf[i]);
386 writel(msg->buf[i], i2c->regs + I2C_MTXR);
388 conr = readl(i2c->regs + I2C_CONR);
389 conr &= I2C_CONR_ACK;
390 writel(conr, i2c->regs + I2C_CONR);
392 writel(I2C_LCMR_RESUME, i2c->regs + I2C_LCMR);
394 if((ret = rk29_wait_event(i2c, RK2818_EVENT_MTX_RCVD_ACK)) != 0)
399 static int rk29_i2c_recv_msg(struct rk29_i2c_data *i2c, struct i2c_msg *msg)
402 unsigned long conr = readl(i2c->regs + I2C_CONR);
404 conr = readl(i2c->regs + I2C_CONR);
405 conr &= I2C_CONR_MRX_MODE;
406 writel(conr, i2c->regs + I2C_CONR);
408 for(i = 0; i < msg->len; i++)
410 writel(I2C_LCMR_RESUME, i2c->regs + I2C_LCMR);
411 if((ret = rk29_wait_event(i2c, RK2818_EVENT_MRX_NEED_ACK)) != 0)
413 conr = readl(i2c->regs + I2C_CONR);
414 conr &= I2C_CONR_ACK;
415 writel(conr, i2c->regs + I2C_CONR);
416 msg->buf[i] = (uint8_t)readl(i2c->regs + I2C_MRXR);
417 i2c_dbg(i2c->dev, "i2c recv >>>>>>>>>>>> buf[%d]: %x\n", i, msg->buf[i]);
421 static int rk29_xfer_msg(struct i2c_adapter *adap,
422 struct i2c_msg *msg, int start, int stop)
424 struct rk29_i2c_data *i2c = (struct rk29_i2c_data *)adap->algo_data;
425 unsigned long conr = readl(i2c->regs + I2C_CONR);
428 #if defined (CONFIG_IOEXTEND_TCA6424)
429 struct tca6424_platform_data *pdata = adap->dev.platform_data;
435 dev_err(i2c->dev, "<error>msg->len = %d\n", msg->len);
439 if((ret = rk29_send_address(i2c, msg, start))!= 0)
441 dev_err(i2c->dev, "<error>rk29_send_address timeout\n");
444 if(msg->flags & I2C_M_RD)
446 if((ret = rk29_i2c_recv_msg(i2c, msg)) != 0)
448 dev_err(i2c->dev, "<error>rk29_i2c_recv_msg timeout\n");
454 if((ret = rk29_i2c_send_msg(i2c, msg)) != 0)
456 dev_err(i2c->dev, "<error>rk29_i2c_send_msg timeout\n");
464 conr = readl(i2c->regs + I2C_CONR);
465 conr |= I2C_CONR_NAK;
466 writel(conr, i2c->regs + I2C_CONR);
467 if((ret = rk29_i2c_stop(i2c)) != 0)
469 dev_err(i2c->dev, "<error>rk29_i2c_stop timeout\n");
472 //not I2C code,add by sxj,used for extend gpio intrrupt,set SCL and SDA pin.
473 if(msg->flags & I2C_M_RD)
475 #if defined (CONFIG_IOEXTEND_TCA6424)
476 if (pdata && pdata->reseti2cpin) {
477 pdata->reseti2cpin();
487 static int rk29_i2c_xfer(struct i2c_adapter *adap,
488 struct i2c_msg *msgs, int num)
492 struct rk29_i2c_data *i2c = (struct rk29_i2c_data *)adap->algo_data;
493 unsigned long conr = readl(i2c->regs + I2C_CONR);
495 if(i2c->suspended ==1)
498 if(msgs[0].scl_rate <= 400000 && msgs[0].scl_rate > 0)
499 i2c->scl_rate = msgs[0].scl_rate;
501 i2c->scl_rate = 400000;
503 conr |= I2C_CONR_MPORT_ENABLE;
504 writel(conr, i2c->regs + I2C_CONR);
506 rk29_i2c_init_hw(i2c);
508 conr = readl(i2c->regs + I2C_CONR);
509 conr &= I2C_CONR_ACK;
510 writel(conr, i2c->regs + I2C_CONR);
512 for (i = 0; i < num; i++)
514 ret = rk29_xfer_msg(adap, &msgs[i], (i == 0), (i == (num - 1)));
518 dev_err(i2c->dev, "rk29_xfer_msg error, ret = %d\n", ret);
522 conr = readl(i2c->regs + I2C_CONR);
523 conr &= I2C_CONR_MPORT_DISABLE;
524 writel(conr, i2c->regs + I2C_CONR);
528 static u32 rk29_i2c_func(struct i2c_adapter *adap)
530 return I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR;
533 static const struct i2c_algorithm rk29_i2c_algorithm = {
534 .master_xfer = rk29_i2c_xfer,
535 .functionality = rk29_i2c_func,
538 int i2c_suspended(struct i2c_adapter *adap)
540 struct rk29_i2c_data *i2c = (struct rk29_i2c_data *)adap->algo_data;
545 return i2c->suspended;
547 EXPORT_SYMBOL(i2c_suspended);
549 static void rk29_i2c_init_hw(struct rk29_i2c_data *i2c)
551 unsigned long lcmr = 0x00000000;
553 unsigned long opr = readl(i2c->regs + I2C_OPR);
554 opr |= I2C_OPR_RESET_STATUS;
555 writel(opr, i2c->regs + I2C_OPR);
557 writel(lcmr, i2c->regs + I2C_LCMR);
559 rk29_i2c_disable_irqs(i2c);
561 rk29_i2c_clockrate(i2c);
563 opr = readl(i2c->regs + I2C_OPR);
564 opr |= I2C_OPR_CORE_ENABLE;
565 writel(opr, i2c->regs + I2C_OPR);
570 #ifdef CONFIG_CPU_FREQ
572 #define freq_to_i2c(_n) container_of(_n, struct rk29_i2c_data, freq_transition)
574 static int rk29_i2c_cpufreq_transition(struct notifier_block *nb,
575 unsigned long val, void *data)
577 struct rk29_i2c_data *i2c = freq_to_i2c(nb);
580 delta_f = clk_get_rate(i2c->clk) - i2c->i2c_rate;
582 if ((val == CPUFREQ_POSTCHANGE && delta_f < 0) ||
583 (val == CPUFREQ_PRECHANGE && delta_f > 0))
585 spin_lock_irqsave(&i2c->cmd_lock, flags);
586 rk29_i2c_clockrate(i2c);
587 spin_unlock_irqrestore(&i2c->cmd_lock, flags);
592 static inline int rk29_i2c_register_cpufreq(struct rk29_i2c_data *i2c)
594 i2c->freq_transition.notifier_call = rk29_i2c_cpufreq_transition;
596 return cpufreq_register_notifier(&i2c->freq_transition,
597 CPUFREQ_TRANSITION_NOTIFIER);
600 static inline void rk29_i2c_unregister_cpufreq(struct rk29_i2c_data *i2c)
602 cpufreq_unregister_notifier(&i2c->freq_transition,
603 CPUFREQ_TRANSITION_NOTIFIER);
607 static inline int rk29_i2c_register_cpufreq(struct rk29_i2c_data *i2c)
612 static inline void rk29_i2c_unregister_cpufreq(struct rk29_i2c_data *i2c)
618 static int rk29_i2c_probe(struct platform_device *pdev)
620 struct rk29_i2c_data *i2c;
621 #ifdef CONFIG_ARCH_RK2818
622 struct rk2818_i2c_platform_data *pdata = NULL;
624 struct rk29_i2c_platform_data *pdata = NULL;
626 struct resource *res;
629 pdata = pdev->dev.platform_data;
632 dev_err(&pdev->dev, "<error>no platform data\n");
635 i2c = kzalloc(sizeof(struct rk29_i2c_data), GFP_KERNEL);
638 dev_err(&pdev->dev, "<error>no memory for state\n");
641 i2c->mode = pdata->mode;
642 i2c->scl_rate = (pdata->scl_rate) ? pdata->scl_rate : 100000;
644 strlcpy(i2c->adap.name, DRV_NAME, sizeof(i2c->adap.name));
645 i2c->adap.owner = THIS_MODULE;
646 i2c->adap.algo = &rk29_i2c_algorithm;
647 i2c->adap.class = I2C_CLASS_HWMON;
648 spin_lock_init(&i2c->cmd_lock);
650 i2c->dev = &pdev->dev;
652 i2c->clk = clk_get(&pdev->dev, "i2c");
653 if (IS_ERR(i2c->clk)) {
654 dev_err(&pdev->dev, "<error>cannot get clock\n");
659 clk_enable(i2c->clk);
661 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
663 dev_err(&pdev->dev, "<error>cannot find IO resource\n");
668 i2c->ioarea = request_mem_region(res->start, res->end - res->start + 1,
671 if (i2c->ioarea == NULL) {
672 dev_err(&pdev->dev, "<error>cannot request IO\n");
677 i2c->regs = ioremap(res->start, res->end - res->start + 1);
679 if (i2c->regs == NULL) {
680 dev_err(&pdev->dev, "<error>annot map IO\n");
684 i2c->adap.algo_data = i2c;
685 i2c->adap.dev.parent = &pdev->dev;
690 rk29_i2c_init_hw(i2c);
692 i2c->irq = ret = platform_get_irq(pdev, 0);
694 dev_err(&pdev->dev, "cannot find IRQ\n");
697 if(i2c->mode == I2C_MODE_IRQ)
699 ret = request_irq(i2c->irq, rk29_i2c_irq, IRQF_DISABLED,
700 dev_name(&pdev->dev), i2c);
703 dev_err(&pdev->dev, "cannot claim IRQ %d\n", i2c->irq);
707 ret = rk29_i2c_register_cpufreq(i2c);
709 dev_err(&pdev->dev, "failed to register cpufreq notifier\n");
713 i2c->adap.nr = pdata->bus_num;
714 ret = i2c_add_numbered_adapter(&i2c->adap);
716 dev_err(&pdev->dev, "failed to add bus to i2c core\n");
720 platform_set_drvdata(pdev, i2c);
722 dev_info(&pdev->dev, "%s: RK2818 I2C adapter\n", dev_name(&i2c->adap.dev));
726 rk29_i2c_unregister_cpufreq(i2c);
729 if(i2c->mode == I2C_MODE_IRQ)
730 free_irq(i2c->irq, i2c);
736 release_resource(i2c->ioarea);
740 clk_disable(i2c->clk);
749 static int rk29_i2c_remove(struct platform_device *pdev)
751 struct rk29_i2c_data *i2c = platform_get_drvdata(pdev);
753 rk29_i2c_unregister_cpufreq(i2c);
755 i2c_del_adapter(&i2c->adap);
756 if(i2c->mode == I2C_MODE_IRQ)
757 free_irq(i2c->irq, i2c);
759 clk_disable(i2c->clk);
764 release_resource(i2c->ioarea);
773 static int rk29_i2c_suspend(struct platform_device *pdev, pm_message_t state)
775 struct rk29_i2c_data *i2c = platform_get_drvdata(pdev);
780 static int rk29_i2c_resume(struct platform_device *pdev)
782 struct rk29_i2c_data *i2c = platform_get_drvdata(pdev);
785 rk29_i2c_init_hw(i2c);
790 #define rk29_i2c_suspend NULL
791 #define rk29_i2c_resume NULL
795 static struct platform_driver rk29_i2c_driver = {
796 .probe = rk29_i2c_probe,
797 .remove = rk29_i2c_remove,
798 .suspend = rk29_i2c_suspend,
799 .resume = rk29_i2c_resume,
801 .owner = THIS_MODULE,
806 static int __init rk29_i2c_adap_init(void)
808 return platform_driver_register(&rk29_i2c_driver);
811 static void __exit rk29_i2c_adap_exit(void)
813 platform_driver_unregister(&rk29_i2c_driver);
816 subsys_initcall(rk29_i2c_adap_init);
817 module_exit(rk29_i2c_adap_exit);
819 MODULE_DESCRIPTION("Driver for RK2818 I2C Bus");
820 MODULE_AUTHOR("kfx, kfx@rock-chips.com");
821 MODULE_LICENSE("GPL");