| * Freescale MXS LCD Interface (LCDIF) |
| |
| New bindings: |
| ============= |
| Required properties: |
| - compatible: Should be "fsl,imx23-lcdif" for i.MX23. |
| Should be "fsl,imx28-lcdif" for i.MX28. |
| Should be "fsl,imx6sx-lcdif" for i.MX6SX. |
| - reg: Address and length of the register set for LCDIF |
| - interrupts: Should contain LCDIF interrupt |
| - clocks: A list of phandle + clock-specifier pairs, one for each |
| entry in 'clock-names'. |
| - clock-names: A list of clock names. For MXSFB it should contain: |
| - "pix" for the LCDIF block clock |
| - (MX6SX-only) "axi", "disp_axi" for the bus interface clock |
| - (MX8-only) "video_pll, "osc_25", "osc_27" for the VIDEO_PLL, |
| OSC_25M and OSC_27M clocks |
| |
| Required sub-nodes: |
| - port: The connection to an encoder chip. |
| |
| Optional properties: |
| - max-res: an array with a maximum of two integers, representing the |
| maximum supported resolution, in the form of |
| <maxX>, <maxY>; if one of the item is <0>, the default |
| driver-defined maximum resolution for that axis is used |
| |
| Example: |
| |
| lcdif1: display-controller@2220000 { |
| compatible = "fsl,imx6sx-lcdif", "fsl,imx28-lcdif"; |
| reg = <0x02220000 0x4000>; |
| interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>; |
| clocks = <&clks IMX6SX_CLK_LCDIF1_PIX>, |
| <&clks IMX6SX_CLK_LCDIF_APB>, |
| <&clks IMX6SX_CLK_DISPLAY_AXI>; |
| clock-names = "pix", "axi", "disp_axi"; |
| |
| port { |
| parallel_out: endpoint { |
| remote-endpoint = <&panel_in_parallel>; |
| }; |
| }; |
| }; |
| |
| Deprecated bindings: |
| ==================== |
| Required properties: |
| - compatible: Should be "fsl,imx23-lcdif" for i.MX23. |
| Should be "fsl,imx28-lcdif" for i.MX28. |
| - reg: Address and length of the register set for LCDIF |
| - interrupts: Should contain LCDIF interrupts |
| - display: phandle to display node (see below for details) |
| |
| Optional properties: |
| - disp-dev: Display device driver name |
| - disp-videomode: Display device video mode name; this is used if the panel |
| supports multiple video modes, in order to chose the right one (see below for |
| examples) |
| |
| * display node |
| |
| Required properties: |
| - bits-per-pixel: <16> for RGB565, <32> for RGB888/666. |
| - bus-width: number of data lines. Could be <8>, <16>, <18> or <24>. |
| |
| Required sub-node: |
| - display-timings: Refer to binding doc display-timing.txt for details. |
| |
| Examples: |
| |
| lcdif@80030000 { |
| compatible = "fsl,imx28-lcdif"; |
| reg = <0x80030000 2000>; |
| interrupts = <38 86>; |
| |
| display: display { |
| bits-per-pixel = <32>; |
| bus-width = <24>; |
| |
| display-timings { |
| native-mode = <&timing0>; |
| timing0: timing0 { |
| clock-frequency = <33500000>; |
| hactive = <800>; |
| vactive = <480>; |
| hfront-porch = <164>; |
| hback-porch = <89>; |
| hsync-len = <10>; |
| vback-porch = <23>; |
| vfront-porch = <10>; |
| vsync-len = <10>; |
| hsync-active = <0>; |
| vsync-active = <0>; |
| de-active = <1>; |
| pixelclk-active = <0>; |
| }; |
| }; |
| }; |
| }; |
| |
| Examples - optional properties: |
| |
| Snippet from imx7d-sdb-mipi-dsi.dts: |
| |
| &lcdif { |
| disp-dev = "mipi_dsi_samsung"; |
| disp-videomode = "TRUULY-WVGA-SYNC-LOW"; |
| }; |
| |
| &mipi_dsi { |
| pinctrl-names = "default"; |
| pinctrl-0 = <&pinctrl_mipi_dsi_reset>; |
| lcd_panel = "TRULY-WVGA-TFT3P5581E"; |
| resets = <&mipi_dsi_reset>; |
| status = "okay"; |
| }; |
| |
| In the above example, the panel supports 2 video modes (snippet from |
| drivers/video/fbdev/mxc/mxcfb_hx8363_wvga.c): |
| |
| #define ACTIVE_HIGH_NAME "TRUULY-WVGA-SYNC-HIGH" |
| #define ACTIVE_LOW_NAME "TRUULY-WVGA-SYNC-LOW" |
| |
| static struct fb_videomode truly_lcd_modedb[] = { |
| { |
| ACTIVE_HIGH_NAME, 50, 480, 854, 41042, |
| 40, 60, |
| 3, 3, |
| 8, 4, |
| 0x0, |
| FB_VMODE_NONINTERLACED, |
| 0, |
| }, { |
| ACTIVE_LOW_NAME, 50, 480, 854, 41042, |
| 40, 60, |
| 3, 3, |
| 8, 4, |
| FB_SYNC_OE_LOW_ACT, |
| FB_VMODE_NONINTERLACED, |
| 0, |
| }, |
| }; |