pinctrl-0 = <&lcdc0_lcdc>;
pinctrl-1 = <&lcdc0_gpio>;
+ rockchip,fb-win-map = <FB_DEFAULT_ORDER>;
+
power_ctr: power_ctr {
rockchip,debug = <0>;
lcd_en: lcd_en {
&lcdc {
status = "okay";
+ rockchip,fb-win-map = <FB0_WIN1_FB1_WIN0_FB2_WIN2>;
};
&tve {
pinctrl-0 = <&lcdc0_lcdc>;
pinctrl-1 = <&lcdc0_gpio>;
+ rockchip,fb-win-map = <FB_DEFAULT_ORDER>;
power_ctr: power_ctr {
rockchip,debug = <0>;
lcd_cs: lcd_cs {
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)
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
#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;
}
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)
#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;
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)
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;
}
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)
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
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;
#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
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,
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*/
u16 overlay_mode;
u16 output_color;
+ u16 fb_win_map;
char fb0_win_id;
char fb1_win_id;
char fb2_win_id;