| .. | .. |
|---|
| 75 | 75 | #define I2C_CLK_RATIO 2 |
|---|
| 76 | 76 | #define CHUNK_DATA 256 |
|---|
| 77 | 77 | |
|---|
| 78 | | -#define LPI2C_DEFAULT_RATE 100000 |
|---|
| 79 | | -#define STARDARD_MAX_BITRATE 400000 |
|---|
| 80 | | -#define FAST_MAX_BITRATE 1000000 |
|---|
| 81 | | -#define FAST_PLUS_MAX_BITRATE 3400000 |
|---|
| 82 | | -#define HIGHSPEED_MAX_BITRATE 5000000 |
|---|
| 83 | | - |
|---|
| 84 | 78 | #define I2C_PM_TIMEOUT 10 /* ms */ |
|---|
| 85 | 79 | |
|---|
| 86 | 80 | enum lpi2c_imx_mode { |
|---|
| .. | .. |
|---|
| 152 | 146 | unsigned int bitrate = lpi2c_imx->bitrate; |
|---|
| 153 | 147 | enum lpi2c_imx_mode mode; |
|---|
| 154 | 148 | |
|---|
| 155 | | - if (bitrate < STARDARD_MAX_BITRATE) |
|---|
| 149 | + if (bitrate < I2C_MAX_FAST_MODE_FREQ) |
|---|
| 156 | 150 | mode = STANDARD; |
|---|
| 157 | | - else if (bitrate < FAST_MAX_BITRATE) |
|---|
| 151 | + else if (bitrate < I2C_MAX_FAST_MODE_PLUS_FREQ) |
|---|
| 158 | 152 | mode = FAST; |
|---|
| 159 | | - else if (bitrate < FAST_PLUS_MAX_BITRATE) |
|---|
| 153 | + else if (bitrate < I2C_MAX_HIGH_SPEED_MODE_FREQ) |
|---|
| 160 | 154 | mode = FAST_PLUS; |
|---|
| 161 | | - else if (bitrate < HIGHSPEED_MAX_BITRATE) |
|---|
| 155 | + else if (bitrate < I2C_MAX_ULTRA_FAST_MODE_FREQ) |
|---|
| 162 | 156 | mode = HS; |
|---|
| 163 | 157 | else |
|---|
| 164 | 158 | mode = ULTRA_FAST; |
|---|
| .. | .. |
|---|
| 206 | 200 | /* CLKLO = I2C_CLK_RATIO * CLKHI, SETHOLD = CLKHI, DATAVD = CLKHI/2 */ |
|---|
| 207 | 201 | static int lpi2c_imx_config(struct lpi2c_imx_struct *lpi2c_imx) |
|---|
| 208 | 202 | { |
|---|
| 209 | | - u8 prescale, filt, sethold, clkhi, clklo, datavd; |
|---|
| 210 | | - unsigned int clk_rate, clk_cycle; |
|---|
| 203 | + u8 prescale, filt, sethold, datavd; |
|---|
| 204 | + unsigned int clk_rate, clk_cycle, clkhi, clklo; |
|---|
| 211 | 205 | enum lpi2c_imx_pincfg pincfg; |
|---|
| 212 | 206 | unsigned int temp; |
|---|
| 213 | 207 | |
|---|
| .. | .. |
|---|
| 265 | 259 | unsigned int temp; |
|---|
| 266 | 260 | int ret; |
|---|
| 267 | 261 | |
|---|
| 268 | | - ret = pm_runtime_get_sync(lpi2c_imx->adapter.dev.parent); |
|---|
| 262 | + ret = pm_runtime_resume_and_get(lpi2c_imx->adapter.dev.parent); |
|---|
| 269 | 263 | if (ret < 0) |
|---|
| 270 | 264 | return ret; |
|---|
| 271 | 265 | |
|---|
| .. | .. |
|---|
| 468 | 462 | if (num == 1 && msgs[0].len == 0) |
|---|
| 469 | 463 | goto stop; |
|---|
| 470 | 464 | |
|---|
| 465 | + lpi2c_imx->rx_buf = NULL; |
|---|
| 466 | + lpi2c_imx->tx_buf = NULL; |
|---|
| 471 | 467 | lpi2c_imx->delivered = 0; |
|---|
| 472 | 468 | lpi2c_imx->msglen = msgs[i].len; |
|---|
| 473 | 469 | init_completion(&lpi2c_imx->complete); |
|---|
| .. | .. |
|---|
| 508 | 504 | static irqreturn_t lpi2c_imx_isr(int irq, void *dev_id) |
|---|
| 509 | 505 | { |
|---|
| 510 | 506 | struct lpi2c_imx_struct *lpi2c_imx = dev_id; |
|---|
| 507 | + unsigned int enabled; |
|---|
| 511 | 508 | unsigned int temp; |
|---|
| 509 | + |
|---|
| 510 | + enabled = readl(lpi2c_imx->base + LPI2C_MIER); |
|---|
| 512 | 511 | |
|---|
| 513 | 512 | lpi2c_imx_intctrl(lpi2c_imx, 0); |
|---|
| 514 | 513 | temp = readl(lpi2c_imx->base + LPI2C_MSR); |
|---|
| 514 | + temp &= enabled; |
|---|
| 515 | 515 | |
|---|
| 516 | 516 | if (temp & MSR_RDF) |
|---|
| 517 | 517 | lpi2c_imx_read_rxfifo(lpi2c_imx); |
|---|
| .. | .. |
|---|
| 545 | 545 | static int lpi2c_imx_probe(struct platform_device *pdev) |
|---|
| 546 | 546 | { |
|---|
| 547 | 547 | struct lpi2c_imx_struct *lpi2c_imx; |
|---|
| 548 | | - struct resource *res; |
|---|
| 549 | 548 | unsigned int temp; |
|---|
| 550 | 549 | int irq, ret; |
|---|
| 551 | 550 | |
|---|
| .. | .. |
|---|
| 553 | 552 | if (!lpi2c_imx) |
|---|
| 554 | 553 | return -ENOMEM; |
|---|
| 555 | 554 | |
|---|
| 556 | | - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
|---|
| 557 | | - lpi2c_imx->base = devm_ioremap_resource(&pdev->dev, res); |
|---|
| 555 | + lpi2c_imx->base = devm_platform_ioremap_resource(pdev, 0); |
|---|
| 558 | 556 | if (IS_ERR(lpi2c_imx->base)) |
|---|
| 559 | 557 | return PTR_ERR(lpi2c_imx->base); |
|---|
| 560 | 558 | |
|---|
| 561 | 559 | irq = platform_get_irq(pdev, 0); |
|---|
| 562 | | - if (irq < 0) { |
|---|
| 563 | | - dev_err(&pdev->dev, "can't get irq number\n"); |
|---|
| 560 | + if (irq < 0) |
|---|
| 564 | 561 | return irq; |
|---|
| 565 | | - } |
|---|
| 566 | 562 | |
|---|
| 567 | 563 | lpi2c_imx->adapter.owner = THIS_MODULE; |
|---|
| 568 | 564 | lpi2c_imx->adapter.algo = &lpi2c_imx_algo; |
|---|
| .. | .. |
|---|
| 580 | 576 | ret = of_property_read_u32(pdev->dev.of_node, |
|---|
| 581 | 577 | "clock-frequency", &lpi2c_imx->bitrate); |
|---|
| 582 | 578 | if (ret) |
|---|
| 583 | | - lpi2c_imx->bitrate = LPI2C_DEFAULT_RATE; |
|---|
| 579 | + lpi2c_imx->bitrate = I2C_MAX_STANDARD_MODE_FREQ; |
|---|
| 584 | 580 | |
|---|
| 585 | 581 | ret = devm_request_irq(&pdev->dev, irq, lpi2c_imx_isr, 0, |
|---|
| 586 | 582 | pdev->name, lpi2c_imx); |
|---|
| .. | .. |
|---|
| 639 | 635 | return 0; |
|---|
| 640 | 636 | } |
|---|
| 641 | 637 | |
|---|
| 642 | | -#ifdef CONFIG_PM_SLEEP |
|---|
| 643 | | -static int lpi2c_runtime_suspend(struct device *dev) |
|---|
| 638 | +static int __maybe_unused lpi2c_runtime_suspend(struct device *dev) |
|---|
| 644 | 639 | { |
|---|
| 645 | 640 | struct lpi2c_imx_struct *lpi2c_imx = dev_get_drvdata(dev); |
|---|
| 646 | 641 | |
|---|
| .. | .. |
|---|
| 650 | 645 | return 0; |
|---|
| 651 | 646 | } |
|---|
| 652 | 647 | |
|---|
| 653 | | -static int lpi2c_runtime_resume(struct device *dev) |
|---|
| 648 | +static int __maybe_unused lpi2c_runtime_resume(struct device *dev) |
|---|
| 654 | 649 | { |
|---|
| 655 | 650 | struct lpi2c_imx_struct *lpi2c_imx = dev_get_drvdata(dev); |
|---|
| 656 | 651 | int ret; |
|---|
| .. | .. |
|---|
| 671 | 666 | SET_RUNTIME_PM_OPS(lpi2c_runtime_suspend, |
|---|
| 672 | 667 | lpi2c_runtime_resume, NULL) |
|---|
| 673 | 668 | }; |
|---|
| 674 | | -#define IMX_LPI2C_PM (&lpi2c_pm_ops) |
|---|
| 675 | | -#else |
|---|
| 676 | | -#define IMX_LPI2C_PM NULL |
|---|
| 677 | | -#endif |
|---|
| 678 | 669 | |
|---|
| 679 | 670 | static struct platform_driver lpi2c_imx_driver = { |
|---|
| 680 | 671 | .probe = lpi2c_imx_probe, |
|---|
| .. | .. |
|---|
| 682 | 673 | .driver = { |
|---|
| 683 | 674 | .name = DRIVER_NAME, |
|---|
| 684 | 675 | .of_match_table = lpi2c_imx_of_match, |
|---|
| 685 | | - .pm = IMX_LPI2C_PM, |
|---|
| 676 | + .pm = &lpi2c_pm_ops, |
|---|
| 686 | 677 | }, |
|---|
| 687 | 678 | }; |
|---|
| 688 | 679 | |
|---|