|
@@ -2350,10 +2350,13 @@ static int tegra_sor_init(struct host1x_client *client)
|
|
* XXX: Remove this reset once proper hand-over from firmware to
|
|
* XXX: Remove this reset once proper hand-over from firmware to
|
|
* kernel is possible.
|
|
* kernel is possible.
|
|
*/
|
|
*/
|
|
- err = reset_control_assert(sor->rst);
|
|
|
|
- if (err < 0) {
|
|
|
|
- dev_err(sor->dev, "failed to assert SOR reset: %d\n", err);
|
|
|
|
- return err;
|
|
|
|
|
|
+ if (sor->rst) {
|
|
|
|
+ err = reset_control_assert(sor->rst);
|
|
|
|
+ if (err < 0) {
|
|
|
|
+ dev_err(sor->dev, "failed to assert SOR reset: %d\n",
|
|
|
|
+ err);
|
|
|
|
+ return err;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
err = clk_prepare_enable(sor->clk);
|
|
err = clk_prepare_enable(sor->clk);
|
|
@@ -2364,10 +2367,13 @@ static int tegra_sor_init(struct host1x_client *client)
|
|
|
|
|
|
usleep_range(1000, 3000);
|
|
usleep_range(1000, 3000);
|
|
|
|
|
|
- err = reset_control_deassert(sor->rst);
|
|
|
|
- if (err < 0) {
|
|
|
|
- dev_err(sor->dev, "failed to deassert SOR reset: %d\n", err);
|
|
|
|
- return err;
|
|
|
|
|
|
+ if (sor->rst) {
|
|
|
|
+ err = reset_control_deassert(sor->rst);
|
|
|
|
+ if (err < 0) {
|
|
|
|
+ dev_err(sor->dev, "failed to deassert SOR reset: %d\n",
|
|
|
|
+ err);
|
|
|
|
+ return err;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
err = clk_prepare_enable(sor->clk_safe);
|
|
err = clk_prepare_enable(sor->clk_safe);
|
|
@@ -2601,11 +2607,14 @@ static int tegra_sor_probe(struct platform_device *pdev)
|
|
goto remove;
|
|
goto remove;
|
|
}
|
|
}
|
|
|
|
|
|
- sor->rst = devm_reset_control_get(&pdev->dev, "sor");
|
|
|
|
- if (IS_ERR(sor->rst)) {
|
|
|
|
- err = PTR_ERR(sor->rst);
|
|
|
|
- dev_err(&pdev->dev, "failed to get reset control: %d\n", err);
|
|
|
|
- goto remove;
|
|
|
|
|
|
+ if (!pdev->dev.pm_domain) {
|
|
|
|
+ sor->rst = devm_reset_control_get(&pdev->dev, "sor");
|
|
|
|
+ if (IS_ERR(sor->rst)) {
|
|
|
|
+ err = PTR_ERR(sor->rst);
|
|
|
|
+ dev_err(&pdev->dev, "failed to get reset control: %d\n",
|
|
|
|
+ err);
|
|
|
|
+ goto remove;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
sor->clk = devm_clk_get(&pdev->dev, NULL);
|
|
sor->clk = devm_clk_get(&pdev->dev, NULL);
|
|
@@ -2711,10 +2720,12 @@ static int tegra_sor_suspend(struct device *dev)
|
|
struct tegra_sor *sor = dev_get_drvdata(dev);
|
|
struct tegra_sor *sor = dev_get_drvdata(dev);
|
|
int err;
|
|
int err;
|
|
|
|
|
|
- err = reset_control_assert(sor->rst);
|
|
|
|
- if (err < 0) {
|
|
|
|
- dev_err(dev, "failed to assert reset: %d\n", err);
|
|
|
|
- return err;
|
|
|
|
|
|
+ if (sor->rst) {
|
|
|
|
+ err = reset_control_assert(sor->rst);
|
|
|
|
+ if (err < 0) {
|
|
|
|
+ dev_err(dev, "failed to assert reset: %d\n", err);
|
|
|
|
+ return err;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
usleep_range(1000, 2000);
|
|
usleep_range(1000, 2000);
|
|
@@ -2737,11 +2748,13 @@ static int tegra_sor_resume(struct device *dev)
|
|
|
|
|
|
usleep_range(1000, 2000);
|
|
usleep_range(1000, 2000);
|
|
|
|
|
|
- err = reset_control_deassert(sor->rst);
|
|
|
|
- if (err < 0) {
|
|
|
|
- dev_err(dev, "failed to deassert reset: %d\n", err);
|
|
|
|
- clk_disable_unprepare(sor->clk);
|
|
|
|
- return err;
|
|
|
|
|
|
+ if (sor->rst) {
|
|
|
|
+ err = reset_control_deassert(sor->rst);
|
|
|
|
+ if (err < 0) {
|
|
|
|
+ dev_err(dev, "failed to deassert reset: %d\n", err);
|
|
|
|
+ clk_disable_unprepare(sor->clk);
|
|
|
|
+ return err;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
return 0;
|
|
return 0;
|