forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-09 95099d4622f8cb224d94e314c7a8e0df60b13f87
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);
....@@ -579,7 +576,7 @@
579576 struct sprd_i2c *i2c_dev = platform_get_drvdata(pdev);
580577 int ret;
581578
582
- ret = pm_runtime_get_sync(i2c_dev->dev);
579
+ ret = pm_runtime_resume_and_get(i2c_dev->dev);
583580 if (ret < 0)
584581 return ret;
585582
....@@ -592,40 +589,34 @@
592589 return 0;
593590 }
594591
595
-static int __maybe_unused sprd_i2c_suspend_noirq(struct device *pdev)
592
+static int __maybe_unused sprd_i2c_suspend_noirq(struct device *dev)
596593 {
597
- struct sprd_i2c *i2c_dev = dev_get_drvdata(pdev);
594
+ struct sprd_i2c *i2c_dev = dev_get_drvdata(dev);
598595
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);
596
+ i2c_mark_adapter_suspended(&i2c_dev->adap);
597
+ return pm_runtime_force_suspend(dev);
604598 }
605599
606
-static int __maybe_unused sprd_i2c_resume_noirq(struct device *pdev)
600
+static int __maybe_unused sprd_i2c_resume_noirq(struct device *dev)
607601 {
608
- struct sprd_i2c *i2c_dev = dev_get_drvdata(pdev);
602
+ struct sprd_i2c *i2c_dev = dev_get_drvdata(dev);
609603
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);
604
+ i2c_mark_adapter_resumed(&i2c_dev->adap);
605
+ return pm_runtime_force_resume(dev);
615606 }
616607
617
-static int __maybe_unused sprd_i2c_runtime_suspend(struct device *pdev)
608
+static int __maybe_unused sprd_i2c_runtime_suspend(struct device *dev)
618609 {
619
- struct sprd_i2c *i2c_dev = dev_get_drvdata(pdev);
610
+ struct sprd_i2c *i2c_dev = dev_get_drvdata(dev);
620611
621612 clk_disable_unprepare(i2c_dev->clk);
622613
623614 return 0;
624615 }
625616
626
-static int __maybe_unused sprd_i2c_runtime_resume(struct device *pdev)
617
+static int __maybe_unused sprd_i2c_runtime_resume(struct device *dev)
627618 {
628
- struct sprd_i2c *i2c_dev = dev_get_drvdata(pdev);
619
+ struct sprd_i2c *i2c_dev = dev_get_drvdata(dev);
629620 int ret;
630621
631622 ret = clk_prepare_enable(i2c_dev->clk);
....@@ -660,8 +651,7 @@
660651 },
661652 };
662653
663
-static int sprd_i2c_init(void)
664
-{
665
- return platform_driver_register(&sprd_i2c_driver);
666
-}
667
-arch_initcall_sync(sprd_i2c_init);
654
+module_platform_driver(sprd_i2c_driver);
655
+
656
+MODULE_DESCRIPTION("Spreadtrum I2C master controller driver");
657
+MODULE_LICENSE("GPL v2");