diff options
Diffstat (limited to 'drivers/i2c')
-rw-r--r-- | drivers/i2c/busses/i2c-mxs.c | 278 |
1 files changed, 176 insertions, 102 deletions
diff --git a/drivers/i2c/busses/i2c-mxs.c b/drivers/i2c/busses/i2c-mxs.c index 2cb0317b14fb..5deb88b1d77c 100644 --- a/drivers/i2c/busses/i2c-mxs.c +++ b/drivers/i2c/busses/i2c-mxs.c | |||
@@ -1,6 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * Freescale MXS I2C bus driver | 2 | * Freescale MXS I2C bus driver |
3 | * | 3 | * |
4 | * Copyright (C) 2012-2013 Marek Vasut <marex@denx.de> | ||
4 | * Copyright (C) 2011-2012 Wolfram Sang, Pengutronix e.K. | 5 | * Copyright (C) 2011-2012 Wolfram Sang, Pengutronix e.K. |
5 | * | 6 | * |
6 | * based on a (non-working) driver which was: | 7 | * based on a (non-working) driver which was: |
@@ -64,6 +65,7 @@ | |||
64 | #define MXS_I2C_CTRL1_SLAVE_IRQ 0x01 | 65 | #define MXS_I2C_CTRL1_SLAVE_IRQ 0x01 |
65 | 66 | ||
66 | #define MXS_I2C_STAT (0x50) | 67 | #define MXS_I2C_STAT (0x50) |
68 | #define MXS_I2C_STAT_GOT_A_NAK 0x10000000 | ||
67 | #define MXS_I2C_STAT_BUS_BUSY 0x00000800 | 69 | #define MXS_I2C_STAT_BUS_BUSY 0x00000800 |
68 | #define MXS_I2C_STAT_CLK_GEN_BUSY 0x00000400 | 70 | #define MXS_I2C_STAT_CLK_GEN_BUSY 0x00000400 |
69 | 71 | ||
@@ -299,48 +301,11 @@ write_init_pio_fail: | |||
299 | return -EINVAL; | 301 | return -EINVAL; |
300 | } | 302 | } |
301 | 303 | ||
302 | static int mxs_i2c_pio_wait_dmareq(struct mxs_i2c_dev *i2c) | 304 | static int mxs_i2c_pio_wait_xfer_end(struct mxs_i2c_dev *i2c) |
303 | { | 305 | { |
304 | unsigned long timeout = jiffies + msecs_to_jiffies(1000); | 306 | unsigned long timeout = jiffies + msecs_to_jiffies(1000); |
305 | 307 | ||
306 | while (!(readl(i2c->regs + MXS_I2C_DEBUG0) & | 308 | while (readl(i2c->regs + MXS_I2C_CTRL0) & MXS_I2C_CTRL0_RUN) { |
307 | MXS_I2C_DEBUG0_DMAREQ)) { | ||
308 | if (time_after(jiffies, timeout)) | ||
309 | return -ETIMEDOUT; | ||
310 | cond_resched(); | ||
311 | } | ||
312 | |||
313 | return 0; | ||
314 | } | ||
315 | |||
316 | static int mxs_i2c_pio_wait_cplt(struct mxs_i2c_dev *i2c, int last) | ||
317 | { | ||
318 | unsigned long timeout = jiffies + msecs_to_jiffies(1000); | ||
319 | |||
320 | /* | ||
321 | * We do not use interrupts in the PIO mode. Due to the | ||
322 | * maximum transfer length being 8 bytes in PIO mode, the | ||
323 | * overhead of interrupt would be too large and this would | ||
324 | * neglect the gain from using the PIO mode. | ||
325 | */ | ||
326 | |||
327 | while (!(readl(i2c->regs + MXS_I2C_CTRL1) & | ||
328 | MXS_I2C_CTRL1_DATA_ENGINE_CMPLT_IRQ)) { | ||
329 | if (time_after(jiffies, timeout)) | ||
330 | return -ETIMEDOUT; | ||
331 | cond_resched(); | ||
332 | } | ||
333 | |||
334 | writel(MXS_I2C_CTRL1_DATA_ENGINE_CMPLT_IRQ, | ||
335 | i2c->regs + MXS_I2C_CTRL1_CLR); | ||
336 | |||
337 | /* | ||
338 | * When ending a transfer with a stop, we have to wait for the bus to | ||
339 | * go idle before we report the transfer as completed. Otherwise the | ||
340 | * start of the next transfer may race with the end of the current one. | ||
341 | */ | ||
342 | while (last && (readl(i2c->regs + MXS_I2C_STAT) & | ||
343 | (MXS_I2C_STAT_BUS_BUSY | MXS_I2C_STAT_CLK_GEN_BUSY))) { | ||
344 | if (time_after(jiffies, timeout)) | 309 | if (time_after(jiffies, timeout)) |
345 | return -ETIMEDOUT; | 310 | return -ETIMEDOUT; |
346 | cond_resched(); | 311 | cond_resched(); |
@@ -378,106 +343,208 @@ static void mxs_i2c_pio_trigger_cmd(struct mxs_i2c_dev *i2c, u32 cmd) | |||
378 | writel(reg, i2c->regs + MXS_I2C_CTRL0); | 343 | writel(reg, i2c->regs + MXS_I2C_CTRL0); |
379 | } | 344 | } |
380 | 345 | ||
346 | /* | ||
347 | * Start WRITE transaction on the I2C bus. By studying i.MX23 datasheet, | ||
348 | * CTRL0::PIO_MODE bit description clarifies the order in which the registers | ||
349 | * must be written during PIO mode operation. First, the CTRL0 register has | ||
350 | * to be programmed with all the necessary bits but the RUN bit. Then the | ||
351 | * payload has to be written into the DATA register. Finally, the transmission | ||
352 | * is executed by setting the RUN bit in CTRL0. | ||
353 | */ | ||
354 | static void mxs_i2c_pio_trigger_write_cmd(struct mxs_i2c_dev *i2c, u32 cmd, | ||
355 | u32 data) | ||
356 | { | ||
357 | writel(cmd, i2c->regs + MXS_I2C_CTRL0); | ||
358 | writel(data, i2c->regs + MXS_I2C_DATA); | ||
359 | writel(MXS_I2C_CTRL0_RUN, i2c->regs + MXS_I2C_CTRL0_SET); | ||
360 | } | ||
361 | |||
381 | static int mxs_i2c_pio_setup_xfer(struct i2c_adapter *adap, | 362 | static int mxs_i2c_pio_setup_xfer(struct i2c_adapter *adap, |
382 | struct i2c_msg *msg, uint32_t flags) | 363 | struct i2c_msg *msg, uint32_t flags) |
383 | { | 364 | { |
384 | struct mxs_i2c_dev *i2c = i2c_get_adapdata(adap); | 365 | struct mxs_i2c_dev *i2c = i2c_get_adapdata(adap); |
385 | uint32_t addr_data = msg->addr << 1; | 366 | uint32_t addr_data = msg->addr << 1; |
386 | uint32_t data = 0; | 367 | uint32_t data = 0; |
387 | int i, shifts_left, ret; | 368 | int i, ret, xlen = 0, xmit = 0; |
369 | uint32_t start; | ||
388 | 370 | ||
389 | /* Mute IRQs coming from this block. */ | 371 | /* Mute IRQs coming from this block. */ |
390 | writel(MXS_I2C_IRQ_MASK << 8, i2c->regs + MXS_I2C_CTRL1_CLR); | 372 | writel(MXS_I2C_IRQ_MASK << 8, i2c->regs + MXS_I2C_CTRL1_CLR); |
391 | 373 | ||
374 | /* | ||
375 | * MX23 idea: | ||
376 | * - Enable CTRL0::PIO_MODE (1 << 24) | ||
377 | * - Enable CTRL1::ACK_MODE (1 << 27) | ||
378 | * | ||
379 | * WARNING! The MX23 is broken in some way, even if it claims | ||
380 | * to support PIO, when we try to transfer any amount of data | ||
381 | * that is not aligned to 4 bytes, the DMA engine will have | ||
382 | * bits in DEBUG1::DMA_BYTES_ENABLES still set even after the | ||
383 | * transfer. This in turn will mess up the next transfer as | ||
384 | * the block it emit one byte write onto the bus terminated | ||
385 | * with a NAK+STOP. A possible workaround is to reset the IP | ||
386 | * block after every PIO transmission, which might just work. | ||
387 | * | ||
388 | * NOTE: The CTRL0::PIO_MODE description is important, since | ||
389 | * it outlines how the PIO mode is really supposed to work. | ||
390 | */ | ||
391 | |||
392 | if (msg->flags & I2C_M_RD) { | 392 | if (msg->flags & I2C_M_RD) { |
393 | /* | ||
394 | * PIO READ transfer: | ||
395 | * | ||
396 | * This transfer MUST be limited to 4 bytes maximum. It is not | ||
397 | * possible to transfer more than four bytes via PIO, since we | ||
398 | * can not in any way make sure we can read the data from the | ||
399 | * DATA register fast enough. Besides, the RX FIFO is only four | ||
400 | * bytes deep, thus we can only really read up to four bytes at | ||
401 | * time. Finally, there is no bit indicating us that new data | ||
402 | * arrived at the FIFO and can thus be fetched from the DATA | ||
403 | * register. | ||
404 | */ | ||
405 | BUG_ON(msg->len > 4); | ||
406 | |||
393 | addr_data |= I2C_SMBUS_READ; | 407 | addr_data |= I2C_SMBUS_READ; |
394 | 408 | ||
395 | /* SELECT command. */ | 409 | /* SELECT command. */ |
396 | mxs_i2c_pio_trigger_cmd(i2c, MXS_CMD_I2C_SELECT); | 410 | mxs_i2c_pio_trigger_write_cmd(i2c, MXS_CMD_I2C_SELECT, |
397 | 411 | addr_data); | |
398 | ret = mxs_i2c_pio_wait_dmareq(i2c); | ||
399 | if (ret) | ||
400 | return ret; | ||
401 | |||
402 | writel(addr_data, i2c->regs + MXS_I2C_DATA); | ||
403 | writel(MXS_I2C_DEBUG0_DMAREQ, i2c->regs + MXS_I2C_DEBUG0_CLR); | ||
404 | |||
405 | ret = mxs_i2c_pio_wait_cplt(i2c, 0); | ||
406 | if (ret) | ||
407 | return ret; | ||
408 | 412 | ||
409 | if (mxs_i2c_pio_check_error_state(i2c)) | 413 | ret = mxs_i2c_pio_wait_xfer_end(i2c); |
414 | if (ret) { | ||
415 | dev_err(i2c->dev, | ||
416 | "PIO: Failed to send SELECT command!\n"); | ||
410 | goto cleanup; | 417 | goto cleanup; |
418 | } | ||
411 | 419 | ||
412 | /* READ command. */ | 420 | /* READ command. */ |
413 | mxs_i2c_pio_trigger_cmd(i2c, | 421 | mxs_i2c_pio_trigger_cmd(i2c, |
414 | MXS_CMD_I2C_READ | flags | | 422 | MXS_CMD_I2C_READ | flags | |
415 | MXS_I2C_CTRL0_XFER_COUNT(msg->len)); | 423 | MXS_I2C_CTRL0_XFER_COUNT(msg->len)); |
416 | 424 | ||
425 | ret = mxs_i2c_pio_wait_xfer_end(i2c); | ||
426 | if (ret) { | ||
427 | dev_err(i2c->dev, | ||
428 | "PIO: Failed to send SELECT command!\n"); | ||
429 | goto cleanup; | ||
430 | } | ||
431 | |||
432 | data = readl(i2c->regs + MXS_I2C_DATA); | ||
417 | for (i = 0; i < msg->len; i++) { | 433 | for (i = 0; i < msg->len; i++) { |
418 | if ((i & 3) == 0) { | ||
419 | ret = mxs_i2c_pio_wait_dmareq(i2c); | ||
420 | if (ret) | ||
421 | return ret; | ||
422 | data = readl(i2c->regs + MXS_I2C_DATA); | ||
423 | writel(MXS_I2C_DEBUG0_DMAREQ, | ||
424 | i2c->regs + MXS_I2C_DEBUG0_CLR); | ||
425 | } | ||
426 | msg->buf[i] = data & 0xff; | 434 | msg->buf[i] = data & 0xff; |
427 | data >>= 8; | 435 | data >>= 8; |
428 | } | 436 | } |
429 | } else { | 437 | } else { |
438 | /* | ||
439 | * PIO WRITE transfer: | ||
440 | * | ||
441 | * The code below implements clock stretching to circumvent | ||
442 | * the possibility of kernel not being able to supply data | ||
443 | * fast enough. It is possible to transfer arbitrary amount | ||
444 | * of data using PIO write. | ||
445 | */ | ||
430 | addr_data |= I2C_SMBUS_WRITE; | 446 | addr_data |= I2C_SMBUS_WRITE; |
431 | 447 | ||
432 | /* WRITE command. */ | ||
433 | mxs_i2c_pio_trigger_cmd(i2c, | ||
434 | MXS_CMD_I2C_WRITE | flags | | ||
435 | MXS_I2C_CTRL0_XFER_COUNT(msg->len + 1)); | ||
436 | |||
437 | /* | 448 | /* |
438 | * The LSB of data buffer is the first byte blasted across | 449 | * The LSB of data buffer is the first byte blasted across |
439 | * the bus. Higher order bytes follow. Thus the following | 450 | * the bus. Higher order bytes follow. Thus the following |
440 | * filling schematic. | 451 | * filling schematic. |
441 | */ | 452 | */ |
453 | |||
442 | data = addr_data << 24; | 454 | data = addr_data << 24; |
455 | |||
456 | /* Start the transfer with START condition. */ | ||
457 | start = MXS_I2C_CTRL0_PRE_SEND_START; | ||
458 | |||
459 | /* If the transfer is long, use clock stretching. */ | ||
460 | if (msg->len > 3) | ||
461 | start |= MXS_I2C_CTRL0_RETAIN_CLOCK; | ||
462 | |||
443 | for (i = 0; i < msg->len; i++) { | 463 | for (i = 0; i < msg->len; i++) { |
444 | data >>= 8; | 464 | data >>= 8; |
445 | data |= (msg->buf[i] << 24); | 465 | data |= (msg->buf[i] << 24); |
446 | if ((i & 3) == 2) { | 466 | |
447 | ret = mxs_i2c_pio_wait_dmareq(i2c); | 467 | xmit = 0; |
448 | if (ret) | 468 | |
449 | return ret; | 469 | /* This is the last transfer of the message. */ |
450 | writel(data, i2c->regs + MXS_I2C_DATA); | 470 | if (i + 1 == msg->len) { |
451 | writel(MXS_I2C_DEBUG0_DMAREQ, | 471 | /* Add optional STOP flag. */ |
452 | i2c->regs + MXS_I2C_DEBUG0_CLR); | 472 | start |= flags; |
473 | /* Remove RETAIN_CLOCK bit. */ | ||
474 | start &= ~MXS_I2C_CTRL0_RETAIN_CLOCK; | ||
475 | xmit = 1; | ||
453 | } | 476 | } |
454 | } | ||
455 | 477 | ||
456 | shifts_left = 24 - (i & 3) * 8; | 478 | /* Four bytes are ready in the "data" variable. */ |
457 | if (shifts_left) { | 479 | if ((i & 3) == 2) |
458 | data >>= shifts_left; | 480 | xmit = 1; |
459 | ret = mxs_i2c_pio_wait_dmareq(i2c); | 481 | |
460 | if (ret) | 482 | /* Nothing interesting happened, continue stuffing. */ |
461 | return ret; | 483 | if (!xmit) |
462 | writel(data, i2c->regs + MXS_I2C_DATA); | 484 | continue; |
485 | |||
486 | /* | ||
487 | * Compute the size of the transfer and shift the | ||
488 | * data accordingly. | ||
489 | * | ||
490 | * i = (4k + 0) .... xlen = 2 | ||
491 | * i = (4k + 1) .... xlen = 3 | ||
492 | * i = (4k + 2) .... xlen = 4 | ||
493 | * i = (4k + 3) .... xlen = 1 | ||
494 | */ | ||
495 | |||
496 | if ((i % 4) == 3) | ||
497 | xlen = 1; | ||
498 | else | ||
499 | xlen = (i % 4) + 2; | ||
500 | |||
501 | data >>= (4 - xlen) * 8; | ||
502 | |||
503 | dev_dbg(i2c->dev, | ||
504 | "PIO: len=%i pos=%i total=%i [W%s%s%s]\n", | ||
505 | xlen, i, msg->len, | ||
506 | start & MXS_I2C_CTRL0_PRE_SEND_START ? "S" : "", | ||
507 | start & MXS_I2C_CTRL0_POST_SEND_STOP ? "E" : "", | ||
508 | start & MXS_I2C_CTRL0_RETAIN_CLOCK ? "C" : ""); | ||
509 | |||
463 | writel(MXS_I2C_DEBUG0_DMAREQ, | 510 | writel(MXS_I2C_DEBUG0_DMAREQ, |
464 | i2c->regs + MXS_I2C_DEBUG0_CLR); | 511 | i2c->regs + MXS_I2C_DEBUG0_CLR); |
512 | |||
513 | mxs_i2c_pio_trigger_write_cmd(i2c, | ||
514 | start | MXS_I2C_CTRL0_MASTER_MODE | | ||
515 | MXS_I2C_CTRL0_DIRECTION | | ||
516 | MXS_I2C_CTRL0_XFER_COUNT(xlen), data); | ||
517 | |||
518 | /* The START condition is sent only once. */ | ||
519 | start &= ~MXS_I2C_CTRL0_PRE_SEND_START; | ||
520 | |||
521 | /* Wait for the end of the transfer. */ | ||
522 | ret = mxs_i2c_pio_wait_xfer_end(i2c); | ||
523 | if (ret) { | ||
524 | dev_err(i2c->dev, | ||
525 | "PIO: Failed to finish WRITE cmd!\n"); | ||
526 | break; | ||
527 | } | ||
528 | |||
529 | /* Check NAK here. */ | ||
530 | ret = readl(i2c->regs + MXS_I2C_STAT) & | ||
531 | MXS_I2C_STAT_GOT_A_NAK; | ||
532 | if (ret) { | ||
533 | ret = -ENXIO; | ||
534 | goto cleanup; | ||
535 | } | ||
465 | } | 536 | } |
466 | } | 537 | } |
467 | 538 | ||
468 | ret = mxs_i2c_pio_wait_cplt(i2c, flags & MXS_I2C_CTRL0_POST_SEND_STOP); | ||
469 | if (ret) | ||
470 | return ret; | ||
471 | |||
472 | /* make sure we capture any occurred error into cmd_err */ | 539 | /* make sure we capture any occurred error into cmd_err */ |
473 | mxs_i2c_pio_check_error_state(i2c); | 540 | ret = mxs_i2c_pio_check_error_state(i2c); |
474 | 541 | ||
475 | cleanup: | 542 | cleanup: |
476 | /* Clear any dangling IRQs and re-enable interrupts. */ | 543 | /* Clear any dangling IRQs and re-enable interrupts. */ |
477 | writel(MXS_I2C_IRQ_MASK, i2c->regs + MXS_I2C_CTRL1_CLR); | 544 | writel(MXS_I2C_IRQ_MASK, i2c->regs + MXS_I2C_CTRL1_CLR); |
478 | writel(MXS_I2C_IRQ_MASK << 8, i2c->regs + MXS_I2C_CTRL1_SET); | 545 | writel(MXS_I2C_IRQ_MASK << 8, i2c->regs + MXS_I2C_CTRL1_SET); |
479 | 546 | ||
480 | return 0; | 547 | return ret; |
481 | } | 548 | } |
482 | 549 | ||
483 | /* | 550 | /* |
@@ -487,8 +554,9 @@ static int mxs_i2c_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg, | |||
487 | int stop) | 554 | int stop) |
488 | { | 555 | { |
489 | struct mxs_i2c_dev *i2c = i2c_get_adapdata(adap); | 556 | struct mxs_i2c_dev *i2c = i2c_get_adapdata(adap); |
490 | int ret, err; | 557 | int ret; |
491 | int flags; | 558 | int flags; |
559 | int use_pio = 0; | ||
492 | 560 | ||
493 | flags = stop ? MXS_I2C_CTRL0_POST_SEND_STOP : 0; | 561 | flags = stop ? MXS_I2C_CTRL0_POST_SEND_STOP : 0; |
494 | 562 | ||
@@ -499,20 +567,25 @@ static int mxs_i2c_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg, | |||
499 | return -EINVAL; | 567 | return -EINVAL; |
500 | 568 | ||
501 | /* | 569 | /* |
502 | * The current boundary to select between PIO/DMA transfer method | 570 | * The MX28 I2C IP block can only do PIO READ for transfer of to up |
503 | * is set to 8 bytes, transfers shorter than 8 bytes are transfered | 571 | * 4 bytes of length. The write transfer is not limited as it can use |
504 | * using PIO mode while longer transfers use DMA. The 8 byte border is | 572 | * clock stretching to avoid FIFO underruns. |
505 | * based on this empirical measurement and a lot of previous frobbing. | ||
506 | * Note: this special feature only works on i.MX28 SoC | ||
507 | */ | 573 | */ |
574 | if ((msg->flags & I2C_M_RD) && (msg->len <= 4)) | ||
575 | use_pio = 1; | ||
576 | if (!(msg->flags & I2C_M_RD) && (msg->len < 7)) | ||
577 | use_pio = 1; | ||
578 | |||
579 | /* Disable PIO on MX23. */ | ||
580 | if (i2c->dev_type == MXS_I2C_V1) | ||
581 | use_pio = 0; | ||
582 | |||
508 | i2c->cmd_err = 0; | 583 | i2c->cmd_err = 0; |
509 | if (0) { /* disable PIO mode until a proper fix is made */ | 584 | if (use_pio) { |
510 | ret = mxs_i2c_pio_setup_xfer(adap, msg, flags); | 585 | ret = mxs_i2c_pio_setup_xfer(adap, msg, flags); |
511 | if (ret) { | 586 | /* No need to reset the block if NAK was received. */ |
512 | err = mxs_i2c_reset(i2c); | 587 | if (ret && (ret != -ENXIO)) |
513 | if (err) | 588 | mxs_i2c_reset(i2c); |
514 | return err; | ||
515 | } | ||
516 | } else { | 589 | } else { |
517 | INIT_COMPLETION(i2c->cmd_complete); | 590 | INIT_COMPLETION(i2c->cmd_complete); |
518 | ret = mxs_i2c_dma_setup_xfer(adap, msg, flags); | 591 | ret = mxs_i2c_dma_setup_xfer(adap, msg, flags); |
@@ -523,9 +596,11 @@ static int mxs_i2c_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg, | |||
523 | msecs_to_jiffies(1000)); | 596 | msecs_to_jiffies(1000)); |
524 | if (ret == 0) | 597 | if (ret == 0) |
525 | goto timeout; | 598 | goto timeout; |
599 | |||
600 | ret = i2c->cmd_err; | ||
526 | } | 601 | } |
527 | 602 | ||
528 | if (i2c->cmd_err == -ENXIO) { | 603 | if (ret == -ENXIO) { |
529 | /* | 604 | /* |
530 | * If the transfer fails with a NAK from the slave the | 605 | * If the transfer fails with a NAK from the slave the |
531 | * controller halts until it gets told to return to idle state. | 606 | * controller halts until it gets told to return to idle state. |
@@ -534,8 +609,6 @@ static int mxs_i2c_xfer_msg(struct i2c_adapter *adap, struct i2c_msg *msg, | |||
534 | i2c->regs + MXS_I2C_CTRL1_SET); | 609 | i2c->regs + MXS_I2C_CTRL1_SET); |
535 | } | 610 | } |
536 | 611 | ||
537 | ret = i2c->cmd_err; | ||
538 | |||
539 | dev_dbg(i2c->dev, "Done with err=%d\n", ret); | 612 | dev_dbg(i2c->dev, "Done with err=%d\n", ret); |
540 | 613 | ||
541 | return ret; | 614 | return ret; |
@@ -823,6 +896,7 @@ static void __exit mxs_i2c_exit(void) | |||
823 | } | 896 | } |
824 | module_exit(mxs_i2c_exit); | 897 | module_exit(mxs_i2c_exit); |
825 | 898 | ||
899 | MODULE_AUTHOR("Marek Vasut <marex@denx.de>"); | ||
826 | MODULE_AUTHOR("Wolfram Sang <w.sang@pengutronix.de>"); | 900 | MODULE_AUTHOR("Wolfram Sang <w.sang@pengutronix.de>"); |
827 | MODULE_DESCRIPTION("MXS I2C Bus Driver"); | 901 | MODULE_DESCRIPTION("MXS I2C Bus Driver"); |
828 | MODULE_LICENSE("GPL"); | 902 | MODULE_LICENSE("GPL"); |