Skip to content

Commit

Permalink
drm/omap: HDMI PLL: use runtime pm
Browse files Browse the repository at this point in the history
To make it possible to use HDMI PLL for other video outputs than HDMI,
the HDMI PLL code needs to do runtime_get/put for the HDMI IP, so that
the IP (include the PLL) is enabled.

To do that we also need to store the HDMI pdev in the hdmi_pll_data.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
  • Loading branch information
Tomi Valkeinen committed May 19, 2016
1 parent 13ece4d commit 86c9305
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 0 deletions.
1 change: 1 addition & 0 deletions drivers/gpu/drm/omapdrm/dss/hdmi.h
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,7 @@ struct hdmi_pll_data {

void __iomem *base;

struct platform_device *pdev;
struct hdmi_wp_data *wp;
};

Expand Down
9 changes: 9 additions & 0 deletions drivers/gpu/drm/omapdrm/dss/hdmi_pll.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include <linux/io.h>
#include <linux/platform_device.h>
#include <linux/clk.h>
#include <linux/pm_runtime.h>

#include <video/omapdss.h>

Expand Down Expand Up @@ -104,6 +105,9 @@ static int hdmi_pll_enable(struct dss_pll *dsspll)
struct hdmi_wp_data *wp = pll->wp;
int r;

r = pm_runtime_get_sync(&pll->pdev->dev);
WARN_ON(r < 0);

dss_ctrl_pll_enable(DSS_PLL_HDMI, true);

r = hdmi_wp_set_pll_pwr(wp, HDMI_PLLPWRCMD_BOTHON_ALLCLKS);
Expand All @@ -117,10 +121,14 @@ static void hdmi_pll_disable(struct dss_pll *dsspll)
{
struct hdmi_pll_data *pll = container_of(dsspll, struct hdmi_pll_data, pll);
struct hdmi_wp_data *wp = pll->wp;
int r;

hdmi_wp_set_pll_pwr(wp, HDMI_PLLPWRCMD_ALLOFF);

dss_ctrl_pll_enable(DSS_PLL_HDMI, false);

r = pm_runtime_put_sync(&pll->pdev->dev);
WARN_ON(r < 0 && r != -ENOSYS);
}

static const struct dss_pll_ops dsi_pll_ops = {
Expand Down Expand Up @@ -228,6 +236,7 @@ int hdmi_pll_init(struct platform_device *pdev, struct hdmi_pll_data *pll,
int r;
struct resource *res;

pll->pdev = pdev;
pll->wp = wp;

res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pll");
Expand Down

0 comments on commit 86c9305

Please sign in to comment.