aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/tegra/sor.c57
1 files changed, 35 insertions, 22 deletions
diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c
index b652201eadad..cb7e06062174 100644
--- a/drivers/gpu/drm/tegra/sor.c
+++ b/drivers/gpu/drm/tegra/sor.c
@@ -2350,10 +2350,13 @@ static int tegra_sor_init(struct host1x_client *client)
2350 * XXX: Remove this reset once proper hand-over from firmware to 2350 * XXX: Remove this reset once proper hand-over from firmware to
2351 * kernel is possible. 2351 * kernel is possible.
2352 */ 2352 */
2353 err = reset_control_assert(sor->rst); 2353 if (sor->rst) {
2354 if (err < 0) { 2354 err = reset_control_assert(sor->rst);
2355 dev_err(sor->dev, "failed to assert SOR reset: %d\n", err); 2355 if (err < 0) {
2356 return err; 2356 dev_err(sor->dev, "failed to assert SOR reset: %d\n",
2357 err);
2358 return err;
2359 }
2357 } 2360 }
2358 2361
2359 err = clk_prepare_enable(sor->clk); 2362 err = clk_prepare_enable(sor->clk);
@@ -2364,10 +2367,13 @@ static int tegra_sor_init(struct host1x_client *client)
2364 2367
2365 usleep_range(1000, 3000); 2368 usleep_range(1000, 3000);
2366 2369
2367 err = reset_control_deassert(sor->rst); 2370 if (sor->rst) {
2368 if (err < 0) { 2371 err = reset_control_deassert(sor->rst);
2369 dev_err(sor->dev, "failed to deassert SOR reset: %d\n", err); 2372 if (err < 0) {
2370 return err; 2373 dev_err(sor->dev, "failed to deassert SOR reset: %d\n",
2374 err);
2375 return err;
2376 }
2371 } 2377 }
2372 2378
2373 err = clk_prepare_enable(sor->clk_safe); 2379 err = clk_prepare_enable(sor->clk_safe);
@@ -2601,11 +2607,14 @@ static int tegra_sor_probe(struct platform_device *pdev)
2601 goto remove; 2607 goto remove;
2602 } 2608 }
2603 2609
2604 sor->rst = devm_reset_control_get(&pdev->dev, "sor"); 2610 if (!pdev->dev.pm_domain) {
2605 if (IS_ERR(sor->rst)) { 2611 sor->rst = devm_reset_control_get(&pdev->dev, "sor");
2606 err = PTR_ERR(sor->rst); 2612 if (IS_ERR(sor->rst)) {
2607 dev_err(&pdev->dev, "failed to get reset control: %d\n", err); 2613 err = PTR_ERR(sor->rst);
2608 goto remove; 2614 dev_err(&pdev->dev, "failed to get reset control: %d\n",
2615 err);
2616 goto remove;
2617 }
2609 } 2618 }
2610 2619
2611 sor->clk = devm_clk_get(&pdev->dev, NULL); 2620 sor->clk = devm_clk_get(&pdev->dev, NULL);
@@ -2711,10 +2720,12 @@ static int tegra_sor_suspend(struct device *dev)
2711 struct tegra_sor *sor = dev_get_drvdata(dev); 2720 struct tegra_sor *sor = dev_get_drvdata(dev);
2712 int err; 2721 int err;
2713 2722
2714 err = reset_control_assert(sor->rst); 2723 if (sor->rst) {
2715 if (err < 0) { 2724 err = reset_control_assert(sor->rst);
2716 dev_err(dev, "failed to assert reset: %d\n", err); 2725 if (err < 0) {
2717 return err; 2726 dev_err(dev, "failed to assert reset: %d\n", err);
2727 return err;
2728 }
2718 } 2729 }
2719 2730
2720 usleep_range(1000, 2000); 2731 usleep_range(1000, 2000);
@@ -2737,11 +2748,13 @@ static int tegra_sor_resume(struct device *dev)
2737 2748
2738 usleep_range(1000, 2000); 2749 usleep_range(1000, 2000);
2739 2750
2740 err = reset_control_deassert(sor->rst); 2751 if (sor->rst) {
2741 if (err < 0) { 2752 err = reset_control_deassert(sor->rst);
2742 dev_err(dev, "failed to deassert reset: %d\n", err); 2753 if (err < 0) {
2743 clk_disable_unprepare(sor->clk); 2754 dev_err(dev, "failed to deassert reset: %d\n", err);
2744 return err; 2755 clk_disable_unprepare(sor->clk);
2756 return err;
2757 }
2745 } 2758 }
2746 2759
2747 return 0; 2760 return 0;