@@ -566,22 +566,16 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
566566 * to the common timer/bus clocks configuration, in which the very
567567 * first found clock supply both timer and APB signals.
568568 */
569- dw_wdt -> clk = devm_clk_get (dev , "tclk" );
569+ dw_wdt -> clk = devm_clk_get_enabled (dev , "tclk" );
570570 if (IS_ERR (dw_wdt -> clk )) {
571- dw_wdt -> clk = devm_clk_get (dev , NULL );
571+ dw_wdt -> clk = devm_clk_get_enabled (dev , NULL );
572572 if (IS_ERR (dw_wdt -> clk ))
573573 return PTR_ERR (dw_wdt -> clk );
574574 }
575575
576- ret = clk_prepare_enable (dw_wdt -> clk );
577- if (ret )
578- return ret ;
579-
580576 dw_wdt -> rate = clk_get_rate (dw_wdt -> clk );
581- if (dw_wdt -> rate == 0 ) {
582- ret = - EINVAL ;
583- goto out_disable_clk ;
584- }
577+ if (dw_wdt -> rate == 0 )
578+ return - EINVAL ;
585579
586580 /*
587581 * Request APB clock if device is configured with async clocks mode.
@@ -590,21 +584,13 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
590584 * so the pclk phandle reference is left optional. If it couldn't be
591585 * found we consider the device configured in synchronous clocks mode.
592586 */
593- dw_wdt -> pclk = devm_clk_get_optional (dev , "pclk" );
594- if (IS_ERR (dw_wdt -> pclk )) {
595- ret = PTR_ERR (dw_wdt -> pclk );
596- goto out_disable_clk ;
597- }
598-
599- ret = clk_prepare_enable (dw_wdt -> pclk );
600- if (ret )
601- goto out_disable_clk ;
587+ dw_wdt -> pclk = devm_clk_get_optional_enabled (dev , "pclk" );
588+ if (IS_ERR (dw_wdt -> pclk ))
589+ return PTR_ERR (dw_wdt -> pclk );
602590
603591 dw_wdt -> rst = devm_reset_control_get_optional_shared (& pdev -> dev , NULL );
604- if (IS_ERR (dw_wdt -> rst )) {
605- ret = PTR_ERR (dw_wdt -> rst );
606- goto out_disable_pclk ;
607- }
592+ if (IS_ERR (dw_wdt -> rst ))
593+ return PTR_ERR (dw_wdt -> rst );
608594
609595 /* Enable normal reset without pre-timeout by default. */
610596 dw_wdt_update_mode (dw_wdt , DW_WDT_RMOD_RESET );
@@ -621,12 +607,12 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
621607 IRQF_SHARED | IRQF_TRIGGER_RISING ,
622608 pdev -> name , dw_wdt );
623609 if (ret )
624- goto out_disable_pclk ;
610+ return ret ;
625611
626612 dw_wdt -> wdd .info = & dw_wdt_pt_ident ;
627613 } else {
628614 if (ret == - EPROBE_DEFER )
629- goto out_disable_pclk ;
615+ return ret ;
630616
631617 dw_wdt -> wdd .info = & dw_wdt_ident ;
632618 }
@@ -675,12 +661,6 @@ static int dw_wdt_drv_probe(struct platform_device *pdev)
675661
676662out_assert_rst :
677663 reset_control_assert (dw_wdt -> rst );
678-
679- out_disable_pclk :
680- clk_disable_unprepare (dw_wdt -> pclk );
681-
682- out_disable_clk :
683- clk_disable_unprepare (dw_wdt -> clk );
684664 return ret ;
685665}
686666
@@ -692,8 +672,6 @@ static void dw_wdt_drv_remove(struct platform_device *pdev)
692672
693673 watchdog_unregister_device (& dw_wdt -> wdd );
694674 reset_control_assert (dw_wdt -> rst );
695- clk_disable_unprepare (dw_wdt -> pclk );
696- clk_disable_unprepare (dw_wdt -> clk );
697675}
698676
699677#ifdef CONFIG_OF
0 commit comments