From 397b32829109de452d528a1ab0f017d53b83553a Mon Sep 17 00:00:00 2001 From: hjc Date: Thu, 19 Mar 2015 17:02:30 +0800 Subject: [PATCH] rk31xx lvds: add power domain control for lvds Signed-off-by: hjc --- arch/arm64/boot/dts/rk3368.dtsi | 4 ++-- drivers/video/rockchip/transmitter/rk31xx_lvds.c | 12 +++++++++++- drivers/video/rockchip/transmitter/rk31xx_lvds.h | 1 + 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/arch/arm64/boot/dts/rk3368.dtsi b/arch/arm64/boot/dts/rk3368.dtsi index f33094081d1d..4d90d636dd9c 100755 --- a/arch/arm64/boot/dts/rk3368.dtsi +++ b/arch/arm64/boot/dts/rk3368.dtsi @@ -753,8 +753,8 @@ rockchip,grf = <&grf>; reg = <0x0 0xff968000 0x0 0x4000>, <0x0 0xff9600a0 0x0 0x20>; reg-names = "mipi_lvds_phy", "mipi_lvds_ctl"; - clocks = <&clk_gates22 10>, <&clk_gates17 3>; - clock-names = "pclk_lvds", "pclk_lvds_ctl"; + clocks = <&clk_gates22 10>, <&clk_gates17 3>, <&pd_lvds>; + clock-names = "pclk_lvds", "pclk_lvds_ctl", "pd_lvds"; status = "disabled"; }; diff --git a/drivers/video/rockchip/transmitter/rk31xx_lvds.c b/drivers/video/rockchip/transmitter/rk31xx_lvds.c index 2ee121623620..41f00a535a81 100755 --- a/drivers/video/rockchip/transmitter/rk31xx_lvds.c +++ b/drivers/video/rockchip/transmitter/rk31xx_lvds.c @@ -58,7 +58,13 @@ static int rk31xx_lvds_clk_init(struct rk_lvds_device *lvds) dev_err(lvds->dev, "get ctrl hclk failed\n"); return PTR_ERR(lvds->ctrl_hclk); } - } + } else { + lvds->pd = devm_clk_get(lvds->dev, "pd_lvds"); + if (IS_ERR(lvds->pd)) { + dev_err(lvds->dev, "get pd_lvds failed\n"); + return PTR_ERR(lvds->pd); + } + } return 0; } @@ -70,6 +76,8 @@ static int rk31xx_lvds_clk_enable(struct rk_lvds_device *lvds) clk_prepare_enable(lvds->ctrl_pclk); if (lvds->data->soc_type == LVDS_SOC_RK312X) clk_prepare_enable(lvds->ctrl_hclk); + else + clk_prepare_enable(lvds->pd); lvds->clk_on = true; } @@ -82,6 +90,8 @@ static int rk31xx_lvds_clk_disable(struct rk_lvds_device *lvds) clk_disable_unprepare(lvds->pclk); if (lvds->data->soc_type == LVDS_SOC_RK312X) clk_disable_unprepare(lvds->ctrl_hclk); + else + clk_disable_unprepare(lvds->pd); clk_disable_unprepare(lvds->ctrl_pclk); lvds->clk_on = false; } diff --git a/drivers/video/rockchip/transmitter/rk31xx_lvds.h b/drivers/video/rockchip/transmitter/rk31xx_lvds.h index 253d8c78da14..dbc094ce3fa6 100755 --- a/drivers/video/rockchip/transmitter/rk31xx_lvds.h +++ b/drivers/video/rockchip/transmitter/rk31xx_lvds.h @@ -132,6 +132,7 @@ struct rk_lvds_device { void __iomem *regbase; void __iomem *ctrl_reg; struct regmap *grf_lvds_base; + struct clk *pd; /*power domain*/ struct clk *pclk; /*phb clk*/ struct clk *ctrl_pclk; /* mipi ctrl pclk*/ struct clk *ctrl_hclk; /* mipi ctrl hclk*/ -- 2.34.1