From: zwl Date: Tue, 26 Aug 2014 12:16:31 +0000 (+0800) Subject: rockchip:lcdc: add set default fb_win_map order at dts X-Git-Tag: firefly_0821_release~4790 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=026cf2550b6f66154ed0e4238e033fdb15dccf4d;p=firefly-linux-kernel-4.4.55.git rockchip:lcdc: add set default fb_win_map order at dts --- diff --git a/arch/arm/boot/dts/rk3126-sdk.dts b/arch/arm/boot/dts/rk3126-sdk.dts index c0a933148e21..4cfa11e8f3f5 100755 --- a/arch/arm/boot/dts/rk3126-sdk.dts +++ b/arch/arm/boot/dts/rk3126-sdk.dts @@ -56,6 +56,8 @@ pinctrl-0 = <&lcdc0_lcdc>; pinctrl-1 = <&lcdc0_gpio>; + rockchip,fb-win-map = ; + power_ctr: power_ctr { rockchip,debug = <0>; lcd_en: lcd_en { diff --git a/arch/arm/boot/dts/rk3128-box.dts b/arch/arm/boot/dts/rk3128-box.dts index 79f5ac6dd7ad..9eaf8a89edbc 100755 --- a/arch/arm/boot/dts/rk3128-box.dts +++ b/arch/arm/boot/dts/rk3128-box.dts @@ -137,6 +137,7 @@ &lcdc { status = "okay"; + rockchip,fb-win-map = ; }; &tve { diff --git a/arch/arm/boot/dts/rk3128-sdk.dts b/arch/arm/boot/dts/rk3128-sdk.dts index 42363b928c42..68447b0704e6 100755 --- a/arch/arm/boot/dts/rk3128-sdk.dts +++ b/arch/arm/boot/dts/rk3128-sdk.dts @@ -41,6 +41,7 @@ pinctrl-0 = <&lcdc0_lcdc>; pinctrl-1 = <&lcdc0_gpio>; + rockchip,fb-win-map = ; power_ctr: power_ctr { rockchip,debug = <0>; lcd_cs: lcd_cs { diff --git a/drivers/video/rockchip/lcdc/rk3036_lcdc.c b/drivers/video/rockchip/lcdc/rk3036_lcdc.c index 0c6ddb4f9075..aed0180bc6c8 100755 --- a/drivers/video/rockchip/lcdc/rk3036_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk3036_lcdc.c @@ -1237,8 +1237,7 @@ static int rk3036_lcdc_set_overscan(struct rk_lcdc_driver *dev_drv, return 0; } -static int rk3036_fb_win_remap(struct rk_lcdc_driver *dev_drv, - enum fb_win_map_order order) +static int rk3036_fb_win_remap(struct rk_lcdc_driver *dev_drv, u16 order) { mutex_lock(&dev_drv->fb_win_id_mutex); if (order == FB_DEFAULT_ORDER) @@ -1409,10 +1408,10 @@ static struct rk_lcdc_drv_ops lcdc_drv_ops = { static int rk3036_lcdc_parse_dt(struct lcdc_device *lcdc_dev) { -#if defined(CONFIG_ROCKCHIP_IOMMU) struct device_node *np = lcdc_dev->dev->of_node; int val; +#if defined(CONFIG_ROCKCHIP_IOMMU) if (of_property_read_u32(np, "rockchip,iommu-enabled", &val)) lcdc_dev->driver.iommu_enabled = 0; else @@ -1420,6 +1419,11 @@ static int rk3036_lcdc_parse_dt(struct lcdc_device *lcdc_dev) #else lcdc_dev->driver.iommu_enabled = 0; #endif + if (of_property_read_u32(np, "rockchip,fb-win-map", &val)) + lcdc_dev->driver.fb_win_map = FB_DEFAULT_ORDER; + else + lcdc_dev->driver.fb_win_map = val; + return 0; } diff --git a/drivers/video/rockchip/lcdc/rk312x_lcdc.c b/drivers/video/rockchip/lcdc/rk312x_lcdc.c index 136cae945612..eb05976dcdf3 100755 --- a/drivers/video/rockchip/lcdc/rk312x_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk312x_lcdc.c @@ -1676,8 +1676,7 @@ static int rk312x_lcdc_open_bcsh(struct rk_lcdc_driver *dev_drv, bool open) return 0; } -static int rk312x_fb_win_remap(struct rk_lcdc_driver *dev_drv, - enum fb_win_map_order order) +static int rk312x_fb_win_remap(struct rk_lcdc_driver *dev_drv, u16 order) { mutex_lock(&dev_drv->fb_win_id_mutex); if (order == FB_DEFAULT_ORDER) @@ -2039,6 +2038,12 @@ static int rk312x_lcdc_parse_dt(struct lcdc_device *lcdc_dev) #else lcdc_dev->driver.iommu_enabled = 0; #endif + + if (of_property_read_u32(np, "rockchip,fb-win-map", &val)) + lcdc_dev->driver.fb_win_map = FB_DEFAULT_ORDER; + else + lcdc_dev->driver.fb_win_map = val; + match = of_match_node(rk312x_lcdc_dt_ids, np); if (match) { lcdc_drvdata = (const struct rk_lcdc_drvdata *)match->data; diff --git a/drivers/video/rockchip/lcdc/rk3188_lcdc.c b/drivers/video/rockchip/lcdc/rk3188_lcdc.c index 7ed1718393f0..ff2dcb638a2c 100755 --- a/drivers/video/rockchip/lcdc/rk3188_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk3188_lcdc.c @@ -1300,8 +1300,7 @@ static int rk3188_lcdc_fps_mgr(struct rk_lcdc_driver *dev_drv, int fps, return fps; } -static int rk3188_fb_win_remap(struct rk_lcdc_driver *dev_drv, - enum fb_win_map_order order) +static int rk3188_fb_win_remap(struct rk_lcdc_driver *dev_drv, u16 order) { mutex_lock(&dev_drv->fb_win_id_mutex); if (order == FB_DEFAULT_ORDER) @@ -1524,6 +1523,12 @@ static int rk3188_lcdc_parse_dt(struct lcdc_device *lcdc_dev) lcdc_dev->pwr18 = false; /*default set it as 3.xv power supply */ else lcdc_dev->pwr18 = (val ? true : false); + + if (of_property_read_u32(np, "rockchip,fb-win-map", &val)) + lcdc_dev->driver.fb_win_map = FB_DEFAULT_ORDER; + else + lcdc_dev->driver.fb_win_map = val; + return 0; } diff --git a/drivers/video/rockchip/lcdc/rk3288_lcdc.c b/drivers/video/rockchip/lcdc/rk3288_lcdc.c index cfc6e7c83ea4..95386b82dcc6 100755 --- a/drivers/video/rockchip/lcdc/rk3288_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk3288_lcdc.c @@ -2963,8 +2963,7 @@ static int rk3288_lcdc_fps_mgr(struct rk_lcdc_driver *dev_drv, int fps, return fps; } -static int rk3288_fb_win_remap(struct rk_lcdc_driver *dev_drv, - enum fb_win_map_order order) +static int rk3288_fb_win_remap(struct rk_lcdc_driver *dev_drv, u16 order) { mutex_lock(&dev_drv->fb_win_id_mutex); if (order == FB_DEFAULT_ORDER) @@ -3605,6 +3604,11 @@ static int rk3288_lcdc_parse_dt(struct lcdc_device *lcdc_dev) else lcdc_dev->pwr18 = (val ? true : false); + if (of_property_read_u32(np, "rockchip,fb-win-map", &val)) + dev_drv->fb_win_map = FB_DEFAULT_ORDER; + else + dev_drv->fb_win_map = val; + if (of_property_read_u32(np, "rockchip,bcsh-en", &val)) dev_drv->bcsh.enable = false; else diff --git a/drivers/video/rockchip/rk_fb.c b/drivers/video/rockchip/rk_fb.c index eea56c3ddc9d..0c412dcb8459 100755 --- a/drivers/video/rockchip/rk_fb.c +++ b/drivers/video/rockchip/rk_fb.c @@ -3569,7 +3569,7 @@ static int init_lcdc_device_driver(struct rk_fb *rk_fb, init_completion(&dev_drv->frame_done); spin_lock_init(&dev_drv->cpl_lock); mutex_init(&dev_drv->fb_win_id_mutex); - dev_drv->ops->fb_win_remap(dev_drv, FB_DEFAULT_ORDER); + dev_drv->ops->fb_win_remap(dev_drv, dev_drv->fb_win_map); dev_drv->first_frame = 1; dev_drv->overscan.left = 100; dev_drv->overscan.top = 100; diff --git a/include/dt-bindings/rkfb/rk_fb.h b/include/dt-bindings/rkfb/rk_fb.h index 4ee91d4bc0d3..03e4016772cf 100755 --- a/include/dt-bindings/rkfb/rk_fb.h +++ b/include/dt-bindings/rkfb/rk_fb.h @@ -48,6 +48,16 @@ #define COLOR_RGB 0 #define COLOR_YCBCR 1 +/* fb win map */ +#define FB_DEFAULT_ORDER 0 +#define FB0_WIN2_FB1_WIN1_FB2_WIN0 12 +#define FB0_WIN1_FB1_WIN2_FB2_WIN0 21 +#define FB0_WIN2_FB1_WIN0_FB2_WIN1 102 +#define FB0_WIN0_FB1_WIN2_FB2_WIN1 120 +#define FB0_WIN0_FB1_WIN1_FB2_WIN2 210 +#define FB0_WIN1_FB1_WIN0_FB2_WIN2 201 +#define FB0_WIN0_FB1_WIN1_FB2_WIN2_FB3_WIN3 3210 + /* lvds connect config * * LVDS_8BIT_1 LVDS_8BIT_2 LVDS_8BIT_3 LVDS_6BIT diff --git a/include/linux/rk_fb.h b/include/linux/rk_fb.h index f86ffbbbb0cc..be9762f6bb81 100755 --- a/include/linux/rk_fb.h +++ b/include/linux/rk_fb.h @@ -214,17 +214,6 @@ enum data_format { YUV444_A, }; -enum fb_win_map_order { - FB_DEFAULT_ORDER = 0, - FB0_WIN2_FB1_WIN1_FB2_WIN0 = 12, - FB0_WIN1_FB1_WIN2_FB2_WIN0 = 21, - FB0_WIN2_FB1_WIN0_FB2_WIN1 = 102, - FB0_WIN0_FB1_WIN2_FB2_WIN1 = 120, - FB0_WIN0_FB1_WIN1_FB2_WIN2 = 210, - FB0_WIN1_FB1_WIN0_FB2_WIN2 = 201, - FB0_WIN0_FB1_WIN1_FB2_WIN2_FB3_WIN3 = 3210, -}; - enum { SCALE_NONE = 0x0, @@ -427,7 +416,7 @@ struct rk_lcdc_drv_ops { int (*fps_mgr) (struct rk_lcdc_driver *dev_drv, int fps, bool set); int (*fb_get_win_id) (struct rk_lcdc_driver *dev_drv, const char *id); /*find layer for fb*/ int (*fb_win_remap) (struct rk_lcdc_driver *dev_drv, - enum fb_win_map_order order); + u16 fb_win_map_order); int (*set_dsp_lut) (struct rk_lcdc_driver *dev_drv, int *lut); int (*read_dsp_lut) (struct rk_lcdc_driver *dev_drv, int *lut); int (*lcdc_hdmi_process) (struct rk_lcdc_driver *dev_drv, int mode); /*some lcdc need to some process in hdmi mode*/ @@ -559,6 +548,7 @@ struct rk_lcdc_driver { u16 overlay_mode; u16 output_color; + u16 fb_win_map; char fb0_win_id; char fb1_win_id; char fb2_win_id;