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 <linux/wakelock.h>
30 #include <linux/slab.h>
31 #include <mach/board.h>
35 #define DRV_NAME "rk29_i2c"
38 #define RK29_UDELAY_TIME(scl_rate) ((400*1000)/(scl_rate))
39 /*max ACK delay time = RK29_I2C_ACK_TIMEOUT_COUNT * RK29_UDELAY_TIME(scl_rate) us */
40 #define RK29_I2C_ACK_TIMEOUT_COUNT (100 * 1000)
41 /*max STOP delay time = RK29_I2C_STOP_TIMEOUT_COUNT * RK29_UDELAY_TIME(scl_rate) us */
42 #define RK29_I2C_STOP_TIMEOUT_COUNT 70//1000
43 /*max START delay time = RK29_I2C_START_TIMEOUT_COUNT * RK29_UDELAY_TIME(scl_rate) us */
44 #define RK29_I2C_START_TIMEOUT_COUNT 1000
49 #define i2c_dbg(dev, format, arg...) \
50 dev_printk(KERN_INFO , dev , format , ## arg)
51 #define i2c_err(dev, format, arg...) \
52 dev_printk(KERN_ERR , dev , format , ## arg)
55 #define i2c_dbg(dev, format, arg...)
56 #define i2c_err(dev, format, arg...)
62 RK29_ERROR_ARBITR_LOSE,
68 /* master has received ack(MTX mode)
69 means that data has been sent to slave.
71 RK29_EVENT_MTX_RCVD_ACK,
72 /* master needs to send ack to slave(MRX mode)
73 means that data has been received from slave.
75 RK29_EVENT_MRX_NEED_ACK,
79 struct rk29_i2c_data {
81 struct i2c_adapter adap;
83 struct resource *ioarea;
85 unsigned int ack_timeout; //unit: us
86 unsigned int udelay_time; //unit: us
88 unsigned int suspended:1;
89 unsigned long scl_rate;
90 unsigned long i2c_rate;
101 struct completion cmd_complete;
102 enum rk29_event cmd_event;
103 enum rk29_error cmd_err;
105 unsigned int msg_idx;
106 unsigned int msg_num;
108 int (*io_init)(void);
109 #ifdef CONFIG_CPU_FREQ
110 struct notifier_block freq_transition;
114 #if defined(CONFIG_ARCH_RK29) || defined(CONFIG_ARCH_RK30)
115 static struct wake_lock idlelock; /* only for i2c0 */
118 static void rk29_set_ack(struct rk29_i2c_data *i2c)
120 unsigned long conr = readl(i2c->regs + I2C_CONR);
122 conr &= I2C_CONR_ACK;
123 writel(conr,i2c->regs + I2C_CONR);
126 static void rk29_set_nak(struct rk29_i2c_data *i2c)
128 unsigned long conr = readl(i2c->regs + I2C_CONR);
130 conr |= I2C_CONR_NAK;
131 writel(conr,i2c->regs + I2C_CONR);
136 static inline void rk29_i2c_disable_irqs(struct rk29_i2c_data *i2c)
140 tmp = readl(i2c->regs + I2C_IER);
141 writel(tmp & IRQ_ALL_DISABLE, i2c->regs + I2C_IER);
143 static inline void rk29_i2c_enable_irqs(struct rk29_i2c_data *i2c)
147 tmp = readl(i2c->regs + I2C_IER);
148 writel(tmp | IRQ_MST_ENABLE, i2c->regs + I2C_IER);
151 /* scl = pclk/(5 *(rem+1) * 2^(exp+1)) */
152 static void rk29_i2c_calcdivisor(unsigned long pclk,
153 unsigned long scl_rate,
154 unsigned long *real_rate,
155 unsigned int *rem, unsigned int *exp)
157 unsigned int calc_rem = 0;
158 unsigned int calc_exp = 0;
160 for(calc_exp = 0; calc_exp < I2CCDVR_EXP_MAX; calc_exp++)
162 calc_rem = pclk / (5 * scl_rate * (1 <<(calc_exp +1)));
163 if(calc_rem < I2CCDVR_REM_MAX)
166 if(calc_rem >= I2CCDVR_REM_MAX || calc_exp >= I2CCDVR_EXP_MAX)
168 calc_rem = I2CCDVR_REM_MAX - 1;
169 calc_exp = I2CCDVR_EXP_MAX - 1;
173 *real_rate = pclk/(5 * (calc_rem + 1) * (1 <<(calc_exp +1)));
176 /* set i2c bus scl rate */
177 static void rk29_i2c_clockrate(struct rk29_i2c_data *i2c)
180 struct rk29_i2c_platform_data *pdata = i2c->dev->platform_data;
181 unsigned int rem = 0, exp = 0;
182 unsigned long scl_rate, real_rate = 0, tmp;
184 i2c->i2c_rate = clk_get_rate(i2c->clk);
186 scl_rate = (i2c->scl_rate) ? i2c->scl_rate : ((pdata->scl_rate)? pdata->scl_rate:100000);
188 rk29_i2c_calcdivisor(i2c->i2c_rate, scl_rate, &real_rate, &rem, &exp);
190 tmp = readl(i2c->regs + I2C_OPR);
193 tmp |= rem<<I2CCDVR_EXP_BITS;
194 writel(tmp, i2c->regs + I2C_OPR);
195 if(real_rate > 400000)
196 dev_warn(i2c->dev, "i2c_rate[%luKhz], scl_rate[%luKhz], real_rate[%luKhz] > 400Khz\n",
197 i2c->i2c_rate/1000, scl_rate/1000, real_rate/1000);
199 i2c_dbg(i2c->dev, "i2c_rate[%luKhz], scl_rate[%luKhz], real_rate[%luKhz]\n",
200 i2c->i2c_rate/1000, scl_rate/1000, real_rate/1000);
203 static int rk29_event_occurred(struct rk29_i2c_data *i2c)
205 unsigned long isr, lsr;
207 isr = readl(i2c->regs + I2C_ISR);
208 lsr = readl(i2c->regs + I2C_LSR);
209 i2c_dbg(i2c->dev,"event occurred, isr = %lx, lsr = %lx\n", isr, lsr);
210 if(isr & I2C_ISR_ARBITR_LOSE)
212 writel(0, i2c->regs + I2C_ISR);
213 i2c->cmd_err = RK29_ERROR_ARBITR_LOSE;
214 i2c_err(i2c->dev, "<error>arbitration loss\n");
218 switch(i2c->cmd_event)
220 case RK29_EVENT_MTX_RCVD_ACK:
221 if(isr & I2C_ISR_MTX_RCVD_ACK)
223 isr &= ~I2C_ISR_MTX_RCVD_ACK;
224 writel(isr, i2c->regs + I2C_ISR);
228 case RK29_EVENT_MRX_NEED_ACK:
229 if(isr & I2C_ISR_MRX_NEED_ACK)
231 isr &= ~I2C_ISR_MRX_NEED_ACK;
232 writel(isr, i2c->regs + I2C_ISR);
239 writel(0, i2c->regs + I2C_ISR);
240 i2c->cmd_err = RK29_ERROR_UNKNOWN;
244 static irqreturn_t rk29_i2c_irq(int irq, void *data)
246 struct rk29_i2c_data *i2c = (struct rk29_i2c_data *)data;
249 rk29_i2c_disable_irqs(i2c);
250 spin_lock(&i2c->cmd_lock);
251 res = rk29_event_occurred(i2c);
254 if(i2c->mode == I2C_MODE_IRQ)
255 complete(&i2c->cmd_complete);
257 i2c->poll_status = 1;
259 spin_unlock(&i2c->cmd_lock);
262 static int wait_for_completion_poll_timeout(struct rk29_i2c_data *i2c)
264 int tmo = RK29_I2C_ACK_TIMEOUT_COUNT;
268 if(i2c->poll_status == 1)
270 udelay(i2c->udelay_time);
274 static int rk29_wait_event(struct rk29_i2c_data *i2c,
275 enum rk29_event mr_event)
279 if(unlikely(irqs_disabled()))
281 i2c_err(i2c->dev, "irqs are disabled on this system!\n");
284 i2c->cmd_err = RK29_ERROR_NONE;
285 i2c->cmd_event = mr_event;
286 rk29_i2c_enable_irqs(i2c);
287 if(i2c->mode == I2C_MODE_IRQ)
289 ret = wait_for_completion_interruptible_timeout(&i2c->cmd_complete,
290 usecs_to_jiffies(i2c->ack_timeout));
294 i2c->poll_status = 0;
295 ret = wait_for_completion_poll_timeout(i2c);
299 i2c_err(i2c->dev, "i2c wait for event %04x, retrun %d \n", mr_event, ret);
304 i2c_err(i2c->dev, "i2c wait for envent timeout, but not return -ETIMEDOUT\n");
311 static void rk29_i2c_stop(struct rk29_i2c_data *i2c)
313 int tmo = RK29_I2C_STOP_TIMEOUT_COUNT;
315 writel(I2C_LCMR_STOP|I2C_LCMR_RESUME, i2c->regs + I2C_LCMR);
316 while(--tmo && !(readl(i2c->regs + I2C_LCMR) & I2C_LCMR_STOP))
318 udelay(i2c->udelay_time);
320 writel(0, i2c->regs + I2C_ISR);
321 rk29_i2c_disable_irqs(i2c);
326 static void rk29_wait_while_busy(struct rk29_i2c_data *i2c)
328 int tmo = RK29_I2C_START_TIMEOUT_COUNT;
330 while(--tmo && (readl(i2c->regs + I2C_LSR) & I2C_LSR_BUSY))
332 udelay(i2c->udelay_time);
337 static int rk29_send_2nd_addr(struct rk29_i2c_data *i2c,
338 struct i2c_msg *msg, int start)
342 unsigned long addr_2nd = msg->addr & 0xff;
344 i2c_dbg(i2c->dev, "i2c send addr_2nd: %lx\n", addr_2nd);
345 writel(addr_2nd, i2c->regs + I2C_MTXR);
346 if(i2c->mode == I2C_MODE_IRQ)
347 INIT_COMPLETION(i2c->cmd_complete);
348 writel(I2C_LCMR_RESUME, i2c->regs + I2C_LCMR);
351 if((ret = rk29_wait_event(i2c, RK29_EVENT_MTX_RCVD_ACK)) != 0)
353 i2c_err(i2c->dev, "after sent addr_2nd, i2c wait for ACK timeout\n");
356 lsr = readl(i2c->regs + I2C_LSR);
357 if((lsr & I2C_LSR_RCV_NAK) && !(msg->flags & I2C_M_IGNORE_NAK))
361 static int rk29_send_address(struct rk29_i2c_data *i2c,
362 struct i2c_msg *msg, int start)
364 unsigned long addr_1st;
365 unsigned long conr,lsr;
368 if(msg->flags & I2C_M_TEN)
369 addr_1st = (0xf0 | (((unsigned long) msg->addr & 0x300) >> 7)) & 0xff;
371 addr_1st = ((msg->addr << 1) & 0xff);
373 if (msg->flags & I2C_M_RD)
379 rk29_wait_while_busy(i2c);
381 writel(0, i2c->regs + I2C_ISR);
382 conr = readl(i2c->regs + I2C_CONR);
383 conr |= I2C_CONR_MTX_MODE;
384 conr |= I2C_CONR_MPORT_ENABLE;
385 writel(conr, i2c->regs + I2C_CONR);
387 i2c_dbg(i2c->dev, "i2c send addr_1st: %lx\n", addr_1st);
388 writel(addr_1st, i2c->regs + I2C_MTXR);
390 if(i2c->mode == I2C_MODE_IRQ)
391 INIT_COMPLETION(i2c->cmd_complete);
392 writel(I2C_LCMR_START|I2C_LCMR_RESUME, i2c->regs + I2C_LCMR);
394 if((ret = rk29_wait_event(i2c, RK29_EVENT_MTX_RCVD_ACK)) != 0)
396 i2c_err(i2c->dev, "after sent addr_1st, i2c wait for ACK timeout\n");
399 lsr = readl(i2c->regs + I2C_LSR);
400 if((lsr & I2C_LSR_RCV_NAK) && !(msg->flags & I2C_M_IGNORE_NAK))
402 dev_info(i2c->dev, "addr: 0x%x receive no ack\n", msg->addr);
405 if(start && (msg->flags & I2C_M_TEN))
406 ret = rk29_send_2nd_addr(i2c, msg, start);
410 static int rk29_i2c_send_msg(struct rk29_i2c_data *i2c, struct i2c_msg *msg)
413 unsigned long conr, lsr;
415 conr = readl(i2c->regs + I2C_CONR);
416 conr |= I2C_CONR_MTX_MODE;
417 //conr |= I2C_CONR_MPORT_ENABLE;
418 writel(conr, i2c->regs + I2C_CONR);
420 for(i = 0; i < msg->len; i++)
422 i2c_dbg(i2c->dev, "i2c send buf[%d]: %x\n", i, msg->buf[i]);
423 writel(msg->buf[i], i2c->regs + I2C_MTXR);
425 if(i2c->mode == I2C_MODE_IRQ)
426 INIT_COMPLETION(i2c->cmd_complete);
427 writel(I2C_LCMR_RESUME, i2c->regs + I2C_LCMR);
429 if((ret = rk29_wait_event(i2c, RK29_EVENT_MTX_RCVD_ACK)) != 0)
431 lsr = readl(i2c->regs + I2C_LSR);
432 if((lsr & I2C_LSR_RCV_NAK) && (i != msg->len -1) && !(msg->flags & I2C_M_IGNORE_NAK))
439 static int rk29_i2c_recv_msg(struct rk29_i2c_data *i2c, struct i2c_msg *msg)
444 conr = readl(i2c->regs + I2C_CONR);
445 conr &= I2C_CONR_MRX_MODE;
446 //conr |= I2C_CONR_MPORT_ENABLE;
447 writel(conr, i2c->regs + I2C_CONR);
449 for(i = 0; i < msg->len; i++)
451 if(i2c->mode == I2C_MODE_IRQ)
452 INIT_COMPLETION(i2c->cmd_complete);
453 writel(I2C_LCMR_RESUME, i2c->regs + I2C_LCMR);
454 if((ret = rk29_wait_event(i2c, RK29_EVENT_MRX_NEED_ACK)) != 0)
456 msg->buf[i] = (uint8_t)readl(i2c->regs + I2C_MRXR);
458 if( i == msg->len -1)
463 i2c_dbg(i2c->dev, "i2c recv >>>>>>>>>>>> buf[%d]: %x\n", i, msg->buf[i]);
467 static int rk29_xfer_msg(struct i2c_adapter *adap,
468 struct i2c_msg *msg, int start, int stop)
470 struct rk29_i2c_data *i2c = (struct rk29_i2c_data *)adap->algo_data;
476 i2c_err(i2c->dev, "<error>msg->len = %d\n", msg->len);
479 if(msg->flags & I2C_M_NEED_DELAY)
480 i2c->udelay = msg->udelay;
483 if((ret = rk29_send_address(i2c, msg, start))!= 0)
486 i2c_err(i2c->dev, "<error>rk29_send_address timeout\n");
489 if(msg->flags & I2C_M_RD)
491 if(msg->flags & I2C_M_REG8_DIRECT)
493 struct i2c_msg msg1 = *msg;
494 struct i2c_msg msg2 = *msg;
496 msg2.len = msg->len - 1;
497 msg2.buf = msg->buf + 1;
499 if((ret = rk29_i2c_send_msg(i2c, &msg1)) != 0)
500 i2c_err(i2c->dev, "<error>rk29_i2c_send_msg timeout\n");
501 if((ret = rk29_i2c_recv_msg(i2c, &msg2)) != 0)
503 i2c_err(i2c->dev, "<error>rk29_i2c_recv_msg timeout\n");
508 else if((ret = rk29_i2c_recv_msg(i2c, msg)) != 0)
510 i2c_err(i2c->dev, "<error>rk29_i2c_recv_msg timeout\n");
516 if((ret = rk29_i2c_send_msg(i2c, msg)) != 0)
519 i2c_err(i2c->dev, "<error>rk29_i2c_send_msg timeout\n");
533 static int rk29_i2c_xfer(struct i2c_adapter *adap,
534 struct i2c_msg *msgs, int num)
538 struct rk29_i2c_data *i2c = (struct rk29_i2c_data *)adap->algo_data;
540 //int retry = i2c->retry;
542 if(i2c->suspended ==1)
545 // 400k > scl_rate > 10k
546 if(msgs[0].scl_rate <= 400000 && msgs[0].scl_rate >= 10000)
547 i2c->scl_rate = msgs[0].scl_rate;
548 else if(msgs[0].scl_rate > 400000){
549 dev_info(i2c->dev, "Warning: msg[0].scl_rate( = %dKhz) is too high!",
550 msgs[0].scl_rate/1000);
551 i2c->scl_rate = 400000;
554 dev_info(i2c->dev, "Warning: msg[0].scl_rate( = %dKhz) is too low!",
555 msgs[0].scl_rate/1000);
556 i2c->scl_rate = 10000;
558 rk29_i2c_clockrate(i2c);
560 i2c->udelay_time = RK29_UDELAY_TIME(i2c->scl_rate);
561 i2c->ack_timeout = RK29_I2C_ACK_TIMEOUT_COUNT * i2c->udelay_time;
563 #if defined(CONFIG_ARCH_RK29) || defined(CONFIG_ARCH_RK30)
565 wake_lock(&idlelock);
568 for (i = 0; i < num; i++)
570 ret = rk29_xfer_msg(adap, &msgs[i], (i == 0), (i == (num - 1)));
574 i2c_err(i2c->dev, "rk29_xfer_msg error, ret = %d\n", ret);
579 #if defined(CONFIG_ARCH_RK29) || defined(CONFIG_ARCH_RK30)
581 wake_unlock(&idlelock);
585 if( --retry && num < 0)
587 udelay(10000 * 1000/i2c->scl_rate);
592 dev_err(i2c->dev, "i2c transfer err, client address is 0x%x [20110106]\n", msgs[0].addr);
596 static u32 rk29_i2c_func(struct i2c_adapter *adap)
598 return I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR;
601 static const struct i2c_algorithm rk29_i2c_algorithm = {
602 .master_xfer = rk29_i2c_xfer,
603 .functionality = rk29_i2c_func,
606 int i2c_suspended(struct i2c_adapter *adap)
608 struct rk29_i2c_data *i2c = (struct rk29_i2c_data *)adap->algo_data;
613 return i2c->suspended;
615 EXPORT_SYMBOL(i2c_suspended);
617 static void rk29_i2c_deinit_hw(struct rk29_i2c_data *i2c)
619 unsigned long opr = readl(i2c->regs + I2C_OPR);
621 opr &= ~I2C_OPR_RESET_STATUS;
622 writel(opr, i2c->regs);
625 static void rk29_i2c_init_hw(struct rk29_i2c_data *i2c)
627 unsigned long opr = readl(i2c->regs + I2C_OPR);
629 opr |= I2C_OPR_RESET_STATUS;
630 writel(opr, i2c->regs + I2C_OPR);
633 opr = readl(i2c->regs + I2C_OPR);
634 opr &= ~I2C_OPR_RESET_STATUS;
635 writel(opr, i2c->regs + I2C_OPR);
637 rk29_i2c_clockrate(i2c);
639 rk29_i2c_disable_irqs(i2c);
640 writel(0, i2c->regs + I2C_LCMR);
641 writel(0, i2c->regs + I2C_LCMR);
643 opr = readl(i2c->regs + I2C_OPR);
644 opr |= I2C_OPR_CORE_ENABLE;
645 writel(opr, i2c->regs + I2C_OPR);
650 #ifdef CONFIG_CPU_FREQ
652 #define freq_to_i2c(_n) container_of(_n, struct rk29_i2c_data, freq_transition)
654 static int rk29_i2c_cpufreq_transition(struct notifier_block *nb,
655 unsigned long val, void *data)
657 struct rk29_i2c_data *i2c = freq_to_i2c(nb);
660 delta_f = clk_get_rate(i2c->clk) - i2c->i2c_rate;
662 if ((val == CPUFREQ_POSTCHANGE && delta_f < 0) ||
663 (val == CPUFREQ_PRECHANGE && delta_f > 0))
665 spin_lock_irqsave(&i2c->cmd_lock, flags);
666 rk29_i2c_clockrate(i2c);
667 spin_unlock_irqrestore(&i2c->cmd_lock, flags);
672 static inline int rk29_i2c_register_cpufreq(struct rk29_i2c_data *i2c)
674 if (i2c->adap.nr != 0)
676 i2c->freq_transition.notifier_call = rk29_i2c_cpufreq_transition;
678 return cpufreq_register_notifier(&i2c->freq_transition,
679 CPUFREQ_TRANSITION_NOTIFIER);
682 static inline void rk29_i2c_unregister_cpufreq(struct rk29_i2c_data *i2c)
684 if (i2c->adap.nr != 0)
686 cpufreq_unregister_notifier(&i2c->freq_transition,
687 CPUFREQ_TRANSITION_NOTIFIER);
691 static inline int rk29_i2c_register_cpufreq(struct rk29_i2c_data *i2c)
696 static inline void rk29_i2c_unregister_cpufreq(struct rk29_i2c_data *i2c)
702 static int rk29_i2c_probe(struct platform_device *pdev)
704 struct rk29_i2c_data *i2c;
705 struct rk29_i2c_platform_data *pdata = NULL;
706 struct resource *res;
709 pdata = pdev->dev.platform_data;
712 i2c_err(&pdev->dev, "<error>no platform data\n");
715 i2c = kzalloc(sizeof(struct rk29_i2c_data), GFP_KERNEL);
718 i2c_err(&pdev->dev, "<error>no memory for state\n");
721 init_completion(&i2c->cmd_complete);
722 i2c->retry = RETRY_NUM;
723 i2c->mode = pdata->mode;
724 i2c->scl_rate = (pdata->scl_rate) ? pdata->scl_rate : 100000;
726 strlcpy(i2c->adap.name, DRV_NAME, sizeof(i2c->adap.name));
727 i2c->adap.owner = THIS_MODULE;
728 i2c->adap.algo = &rk29_i2c_algorithm;
729 i2c->adap.class = I2C_CLASS_HWMON;
730 i2c->adap.nr = pdata->bus_num;
731 i2c->adap.retries = 3;
732 i2c->adap.timeout = msecs_to_jiffies(500);
734 spin_lock_init(&i2c->cmd_lock);
736 i2c->dev = &pdev->dev;
738 i2c->clk = clk_get(&pdev->dev, "i2c");
739 if (IS_ERR(i2c->clk)) {
740 i2c_err(&pdev->dev, "<error>cannot get clock\n");
745 clk_enable(i2c->clk);
747 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
749 i2c_err(&pdev->dev, "<error>cannot find IO resource\n");
754 i2c->ioarea = request_mem_region(res->start, res->end - res->start + 1,
757 if (i2c->ioarea == NULL) {
758 i2c_err(&pdev->dev, "<error>cannot request IO\n");
763 i2c->regs = ioremap(res->start, res->end - res->start + 1);
765 if (i2c->regs == NULL) {
766 i2c_err(&pdev->dev, "<error>annot map IO\n");
770 i2c->adap.algo_data = i2c;
771 i2c->adap.dev.parent = &pdev->dev;
775 i2c->io_init = pdata->io_init;
779 i2c->irq = ret = platform_get_irq(pdev, 0);
781 i2c_err(&pdev->dev, "cannot find IRQ\n");
784 ret = request_irq(i2c->irq, rk29_i2c_irq, IRQF_DISABLED,
785 dev_name(&pdev->dev), i2c);
788 i2c_err(&pdev->dev, "cannot claim IRQ %d\n", i2c->irq);
791 ret = rk29_i2c_register_cpufreq(i2c);
793 i2c_err(&pdev->dev, "failed to register cpufreq notifier\n");
797 ret = i2c_add_numbered_adapter(&i2c->adap);
799 i2c_err(&pdev->dev, "failed to add bus to i2c core\n");
803 platform_set_drvdata(pdev, i2c);
804 rk29_i2c_init_hw(i2c);
806 dev_info(&pdev->dev, "%s: RK29 I2C adapter\n", dev_name(&i2c->adap.dev));
810 rk29_i2c_unregister_cpufreq(i2c);
813 free_irq(i2c->irq, i2c);
819 release_resource(i2c->ioarea);
823 clk_disable(i2c->clk);
832 static int rk29_i2c_remove(struct platform_device *pdev)
834 struct rk29_i2c_data *i2c = platform_get_drvdata(pdev);
837 rk29_i2c_deinit_hw(i2c);
838 rk29_i2c_unregister_cpufreq(i2c);
840 i2c_del_adapter(&i2c->adap);
841 free_irq(i2c->irq, i2c);
843 clk_disable(i2c->clk);
848 release_resource(i2c->ioarea);
856 static int rk29_i2c_suspend_noirq(struct device *dev)
858 struct platform_device *pdev = to_platform_device(dev);
859 struct rk29_i2c_data *i2c = platform_get_drvdata(pdev);
865 static int rk29_i2c_resume_noirq(struct device *dev)
867 struct platform_device *pdev = to_platform_device(dev);
868 struct rk29_i2c_data *i2c = platform_get_drvdata(pdev);
871 rk29_i2c_init_hw(i2c);
876 static struct dev_pm_ops rk29_i2c_pm_ops = {
877 .suspend_noirq = rk29_i2c_suspend_noirq,
878 .resume_noirq = rk29_i2c_resume_noirq,
882 static struct platform_driver rk29_i2c_driver = {
883 .probe = rk29_i2c_probe,
884 .remove = rk29_i2c_remove,
886 .owner = THIS_MODULE,
889 .pm = &rk29_i2c_pm_ops,
894 static int __init rk29_i2c_adap_init(void)
896 #if defined(CONFIG_ARCH_RK29) || defined(CONFIG_ARCH_RK30)
897 wake_lock_init(&idlelock, WAKE_LOCK_IDLE, "i2c0");
899 return platform_driver_register(&rk29_i2c_driver);
902 static void __exit rk29_i2c_adap_exit(void)
904 platform_driver_unregister(&rk29_i2c_driver);
907 subsys_initcall(rk29_i2c_adap_init);
908 module_exit(rk29_i2c_adap_exit);
910 MODULE_DESCRIPTION("Driver for RK29 I2C Bus");
911 MODULE_AUTHOR("kfx, kfx@rock-chips.com");
912 MODULE_LICENSE("GPL");