.. | .. |
---|
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 | |
---|