From 13e62351dd30c086654431b4a18eba621113aa37 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Lothar=20Wa=C3=9Fmann?= Date: Thu, 26 Feb 2015 11:57:01 +0100 Subject: [PATCH] video: mxc: search for display-timings in the mxcfb node, rather than ldb or mxc_lcdif The display-timings should be configurable for each individual display port, rather than for the LCD or LDB interface in general. Move the of_get_videomode() call to mxcfb_dispdrv_init() which is called for each display port. --- arch/arm/boot/dts/imx6dl-tx6dl-comtft.dts | 26 +++++++++--------- arch/arm/boot/dts/imx6q-tx6q-1020-comtft.dts | 26 +++++++++--------- arch/arm/boot/dts/imx6q-tx6q-1020.dts | 26 +++++++++--------- drivers/video/mxc/ldb.c | 15 ++++------- drivers/video/mxc/mxc_dispdrv.h | 2 ++ drivers/video/mxc/mxc_ipuv3_fb.c | 28 +++++++++++++++++--- drivers/video/mxc/mxc_lcdif.c | 20 +++++--------- 7 files changed, 77 insertions(+), 66 deletions(-) diff --git a/arch/arm/boot/dts/imx6dl-tx6dl-comtft.dts b/arch/arm/boot/dts/imx6dl-tx6dl-comtft.dts index aea48347730e..1604a57f0b56 100644 --- a/arch/arm/boot/dts/imx6dl-tx6dl-comtft.dts +++ b/arch/arm/boot/dts/imx6dl-tx6dl-comtft.dts @@ -18,8 +18,8 @@ compatible = "karo,imx6dl-tx6dl", "fsl,imx6dl"; aliases { - display = &lcd; - mxcfb0 = &display; + display = &mxcfb0; + mxcfb0 = &mxcfb0; }; backlight: backlight { @@ -44,7 +44,7 @@ default-brightness-level = <50>; }; - display: fb@2 { + mxcfb0: fb@2 { compatible = "fsl,mxc_sdc_fb"; disp_dev = "lcd"; interface_pix_fmt = "RGB24"; @@ -53,16 +53,6 @@ int_clk = <1>; late_init = <0>; status = "okay"; - }; - - lcd: lcd@0 { - compatible = "fsl,lcd"; - ipu_id = <0>; - disp_id = <0>; - default_ifmt = "RGB24"; - pinctrl-names = "default"; - pinctrl-0 = <&pinctrl_disp0_2>; - status = "okay"; display-timings { native-mode = <&ET070001DM6>; @@ -84,6 +74,16 @@ }; }; }; + + lcd: lcd@0 { + compatible = "fsl,lcd"; + ipu_id = <0>; + disp_id = <0>; + default_ifmt = "RGB24"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_disp0_2>; + status = "okay"; + }; }; &can1 { diff --git a/arch/arm/boot/dts/imx6q-tx6q-1020-comtft.dts b/arch/arm/boot/dts/imx6q-tx6q-1020-comtft.dts index 44f3cc8b9374..6116140f0f86 100644 --- a/arch/arm/boot/dts/imx6q-tx6q-1020-comtft.dts +++ b/arch/arm/boot/dts/imx6q-tx6q-1020-comtft.dts @@ -18,8 +18,8 @@ compatible = "karo,imx6q-tx6q", "fsl,imx6q"; aliases { - display = &lcd; - mxcfb0 = &display; + display = &mxcfb0; + mxcfb0 = &mxcfb0; }; backlight: backlight { @@ -44,7 +44,7 @@ default-brightness-level = <50>; }; - display: fb@2 { + mxcfb0: fb@2 { compatible = "fsl,mxc_sdc_fb"; disp_dev = "lcd"; interface_pix_fmt = "RGB24"; @@ -53,16 +53,6 @@ int_clk = <1>; late_init = <0>; status = "okay"; - }; - - lcd: lcd@0 { - compatible = "fsl,lcd"; - ipu_id = <0>; - disp_id = <0>; - default_ifmt = "RGB24"; - pinctrl-names = "default"; - pinctrl-0 = <&pinctrl_disp0_2>; - status = "okay"; display-timings { native-mode = <&ET070001DM6>; @@ -84,6 +74,16 @@ }; }; }; + + lcd: lcd@0 { + compatible = "fsl,lcd"; + ipu_id = <0>; + disp_id = <0>; + default_ifmt = "RGB24"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_disp0_2>; + status = "okay"; + }; }; &can1 { diff --git a/arch/arm/boot/dts/imx6q-tx6q-1020.dts b/arch/arm/boot/dts/imx6q-tx6q-1020.dts index 6c62f0c073ca..fa3a825feabf 100644 --- a/arch/arm/boot/dts/imx6q-tx6q-1020.dts +++ b/arch/arm/boot/dts/imx6q-tx6q-1020.dts @@ -18,8 +18,8 @@ compatible = "karo,imx6q-tx6q", "fsl,imx6q"; aliases { - display = &lcd; - mxcfb0 = &display; + display = &mxcfb0; + mxcfb0 = &mxcfb0; }; backlight: backlight { @@ -44,7 +44,7 @@ default-brightness-level = <50>; }; - display: fb@2 { + mxcfb0: fb@2 { compatible = "fsl,mxc_sdc_fb"; disp_dev = "lcd"; interface_pix_fmt = "RGB24"; @@ -53,16 +53,6 @@ int_clk = <1>; late_init = <0>; status = "okay"; - }; - - lcd: lcd@0 { - compatible = "fsl,lcd"; - ipu_id = <0>; - disp_id = <0>; - default_ifmt = "RGB24"; - pinctrl-names = "default"; - pinctrl-0 = <&pinctrl_disp0_2>; - status = "okay"; display-timings { VGA { @@ -178,6 +168,16 @@ }; }; }; + + lcd: lcd@0 { + compatible = "fsl,lcd"; + ipu_id = <0>; + disp_id = <0>; + default_ifmt = "RGB24"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_disp0_2>; + status = "okay"; + }; }; &ds1339 { diff --git a/drivers/video/mxc/ldb.c b/drivers/video/mxc/ldb.c index 6616e53b04e7..6d594425a204 100644 --- a/drivers/video/mxc/ldb.c +++ b/drivers/video/mxc/ldb.c @@ -291,16 +291,6 @@ static int ldb_get_of_property(struct platform_device *pdev, return err; } - if (of_display_timings_exist(np) == 1) { - struct videomode vm = { }; - - err = of_get_videomode(np, &vm, OF_USE_NATIVE_MODE); - if (err == 0) { - fb_videomode_from_videomode(&vm, &ldb_modedb[0]); - ldb_modedb_sz = 1; - } - } - plat_data->mode = parse_ldb_mode(mode); plat_data->ext_ref = ext_ref; plat_data->ipu_id = ipu_id; @@ -826,6 +816,11 @@ static int ldb_disp_init(struct mxc_dispdrv_handle *disp, if (is_imx6_ldb(plat_data)) ldb_ipu_ldb_route(setting->dev_id, setting->disp_id, ldb); + if (setting->fbmode) { + ldb_modedb[0] = *setting->fbmode; + ldb_modedb_sz = 1; + } + /* must use spec video mode defined by driver */ ret = fb_find_mode(&setting->fbi->var, setting->fbi, setting->dft_mode_str, ldb_modedb, ldb_modedb_sz, NULL, setting->default_bpp); diff --git a/drivers/video/mxc/mxc_dispdrv.h b/drivers/video/mxc/mxc_dispdrv.h index 8c8877c06ddc..cdea91262123 100644 --- a/drivers/video/mxc/mxc_dispdrv.h +++ b/drivers/video/mxc/mxc_dispdrv.h @@ -30,6 +30,8 @@ struct mxc_dispdrv_setting { int dev_id; int disp_id; enum display_flags disp_flags; + + struct fb_videomode *fbmode; }; struct mxc_dispdrv_driver { diff --git a/drivers/video/mxc/mxc_ipuv3_fb.c b/drivers/video/mxc/mxc_ipuv3_fb.c index a8540996e78d..d4cdeb2d4625 100644 --- a/drivers/video/mxc/mxc_ipuv3_fb.c +++ b/drivers/video/mxc/mxc_ipuv3_fb.c @@ -48,7 +48,9 @@ #include #include #include - +#include