diff --git a/drivers/gpu/drm/tegra/sor.c b/drivers/gpu/drm/tegra/sor.c index e79dd65c1b54..a9222841862e 100644 --- a/drivers/gpu/drm/tegra/sor.c +++ b/drivers/gpu/drm/tegra/sor.c @@ -3914,37 +3914,6 @@ static int tegra_sor_probe(struct platform_device *pdev) platform_set_drvdata(pdev, sor); pm_runtime_enable(&pdev->dev); - /* - * On Tegra210 and earlier, provide our own implementation for the - * pad output clock. - */ - if (!sor->clk_pad) { - char *name; - - name = devm_kasprintf(sor->dev, GFP_KERNEL, "sor%u_pad_clkout", - sor->index); - if (!name) { - err = -ENOMEM; - goto rpm_disable; - } - - err = host1x_client_resume(&sor->client); - if (err < 0) { - dev_err(sor->dev, "failed to resume: %d\n", err); - goto rpm_disable; - } - - sor->clk_pad = tegra_clk_sor_pad_register(sor, name); - host1x_client_suspend(&sor->client); - } - - if (IS_ERR(sor->clk_pad)) { - err = PTR_ERR(sor->clk_pad); - dev_err(&pdev->dev, "failed to register SOR pad clock: %d\n", - err); - goto rpm_disable; - } - INIT_LIST_HEAD(&sor->client.list); sor->client.ops = &sor_client_ops; sor->client.dev = &pdev->dev; @@ -3956,8 +3925,41 @@ static int tegra_sor_probe(struct platform_device *pdev) goto rpm_disable; } + /* + * On Tegra210 and earlier, provide our own implementation for the + * pad output clock. + */ + if (!sor->clk_pad) { + char *name; + + name = devm_kasprintf(sor->dev, GFP_KERNEL, "sor%u_pad_clkout", + sor->index); + if (!name) { + err = -ENOMEM; + goto unregister; + } + + err = host1x_client_resume(&sor->client); + if (err < 0) { + dev_err(sor->dev, "failed to resume: %d\n", err); + goto unregister; + } + + sor->clk_pad = tegra_clk_sor_pad_register(sor, name); + host1x_client_suspend(&sor->client); + } + + if (IS_ERR(sor->clk_pad)) { + err = PTR_ERR(sor->clk_pad); + dev_err(sor->dev, "failed to register SOR pad clock: %d\n", + err); + goto unregister; + } + return 0; +unregister: + host1x_client_unregister(&sor->client); rpm_disable: pm_runtime_disable(&pdev->dev); remove: