diff options
Diffstat (limited to 'drivers/gpu/drm/msm/hdmi/hdmi_phy.c')
-rw-r--r-- | drivers/gpu/drm/msm/hdmi/hdmi_phy.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/drivers/gpu/drm/msm/hdmi/hdmi_phy.c b/drivers/gpu/drm/msm/hdmi/hdmi_phy.c index de3f0f504ede..9ad4573b6fd5 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi_phy.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi_phy.c @@ -118,6 +118,28 @@ void hdmi_phy_powerdown(struct hdmi_phy *phy) phy->cfg->powerdown(phy); } +static int hdmi_phy_pll_init(struct platform_device *pdev, + enum hdmi_phy_type type) +{ + int ret; + + switch (type) { + case MSM_HDMI_PHY_8960: + ret = hdmi_pll_8960_init(pdev); + break; + /* + * we don't have PLL support for these, don't report an error for now + */ + case MSM_HDMI_PHY_8x60: + case MSM_HDMI_PHY_8x74: + default: + ret = 0; + break; + } + + return ret; +} + static int hdmi_phy_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; @@ -146,6 +168,19 @@ static int hdmi_phy_probe(struct platform_device *pdev) pm_runtime_enable(&pdev->dev); + ret = hdmi_phy_resource_enable(phy); + if (ret) + return ret; + + ret = hdmi_phy_pll_init(pdev, phy->cfg->type); + if (ret) { + dev_err(dev, "couldn't init PLL\n"); + hdmi_phy_resource_disable(phy); + return ret; + } + + hdmi_phy_resource_disable(phy); + platform_set_drvdata(pdev, phy); return 0; |