@@ -552,28 +552,20 @@ static int ocores_i2c_of_probe(struct platform_device *pdev,
552
552
& clock_frequency );
553
553
i2c -> bus_clock_khz = 100 ;
554
554
555
- i2c -> clk = devm_clk_get (& pdev -> dev , NULL );
556
-
557
- if (!IS_ERR (i2c -> clk )) {
558
- int ret = clk_prepare_enable (i2c -> clk );
559
-
560
- if (ret ) {
561
- dev_err (& pdev -> dev ,
562
- "clk_prepare_enable failed: %d\n" , ret );
563
- return ret ;
564
- }
565
- i2c -> ip_clock_khz = clk_get_rate (i2c -> clk ) / 1000 ;
566
- if (clock_frequency_present )
567
- i2c -> bus_clock_khz = clock_frequency / 1000 ;
568
- }
569
-
555
+ i2c -> clk = devm_clk_get_optional_enabled (& pdev -> dev , NULL );
556
+ if (IS_ERR (i2c -> clk ))
557
+ return dev_err_probe (& pdev -> dev , PTR_ERR (i2c -> clk ),
558
+ "devm_clk_get_optional_enabled failed\n" );
559
+
560
+ i2c -> ip_clock_khz = clk_get_rate (i2c -> clk ) / 1000 ;
561
+ if (clock_frequency_present )
562
+ i2c -> bus_clock_khz = clock_frequency / 1000 ;
570
563
if (i2c -> ip_clock_khz == 0 ) {
571
564
if (of_property_read_u32 (np , "opencores,ip-clock-frequency" ,
572
565
& val )) {
573
566
if (!clock_frequency_present ) {
574
567
dev_err (& pdev -> dev ,
575
568
"Missing required parameter 'opencores,ip-clock-frequency'\n" );
576
- clk_disable_unprepare (i2c -> clk );
577
569
return - ENODEV ;
578
570
}
579
571
i2c -> ip_clock_khz = clock_frequency / 1000 ;
@@ -678,8 +670,7 @@ static int ocores_i2c_probe(struct platform_device *pdev)
678
670
default :
679
671
dev_err (& pdev -> dev , "Unsupported I/O width (%d)\n" ,
680
672
i2c -> reg_io_width );
681
- ret = - EINVAL ;
682
- goto err_clk ;
673
+ return - EINVAL ;
683
674
}
684
675
}
685
676
@@ -710,13 +701,13 @@ static int ocores_i2c_probe(struct platform_device *pdev)
710
701
pdev -> name , i2c );
711
702
if (ret ) {
712
703
dev_err (& pdev -> dev , "Cannot claim IRQ\n" );
713
- goto err_clk ;
704
+ return ret ;
714
705
}
715
706
}
716
707
717
708
ret = ocores_init (& pdev -> dev , i2c );
718
709
if (ret )
719
- goto err_clk ;
710
+ return ret ;
720
711
721
712
/* hook up driver to tree */
722
713
platform_set_drvdata (pdev , i2c );
@@ -728,7 +719,7 @@ static int ocores_i2c_probe(struct platform_device *pdev)
728
719
/* add i2c adapter to i2c tree */
729
720
ret = i2c_add_adapter (& i2c -> adap );
730
721
if (ret )
731
- goto err_clk ;
722
+ return ret ;
732
723
733
724
/* add in known devices to the bus */
734
725
if (pdata ) {
@@ -737,10 +728,6 @@ static int ocores_i2c_probe(struct platform_device *pdev)
737
728
}
738
729
739
730
return 0 ;
740
-
741
- err_clk :
742
- clk_disable_unprepare (i2c -> clk );
743
- return ret ;
744
731
}
745
732
746
733
static void ocores_i2c_remove (struct platform_device * pdev )
@@ -754,9 +741,6 @@ static void ocores_i2c_remove(struct platform_device *pdev)
754
741
755
742
/* remove adapter & data */
756
743
i2c_del_adapter (& i2c -> adap );
757
-
758
- if (!IS_ERR (i2c -> clk ))
759
- clk_disable_unprepare (i2c -> clk );
760
744
}
761
745
762
746
#ifdef CONFIG_PM_SLEEP
@@ -769,28 +753,22 @@ static int ocores_i2c_suspend(struct device *dev)
769
753
ctrl &= ~(OCI2C_CTRL_EN | OCI2C_CTRL_IEN );
770
754
oc_setreg (i2c , OCI2C_CONTROL , ctrl );
771
755
772
- if (!IS_ERR (i2c -> clk ))
773
- clk_disable_unprepare (i2c -> clk );
756
+ clk_disable_unprepare (i2c -> clk );
774
757
return 0 ;
775
758
}
776
759
777
760
static int ocores_i2c_resume (struct device * dev )
778
761
{
779
762
struct ocores_i2c * i2c = dev_get_drvdata (dev );
763
+ unsigned long rate ;
764
+ int ret ;
780
765
781
- if (!IS_ERR (i2c -> clk )) {
782
- unsigned long rate ;
783
- int ret = clk_prepare_enable (i2c -> clk );
784
-
785
- if (ret ) {
786
- dev_err (dev ,
787
- "clk_prepare_enable failed: %d\n" , ret );
788
- return ret ;
789
- }
790
- rate = clk_get_rate (i2c -> clk ) / 1000 ;
791
- if (rate )
792
- i2c -> ip_clock_khz = rate ;
793
- }
766
+ ret = clk_prepare_enable (i2c -> clk );
767
+ if (ret )
768
+ return dev_err_probe (dev , ret , "clk_prepare_enable failed\n" );
769
+ rate = clk_get_rate (i2c -> clk ) / 1000 ;
770
+ if (rate )
771
+ i2c -> ip_clock_khz = rate ;
794
772
return ocores_init (dev , i2c );
795
773
}
796
774
0 commit comments