hc
2024-10-12 a5969cabbb4660eab42b6ef0412cbbd1200cf14d
kernel/drivers/i2c/busses/i2c-imx-lpi2c.c
....@@ -75,12 +75,6 @@
7575 #define I2C_CLK_RATIO 2
7676 #define CHUNK_DATA 256
7777
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
-
8478 #define I2C_PM_TIMEOUT 10 /* ms */
8579
8680 enum lpi2c_imx_mode {
....@@ -152,13 +146,13 @@
152146 unsigned int bitrate = lpi2c_imx->bitrate;
153147 enum lpi2c_imx_mode mode;
154148
155
- if (bitrate < STARDARD_MAX_BITRATE)
149
+ if (bitrate < I2C_MAX_FAST_MODE_FREQ)
156150 mode = STANDARD;
157
- else if (bitrate < FAST_MAX_BITRATE)
151
+ else if (bitrate < I2C_MAX_FAST_MODE_PLUS_FREQ)
158152 mode = FAST;
159
- else if (bitrate < FAST_PLUS_MAX_BITRATE)
153
+ else if (bitrate < I2C_MAX_HIGH_SPEED_MODE_FREQ)
160154 mode = FAST_PLUS;
161
- else if (bitrate < HIGHSPEED_MAX_BITRATE)
155
+ else if (bitrate < I2C_MAX_ULTRA_FAST_MODE_FREQ)
162156 mode = HS;
163157 else
164158 mode = ULTRA_FAST;
....@@ -206,8 +200,8 @@
206200 /* CLKLO = I2C_CLK_RATIO * CLKHI, SETHOLD = CLKHI, DATAVD = CLKHI/2 */
207201 static int lpi2c_imx_config(struct lpi2c_imx_struct *lpi2c_imx)
208202 {
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;
211205 enum lpi2c_imx_pincfg pincfg;
212206 unsigned int temp;
213207
....@@ -265,7 +259,7 @@
265259 unsigned int temp;
266260 int ret;
267261
268
- ret = pm_runtime_get_sync(lpi2c_imx->adapter.dev.parent);
262
+ ret = pm_runtime_resume_and_get(lpi2c_imx->adapter.dev.parent);
269263 if (ret < 0)
270264 return ret;
271265
....@@ -468,6 +462,8 @@
468462 if (num == 1 && msgs[0].len == 0)
469463 goto stop;
470464
465
+ lpi2c_imx->rx_buf = NULL;
466
+ lpi2c_imx->tx_buf = NULL;
471467 lpi2c_imx->delivered = 0;
472468 lpi2c_imx->msglen = msgs[i].len;
473469 init_completion(&lpi2c_imx->complete);
....@@ -508,10 +504,14 @@
508504 static irqreturn_t lpi2c_imx_isr(int irq, void *dev_id)
509505 {
510506 struct lpi2c_imx_struct *lpi2c_imx = dev_id;
507
+ unsigned int enabled;
511508 unsigned int temp;
509
+
510
+ enabled = readl(lpi2c_imx->base + LPI2C_MIER);
512511
513512 lpi2c_imx_intctrl(lpi2c_imx, 0);
514513 temp = readl(lpi2c_imx->base + LPI2C_MSR);
514
+ temp &= enabled;
515515
516516 if (temp & MSR_RDF)
517517 lpi2c_imx_read_rxfifo(lpi2c_imx);
....@@ -545,7 +545,6 @@
545545 static int lpi2c_imx_probe(struct platform_device *pdev)
546546 {
547547 struct lpi2c_imx_struct *lpi2c_imx;
548
- struct resource *res;
549548 unsigned int temp;
550549 int irq, ret;
551550
....@@ -553,16 +552,13 @@
553552 if (!lpi2c_imx)
554553 return -ENOMEM;
555554
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);
558556 if (IS_ERR(lpi2c_imx->base))
559557 return PTR_ERR(lpi2c_imx->base);
560558
561559 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)
564561 return irq;
565
- }
566562
567563 lpi2c_imx->adapter.owner = THIS_MODULE;
568564 lpi2c_imx->adapter.algo = &lpi2c_imx_algo;
....@@ -580,7 +576,7 @@
580576 ret = of_property_read_u32(pdev->dev.of_node,
581577 "clock-frequency", &lpi2c_imx->bitrate);
582578 if (ret)
583
- lpi2c_imx->bitrate = LPI2C_DEFAULT_RATE;
579
+ lpi2c_imx->bitrate = I2C_MAX_STANDARD_MODE_FREQ;
584580
585581 ret = devm_request_irq(&pdev->dev, irq, lpi2c_imx_isr, 0,
586582 pdev->name, lpi2c_imx);
....@@ -639,8 +635,7 @@
639635 return 0;
640636 }
641637
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)
644639 {
645640 struct lpi2c_imx_struct *lpi2c_imx = dev_get_drvdata(dev);
646641
....@@ -650,7 +645,7 @@
650645 return 0;
651646 }
652647
653
-static int lpi2c_runtime_resume(struct device *dev)
648
+static int __maybe_unused lpi2c_runtime_resume(struct device *dev)
654649 {
655650 struct lpi2c_imx_struct *lpi2c_imx = dev_get_drvdata(dev);
656651 int ret;
....@@ -671,10 +666,6 @@
671666 SET_RUNTIME_PM_OPS(lpi2c_runtime_suspend,
672667 lpi2c_runtime_resume, NULL)
673668 };
674
-#define IMX_LPI2C_PM (&lpi2c_pm_ops)
675
-#else
676
-#define IMX_LPI2C_PM NULL
677
-#endif
678669
679670 static struct platform_driver lpi2c_imx_driver = {
680671 .probe = lpi2c_imx_probe,
....@@ -682,7 +673,7 @@
682673 .driver = {
683674 .name = DRIVER_NAME,
684675 .of_match_table = lpi2c_imx_of_match,
685
- .pm = IMX_LPI2C_PM,
676
+ .pm = &lpi2c_pm_ops,
686677 },
687678 };
688679