ti_i2c.c revision 270243
1/*-
2 * Copyright (c) 2011
3 *	Ben Gray <ben.r.gray@gmail.com>.
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 *    notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 *    notice, this list of conditions and the following disclaimer in the
13 *    documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 * SUCH DAMAGE.
26 */
27
28/**
29 * Driver for the I2C module on the TI SoC.
30 *
31 * This driver is heavily based on the TWI driver for the AT91 (at91_twi.c).
32 *
33 * CAUTION: The I2Ci registers are limited to 16 bit and 8 bit data accesses,
34 * 32 bit data access is not allowed and can corrupt register content.
35 *
36 * This driver currently doesn't use DMA for the transfer, although I hope to
37 * incorporate that sometime in the future.  The idea being that for transaction
38 * larger than a certain size the DMA engine is used, for anything less the
39 * normal interrupt/fifo driven option is used.
40 *
41 *
42 * WARNING: This driver uses mtx_sleep and interrupts to perform transactions,
43 * which means you can't do a transaction during startup before the interrupts
44 * have been enabled.  Hint - the freebsd function config_intrhook_establish().
45 */
46
47#include <sys/cdefs.h>
48__FBSDID("$FreeBSD: stable/10/sys/arm/ti/ti_i2c.c 270243 2014-08-20 19:37:05Z loos $");
49
50#include <sys/param.h>
51#include <sys/systm.h>
52#include <sys/bus.h>
53#include <sys/conf.h>
54#include <sys/kernel.h>
55#include <sys/lock.h>
56#include <sys/mbuf.h>
57#include <sys/malloc.h>
58#include <sys/module.h>
59#include <sys/mutex.h>
60#include <sys/rman.h>
61#include <machine/bus.h>
62
63#include <dev/fdt/fdt_common.h>
64#include <dev/ofw/openfirm.h>
65#include <dev/ofw/ofw_bus.h>
66#include <dev/ofw/ofw_bus_subr.h>
67
68#include <arm/ti/ti_prcm.h>
69#include <arm/ti/ti_i2c.h>
70
71#include <dev/iicbus/iiconf.h>
72#include <dev/iicbus/iicbus.h>
73
74#include "iicbus_if.h"
75
76/**
77 *	I2C device driver context, a pointer to this is stored in the device
78 *	driver structure.
79 */
80struct ti_i2c_softc
81{
82	device_t		sc_dev;
83	uint32_t		device_id;
84	struct resource*	sc_irq_res;
85	struct resource*	sc_mem_res;
86	device_t		sc_iicbus;
87
88	void*			sc_irq_h;
89
90	struct mtx		sc_mtx;
91
92	volatile uint16_t	sc_stat_flags;	/* contains the status flags last IRQ */
93
94	uint16_t		sc_rev;
95};
96
97struct ti_i2c_clock_config
98{
99	int speed;
100	int bitrate;
101	uint8_t psc;		/* Fast/Standard mode prescale divider */
102	uint8_t scll;		/* Fast/Standard mode SCL low time */
103	uint8_t sclh;		/* Fast/Standard mode SCL high time */
104	uint8_t hsscll;		/* High Speed mode SCL low time */
105	uint8_t hssclh;		/* High Speed mode SCL high time */
106};
107
108static struct ti_i2c_clock_config ti_i2c_clock_configs[] = {
109
110#if defined(SOC_OMAP4)
111	{ IIC_SLOW,      100000, 23,  13,  15, 0,  0},
112	{ IIC_FAST,      400000,  9,   5,   7, 0,  0},
113	{ IIC_FASTEST,	3310000,  1, 113, 115, 7, 10},
114#elif defined(SOC_TI_AM335X)
115	{ IIC_SLOW,      100000,  3,  53,  55, 0,  0},
116	{ IIC_FAST,      400000,  3,   8,  10, 0,  0},
117	{ IIC_FASTEST,   400000,  3,   8,  10, 0,  0}, /* This might be higher */
118#else
119#error "TI I2C driver is not supported on this SoC"
120#endif
121	{ -1, 0 }
122};
123
124
125#define TI_I2C_REV1  0x003C      /* OMAP3 */
126#define TI_I2C_REV2  0x000A      /* OMAP4 */
127
128/**
129 *	Locking macros used throughout the driver
130 */
131#define TI_I2C_LOCK(_sc)             mtx_lock(&(_sc)->sc_mtx)
132#define	TI_I2C_UNLOCK(_sc)           mtx_unlock(&(_sc)->sc_mtx)
133#define TI_I2C_LOCK_INIT(_sc) \
134	mtx_init(&_sc->sc_mtx, device_get_nameunit(_sc->sc_dev), \
135	         "ti_i2c", MTX_DEF)
136#define TI_I2C_LOCK_DESTROY(_sc)      mtx_destroy(&_sc->sc_mtx);
137#define TI_I2C_ASSERT_LOCKED(_sc)     mtx_assert(&_sc->sc_mtx, MA_OWNED);
138#define TI_I2C_ASSERT_UNLOCKED(_sc)   mtx_assert(&_sc->sc_mtx, MA_NOTOWNED);
139
140#ifdef DEBUG
141#define ti_i2c_dbg(_sc, fmt, args...) \
142    device_printf((_sc)->sc_dev, fmt, ##args)
143#else
144#define ti_i2c_dbg(_sc, fmt, args...)
145#endif
146
147static devclass_t ti_i2c_devclass;
148
149/* bus entry points */
150
151static int ti_i2c_probe(device_t dev);
152static int ti_i2c_attach(device_t dev);
153static int ti_i2c_detach(device_t dev);
154static void ti_i2c_intr(void *);
155
156/* OFW routine */
157static phandle_t ti_i2c_get_node(device_t bus, device_t dev);
158
159/* helper routines */
160static int ti_i2c_activate(device_t dev);
161static void ti_i2c_deactivate(device_t dev);
162
163/**
164 *	ti_i2c_read_2 - reads a 16-bit value from one of the I2C registers
165 *	@sc: I2C device context
166 *	@off: the byte offset within the register bank to read from.
167 *
168 *
169 *	LOCKING:
170 *	No locking required
171 *
172 *	RETURNS:
173 *	16-bit value read from the register.
174 */
175static inline uint16_t
176ti_i2c_read_2(struct ti_i2c_softc *sc, bus_size_t off)
177{
178	return bus_read_2(sc->sc_mem_res, off);
179}
180
181/**
182 *	ti_i2c_write_2 - writes a 16-bit value to one of the I2C registers
183 *	@sc: I2C device context
184 *	@off: the byte offset within the register bank to read from.
185 *	@val: the value to write into the register
186 *
187 *	LOCKING:
188 *	No locking required
189 *
190 *	RETURNS:
191 *	16-bit value read from the register.
192 */
193static inline void
194ti_i2c_write_2(struct ti_i2c_softc *sc, bus_size_t off, uint16_t val)
195{
196	bus_write_2(sc->sc_mem_res, off, val);
197}
198
199/**
200 *	ti_i2c_read_reg - reads a 16-bit value from one of the I2C registers
201 *	    take into account revision-dependent register offset
202 *	@sc: I2C device context
203 *	@off: the byte offset within the register bank to read from.
204 *
205 *
206 *	LOCKING:
207 *	No locking required
208 *
209 *	RETURNS:
210 *	16-bit value read from the register.
211 */
212static inline uint16_t
213ti_i2c_read_reg(struct ti_i2c_softc *sc, bus_size_t off)
214{
215	/* XXXOMAP3: FIXME add registers mapping here */
216	return bus_read_2(sc->sc_mem_res, off);
217}
218
219/**
220 *	ti_i2c_write_reg - writes a 16-bit value to one of the I2C registers
221 *	    take into account revision-dependent register offset
222 *	@sc: I2C device context
223 *	@off: the byte offset within the register bank to read from.
224 *	@val: the value to write into the register
225 *
226 *	LOCKING:
227 *	No locking required
228 *
229 *	RETURNS:
230 *	16-bit value read from the register.
231 */
232static inline void
233ti_i2c_write_reg(struct ti_i2c_softc *sc, bus_size_t off, uint16_t val)
234{
235	/* XXXOMAP3: FIXME add registers mapping here */
236	bus_write_2(sc->sc_mem_res, off, val);
237}
238
239/**
240 *	ti_i2c_set_intr_enable - writes the interrupt enable register
241 *	@sc: I2C device context
242 *	@ie: bitmask of the interrupts to enable
243 *
244 *	This function is needed as writing the I2C_IE register on the OMAP4 devices
245 *	doesn't seem to actually enable the interrupt, rather you have to write
246 *	through the I2C_IRQENABLE_CLR and I2C_IRQENABLE_SET registers.
247 *
248 *	LOCKING:
249 *	No locking required
250 *
251 *	RETURNS:
252 *	Nothing.
253 */
254static inline void
255ti_i2c_set_intr_enable(struct ti_i2c_softc *sc, uint16_t ie)
256{
257	/* XXXOMAP3: FIXME */
258	ti_i2c_write_2(sc, I2C_REG_IRQENABLE_CLR, 0xffff);
259	if (ie)
260		ti_i2c_write_2(sc, I2C_REG_IRQENABLE_SET, ie);
261}
262
263/**
264 *	ti_i2c_reset - attach function for the driver
265 *	@dev: i2c device handle
266 *
267 *
268 *
269 *	LOCKING:
270 *	Called from timer context
271 *
272 *	RETURNS:
273 *	EH_HANDLED or EH_NOT_HANDLED
274 */
275static int
276ti_i2c_reset(device_t dev, u_char speed, u_char addr, u_char *oldaddr)
277{
278	struct ti_i2c_softc *sc = device_get_softc(dev);
279	struct ti_i2c_clock_config *clkcfg;
280	uint16_t con_reg;
281
282	clkcfg = ti_i2c_clock_configs;
283	while (clkcfg->speed != -1) {
284		if (clkcfg->speed == speed)
285			break;
286		/* take slow if speed is unknown */
287		if ((speed == IIC_UNKNOWN) && (clkcfg->speed == IIC_SLOW))
288			break;
289		clkcfg++;
290	}
291	if (clkcfg->speed == -1)
292		return (EINVAL);
293
294	TI_I2C_LOCK(sc);
295
296	/* First disable the controller while changing the clocks */
297	con_reg = ti_i2c_read_reg(sc, I2C_REG_CON);
298	ti_i2c_write_reg(sc, I2C_REG_CON, 0x0000);
299
300	/* Program the prescaler */
301	ti_i2c_write_reg(sc, I2C_REG_PSC, clkcfg->psc);
302
303	/* Set the bitrate */
304	ti_i2c_write_reg(sc, I2C_REG_SCLL, clkcfg->scll | (clkcfg->hsscll<<8));
305	ti_i2c_write_reg(sc, I2C_REG_SCLH, clkcfg->sclh | (clkcfg->hssclh<<8));
306
307	/* Check if we are dealing with high speed mode */
308	if ((clkcfg->hsscll + clkcfg->hssclh) > 0)
309		con_reg  = I2C_CON_OPMODE_HS;
310	else
311		con_reg  = I2C_CON_OPMODE_STD;
312
313	/* Enable the I2C module again */
314	ti_i2c_write_reg(sc, I2C_REG_CON, I2C_CON_I2C_EN | con_reg);
315
316	TI_I2C_UNLOCK(sc);
317
318	return (IIC_ENOADDR);
319}
320
321/**
322 *	ti_i2c_intr - interrupt handler for the I2C module
323 *	@dev: i2c device handle
324 *
325 *
326 *
327 *	LOCKING:
328 *	Called from timer context
329 *
330 *	RETURNS:
331 *	EH_HANDLED or EH_NOT_HANDLED
332 */
333static void
334ti_i2c_intr(void *arg)
335{
336	struct ti_i2c_softc *sc = (struct ti_i2c_softc*) arg;
337	uint16_t status;
338
339	status = ti_i2c_read_reg(sc, I2C_REG_STAT);
340	if (status == 0)
341		return;
342
343	TI_I2C_LOCK(sc);
344
345	/* save the flags */
346	sc->sc_stat_flags |= status;
347
348	/* clear the status flags */
349	ti_i2c_write_reg(sc, I2C_REG_STAT, status);
350
351	/* wakeup the process the started the transaction */
352	wakeup(sc);
353
354	TI_I2C_UNLOCK(sc);
355
356	return;
357}
358
359/**
360 *	ti_i2c_wait - waits for the specific event to occur
361 *	@sc: i2c driver context
362 *	@flags: the event(s) to wait on, this is a bitmask of the I2C_STAT_??? flags
363 *	@statp: if not null will contain the status flags upon return
364 *	@timo: the number of ticks to wait
365 *
366 *
367 *
368 *	LOCKING:
369 *	The driver context must be locked before calling this function. Internally
370 *	the function sleeps, releasing the lock as it does so, however the lock is
371 *	always retaken before this function returns.
372 *
373 *	RETURNS:
374 *	0 if the event(s) were tripped within timeout period
375 *	EBUSY if timedout waiting for the events
376 *	ENXIO if a NACK event was received
377 */
378static int
379ti_i2c_wait(struct ti_i2c_softc *sc, uint16_t flags, uint16_t *statp, int timo)
380{
381	int waittime = timo;
382	int start_ticks = ticks;
383	int rc;
384
385	TI_I2C_ASSERT_LOCKED(sc);
386
387	/* check if the condition has already occured, the interrupt routine will
388	 * clear the status flags.
389	 */
390	if ((sc->sc_stat_flags & flags) == 0) {
391
392		/* condition(s) haven't occured so sleep on the IRQ */
393		while (waittime > 0) {
394
395			rc = mtx_sleep(sc, &sc->sc_mtx, 0, "I2Cwait", waittime);
396			if (rc == EWOULDBLOCK) {
397				/* timed-out, simply break out of the loop */
398				break;
399			} else {
400				/* IRQ has been tripped, but need to sanity check we have the
401				 * right events in the status flag.
402				 */
403				if ((sc->sc_stat_flags & flags) != 0)
404					break;
405
406				/* event hasn't been tripped so wait some more */
407				waittime -= (ticks - start_ticks);
408				start_ticks = ticks;
409			}
410		}
411	}
412
413	/* copy the actual status bits */
414	if (statp != NULL)
415		*statp = sc->sc_stat_flags;
416
417	/* return the status found */
418	if ((sc->sc_stat_flags & flags) != 0)
419		rc = 0;
420	else
421		rc = EBUSY;
422
423	/* clear the flags set by the interrupt handler */
424	sc->sc_stat_flags = 0;
425
426	return (rc);
427}
428
429/**
430 *	ti_i2c_wait_for_free_bus - waits for the bus to become free
431 *	@sc: i2c driver context
432 *	@timo: the time to wait for the bus to become free
433 *
434 *
435 *
436 *	LOCKING:
437 *	The driver context must be locked before calling this function. Internally
438 *	the function sleeps, releasing the lock as it does so, however the lock is
439 *	always taken before this function returns.
440 *
441 *	RETURNS:
442 *	0 if the event(s) were tripped within timeout period
443 *	EBUSY if timedout waiting for the events
444 *	ENXIO if a NACK event was received
445 */
446static int
447ti_i2c_wait_for_free_bus(struct ti_i2c_softc *sc, int timo)
448{
449	/* check if the bus is free, BB bit = 0 */
450	if ((ti_i2c_read_reg(sc, I2C_REG_STAT) & I2C_STAT_BB) == 0)
451		return 0;
452
453	/* enable bus free interrupts */
454	ti_i2c_set_intr_enable(sc, I2C_IE_BF);
455
456	/* wait for the bus free interrupt to be tripped */
457	return ti_i2c_wait(sc, I2C_STAT_BF, NULL, timo);
458}
459
460/**
461 *	ti_i2c_read_bytes - attempts to perform a read operation
462 *	@sc: i2c driver context
463 *	@buf: buffer to hold the received bytes
464 *	@len: the number of bytes to read
465 *
466 *	This function assumes the slave address is already set
467 *
468 *	LOCKING:
469 *	The context lock should be held before calling this function
470 *
471 *	RETURNS:
472 *	0 on function succeeded
473 *	EINVAL if invalid message is passed as an arg
474 */
475static int
476ti_i2c_read_bytes(struct ti_i2c_softc *sc, uint8_t *buf, uint16_t len)
477{
478	int      timo = (hz / 4);
479	int      err = 0;
480	uint16_t con_reg;
481	uint16_t events;
482	uint16_t status;
483	uint32_t amount = 0;
484	uint32_t sofar = 0;
485	uint32_t i;
486
487	/* wait for the bus to become free */
488	err = ti_i2c_wait_for_free_bus(sc, timo);
489	if (err != 0) {
490		device_printf(sc->sc_dev, "bus never freed\n");
491		return (err);
492	}
493
494	/* set the events to wait for */
495	events = I2C_IE_RDR |   /* Receive draining interrupt */
496	         I2C_IE_RRDY |  /* Receive Data Ready interrupt */
497	         I2C_IE_ARDY |  /* Register Access Ready interrupt */
498	         I2C_IE_NACK |  /* No Acknowledgment interrupt */
499	         I2C_IE_AL;
500
501	/* enable interrupts for the events we want */
502	ti_i2c_set_intr_enable(sc, events);
503
504	/* write the number of bytes to read */
505	ti_i2c_write_reg(sc, I2C_REG_CNT, len);
506
507	/* clear the write bit and initiate the read transaction. Setting the STT
508	 * (start) bit initiates the transfer.
509	 */
510	con_reg = ti_i2c_read_reg(sc, I2C_REG_CON);
511	con_reg &= ~I2C_CON_TRX;
512	con_reg |=  I2C_CON_MST | I2C_CON_STT | I2C_CON_STP;
513	ti_i2c_write_reg(sc, I2C_REG_CON, con_reg);
514
515	/* reading loop */
516	while (1) {
517
518		/* wait for an event */
519		err = ti_i2c_wait(sc, events, &status, timo);
520		if (err != 0) {
521			break;
522		}
523
524		/* check for the error conditions */
525		if (status & I2C_STAT_NACK) {
526			/* no ACK from slave */
527			ti_i2c_dbg(sc, "NACK\n");
528			err = ENXIO;
529			break;
530		}
531		if (status & I2C_STAT_AL) {
532			/* arbitration lost */
533			ti_i2c_dbg(sc, "Arbitration lost\n");
534			err = ENXIO;
535			break;
536		}
537
538		/* check if we have finished */
539		if (status & I2C_STAT_ARDY) {
540			/* register access ready - transaction complete basically */
541			ti_i2c_dbg(sc, "ARDY transaction complete\n");
542			err = 0;
543			break;
544		}
545
546		/* read some data */
547		if (status & I2C_STAT_RDR) {
548			/* Receive draining interrupt - last data received */
549			ti_i2c_dbg(sc, "Receive draining interrupt\n");
550
551			/* get the number of bytes in the FIFO */
552			amount = ti_i2c_read_reg(sc, I2C_REG_BUFSTAT);
553			amount >>= 8;
554			amount &= 0x3f;
555		}
556		else if (status & I2C_STAT_RRDY) {
557			/* Receive data ready interrupt - enough data received */
558			ti_i2c_dbg(sc, "Receive data ready interrupt\n");
559
560			/* get the number of bytes in the FIFO */
561			amount = ti_i2c_read_reg(sc, I2C_REG_BUF);
562			amount >>= 8;
563			amount &= 0x3f;
564			amount += 1;
565		}
566
567		/* sanity check we haven't overwritten the array */
568		if ((sofar + amount) > len) {
569			ti_i2c_dbg(sc, "to many bytes to read\n");
570			amount = (len - sofar);
571		}
572
573		/* read the bytes from the fifo */
574		for (i = 0; i < amount; i++) {
575			buf[sofar++] = (uint8_t)(ti_i2c_read_reg(sc, I2C_REG_DATA) & 0xff);
576		}
577
578		/* attempt to clear the receive ready bits */
579		ti_i2c_write_reg(sc, I2C_REG_STAT, I2C_STAT_RDR | I2C_STAT_RRDY);
580	}
581
582	/* reset the registers regardless if there was an error or not */
583	ti_i2c_set_intr_enable(sc, 0x0000);
584	ti_i2c_write_reg(sc, I2C_REG_CON, I2C_CON_I2C_EN | I2C_CON_MST | I2C_CON_STP);
585
586	return (err);
587}
588
589/**
590 *	ti_i2c_write_bytes - attempts to perform a read operation
591 *	@sc: i2c driver context
592 *	@buf: buffer containing the bytes to write
593 *	@len: the number of bytes to write
594 *
595 *	This function assumes the slave address is already set
596 *
597 *	LOCKING:
598 *	The context lock should be held before calling this function
599 *
600 *	RETURNS:
601 *	0 on function succeeded
602 *	EINVAL if invalid message is passed as an arg
603 */
604static int
605ti_i2c_write_bytes(struct ti_i2c_softc *sc, const uint8_t *buf, uint16_t len)
606{
607	int      timo = (hz / 4);
608	int      err = 0;
609	uint16_t con_reg;
610	uint16_t events;
611	uint16_t status;
612	uint32_t amount = 0;
613	uint32_t sofar = 0;
614	uint32_t i;
615
616	/* wait for the bus to become free */
617	err = ti_i2c_wait_for_free_bus(sc, timo);
618	if (err != 0)
619		return (err);
620
621	/* set the events to wait for */
622	events = I2C_IE_XDR |   /* Transmit draining interrupt */
623	         I2C_IE_XRDY |  /* Transmit Data Ready interrupt */
624	         I2C_IE_ARDY |  /* Register Access Ready interrupt */
625	         I2C_IE_NACK |  /* No Acknowledgment interrupt */
626	         I2C_IE_AL;
627
628	/* enable interrupts for the events we want*/
629	ti_i2c_set_intr_enable(sc, events);
630
631	/* write the number of bytes to write */
632	ti_i2c_write_reg(sc, I2C_REG_CNT, len);
633
634	/* set the write bit and initiate the write transaction. Setting the STT
635	 * (start) bit initiates the transfer.
636	 */
637	con_reg = ti_i2c_read_reg(sc, I2C_REG_CON);
638	con_reg |= I2C_CON_TRX | I2C_CON_MST | I2C_CON_STT | I2C_CON_STP;
639	ti_i2c_write_reg(sc, I2C_REG_CON, con_reg);
640
641	/* writing loop */
642	while (1) {
643
644		/* wait for an event */
645		err = ti_i2c_wait(sc, events, &status, timo);
646		if (err != 0) {
647			break;
648		}
649
650		/* check for the error conditions */
651		if (status & I2C_STAT_NACK) {
652			/* no ACK from slave */
653			ti_i2c_dbg(sc, "NACK\n");
654			err = ENXIO;
655			break;
656		}
657		if (status & I2C_STAT_AL) {
658			/* arbitration lost */
659			ti_i2c_dbg(sc, "Arbitration lost\n");
660			err = ENXIO;
661			break;
662		}
663
664		/* check if we have finished */
665		if (status & I2C_STAT_ARDY) {
666			/* register access ready - transaction complete basically */
667			ti_i2c_dbg(sc, "ARDY transaction complete\n");
668			err = 0;
669			break;
670		}
671
672		/* read some data */
673		if (status & I2C_STAT_XDR) {
674			/* Receive draining interrupt - last data received */
675			ti_i2c_dbg(sc, "Transmit draining interrupt\n");
676
677			/* get the number of bytes in the FIFO */
678			amount = ti_i2c_read_reg(sc, I2C_REG_BUFSTAT);
679			amount &= 0x3f;
680		}
681		else if (status & I2C_STAT_XRDY) {
682			/* Receive data ready interrupt - enough data received */
683			ti_i2c_dbg(sc, "Transmit data ready interrupt\n");
684
685			/* get the number of bytes in the FIFO */
686			amount = ti_i2c_read_reg(sc, I2C_REG_BUF);
687			amount &= 0x3f;
688			amount += 1;
689		}
690
691		/* sanity check we haven't overwritten the array */
692		if ((sofar + amount) > len) {
693			ti_i2c_dbg(sc, "to many bytes to write\n");
694			amount = (len - sofar);
695		}
696
697		/* write the bytes from the fifo */
698		for (i = 0; i < amount; i++) {
699			ti_i2c_write_reg(sc, I2C_REG_DATA, buf[sofar++]);
700		}
701
702		/* attempt to clear the transmit ready bits */
703		ti_i2c_write_reg(sc, I2C_REG_STAT, I2C_STAT_XDR | I2C_STAT_XRDY);
704	}
705
706	/* reset the registers regardless if there was an error or not */
707	ti_i2c_set_intr_enable(sc, 0x0000);
708	ti_i2c_write_reg(sc, I2C_REG_CON, I2C_CON_I2C_EN | I2C_CON_MST | I2C_CON_STP);
709
710	return (err);
711}
712
713/**
714 *	ti_i2c_transfer - called to perform the transfer
715 *	@dev: i2c device handle
716 *	@msgs: the messages to send/receive
717 *	@nmsgs: the number of messages in the msgs array
718 *
719 *
720 *	LOCKING:
721 *	Internally locked
722 *
723 *	RETURNS:
724 *	0 on function succeeded
725 *	EINVAL if invalid message is passed as an arg
726 */
727static int
728ti_i2c_transfer(device_t dev, struct iic_msg *msgs, uint32_t nmsgs)
729{
730	struct ti_i2c_softc *sc = device_get_softc(dev);
731	int err = 0;
732	uint32_t i;
733	uint16_t len;
734	uint8_t *buf;
735
736	TI_I2C_LOCK(sc);
737
738	for (i = 0; i < nmsgs; i++) {
739
740		len = msgs[i].len;
741		buf = msgs[i].buf;
742
743		/* zero byte transfers aren't allowed */
744		if (len == 0 || buf == NULL) {
745			err = EINVAL;
746			goto out;
747		}
748
749		/* set the slave address */
750		ti_i2c_write_reg(sc, I2C_REG_SA, msgs[i].slave >> 1);
751
752		/* perform the read or write */
753		if (msgs[i].flags & IIC_M_RD) {
754			err = ti_i2c_read_bytes(sc, buf, len);
755		} else {
756			err = ti_i2c_write_bytes(sc, buf, len);
757		}
758
759	}
760
761out:
762	TI_I2C_UNLOCK(sc);
763
764	return (err);
765}
766
767/**
768 *	ti_i2c_callback - not sure about this one
769 *	@dev: i2c device handle
770 *
771 *
772 *
773 *	LOCKING:
774 *	Called from timer context
775 *
776 *	RETURNS:
777 *	EH_HANDLED or EH_NOT_HANDLED
778 */
779static int
780ti_i2c_callback(device_t dev, int index, caddr_t data)
781{
782	int error = 0;
783
784	switch (index) {
785		case IIC_REQUEST_BUS:
786			break;
787
788		case IIC_RELEASE_BUS:
789			break;
790
791		default:
792			error = EINVAL;
793	}
794
795	return (error);
796}
797
798/**
799 *	ti_i2c_activate - initialises and activates an I2C bus
800 *	@dev: i2c device handle
801 *	@num: the number of the I2C controller to activate; 1, 2 or 3
802 *
803 *
804 *	LOCKING:
805 *	Assumed called in an atomic context.
806 *
807 *	RETURNS:
808 *	nothing
809 */
810static int
811ti_i2c_activate(device_t dev)
812{
813	struct ti_i2c_softc *sc = (struct ti_i2c_softc*) device_get_softc(dev);
814	unsigned int timeout = 0;
815	uint16_t con_reg;
816	int err;
817	clk_ident_t clk;
818
819	/*
820	 * The following sequence is taken from the OMAP3530 technical reference
821	 *
822	 * 1. Enable the functional and interface clocks (see Section 18.3.1.1.1).
823	 */
824	clk = I2C0_CLK + sc->device_id;
825	err = ti_prcm_clk_enable(clk);
826	if (err)
827		return (err);
828
829	/* There seems to be a bug in the I2C reset mechanism, for some reason you
830	 * need to disable the I2C module before issuing the reset and then enable
831	 * it again after to detect the reset done.
832	 *
833	 * I found this out by looking at the Linux driver implementation, thanks
834	 * linux guys!
835	 */
836
837	/* Disable the I2C controller */
838	ti_i2c_write_reg(sc, I2C_REG_CON, 0x0000);
839
840	/* Issue a softreset to the controller */
841	/* XXXOMAP3: FIXME */
842	bus_write_2(sc->sc_mem_res, I2C_REG_SYSC, 0x0002);
843
844	/* Re-enable the module and then check for the reset done */
845	ti_i2c_write_reg(sc, I2C_REG_CON, I2C_CON_I2C_EN);
846
847	while ((ti_i2c_read_reg(sc, I2C_REG_SYSS) & 0x01) == 0x00) {
848		if (timeout++ > 100) {
849			return (EBUSY);
850		}
851		DELAY(100);
852	}
853
854	/* Disable the I2C controller once again, now that the reset has finished */
855	ti_i2c_write_reg(sc, I2C_REG_CON, 0x0000);
856
857	/* 2. Program the prescaler to obtain an approximately 12-MHz internal
858	 *    sampling clock (I2Ci_INTERNAL_CLK) by programming the corresponding
859	 *    value in the I2Ci.I2C_PSC[3:0] PSC field.
860	 *    This value depends on the frequency of the functional clock (I2Ci_FCLK).
861	 *    Because this frequency is 96MHz, the I2Ci.I2C_PSC[7:0] PSC field value
862	 *    is 0x7.
863	 */
864
865	/* Program the prescaler to obtain an approximately 12-MHz internal
866	 * sampling clock.
867	 */
868	ti_i2c_write_reg(sc, I2C_REG_PSC, 0x0017);
869
870	/* 3. Program the I2Ci.I2C_SCLL[7:0] SCLL and I2Ci.I2C_SCLH[7:0] SCLH fields
871	 *    to obtain a bit rate of 100K bps or 400K bps. These values depend on
872	 *    the internal sampling clock frequency (see Table 18-12).
873	 */
874
875	/* Set the bitrate to 100kbps */
876	ti_i2c_write_reg(sc, I2C_REG_SCLL, 0x000d);
877	ti_i2c_write_reg(sc, I2C_REG_SCLH, 0x000f);
878
879	/* 4. (Optional) Program the I2Ci.I2C_SCLL[15:8] HSSCLL and
880	 *    I2Ci.I2C_SCLH[15:8] HSSCLH fields to obtain a bit rate of 400K bps or
881	 *    3.4M bps (for the second phase of HS mode). These values depend on the
882	 *    internal sampling clock frequency (see Table 18-12).
883	 *
884	 * 5. (Optional) If a bit rate of 3.4M bps is used and the bus line
885	 *    capacitance exceeds 45 pF, program the CONTROL.CONTROL_DEVCONF1[12]
886	 *    I2C1HSMASTER bit for I2C1, the CONTROL.CONTROL_DEVCONF1[13]
887	 *    I2C2HSMASTER bit for I2C2, or the CONTROL.CONTROL_DEVCONF1[14]
888	 *    I2C3HSMASTER bit for I2C3.
889	 */
890
891	/* 6. Configure the Own Address of the I2C controller by storing it in the
892	 *    I2Ci.I2C_OA0 register. Up to four Own Addresses can be programmed in
893	 *    the I2Ci.I2C_OAi registers (with I = 0, 1, 2, 3) for each I2C
894	 *    controller.
895	 *
896	 * Note: For a 10-bit address, set the corresponding expand Own Address bit
897	 * in the I2Ci.I2C_CON register.
898	 */
899
900	/* Driver currently always in single master mode so ignore this step */
901
902	/* 7. Set the TX threshold (in transmitter mode) and the RX threshold (in
903	 *    receiver mode) by setting the I2Ci.I2C_BUF[5:0]XTRSH field to (TX
904	 *    threshold - 1) and the I2Ci.I2C_BUF[13:8]RTRSH field to (RX threshold
905	 *    - 1), where the TX and RX thresholds are greater than or equal to 1.
906	 */
907
908	/* Set the FIFO buffer threshold, note I2C1 & I2C2 have 8 byte FIFO, whereas
909	 * I2C3 has 64 bytes.  Threshold set to 5 for now.
910	 */
911	ti_i2c_write_reg(sc, I2C_REG_BUF, 0x0404);
912
913	/*
914	 * 8. Take the I2C controller out of reset by setting the I2Ci.I2C_CON[15]
915	 *    I2C_EN bit to 1.
916	 */
917	ti_i2c_write_reg(sc, I2C_REG_CON, I2C_CON_I2C_EN | I2C_CON_OPMODE_STD);
918
919	/*
920	 * To initialize the I2C controller, perform the following steps:
921	 *
922	 * 1. Configure the I2Ci.I2C_CON register:
923	 *    �� For master or slave mode, set the I2Ci.I2C_CON[10] MST bit (0: slave,
924	 *      1: master).
925	 *    �� For transmitter or receiver mode, set the I2Ci.I2C_CON[9] TRX bit
926	 *      (0: receiver, 1: transmitter).
927	 */
928	con_reg = ti_i2c_read_reg(sc, I2C_REG_CON);
929	con_reg |= I2C_CON_MST;
930	ti_i2c_write_reg(sc, I2C_REG_CON, con_reg);
931
932	/* 2. If using an interrupt to transmit/receive data, set to 1 the
933	 *    corresponding bit in the I2Ci.I2C_IE register (the I2Ci.I2C_IE[4]
934	 *    XRDY_IE bit for the transmit interrupt, the I2Ci.I2C_IE[3] RRDY bit
935	 *    for the receive interrupt).
936	 */
937	ti_i2c_set_intr_enable(sc, I2C_IE_XRDY | I2C_IE_RRDY);
938
939	/* 3. If using DMA to receive/transmit data, set to 1 the corresponding bit
940	 *    in the I2Ci.I2C_BUF register (the I2Ci.I2C_BUF[15] RDMA_EN bit for the
941	 *    receive DMA channel, the I2Ci.I2C_BUF[7] XDMA_EN bit for the transmit
942	 *    DMA channel).
943	 */
944
945	/* not using DMA for now, so ignore this */
946
947	return (0);
948}
949
950/**
951 *	ti_i2c_deactivate - deactivates the controller and releases resources
952 *	@dev: i2c device handle
953 *
954 *
955 *
956 *	LOCKING:
957 *	Assumed called in an atomic context.
958 *
959 *	RETURNS:
960 *	nothing
961 */
962static void
963ti_i2c_deactivate(device_t dev)
964{
965	struct ti_i2c_softc *sc = device_get_softc(dev);
966	clk_ident_t clk;
967
968	/* Disable the controller - cancel all transactions */
969	ti_i2c_write_reg(sc, I2C_REG_CON, 0x0000);
970
971	/* Release the interrupt handler */
972	if (sc->sc_irq_h) {
973		bus_teardown_intr(dev, sc->sc_irq_res, sc->sc_irq_h);
974		sc->sc_irq_h = 0;
975	}
976
977	bus_generic_detach(sc->sc_dev);
978
979	/* Unmap the I2C controller registers */
980	if (sc->sc_mem_res != 0) {
981		bus_release_resource(dev, SYS_RES_MEMORY, rman_get_rid(sc->sc_irq_res),
982							 sc->sc_mem_res);
983		sc->sc_mem_res = NULL;
984	}
985
986	/* Release the IRQ resource */
987	if (sc->sc_irq_res != NULL) {
988		bus_release_resource(dev, SYS_RES_IRQ, rman_get_rid(sc->sc_irq_res),
989							 sc->sc_irq_res);
990		sc->sc_irq_res = NULL;
991	}
992
993	/* Finally disable the functional and interface clocks */
994	clk = I2C0_CLK + sc->device_id;
995	ti_prcm_clk_disable(clk);
996
997	return;
998}
999
1000/**
1001 *	ti_i2c_probe - probe function for the driver
1002 *	@dev: i2c device handle
1003 *
1004 *
1005 *
1006 *	LOCKING:
1007 *
1008 *
1009 *	RETURNS:
1010 *	Always returns 0
1011 */
1012static int
1013ti_i2c_probe(device_t dev)
1014{
1015
1016	if (!ofw_bus_status_okay(dev))
1017		return (ENXIO);
1018
1019	if (!ofw_bus_is_compatible(dev, "ti,i2c"))
1020		return (ENXIO);
1021
1022	device_set_desc(dev, "TI I2C Controller");
1023	return (0);
1024}
1025
1026/**
1027 *	ti_i2c_attach - attach function for the driver
1028 *	@dev: i2c device handle
1029 *
1030 *	Initialised driver data structures and activates the I2C controller.
1031 *
1032 *	LOCKING:
1033 *
1034 *
1035 *	RETURNS:
1036 *
1037 */
1038static int
1039ti_i2c_attach(device_t dev)
1040{
1041	struct ti_i2c_softc *sc = device_get_softc(dev);
1042	phandle_t node;
1043	pcell_t did;
1044	int err;
1045	int rid;
1046
1047	sc->sc_dev = dev;
1048
1049	/* Get the i2c device id from FDT */
1050	node = ofw_bus_get_node(dev);
1051	if ((OF_getprop(node, "i2c-device-id", &did, sizeof(did))) <= 0) {
1052		device_printf(dev, "missing i2c-device-id attribute in FDT\n");
1053		return (ENXIO);
1054	}
1055	sc->device_id = fdt32_to_cpu(did);
1056
1057	TI_I2C_LOCK_INIT(sc);
1058
1059	/* Get the memory resource for the register mapping */
1060	rid = 0;
1061	sc->sc_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
1062	                                        RF_ACTIVE);
1063	if (sc->sc_mem_res == NULL)
1064		panic("%s: Cannot map registers", device_get_name(dev));
1065
1066	/* Allocate an IRQ resource for the MMC controller */
1067	rid = 0;
1068	sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
1069	                                        RF_ACTIVE | RF_SHAREABLE);
1070	if (sc->sc_irq_res == NULL) {
1071		err = ENOMEM;
1072		goto out;
1073	}
1074
1075	/* First we _must_ activate the H/W */
1076	err = ti_i2c_activate(dev);
1077	if (err) {
1078		device_printf(dev, "ti_i2c_activate failed\n");
1079		goto out;
1080	}
1081
1082	/* XXXOMAP3: FIXME get proper revision here */
1083	/* Read the version number of the I2C module */
1084	sc->sc_rev = ti_i2c_read_2(sc, I2C_REG_REVNB_HI) & 0xff;
1085
1086	device_printf(dev, "I2C revision %d.%d\n", sc->sc_rev >> 4,
1087	    sc->sc_rev & 0xf);
1088
1089	/* activate the interrupt */
1090	err = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_MISC | INTR_MPSAFE,
1091				NULL, ti_i2c_intr, sc, &sc->sc_irq_h);
1092	if (err)
1093		goto out;
1094
1095	/* Attach to the iicbus */
1096	if ((sc->sc_iicbus = device_add_child(dev, "iicbus", -1)) == NULL)
1097		device_printf(dev, "could not allocate iicbus instance\n");
1098
1099	/* Probe and attach the iicbus */
1100	bus_generic_attach(dev);
1101
1102out:
1103	if (err) {
1104		ti_i2c_deactivate(dev);
1105		TI_I2C_LOCK_DESTROY(sc);
1106	}
1107
1108	return (err);
1109}
1110
1111/**
1112 *	ti_i2c_detach - detach function for the driver
1113 *	@dev: i2c device handle
1114 *
1115 *
1116 *
1117 *	LOCKING:
1118 *
1119 *
1120 *	RETURNS:
1121 *	Always returns 0
1122 */
1123static int
1124ti_i2c_detach(device_t dev)
1125{
1126	struct ti_i2c_softc *sc = device_get_softc(dev);
1127	int rv;
1128
1129	ti_i2c_deactivate(dev);
1130
1131	if (sc->sc_iicbus && (rv = device_delete_child(dev, sc->sc_iicbus)) != 0)
1132		return (rv);
1133
1134	TI_I2C_LOCK_DESTROY(sc);
1135
1136	return (0);
1137}
1138
1139
1140static phandle_t
1141ti_i2c_get_node(device_t bus, device_t dev)
1142{
1143	/*
1144	 * Share controller node with iibus device
1145	 */
1146	return ofw_bus_get_node(bus);
1147}
1148
1149static device_method_t ti_i2c_methods[] = {
1150	/* Device interface */
1151	DEVMETHOD(device_probe,		ti_i2c_probe),
1152	DEVMETHOD(device_attach,	ti_i2c_attach),
1153	DEVMETHOD(device_detach,	ti_i2c_detach),
1154
1155	/* OFW methods */
1156	DEVMETHOD(ofw_bus_get_node,	ti_i2c_get_node),
1157
1158	/* iicbus interface */
1159	DEVMETHOD(iicbus_callback,	ti_i2c_callback),
1160	DEVMETHOD(iicbus_reset,		ti_i2c_reset),
1161	DEVMETHOD(iicbus_transfer,	ti_i2c_transfer),
1162	{ 0, 0 }
1163};
1164
1165static driver_t ti_i2c_driver = {
1166	"iichb",
1167	ti_i2c_methods,
1168	sizeof(struct ti_i2c_softc),
1169};
1170
1171DRIVER_MODULE(ti_iic, simplebus, ti_i2c_driver, ti_i2c_devclass, 0, 0);
1172DRIVER_MODULE(iicbus, ti_iic, iicbus_driver, iicbus_devclass, 0, 0);
1173
1174MODULE_DEPEND(ti_iic, ti_prcm, 1, 1, 1);
1175MODULE_DEPEND(ti_iic, iicbus, 1, 1, 1);
1176