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