Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 365765fc authored by Thierry Reding's avatar Thierry Reding
Browse files

drm/tegra: Track HDMI enable state



The DRM core doesn't track enable and disable state of encoders and/or
connectors, so calls to the output's .enable() and .disable() are not
guaranteed to be balanced. Track the enable state internally so that
calls to regulator and clock frameworks remain balanced.

Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
parent 17a8b6b0
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ struct tegra_hdmi {
	struct host1x_client client;
	struct tegra_output output;
	struct device *dev;
	bool enabled;

	struct regulator *vdd;
	struct regulator *pll;
@@ -699,6 +700,9 @@ static int tegra_output_hdmi_enable(struct tegra_output *output)
	int retries = 1000;
	int err;

	if (hdmi->enabled)
		return 0;

	hdmi->dvi = !tegra_output_is_hdmi(output);

	pclk = mode->clock * 1000;
@@ -906,6 +910,8 @@ static int tegra_output_hdmi_enable(struct tegra_output *output)

	/* TODO: add HDCP support */

	hdmi->enabled = true;

	return 0;
}

@@ -913,10 +919,15 @@ static int tegra_output_hdmi_disable(struct tegra_output *output)
{
	struct tegra_hdmi *hdmi = to_hdmi(output);

	if (!hdmi->enabled)
		return 0;

	reset_control_assert(hdmi->rst);
	clk_disable(hdmi->clk);
	regulator_disable(hdmi->pll);

	hdmi->enabled = false;

	return 0;
}