hc
2024-10-12 a5969cabbb4660eab42b6ef0412cbbd1200cf14d
kernel/drivers/i2c/busses/i2c-sprd.c
....@@ -12,6 +12,7 @@
1212 #include <linux/init.h>
1313 #include <linux/interrupt.h>
1414 #include <linux/kernel.h>
15
+#include <linux/module.h>
1516 #include <linux/of.h>
1617 #include <linux/of_device.h>
1718 #include <linux/platform_device.h>
....@@ -88,7 +89,6 @@
8889 u32 count;
8990 int irq;
9091 int err;
91
- bool is_suspended;
9292 };
9393
9494 static void sprd_i2c_set_count(struct sprd_i2c *i2c_dev, u32 count)
....@@ -290,10 +290,7 @@
290290 struct sprd_i2c *i2c_dev = i2c_adap->algo_data;
291291 int im, ret;
292292
293
- if (i2c_dev->is_suspended)
294
- return -EBUSY;
295
-
296
- ret = pm_runtime_get_sync(i2c_dev->dev);
293
+ ret = pm_runtime_resume_and_get(i2c_dev->dev);
297294 if (ret < 0)
298295 return ret;
299296
....@@ -346,9 +343,9 @@
346343 writel(div1, i2c_dev->base + ADDR_DVD1);
347344
348345 /* Start hold timing = hold time(us) * source clock */
349
- if (freq == 400000)
346
+ if (freq == I2C_MAX_FAST_MODE_FREQ)
350347 writel((6 * apb_clk) / 10000000, i2c_dev->base + ADDR_STA0_DVD);
351
- else if (freq == 100000)
348
+ else if (freq == I2C_MAX_STANDARD_MODE_FREQ)
352349 writel((4 * apb_clk) / 1000000, i2c_dev->base + ADDR_STA0_DVD);
353350 }
354351
....@@ -475,9 +472,9 @@
475472
476473 i2c_dev->clk = devm_clk_get(i2c_dev->dev, "enable");
477474 if (IS_ERR(i2c_dev->clk)) {
478
- dev_warn(i2c_dev->dev, "i2c%d can't get the enable clock\n",
479
- i2c_dev->adap.nr);
480
- i2c_dev->clk = NULL;
475
+ dev_err(i2c_dev->dev, "i2c%d can't get the enable clock\n",
476
+ i2c_dev->adap.nr);
477
+ return PTR_ERR(i2c_dev->clk);
481478 }
482479
483480 return 0;
....@@ -487,7 +484,6 @@
487484 {
488485 struct device *dev = &pdev->dev;
489486 struct sprd_i2c *i2c_dev;
490
- struct resource *res;
491487 u32 prop;
492488 int ret;
493489
....@@ -497,23 +493,20 @@
497493 if (!i2c_dev)
498494 return -ENOMEM;
499495
500
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
501
- i2c_dev->base = devm_ioremap_resource(dev, res);
496
+ i2c_dev->base = devm_platform_ioremap_resource(pdev, 0);
502497 if (IS_ERR(i2c_dev->base))
503498 return PTR_ERR(i2c_dev->base);
504499
505500 i2c_dev->irq = platform_get_irq(pdev, 0);
506
- if (i2c_dev->irq < 0) {
507
- dev_err(&pdev->dev, "failed to get irq resource\n");
501
+ if (i2c_dev->irq < 0)
508502 return i2c_dev->irq;
509
- }
510503
511504 i2c_set_adapdata(&i2c_dev->adap, i2c_dev);
512505 init_completion(&i2c_dev->complete);
513506 snprintf(i2c_dev->adap.name, sizeof(i2c_dev->adap.name),
514507 "%s", "sprd-i2c");
515508
516
- i2c_dev->bus_freq = 100000;
509
+ i2c_dev->bus_freq = I2C_MAX_STANDARD_MODE_FREQ;
517510 i2c_dev->adap.owner = THIS_MODULE;
518511 i2c_dev->dev = dev;
519512 i2c_dev->adap.retries = 3;
....@@ -527,10 +520,14 @@
527520 i2c_dev->bus_freq = prop;
528521
529522 /* We only support 100k and 400k now, otherwise will return error. */
530
- if (i2c_dev->bus_freq != 100000 && i2c_dev->bus_freq != 400000)
523
+ if (i2c_dev->bus_freq != I2C_MAX_STANDARD_MODE_FREQ &&
524
+ i2c_dev->bus_freq != I2C_MAX_FAST_MODE_FREQ)
531525 return -EINVAL;
532526
533
- sprd_i2c_clk_init(i2c_dev);
527
+ ret = sprd_i2c_clk_init(i2c_dev);
528
+ if (ret)
529
+ return ret;
530
+
534531 platform_set_drvdata(pdev, i2c_dev);
535532
536533 ret = clk_prepare_enable(i2c_dev->clk);
....@@ -581,10 +578,12 @@
581578
582579 ret = pm_runtime_get_sync(i2c_dev->dev);
583580 if (ret < 0)
584
- return ret;
581
+ dev_err(&pdev->dev, "Failed to resume device (%pe)\n", ERR_PTR(ret));
585582
586583 i2c_del_adapter(&i2c_dev->adap);
587
- clk_disable_unprepare(i2c_dev->clk);
584
+
585
+ if (ret >= 0)
586
+ clk_disable_unprepare(i2c_dev->clk);
588587
589588 pm_runtime_put_noidle(i2c_dev->dev);
590589 pm_runtime_disable(i2c_dev->dev);
....@@ -592,40 +591,34 @@
592591 return 0;
593592 }
594593
595
-static int __maybe_unused sprd_i2c_suspend_noirq(struct device *pdev)
594
+static int __maybe_unused sprd_i2c_suspend_noirq(struct device *dev)
596595 {
597
- struct sprd_i2c *i2c_dev = dev_get_drvdata(pdev);
596
+ struct sprd_i2c *i2c_dev = dev_get_drvdata(dev);
598597
599
- i2c_lock_bus(&i2c_dev->adap, I2C_LOCK_ROOT_ADAPTER);
600
- i2c_dev->is_suspended = true;
601
- i2c_unlock_bus(&i2c_dev->adap, I2C_LOCK_ROOT_ADAPTER);
602
-
603
- return pm_runtime_force_suspend(pdev);
598
+ i2c_mark_adapter_suspended(&i2c_dev->adap);
599
+ return pm_runtime_force_suspend(dev);
604600 }
605601
606
-static int __maybe_unused sprd_i2c_resume_noirq(struct device *pdev)
602
+static int __maybe_unused sprd_i2c_resume_noirq(struct device *dev)
607603 {
608
- struct sprd_i2c *i2c_dev = dev_get_drvdata(pdev);
604
+ struct sprd_i2c *i2c_dev = dev_get_drvdata(dev);
609605
610
- i2c_lock_bus(&i2c_dev->adap, I2C_LOCK_ROOT_ADAPTER);
611
- i2c_dev->is_suspended = false;
612
- i2c_unlock_bus(&i2c_dev->adap, I2C_LOCK_ROOT_ADAPTER);
613
-
614
- return pm_runtime_force_resume(pdev);
606
+ i2c_mark_adapter_resumed(&i2c_dev->adap);
607
+ return pm_runtime_force_resume(dev);
615608 }
616609
617
-static int __maybe_unused sprd_i2c_runtime_suspend(struct device *pdev)
610
+static int __maybe_unused sprd_i2c_runtime_suspend(struct device *dev)
618611 {
619
- struct sprd_i2c *i2c_dev = dev_get_drvdata(pdev);
612
+ struct sprd_i2c *i2c_dev = dev_get_drvdata(dev);
620613
621614 clk_disable_unprepare(i2c_dev->clk);
622615
623616 return 0;
624617 }
625618
626
-static int __maybe_unused sprd_i2c_runtime_resume(struct device *pdev)
619
+static int __maybe_unused sprd_i2c_runtime_resume(struct device *dev)
627620 {
628
- struct sprd_i2c *i2c_dev = dev_get_drvdata(pdev);
621
+ struct sprd_i2c *i2c_dev = dev_get_drvdata(dev);
629622 int ret;
630623
631624 ret = clk_prepare_enable(i2c_dev->clk);
....@@ -660,8 +653,7 @@
660653 },
661654 };
662655
663
-static int sprd_i2c_init(void)
664
-{
665
- return platform_driver_register(&sprd_i2c_driver);
666
-}
667
-arch_initcall_sync(sprd_i2c_init);
656
+module_platform_driver(sprd_i2c_driver);
657
+
658
+MODULE_DESCRIPTION("Spreadtrum I2C master controller driver");
659
+MODULE_LICENSE("GPL v2");