compatible = "karo,imx6dl-tx6dl", "fsl,imx6dl";
aliases {
- display = &display;
+ display = &lcd;
mxcfb0 = &display;
};
90 91 92 93 94 95 96 97 98 99
100>;
default-brightness-level = <50>;
- };
+ };
display: fb@2 {
compatible = "fsl,mxc_sdc_fb";
disp_dev = "lcd";
interface_pix_fmt = "RGB24";
- mode_str ="ET0500";
+ mode_str = "";
default_bpp = <32>;
int_clk = <1>;
late_init = <0>;
status = "okay";
};
- lcd@0 {
+ lcd: lcd@0 {
compatible = "fsl,lcd";
ipu_id = <0>;
disp_id = <0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_disp0_2>;
status = "okay";
+
+ display-timings {
+ native-mode = <&ET070001DM6>;
+
+ ET070001DM6: CoMTFT { /* same as ET0700 but with inverted pixel clock */
+ clock-frequency = <33264000>;
+ hactive = <800>;
+ vactive = <480>;
+ hback-porch = <88>;
+ hsync-len = <128>;
+ hfront-porch = <40>;
+ vback-porch = <33>;
+ vsync-len = <2>;
+ vfront-porch = <10>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <1>;
+ };
+ };
};
};
compatible = "karo,imx6dl-tx6dl", "fsl,imx6dl";
aliases {
- display = &display;
+ display = &lcd;
mxcfb0 = &display;
};
90 91 92 93 94 95 96 97 98 99
100>;
default-brightness-level = <50>;
- };
+ };
display: fb@2 {
compatible = "fsl,mxc_sdc_fb";
disp_dev = "lcd";
interface_pix_fmt = "RGB24";
- mode_str ="ET0500";
+ mode_str = "";
default_bpp = <32>;
int_clk = <1>;
late_init = <0>;
status = "okay";
};
- lcd@0 {
+ lcd: lcd@0 {
compatible = "fsl,lcd";
ipu_id = <0>;
disp_id = <0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_disp0_2>;
status = "okay";
+
+ display-timings {
+ VGA {
+ clock-frequency = <25200000>;
+ hactive = <640>;
+ vactive = <480>;
+ hback-porch = <48>;
+ hsync-len = <96>;
+ hfront-porch = <16>;
+ vback-porch = <31>;
+ vsync-len = <2>;
+ vfront-porch = <12>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+
+ ETV570 {
+ clock-frequency = <25200000>;
+ hactive = <640>;
+ vactive = <480>;
+ hback-porch = <114>;
+ hsync-len = <30>;
+ hfront-porch = <16>;
+ vback-porch = <32>;
+ vsync-len = <3>;
+ vfront-porch = <10>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+
+ ET0350 {
+ clock-frequency = <6413760>;
+ hactive = <320>;
+ vactive = <240>;
+ hback-porch = <34>;
+ hsync-len = <34>;
+ hfront-porch = <20>;
+ vback-porch = <15>;
+ vsync-len = <3>;
+ vfront-porch = <4>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+
+ ET0430 {
+ clock-frequency = <9009000>;
+ hactive = <480>;
+ vactive = <272>;
+ hback-porch = <2>;
+ hsync-len = <41>;
+ hfront-porch = <2>;
+ vback-porch = <2>;
+ vsync-len = <10>;
+ vfront-porch = <2>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <1>;
+ };
+
+ ET0500 {
+ clock-frequency = <33264000>;
+ hactive = <800>;
+ vactive = <480>;
+ hback-porch = <88>;
+ hsync-len = <128>;
+ hfront-porch = <40>;
+ vback-porch = <33>;
+ vsync-len = <2>;
+ vfront-porch = <10>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+
+ ET0700 { /* same as ET0500 */
+ clock-frequency = <33264000>;
+ hactive = <800>;
+ vactive = <480>;
+ hback-porch = <88>;
+ hsync-len = <128>;
+ hfront-porch = <40>;
+ vback-porch = <33>;
+ vsync-len = <2>;
+ vfront-porch = <10>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+
+ ETQ570 {
+ clock-frequency = <6596040>;
+ hactive = <320>;
+ vactive = <240>;
+ hback-porch = <38>;
+ hsync-len = <30>;
+ hfront-porch = <30>;
+ vback-porch = <16>;
+ vsync-len = <3>;
+ vfront-porch = <4>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+ };
};
};
aliases {
display = &lvds0;
+ lvds0 = &lvds0;
mxcfb0 = &lvds0;
};
sec_ipu_id = <1>;
sec_disp_id = <1>;
status = "okay";
+
+ display-timings {
+ native-mode = <&lvds_timing0>;
+
+ lvds_timing0: hsd100pxn1 {
+ clock-frequency = <65000000>;
+ hactive = <1024>;
+ vactive = <768>;
+ hback-porch = <220>;
+ hfront-porch = <40>;
+ vback-porch = <21>;
+ vfront-porch = <7>;
+ hsync-len = <60>;
+ vsync-len = <10>;
+ de-active = <1>;
+ pixelclk-active = <1>;
+ };
+ };
};
&pwm1 {
compatible = "karo,imx6q-tx6q", "fsl,imx6q";
aliases {
- display = &display;
+ display = &lcd;
mxcfb0 = &display;
};
90 91 92 93 94 95 96 97 98 99
100>;
default-brightness-level = <50>;
- };
+ };
display: fb@2 {
compatible = "fsl,mxc_sdc_fb";
disp_dev = "lcd";
interface_pix_fmt = "RGB24";
- mode_str ="ET0500";
+ mode_str = "";
default_bpp = <32>;
int_clk = <1>;
late_init = <0>;
status = "okay";
};
- lcd@0 {
+ lcd: lcd@0 {
compatible = "fsl,lcd";
ipu_id = <0>;
disp_id = <0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_disp0_2>;
status = "okay";
+
+ display-timings {
+ native-mode = <&ET070001DM6>;
+
+ ET070001DM6: CoMTFT { /* same as ET0700 but with inverted pixel clock */
+ clock-frequency = <33264000>;
+ hactive = <800>;
+ vactive = <480>;
+ hback-porch = <88>;
+ hsync-len = <128>;
+ hfront-porch = <40>;
+ vback-porch = <33>;
+ vsync-len = <2>;
+ vfront-porch = <10>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <1>;
+ };
+ };
};
};
compatible = "karo,imx6q-tx6q", "fsl,imx6q";
aliases {
- display = &display;
+ display = &lcd;
mxcfb0 = &display;
};
90 91 92 93 94 95 96 97 98 99
100>;
default-brightness-level = <50>;
- };
+ };
display: fb@2 {
compatible = "fsl,mxc_sdc_fb";
disp_dev = "lcd";
interface_pix_fmt = "RGB24";
- mode_str ="ET0500";
+ mode_str = "";
default_bpp = <32>;
int_clk = <1>;
late_init = <0>;
status = "okay";
};
- lcd@0 {
+ lcd: lcd@0 {
compatible = "fsl,lcd";
ipu_id = <0>;
disp_id = <0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_disp0_2>;
status = "okay";
+
+ display-timings {
+ VGA {
+ clock-frequency = <25200000>;
+ hactive = <640>;
+ vactive = <480>;
+ hback-porch = <48>;
+ hsync-len = <96>;
+ hfront-porch = <16>;
+ vback-porch = <31>;
+ vsync-len = <2>;
+ vfront-porch = <12>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+
+ ETV570 {
+ clock-frequency = <25200000>;
+ hactive = <640>;
+ vactive = <480>;
+ hback-porch = <114>;
+ hsync-len = <30>;
+ hfront-porch = <16>;
+ vback-porch = <32>;
+ vsync-len = <3>;
+ vfront-porch = <10>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+
+ ET0350 {
+ clock-frequency = <6413760>;
+ hactive = <320>;
+ vactive = <240>;
+ hback-porch = <34>;
+ hsync-len = <34>;
+ hfront-porch = <20>;
+ vback-porch = <15>;
+ vsync-len = <3>;
+ vfront-porch = <4>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+
+ ET0430 {
+ clock-frequency = <9009000>;
+ hactive = <480>;
+ vactive = <272>;
+ hback-porch = <2>;
+ hsync-len = <41>;
+ hfront-porch = <2>;
+ vback-porch = <2>;
+ vsync-len = <10>;
+ vfront-porch = <2>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <1>;
+ };
+
+ ET0500 {
+ clock-frequency = <33264000>;
+ hactive = <800>;
+ vactive = <480>;
+ hback-porch = <88>;
+ hsync-len = <128>;
+ hfront-porch = <40>;
+ vback-porch = <33>;
+ vsync-len = <2>;
+ vfront-porch = <10>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+
+ ET0700 { /* same as ET0500 */
+ clock-frequency = <33264000>;
+ hactive = <800>;
+ vactive = <480>;
+ hback-porch = <88>;
+ hsync-len = <128>;
+ hfront-porch = <40>;
+ vback-porch = <33>;
+ vsync-len = <2>;
+ vfront-porch = <10>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+
+ ETQ570 {
+ clock-frequency = <6596040>;
+ hactive = <320>;
+ vactive = <240>;
+ hback-porch = <38>;
+ hsync-len = <30>;
+ hfront-porch = <30>;
+ vback-porch = <16>;
+ vsync-len = <3>;
+ vfront-porch = <4>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+ };
};
};
compatible = "karo,imx6q-tx6q", "fsl,imx6q";
aliases {
- display = &display;
+ display = &lcd;
mxcfb0 = &display;
};
90 91 92 93 94 95 96 97 98 99
100>;
default-brightness-level = <50>;
- };
+ };
display: fb@2 {
compatible = "fsl,mxc_sdc_fb";
disp_dev = "lcd";
interface_pix_fmt = "RGB24";
- mode_str ="ET0500";
+ mode_str = "";
default_bpp = <32>;
int_clk = <1>;
late_init = <0>;
status = "okay";
};
- lcd@0 {
+ lcd: lcd@0 {
compatible = "fsl,lcd";
ipu_id = <0>;
disp_id = <0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_disp0_2>;
status = "okay";
+
+ display-timings {
+ native-mode = <&ET070001DM6>;
+
+ ET070001DM6: CoMTFT { /* same as ET0700 but with inverted pixel clock */
+ clock-frequency = <33264000>;
+ hactive = <800>;
+ vactive = <480>;
+ hback-porch = <88>;
+ hsync-len = <128>;
+ hfront-porch = <40>;
+ vback-porch = <33>;
+ vsync-len = <2>;
+ vfront-porch = <10>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <1>;
+ };
+ };
};
};
compatible = "karo,imx6q-tx6q", "fsl,imx6q";
aliases {
- display = &display;
+ display = &lcd;
mxcfb0 = &display;
};
90 91 92 93 94 95 96 97 98 99
100>;
default-brightness-level = <50>;
- };
+ };
display: fb@2 {
compatible = "fsl,mxc_sdc_fb";
disp_dev = "lcd";
interface_pix_fmt = "RGB24";
- mode_str ="ET0500";
+ mode_str = "";
default_bpp = <32>;
int_clk = <1>;
late_init = <0>;
status = "okay";
};
- lcd@0 {
+ lcd: lcd@0 {
compatible = "fsl,lcd";
ipu_id = <0>;
disp_id = <0>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_disp0_2>;
status = "okay";
+
+ display-timings {
+ VGA {
+ clock-frequency = <25200000>;
+ hactive = <640>;
+ vactive = <480>;
+ hback-porch = <48>;
+ hsync-len = <96>;
+ hfront-porch = <16>;
+ vback-porch = <31>;
+ vsync-len = <2>;
+ vfront-porch = <12>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+
+ ETV570 {
+ clock-frequency = <25200000>;
+ hactive = <640>;
+ vactive = <480>;
+ hback-porch = <114>;
+ hsync-len = <30>;
+ hfront-porch = <16>;
+ vback-porch = <32>;
+ vsync-len = <3>;
+ vfront-porch = <10>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+
+ ET0350 {
+ clock-frequency = <6413760>;
+ hactive = <320>;
+ vactive = <240>;
+ hback-porch = <34>;
+ hsync-len = <34>;
+ hfront-porch = <20>;
+ vback-porch = <15>;
+ vsync-len = <3>;
+ vfront-porch = <4>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+
+ ET0430 {
+ clock-frequency = <9009000>;
+ hactive = <480>;
+ vactive = <272>;
+ hback-porch = <2>;
+ hsync-len = <41>;
+ hfront-porch = <2>;
+ vback-porch = <2>;
+ vsync-len = <10>;
+ vfront-porch = <2>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <1>;
+ };
+
+ ET0500 {
+ clock-frequency = <33264000>;
+ hactive = <800>;
+ vactive = <480>;
+ hback-porch = <88>;
+ hsync-len = <128>;
+ hfront-porch = <40>;
+ vback-porch = <33>;
+ vsync-len = <2>;
+ vfront-porch = <10>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+
+ ET0700 { /* same as ET0500 */
+ clock-frequency = <33264000>;
+ hactive = <800>;
+ vactive = <480>;
+ hback-porch = <88>;
+ hsync-len = <128>;
+ hfront-porch = <40>;
+ vback-porch = <33>;
+ vsync-len = <2>;
+ vfront-porch = <10>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+
+ ETQ570 {
+ clock-frequency = <6596040>;
+ hactive = <320>;
+ vactive = <240>;
+ hback-porch = <38>;
+ hsync-len = <30>;
+ hfront-porch = <30>;
+ vback-porch = <16>;
+ vsync-len = <3>;
+ vfront-porch = <4>;
+ hsync-active = <0>;
+ vsync-active = <0>;
+ de-active = <1>;
+ pixelclk-active = <0>;
+ };
+ };
};
};
aliases {
display = &lvds0;
ipu1 = &ipu2;
+ lvds0 = &lvds0;
mxcfb0 = &lvds0;
};
sec_ipu_id = <1>;
sec_disp_id = <1>;
status = "okay";
+
+ display-timings {
+ native-mode = <&lvds_timing0>;
+
+ lvds_timing0: hsd100pxn1 {
+ clock-frequency = <65000000>;
+ hactive = <1024>;
+ vactive = <768>;
+ hback-porch = <220>;
+ hfront-porch = <40>;
+ vback-porch = <21>;
+ vfront-porch = <7>;
+ hsync-len = <60>;
+ vsync-len = <10>;
+ de-active = <1>;
+ pixelclk-active = <1>;
+ };
+ };
};
&pwm1 {
config FB_MXC_SYNC_PANEL
depends on FB_MXC
tristate "Synchronous Panel Framebuffer"
+ select VIDEOMODE_HELPERS
config FB_MXC_LDB
tristate "MXC LDB"
depends on FB_MXC_SYNC_PANEL
depends on MXC_IPU_V3
+ select VIDEOMODE_HELPERS
config FB_MXC_MIPI_DSI
tristate "MXC MIPI_DSI"
#include <linux/spinlock.h>
#include <linux/of_device.h>
#include <linux/mod_devicetable.h>
+#include <video/of_display_timing.h>
+#include <video/of_videomode.h>
+#include <video/videomode.h>
+
#include "mxc_dispdrv.h"
#define DISPDRV_LDB "ldb"
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;
#ifndef __MXC_DISPDRV_H__
#define __MXC_DISPDRV_H__
#include <linux/fb.h>
+#include <video/display_timing.h>
struct mxc_dispdrv_handle {
struct mxc_dispdrv_driver *drv;
/*feedback parameter*/
int dev_id;
int disp_id;
+ enum display_flags disp_flags;
};
struct mxc_dispdrv_driver {
u32 pseudo_palette[16];
- bool mode_found;
+ enum display_flags disp_flags;
struct completion flip_complete;
struct completion alpha_flip_complete;
struct completion vsync_complete;
sig_cfg.Hsync_pol = true;
if (fbi->var.sync & FB_SYNC_VERT_HIGH_ACT)
sig_cfg.Vsync_pol = true;
- if (!(fbi->var.sync & FB_SYNC_CLK_LAT_FALL))
+ if (mxc_fbi->disp_flags & DISPLAY_FLAGS_PIXDATA_POSEDGE)
sig_cfg.clk_pol = true;
if (fbi->var.sync & FB_SYNC_DATA_INVERT)
sig_cfg.data_pol = true;
{
struct ipuv3_fb_platform_data *plat_data = pdev->dev.platform_data;
struct mxcfb_info *mxcfbi = (struct mxcfb_info *)fbi->par;
- struct mxc_dispdrv_setting setting;
+ struct mxc_dispdrv_setting setting = {};
char disp_dev[32], *default_dev = "lcd";
int ret = 0;
/* setting */
mxcfbi->ipu_id = setting.dev_id;
mxcfbi->ipu_di = setting.disp_id;
+ mxcfbi->disp_flags = setting.disp_flags;
dev_dbg(&pdev->dev, "di_pixfmt:0x%x, bpp:0x%x, di:%d, ipu:%d\n",
setting.if_fmt, setting.default_bpp,
setting.disp_id, setting.dev_id);
#include <linux/of_device.h>
#include <linux/pinctrl/consumer.h>
#include <linux/platform_device.h>
+#include <video/of_display_timing.h>
+#include <video/of_videomode.h>
+#include <video/videomode.h>
#include "mxc_dispdrv.h"
u32 default_ifmt;
u32 ipu_id;
u32 disp_id;
+ enum display_flags disp_flags;
};
struct mxc_lcdif_data {
return err;
}
+ {
+ struct videomode vm = { };
+
+ err = of_get_videomode(np, &vm, OF_USE_NATIVE_MODE);
+ if (err == 0) {
+ dev_dbg(dev, "Copying videomode from display-timings\n");
+ fb_videomode_from_videomode(&vm, &lcdif_modedb[0]);
+ plat_data->disp_flags = vm.flags;
+ lcdif_modedb_sz = 1;
+ }
+ }
+
plat_data->ipu_id = ipu_id;
plat_data->disp_id = disp_id;
if (!strncmp(default_ifmt, "RGB24", 5))