|
@@ -42,6 +42,7 @@ struct tegra_hdmi {
|
|
|
struct device *dev;
|
|
|
bool enabled;
|
|
|
|
|
|
+ struct regulator *hdmi;
|
|
|
struct regulator *vdd;
|
|
|
struct regulator *pll;
|
|
|
|
|
@@ -710,6 +711,12 @@ static int tegra_output_hdmi_enable(struct tegra_output *output)
|
|
|
h_back_porch = mode->htotal - mode->hsync_end;
|
|
|
h_front_porch = mode->hsync_start - mode->hdisplay;
|
|
|
|
|
|
+ err = regulator_enable(hdmi->vdd);
|
|
|
+ if (err < 0) {
|
|
|
+ dev_err(hdmi->dev, "failed to enable VDD regulator: %d\n", err);
|
|
|
+ return err;
|
|
|
+ }
|
|
|
+
|
|
|
err = regulator_enable(hdmi->pll);
|
|
|
if (err < 0) {
|
|
|
dev_err(hdmi->dev, "failed to enable PLL regulator: %d\n", err);
|
|
@@ -950,6 +957,7 @@ static int tegra_output_hdmi_disable(struct tegra_output *output)
|
|
|
reset_control_assert(hdmi->rst);
|
|
|
clk_disable(hdmi->clk);
|
|
|
regulator_disable(hdmi->pll);
|
|
|
+ regulator_disable(hdmi->vdd);
|
|
|
|
|
|
hdmi->enabled = false;
|
|
|
|
|
@@ -1256,13 +1264,6 @@ static int tegra_hdmi_init(struct host1x_client *client)
|
|
|
struct tegra_hdmi *hdmi = host1x_client_to_hdmi(client);
|
|
|
int err;
|
|
|
|
|
|
- err = regulator_enable(hdmi->vdd);
|
|
|
- if (err < 0) {
|
|
|
- dev_err(client->dev, "failed to enable VDD regulator: %d\n",
|
|
|
- err);
|
|
|
- return err;
|
|
|
- }
|
|
|
-
|
|
|
hdmi->output.type = TEGRA_OUTPUT_HDMI;
|
|
|
hdmi->output.dev = client->dev;
|
|
|
hdmi->output.ops = &hdmi_ops;
|
|
@@ -1279,6 +1280,13 @@ static int tegra_hdmi_init(struct host1x_client *client)
|
|
|
dev_err(client->dev, "debugfs setup failed: %d\n", err);
|
|
|
}
|
|
|
|
|
|
+ err = regulator_enable(hdmi->hdmi);
|
|
|
+ if (err < 0) {
|
|
|
+ dev_err(client->dev, "failed to enable HDMI regulator: %d\n",
|
|
|
+ err);
|
|
|
+ return err;
|
|
|
+ }
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -1287,6 +1295,8 @@ static int tegra_hdmi_exit(struct host1x_client *client)
|
|
|
struct tegra_hdmi *hdmi = host1x_client_to_hdmi(client);
|
|
|
int err;
|
|
|
|
|
|
+ regulator_disable(hdmi->hdmi);
|
|
|
+
|
|
|
if (IS_ENABLED(CONFIG_DEBUG_FS)) {
|
|
|
err = tegra_hdmi_debugfs_exit(hdmi);
|
|
|
if (err < 0)
|
|
@@ -1306,8 +1316,6 @@ static int tegra_hdmi_exit(struct host1x_client *client)
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
- regulator_disable(hdmi->vdd);
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -1399,6 +1407,12 @@ static int tegra_hdmi_probe(struct platform_device *pdev)
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
+ hdmi->hdmi = devm_regulator_get(&pdev->dev, "hdmi");
|
|
|
+ if (IS_ERR(hdmi->hdmi)) {
|
|
|
+ dev_err(&pdev->dev, "failed to get HDMI regulator\n");
|
|
|
+ return PTR_ERR(hdmi->hdmi);
|
|
|
+ }
|
|
|
+
|
|
|
hdmi->vdd = devm_regulator_get(&pdev->dev, "vdd");
|
|
|
if (IS_ERR(hdmi->vdd)) {
|
|
|
dev_err(&pdev->dev, "failed to get VDD regulator\n");
|