1 /*
2  * linux/drivers/i2c/busses/i2c-nuc900.c
3  *
4  * Copyright (c) 2010 Nuvoton technology corporation.
5  *
6  * This driver based on S3C2410 I2C driver of Ben Dooks <ben-Y5A6D6n0/KfQXOPxS62xeg@public.gmane.org>.
7  * Written by Wan ZongShun <mcuos.com-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation;version 2 of the License.
12  *
13  */
14 
15 #include <linux/kernel.h>
16 #include <linux/module.h>
17 
18 #include <linux/i2c.h>
19 #include <linux/init.h>
20 #include <linux/time.h>
21 #include <linux/interrupt.h>
22 #include <linux/delay.h>
23 #include <linux/errno.h>
24 #include <linux/err.h>
25 #include <linux/platform_device.h>
26 #include <linux/clk.h>
27 #include <linux/cpufreq.h>
28 #include <linux/slab.h>
29 #include <linux/io.h>
30 
31 #include <mach/mfp.h>
32 #include <mach/i2c.h>
33 
34 /* nuc900 i2c registers offset */
35 
36 #define CSR		0x00
37 #define DIVIDER		0x04
38 #define CMDR		0x08
39 #define SWR		0x0C
40 #define RXR		0x10
41 #define TXR		0x14
42 
43 /* nuc900 i2c CSR register bits */
44 
45 #define IRQEN		0x003
46 #define I2CBUSY		0x400
47 #define I2CSTART	0x018
48 #define IRQFLAG		0x004
49 #define ARBIT_LOST	0x200
50 #define SLAVE_ACK	0x800
51 
52 /* nuc900 i2c CMDR register bits */
53 
54 #define I2C_CMD_START	0x10
55 #define I2C_CMD_STOP	0x08
56 #define I2C_CMD_READ	0x04
57 #define I2C_CMD_WRITE	0x02
58 #define I2C_CMD_NACK	0x01
59 
60 /* i2c controller state */
61 
62 enum nuc900_i2c_state {
63 	STATE_IDLE,
64 	STATE_START,
65 	STATE_READ,
66 	STATE_WRITE,
67 	STATE_STOP
68 };
69 
70 /* i2c controller private data */
71 
72 struct nuc900_i2c {
73 	spinlock_t		lock;
74 	wait_queue_head_t	wait;
75 
76 	struct i2c_msg		*msg;
77 	unsigned int		msg_num;
78 	unsigned int		msg_idx;
79 	unsigned int		msg_ptr;
80 	unsigned int		irq;
81 
82 	enum nuc900_i2c_state	state;
83 
84 	void __iomem		*regs;
85 	struct clk		*clk;
86 	struct device		*dev;
87 	struct resource		*ioarea;
88 	struct i2c_adapter	adap;
89 };
90 
91 /* nuc900_i2c_master_complete
92  *
93  * complete the message and wake up the caller, using the given return code,
94  * or zero to mean ok.
95 */
96 
nuc900_i2c_master_complete(struct nuc900_i2c * i2c,int ret)97 static inline void nuc900_i2c_master_complete(struct nuc900_i2c *i2c, int ret)
98 {
99 	dev_dbg(i2c->dev, "master_complete %d\n", ret);
100 
101 	i2c->msg_ptr = 0;
102 	i2c->msg = NULL;
103 	i2c->msg_idx++;
104 	i2c->msg_num = 0;
105 	if (ret)
106 		i2c->msg_idx = ret;
107 
108 	wake_up(&i2c->wait);
109 }
110 
111 /* irq enable/disable functions */
112 
nuc900_i2c_disable_irq(struct nuc900_i2c * i2c)113 static inline void nuc900_i2c_disable_irq(struct nuc900_i2c *i2c)
114 {
115 	unsigned long tmp;
116 
117 	tmp = readl(i2c->regs + CSR);
118 	writel(tmp & ~IRQEN, i2c->regs + CSR);
119 }
120 
nuc900_i2c_enable_irq(struct nuc900_i2c * i2c)121 static inline void nuc900_i2c_enable_irq(struct nuc900_i2c *i2c)
122 {
123 	unsigned long tmp;
124 
125 	tmp = readl(i2c->regs + CSR);
126 	writel(tmp | IRQEN, i2c->regs + CSR);
127 }
128 
129 
130 /* nuc900_i2c_message_start
131  *
132  * put the start of a message onto the bus
133 */
134 
nuc900_i2c_message_start(struct nuc900_i2c * i2c,struct i2c_msg * msg)135 static void nuc900_i2c_message_start(struct nuc900_i2c *i2c,
136 				      struct i2c_msg *msg)
137 {
138 	unsigned int addr = (msg->addr & 0x7f) << 1;
139 
140 	if (msg->flags & I2C_M_RD)
141 		addr |= 0x1;
142 	writel(addr & 0xff, i2c->regs + TXR);
143 	writel(I2C_CMD_START | I2C_CMD_WRITE, i2c->regs + CMDR);
144 }
145 
nuc900_i2c_stop(struct nuc900_i2c * i2c,int ret)146 static inline void nuc900_i2c_stop(struct nuc900_i2c *i2c, int ret)
147 {
148 
149 	dev_dbg(i2c->dev, "STOP\n");
150 
151 	/* stop the transfer */
152 	i2c->state = STATE_STOP;
153 	writel(I2C_CMD_STOP, i2c->regs + CMDR);
154 
155 	nuc900_i2c_master_complete(i2c, ret);
156 	nuc900_i2c_disable_irq(i2c);
157 }
158 
159 /* helper functions to determine the current state in the set of
160  * messages we are sending
161 */
162 
163 /* is_lastmsg()
164  *
165  * returns TRUE if the current message is the last in the set
166 */
167 
is_lastmsg(struct nuc900_i2c * i2c)168 static inline int is_lastmsg(struct nuc900_i2c *i2c)
169 {
170 	return i2c->msg_idx >= (i2c->msg_num - 1);
171 }
172 
173 /* is_msglast
174  *
175  * returns TRUE if we this is the last byte in the current message
176 */
177 
is_msglast(struct nuc900_i2c * i2c)178 static inline int is_msglast(struct nuc900_i2c *i2c)
179 {
180 	return i2c->msg_ptr == i2c->msg->len-1;
181 }
182 
183 /* is_msgend
184  *
185  * returns TRUE if we reached the end of the current message
186 */
187 
is_msgend(struct nuc900_i2c * i2c)188 static inline int is_msgend(struct nuc900_i2c *i2c)
189 {
190 	return i2c->msg_ptr >= i2c->msg->len;
191 }
192 
193 /* i2c_nuc900_irq_nextbyte
194  *
195  * process an interrupt and work out what to do
196  */
197 
i2c_nuc900_irq_nextbyte(struct nuc900_i2c * i2c,unsigned long iicstat)198 static void i2c_nuc900_irq_nextbyte(struct nuc900_i2c *i2c,
199 							unsigned long iicstat)
200 {
201 	unsigned char byte;
202 
203 	switch (i2c->state) {
204 
205 	case STATE_IDLE:
206 		dev_err(i2c->dev, "%s: called in STATE_IDLE\n", __func__);
207 		break;
208 
209 	case STATE_STOP:
210 		dev_err(i2c->dev, "%s: called in STATE_STOP\n", __func__);
211 		nuc900_i2c_disable_irq(i2c);
212 		break;
213 
214 	case STATE_START:
215 		/* last thing we did was send a start condition on the
216 		 * bus, or started a new i2c message
217 		 */
218 
219 		if (iicstat & SLAVE_ACK &&
220 		    !(i2c->msg->flags & I2C_M_IGNORE_NAK)) {
221 			/* ack was not received... */
222 
223 			dev_dbg(i2c->dev, "ack was not received\n");
224 			nuc900_i2c_stop(i2c, -ENXIO);
225 			break;
226 		}
227 
228 		if (i2c->msg->flags & I2C_M_RD)
229 			i2c->state = STATE_READ;
230 		else
231 			i2c->state = STATE_WRITE;
232 
233 		/* terminate the transfer if there is nothing to do
234 		 * as this is used by the i2c probe to find devices.
235 		*/
236 
237 		if (is_lastmsg(i2c) && i2c->msg->len == 0) {
238 			nuc900_i2c_stop(i2c, 0);
239 			break;
240 		}
241 
242 		if (i2c->state == STATE_READ)
243 			goto prepare_read;
244 
245 		/* fall through to the write state, as we will need to
246 		 * send a byte as well
247 		*/
248 
249 	case STATE_WRITE:
250 		/* we are writing data to the device... check for the
251 		 * end of the message, and if so, work out what to do
252 		 */
253 
254 		if (!(i2c->msg->flags & I2C_M_IGNORE_NAK)) {
255 			if (iicstat & SLAVE_ACK) {
256 				dev_dbg(i2c->dev, "WRITE: No Ack\n");
257 
258 				nuc900_i2c_stop(i2c, -ECONNREFUSED);
259 				break;
260 			}
261 		}
262 
263 retry_write:
264 
265 		if (!is_msgend(i2c)) {
266 			byte = i2c->msg->buf[i2c->msg_ptr++];
267 			writeb(byte, i2c->regs + TXR);
268 			writel(I2C_CMD_WRITE, i2c->regs + CMDR);
269 
270 		} else if (!is_lastmsg(i2c)) {
271 			/* we need to go to the next i2c message */
272 
273 			dev_dbg(i2c->dev, "WRITE: Next Message\n");
274 
275 			i2c->msg_ptr = 0;
276 			i2c->msg_idx++;
277 			i2c->msg++;
278 
279 			/* check to see if we need to do another message */
280 			if (i2c->msg->flags & I2C_M_NOSTART) {
281 
282 				if (i2c->msg->flags & I2C_M_RD) {
283 					/* cannot do this, the controller
284 					 * forces us to send a new START
285 					 * when we change direction
286 					*/
287 
288 					nuc900_i2c_stop(i2c, -EINVAL);
289 				}
290 
291 				goto retry_write;
292 			} else {
293 				/* send the new start */
294 				nuc900_i2c_message_start(i2c, i2c->msg);
295 				i2c->state = STATE_START;
296 			}
297 
298 		} else {
299 			/* send stop */
300 
301 			nuc900_i2c_stop(i2c, 0);
302 		}
303 		break;
304 
305 	case STATE_READ:
306 		/* we have a byte of data in the data register, do
307 		 * something with it, and then work out wether we are
308 		 * going to do any more read/write
309 		 */
310 
311 		byte = readb(i2c->regs + RXR);
312 		i2c->msg->buf[i2c->msg_ptr++] = byte;
313 
314 prepare_read:
315 		if (is_msglast(i2c)) {
316 			/* last byte of buffer */
317 
318 			if (is_lastmsg(i2c))
319 				writel(I2C_CMD_READ | I2C_CMD_NACK,
320 							i2c->regs + CMDR);
321 
322 		} else if (is_msgend(i2c)) {
323 			/* ok, we've read the entire buffer, see if there
324 			 * is anything else we need to do
325 			*/
326 
327 			if (is_lastmsg(i2c)) {
328 				/* last message, send stop and complete */
329 				dev_dbg(i2c->dev, "READ: Send Stop\n");
330 
331 				nuc900_i2c_stop(i2c, 0);
332 			} else {
333 				/* go to the next transfer */
334 				dev_dbg(i2c->dev, "READ: Next Transfer\n");
335 
336 				i2c->msg_ptr = 0;
337 				i2c->msg_idx++;
338 				i2c->msg++;
339 
340 				writel(I2C_CMD_READ, i2c->regs + CMDR);
341 			}
342 
343 		} else {
344 			writel(I2C_CMD_READ, i2c->regs + CMDR);
345 		}
346 
347 		break;
348 	}
349 }
350 
351 /* nuc900_i2c_irq
352  *
353  * top level IRQ servicing routine
354 */
355 
nuc900_i2c_irq(int irqno,void * dev_id)356 static irqreturn_t nuc900_i2c_irq(int irqno, void *dev_id)
357 {
358 	struct nuc900_i2c *i2c = dev_id;
359 	unsigned long status;
360 
361 	status = readl(i2c->regs + CSR);
362 	writel(status | IRQFLAG, i2c->regs + CSR);
363 
364 	if (status & ARBIT_LOST) {
365 		/* deal with arbitration loss */
366 		dev_err(i2c->dev, "deal with arbitration loss\n");
367 		goto out;
368 	}
369 
370 	if (i2c->state == STATE_IDLE) {
371 		dev_dbg(i2c->dev, "IRQ: error i2c->state == IDLE\n");
372 		goto out;
373 	}
374 
375 	/* pretty much this leaves us with the fact that we've
376 	 * transmitted or received whatever byte we last sent
377 	*/
378 
379 	i2c_nuc900_irq_nextbyte(i2c, status);
380 
381  out:
382 	return IRQ_HANDLED;
383 }
384 
385 
386 /* nuc900_i2c_set_master
387  *
388  * get the i2c bus for a master transaction
389 */
390 
nuc900_i2c_set_master(struct nuc900_i2c * i2c)391 static int nuc900_i2c_set_master(struct nuc900_i2c *i2c)
392 {
393 	int timeout = 400;
394 
395 	while (timeout-- > 0) {
396 		if (((readl(i2c->regs + SWR) & I2CSTART) == I2CSTART) &&
397 				((readl(i2c->regs + CSR) & I2CBUSY) == 0)) {
398 			return 0;
399 		}
400 
401 		msleep(1);
402 	}
403 
404 	return -ETIMEDOUT;
405 }
406 
407 /* nuc900_i2c_doxfer
408  *
409  * this starts an i2c transfer
410 */
411 
nuc900_i2c_doxfer(struct nuc900_i2c * i2c,struct i2c_msg * msgs,int num)412 static int nuc900_i2c_doxfer(struct nuc900_i2c *i2c,
413 			      struct i2c_msg *msgs, int num)
414 {
415 	unsigned long iicstat, timeout;
416 	int spins = 20;
417 	int ret;
418 
419 	ret = nuc900_i2c_set_master(i2c);
420 	if (ret != 0) {
421 		dev_err(i2c->dev, "cannot get bus (error %d)\n", ret);
422 		ret = -EAGAIN;
423 		goto out;
424 	}
425 
426 	spin_lock_irq(&i2c->lock);
427 
428 	i2c->msg     = msgs;
429 	i2c->msg_num = num;
430 	i2c->msg_ptr = 0;
431 	i2c->msg_idx = 0;
432 	i2c->state   = STATE_START;
433 
434 	nuc900_i2c_message_start(i2c, msgs);
435 	spin_unlock_irq(&i2c->lock);
436 
437 	timeout = wait_event_timeout(i2c->wait, i2c->msg_num == 0, HZ * 5);
438 
439 	ret = i2c->msg_idx;
440 
441 	/* having these next two as dev_err() makes life very
442 	 * noisy when doing an i2cdetect
443 	*/
444 
445 	if (timeout == 0)
446 		dev_dbg(i2c->dev, "timeout\n");
447 	else if (ret != num)
448 		dev_dbg(i2c->dev, "incomplete xfer (%d)\n", ret);
449 
450 	/* ensure the stop has been through the bus */
451 
452 	dev_dbg(i2c->dev, "waiting for bus idle\n");
453 
454 	/* first, try busy waiting briefly */
455 	do {
456 		iicstat = readl(i2c->regs + CSR);
457 	} while ((iicstat & I2CBUSY) && --spins);
458 
459 	/* if that timed out sleep */
460 	if (!spins) {
461 		msleep(1);
462 		iicstat = readl(i2c->regs + CSR);
463 	}
464 
465 	if (iicstat & I2CBUSY)
466 		dev_warn(i2c->dev, "timeout waiting for bus idle\n");
467 
468  out:
469 	return ret;
470 }
471 
472 /* nuc900_i2c_xfer
473  *
474  * first port of call from the i2c bus code when an message needs
475  * transferring across the i2c bus.
476 */
477 
nuc900_i2c_xfer(struct i2c_adapter * adap,struct i2c_msg * msgs,int num)478 static int nuc900_i2c_xfer(struct i2c_adapter *adap,
479 			struct i2c_msg *msgs, int num)
480 {
481 	struct nuc900_i2c *i2c = (struct nuc900_i2c *)adap->algo_data;
482 	int retry;
483 	int ret;
484 
485 	nuc900_i2c_enable_irq(i2c);
486 
487 	for (retry = 0; retry < adap->retries; retry++) {
488 
489 		ret = nuc900_i2c_doxfer(i2c, msgs, num);
490 
491 		if (ret != -EAGAIN)
492 			return ret;
493 
494 		dev_dbg(i2c->dev, "Retrying transmission (%d)\n", retry);
495 
496 		udelay(100);
497 	}
498 
499 	return -EREMOTEIO;
500 }
501 
502 /* declare our i2c functionality */
nuc900_i2c_func(struct i2c_adapter * adap)503 static u32 nuc900_i2c_func(struct i2c_adapter *adap)
504 {
505 	return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | I2C_FUNC_PROTOCOL_MANGLING;
506 }
507 
508 /* i2c bus registration info */
509 
510 static const struct i2c_algorithm nuc900_i2c_algorithm = {
511 	.master_xfer		= nuc900_i2c_xfer,
512 	.functionality		= nuc900_i2c_func,
513 };
514 
515 /* nuc900_i2c_probe
516  *
517  * called by the bus driver when a suitable device is found
518 */
519 
nuc900_i2c_probe(struct platform_device * pdev)520 static int __devinit nuc900_i2c_probe(struct platform_device *pdev)
521 {
522 	struct nuc900_i2c *i2c;
523 	struct nuc900_platform_i2c *pdata;
524 	struct resource *res;
525 	int ret;
526 
527 	pdata = pdev->dev.platform_data;
528 	if (!pdata) {
529 		dev_err(&pdev->dev, "no platform data\n");
530 		return -EINVAL;
531 	}
532 
533 	i2c = kzalloc(sizeof(struct nuc900_i2c), GFP_KERNEL);
534 	if (!i2c) {
535 		dev_err(&pdev->dev, "no memory for state\n");
536 		return -ENOMEM;
537 	}
538 
539 	strlcpy(i2c->adap.name, "nuc900-i2c0", sizeof(i2c->adap.name));
540 	i2c->adap.owner   = THIS_MODULE;
541 	i2c->adap.algo    = &nuc900_i2c_algorithm;
542 	i2c->adap.retries = 2;
543 	i2c->adap.class   = I2C_CLASS_HWMON | I2C_CLASS_SPD;
544 
545 	spin_lock_init(&i2c->lock);
546 	init_waitqueue_head(&i2c->wait);
547 
548 	/* find the clock and enable it */
549 
550 	i2c->dev = &pdev->dev;
551 	i2c->clk = clk_get(&pdev->dev, NULL);
552 	if (IS_ERR(i2c->clk)) {
553 		dev_err(&pdev->dev, "cannot get clock\n");
554 		ret = -ENOENT;
555 		goto err_noclk;
556 	}
557 
558 	dev_dbg(&pdev->dev, "clock source %p\n", i2c->clk);
559 
560 	clk_enable(i2c->clk);
561 
562 	/* map the registers */
563 
564 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
565 	if (res == NULL) {
566 		dev_err(&pdev->dev, "cannot find IO resource\n");
567 		ret = -ENOENT;
568 		goto err_clk;
569 	}
570 
571 	i2c->ioarea = request_mem_region(res->start, resource_size(res),
572 					 pdev->name);
573 
574 	if (i2c->ioarea == NULL) {
575 		dev_err(&pdev->dev, "cannot request IO\n");
576 		ret = -ENXIO;
577 		goto err_clk;
578 	}
579 
580 	i2c->regs = ioremap(res->start, resource_size(res));
581 
582 	if (i2c->regs == NULL) {
583 		dev_err(&pdev->dev, "cannot map IO\n");
584 		ret = -ENXIO;
585 		goto err_ioarea;
586 	}
587 
588 	dev_dbg(&pdev->dev, "registers %p (%p, %p)\n",
589 		i2c->regs, i2c->ioarea, res);
590 
591 	/* setup info block for the i2c core */
592 
593 	i2c->adap.algo_data = i2c;
594 	i2c->adap.dev.parent = &pdev->dev;
595 
596 	mfp_set_groupg(&pdev->dev, NULL);
597 
598 	clk_get_rate(i2c->clk);
599 
600 	ret = (i2c->clk.apbfreq)/(pdata->bus_freq * 5) - 1;
601 	writel(ret & 0xffff, i2c->regs + DIVIDER);
602 
603 	/* find the IRQ for this unit (note, this relies on the init call to
604 	 * ensure no current IRQs pending
605 	 */
606 
607 	i2c->irq = ret = platform_get_irq(pdev, 0);
608 	if (ret <= 0) {
609 		dev_err(&pdev->dev, "cannot find IRQ\n");
610 		goto err_iomap;
611 	}
612 
613 	ret = request_irq(i2c->irq, nuc900_i2c_irq, IRQF_SHARED,
614 			  dev_name(&pdev->dev), i2c);
615 
616 	if (ret != 0) {
617 		dev_err(&pdev->dev, "cannot claim IRQ %d\n", i2c->irq);
618 		goto err_iomap;
619 	}
620 
621 	/* Note, previous versions of the driver used i2c_add_adapter()
622 	 * to add the bus at any number. We now pass the bus number via
623 	 * the platform data, so if unset it will now default to always
624 	 * being bus 0.
625 	 */
626 
627 	i2c->adap.nr = pdata->bus_num;
628 
629 	ret = i2c_add_numbered_adapter(&i2c->adap);
630 	if (ret < 0) {
631 		dev_err(&pdev->dev, "failed to add bus to i2c core\n");
632 		goto err_irq;
633 	}
634 
635 	platform_set_drvdata(pdev, i2c);
636 
637 	dev_info(&pdev->dev, "%s: NUC900 I2C adapter\n",
638 						dev_name(&i2c->adap.dev));
639 	return 0;
640 
641  err_irq:
642 	free_irq(i2c->irq, i2c);
643 
644  err_iomap:
645 	iounmap(i2c->regs);
646 
647  err_ioarea:
648 	release_resource(i2c->ioarea);
649 	kfree(i2c->ioarea);
650 
651  err_clk:
652 	clk_disable(i2c->clk);
653 	clk_put(i2c->clk);
654 
655  err_noclk:
656 	kfree(i2c);
657 	return ret;
658 }
659 
660 /* nuc900_i2c_remove
661  *
662  * called when device is removed from the bus
663 */
664 
nuc900_i2c_remove(struct platform_device * pdev)665 static int __devexit nuc900_i2c_remove(struct platform_device *pdev)
666 {
667 	struct nuc900_i2c *i2c = platform_get_drvdata(pdev);
668 
669 	i2c_del_adapter(&i2c->adap);
670 	free_irq(i2c->irq, i2c);
671 
672 	clk_disable(i2c->clk);
673 	clk_put(i2c->clk);
674 
675 	iounmap(i2c->regs);
676 
677 	release_resource(i2c->ioarea);
678 	kfree(i2c->ioarea);
679 	kfree(i2c);
680 
681 	return 0;
682 }
683 
684 static struct platform_driver nuc900_i2c_driver = {
685 	.probe		= nuc900_i2c_probe,
686 	.remove		= __devexit_p(nuc900_i2c_remove),
687 	.driver		= {
688 		.owner	= THIS_MODULE,
689 		.name	= "nuc900-i2c0",
690 	},
691 };
692 
i2c_adap_nuc900_init(void)693 static int __init i2c_adap_nuc900_init(void)
694 {
695 	return platform_driver_register(&nuc900_i2c_driver);
696 }
697 
i2c_adap_nuc900_exit(void)698 static void __exit i2c_adap_nuc900_exit(void)
699 {
700 	platform_driver_unregister(&nuc900_i2c_driver);
701 }
702 subsys_initcall(i2c_adap_nuc900_init);
703 module_exit(i2c_adap_nuc900_exit);
704 
705 MODULE_DESCRIPTION("NUC900 I2C Bus driver");
706 MODULE_AUTHOR("Wan ZongShun, <mcuos.com-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>");
707 MODULE_LICENSE("GPL");
708 MODULE_ALIAS("platform:nuc900-i2c0");
709