From 3110861926a73921191cbc7700fe2a130fda3ad0 Mon Sep 17 00:00:00 2001 From: ddl Date: Wed, 30 Mar 2011 00:08:41 +0800 Subject: [PATCH] camera: add display power control in vip driver --- drivers/media/video/rk29_camera_oneframe.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/media/video/rk29_camera_oneframe.c b/drivers/media/video/rk29_camera_oneframe.c index b538015303dc..39f0b2411758 100755 --- a/drivers/media/video/rk29_camera_oneframe.c +++ b/drivers/media/video/rk29_camera_oneframe.c @@ -214,6 +214,8 @@ struct rk29_camera_dev struct clk *hclk_disp_matrix; struct clk *vip_matrix; + struct clk *pd_display; + void __iomem *base; void __iomem *grf_base; int frame_inval; /* ddl@rock-chips.com : The first frames is invalidate */ @@ -617,8 +619,8 @@ static int rk29_camera_activate(struct rk29_camera_dev *pcdev, struct soc_camera RK29CAMERA_DG("%s..%d.. \n",__FUNCTION__,__LINE__); if (!pcdev->aclk_ddr_lcdc || !pcdev->aclk_disp_matrix || !pcdev->hclk_cpu_display || - !pcdev->vip_slave || !pcdev->vip_out || !pcdev->vip_input || !pcdev->vip_bus || - IS_ERR(pcdev->aclk_ddr_lcdc) || IS_ERR(pcdev->aclk_disp_matrix) || IS_ERR(pcdev->hclk_cpu_display) || + !pcdev->vip_slave || !pcdev->vip_out || !pcdev->vip_input || !pcdev->vip_bus || !pcdev->pd_display || + IS_ERR(pcdev->aclk_ddr_lcdc) || IS_ERR(pcdev->aclk_disp_matrix) || IS_ERR(pcdev->hclk_cpu_display) || IS_ERR(pcdev->pd_display) || IS_ERR(pcdev->vip_slave) || IS_ERR(pcdev->vip_out) || IS_ERR(pcdev->vip_input) || IS_ERR(pcdev->vip_bus)) { RK29CAMERA_TR(KERN_ERR "failed to get vip_clk(axi) source\n"); @@ -632,6 +634,8 @@ static int rk29_camera_activate(struct rk29_camera_dev *pcdev, struct soc_camera goto RK29_CAMERA_ACTIVE_ERR; } + clk_enable(pcdev->pd_display); + clk_enable(pcdev->aclk_ddr_lcdc); clk_enable(pcdev->aclk_disp_matrix); @@ -713,6 +717,8 @@ static void rk29_camera_deactivate(struct rk29_camera_dev *pcdev) clk_disable(pcdev->aclk_ddr_lcdc); clk_disable(pcdev->aclk_disp_matrix); + + clk_disable(pcdev->pd_display); return; } @@ -1484,9 +1490,11 @@ static int rk29_camera_probe(struct platform_device *pdev) pcdev->hclk_disp_matrix = clk_get(&pdev->dev,"hclk_disp_matrix"); pcdev->vip_matrix = clk_get(&pdev->dev,"vip_matrix"); + pcdev->pd_display = clk_get(&pdev->dev,"pd_display"); + if (!pcdev->aclk_ddr_lcdc || !pcdev->aclk_disp_matrix || !pcdev->hclk_cpu_display || - !pcdev->vip_slave || !pcdev->vip_out || !pcdev->vip_input || !pcdev->vip_bus || - IS_ERR(pcdev->aclk_ddr_lcdc) || IS_ERR(pcdev->aclk_disp_matrix) || IS_ERR(pcdev->hclk_cpu_display) || + !pcdev->vip_slave || !pcdev->vip_out || !pcdev->vip_input || !pcdev->vip_bus || !pcdev->pd_display || + IS_ERR(pcdev->aclk_ddr_lcdc) || IS_ERR(pcdev->aclk_disp_matrix) || IS_ERR(pcdev->hclk_cpu_display) || IS_ERR(pcdev->pd_display) || IS_ERR(pcdev->vip_slave) || IS_ERR(pcdev->vip_out) || IS_ERR(pcdev->vip_input) || IS_ERR(pcdev->vip_bus)) { RK29CAMERA_TR(KERN_ERR "failed to get vip_clk(axi) source\n"); -- 2.34.1