From 7cd8b389a7e465a2e1dce237d3cd26c6e3fb7b82 Mon Sep 17 00:00:00 2001 From: Jeevan Shriram Date: Tue, 19 Aug 2014 22:43:46 -0700 Subject: clk: mdss: parse the dynamic refresh register base Add support for parsing dynamic refresh register base for register programming. Change-Id: I0f23f3c6c01e2ef47fec5048ae0c8ebf31566b61 Signed-off-by: Jeevan Shriram --- Documentation/devicetree/bindings/fb/mdss-pll.txt | 5 +++-- drivers/clk/msm/mdss/mdss-pll.c | 16 ++++++++++++++++ drivers/clk/msm/mdss/mdss-pll.h | 6 +++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/fb/mdss-pll.txt b/Documentation/devicetree/bindings/fb/mdss-pll.txt index fbb18c638ea9..ad06323bfba5 100644 --- a/Documentation/devicetree/bindings/fb/mdss-pll.txt +++ b/Documentation/devicetree/bindings/fb/mdss-pll.txt @@ -40,8 +40,9 @@ Example: label = "MDSS DSI 0 PLL"; cell-index = <0>; - reg = <0xfd922A00 0xD4>; - reg-names = "pll_base"; + reg = <0xfd922A00 0xD4>, + <0xfd922900 0x64>; + reg-names = "pll_base", "dynamic_pll_base"; gdsc-supply = <&gdsc_mdss>; vddio-supply = <&pm8941_l12>; vcca-supply = <&pm8941_l28>; diff --git a/drivers/clk/msm/mdss/mdss-pll.c b/drivers/clk/msm/mdss/mdss-pll.c index c7c67c425f15..7f41cb1ceb63 100644 --- a/drivers/clk/msm/mdss/mdss-pll.c +++ b/drivers/clk/msm/mdss/mdss-pll.c @@ -203,6 +203,7 @@ static int mdss_pll_probe(struct platform_device *pdev) const char *label; struct resource *pll_base_reg; struct resource *phy_base_reg; + struct resource *dynamic_pll_base_reg; struct mdss_pll_resources *pll_res; if (!pdev->dev.of_node) { @@ -267,6 +268,18 @@ static int mdss_pll_probe(struct platform_device *pdev) } } + dynamic_pll_base_reg = platform_get_resource_byname(pdev, + IORESOURCE_MEM, "dynamic_pll_base"); + if (dynamic_pll_base_reg) { + pll_res->dyn_pll_base = ioremap(dynamic_pll_base_reg->start, + resource_size(dynamic_pll_base_reg)); + if (!pll_res->dyn_pll_base) { + pr_err("Unable to remap dynamic pll base resources\n"); + rc = -ENOMEM; + goto dyn_pll_io_error; + } + } + rc = mdss_pll_resource_init(pdev, pll_res); if (rc) { pr_err("Pll resource init failed rc=%d\n", rc); @@ -284,6 +297,9 @@ static int mdss_pll_probe(struct platform_device *pdev) clock_register_error: mdss_pll_resource_deinit(pdev, pll_res); res_init_error: + if (pll_res->dyn_pll_base) + iounmap(pll_res->dyn_pll_base); +dyn_pll_io_error: if (pll_res->phy_base) iounmap(pll_res->phy_base); phy_io_error: diff --git a/drivers/clk/msm/mdss/mdss-pll.h b/drivers/clk/msm/mdss/mdss-pll.h index 74fe45aa0e14..1bb8f7306dcd 100644 --- a/drivers/clk/msm/mdss/mdss-pll.h +++ b/drivers/clk/msm/mdss/mdss-pll.h @@ -42,9 +42,13 @@ struct mdss_pll_resources { /* Pll specific resources like GPIO, power supply, clocks, etc*/ struct dss_module_power mp; - /* dsi/edp/hmdi plls' base register and phy register mapping */ + /* + * dsi/edp/hmdi plls' base register, phy and dynamic refresh + * register mapping + */ void __iomem *pll_base; void __iomem *phy_base; + void __iomem *dyn_pll_base; /* * Certain pll's needs to update the same vco rate after resume in -- cgit v1.2.3