From: hjc Date: Tue, 31 Mar 2015 01:14:38 +0000 (+0800) Subject: rk3368 lcdc: update lcdc interface for mutile area check X-Git-Tag: firefly_0821_release~4158^2~255 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=3b0e2ca8fde71258a0d32664ab20f9951d08793c;p=firefly-linux-kernel-4.4.55.git rk3368 lcdc: update lcdc interface for mutile area check Signed-off-by: hjc --- diff --git a/drivers/video/rockchip/lcdc/rk3368_lcdc.c b/drivers/video/rockchip/lcdc/rk3368_lcdc.c index 1a524ffd088f..17432837e533 100755 --- a/drivers/video/rockchip/lcdc/rk3368_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk3368_lcdc.c @@ -3157,25 +3157,65 @@ static int rk3368_lcdc_blank(struct rk_lcdc_driver *dev_drv, return 0; } -static int rk3368_lcdc_get_win_state(struct rk_lcdc_driver *dev_drv, int win_id) +static int rk3368_lcdc_get_win_state(struct rk_lcdc_driver *dev_drv, + int win_id, int area_id) { struct lcdc_device *lcdc_dev = container_of(dev_drv, struct lcdc_device, driver); - int win_status = 0; - if (win_id == 0) - win_status = lcdc_read_bit(lcdc_dev, WIN0_CTRL0, m_WIN0_EN); - else if (win_id == 1) - win_status = lcdc_read_bit(lcdc_dev, WIN1_CTRL0, m_WIN1_EN); - else if (win_id == 2) - win_status = lcdc_read_bit(lcdc_dev, WIN2_CTRL0, m_WIN2_EN); - else if (win_id == 3) - win_status = lcdc_read_bit(lcdc_dev, WIN3_CTRL0, m_WIN3_EN); - else if (win_id == 4) - win_status = lcdc_read_bit(lcdc_dev, HWC_CTRL0, m_HWC_EN); - else - pr_err("!!!%s,win_id :%d,unsupport!!!\n",__func__,win_id); - - return win_status; + u32 win_ctrl = 0; + u32 area_status = 0; + + switch (win_id) { + case 0: + win_ctrl = lcdc_readl(lcdc_dev, WIN0_CTRL0); + area_status = win_ctrl & m_WIN0_EN; + break; + case 1: + win_ctrl = lcdc_readl(lcdc_dev, WIN1_CTRL0); + area_status = win_ctrl & m_WIN1_EN; + break; + case 2: + win_ctrl = lcdc_readl(lcdc_dev, WIN2_CTRL0); + if (area_id == 0) + area_status = win_ctrl & m_WIN2_MST0_EN; + if (area_id == 1) + area_status = win_ctrl & m_WIN2_MST1_EN; + if (area_id == 2) + area_status = win_ctrl & m_WIN2_MST2_EN; + if (area_id == 3) + area_status = win_ctrl & m_WIN2_MST3_EN; + break; + case 3: + win_ctrl = lcdc_readl(lcdc_dev, WIN3_CTRL0); + if (area_id == 0) + area_status = win_ctrl & m_WIN3_MST0_EN; + if (area_id == 1) + area_status = win_ctrl & m_WIN3_MST1_EN; + if (area_id == 2) + area_status = win_ctrl & m_WIN3_MST2_EN; + if (area_id == 3) + area_status = win_ctrl & m_WIN3_MST3_EN; + break; + case 4: + win_ctrl = lcdc_readl(lcdc_dev, HWC_CTRL0); + area_status = win_ctrl & m_HWC_EN; + break; + default: + pr_err("!!!%s,win[%d]area[%d],unsupport!!!\n",__func__,win_id,area_id); + break; + } + return area_status; +} + +static int rk3368_lcdc_get_area_num(struct rk_lcdc_driver *dev_drv, + unsigned int *area_support) +{ + area_support[0] = 1; + area_support[1] = 1; + area_support[2] = 4; + area_support[3] = 4; + + return 0; } /*overlay will be do at regupdate*/ @@ -3912,16 +3952,22 @@ int rk3368_lcdc_poll_vblank(struct rk_lcdc_driver *dev_drv) } static int rk3368_lcdc_get_dsp_addr(struct rk_lcdc_driver *dev_drv, - unsigned int *dsp_addr) + unsigned int dsp_addr[][4]) { struct lcdc_device *lcdc_dev = container_of(dev_drv, struct lcdc_device, driver); spin_lock(&lcdc_dev->reg_lock); if (lcdc_dev->clk_on) { - dsp_addr[0] = lcdc_readl(lcdc_dev, WIN0_YRGB_MST); - dsp_addr[1] = lcdc_readl(lcdc_dev, WIN1_YRGB_MST); - dsp_addr[2] = lcdc_readl(lcdc_dev, WIN2_MST0); - dsp_addr[3] = lcdc_readl(lcdc_dev, WIN3_MST0); + dsp_addr[0][0] = lcdc_readl(lcdc_dev, WIN0_YRGB_MST); + dsp_addr[1][0] = lcdc_readl(lcdc_dev, WIN1_YRGB_MST); + dsp_addr[2][0] = lcdc_readl(lcdc_dev, WIN2_MST0); + dsp_addr[2][1] = lcdc_readl(lcdc_dev, WIN2_MST1); + dsp_addr[2][2] = lcdc_readl(lcdc_dev, WIN2_MST2); + dsp_addr[2][3] = lcdc_readl(lcdc_dev, WIN2_MST3); + dsp_addr[3][0] = lcdc_readl(lcdc_dev, WIN3_MST0); + dsp_addr[3][1] = lcdc_readl(lcdc_dev, WIN3_MST1); + dsp_addr[3][2] = lcdc_readl(lcdc_dev, WIN3_MST2); + dsp_addr[3][3] = lcdc_readl(lcdc_dev, WIN3_MST3); } spin_unlock(&lcdc_dev->reg_lock); return 0; @@ -4300,6 +4346,7 @@ static struct rk_lcdc_drv_ops lcdc_drv_ops = { .suspend = rk3368_lcdc_early_suspend, .resume = rk3368_lcdc_early_resume, .get_win_state = rk3368_lcdc_get_win_state, + .area_support_num = rk3368_lcdc_get_area_num, .ovl_mgr = rk3368_lcdc_ovl_mgr, .get_disp_info = rk3368_lcdc_get_disp_info, .fps_mgr = rk3368_lcdc_fps_mgr,