MIPI_DSI Panel and iMX8QXP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

MIPI_DSI Panel and iMX8QXP

3,005 Views
donal1
Contributor I

Hi There,

I'm struggling to integrate a ILI9881C Display Driver into our custom carrier board, running an iMX8QXP & kernel 4.14. I've manually back-ported the driver for this to 4.14 (no modifications were required for this).

This is the only output I'm getting related to the panel at start-up:

[ 1.469065] imx-drm display-subsystem: bound imx-drm-dpu-bliteng.2 (ops dpu_bliteng_ops)
[ 1.477523] imx-drm display-subsystem: bound imx-dpu-crtc.0 (ops dpu_crtc_ops)
[ 1.485025] imx-drm display-subsystem: bound imx-dpu-crtc.1 (ops dpu_crtc_ops)
[ 1.492999] ili9881c-dsi 56228000.mipi_dsi_bridge.0: ili9881c_dsi_probe()
[ 1.499839] ili9881c-dsi 56228000.mipi_dsi_bridge.0: 56228000.mipi_dsi_bridge.0 supply power not found, using dummy regulator
[ 1.511326] nwl-mipi-dsi 56228000.mipi_dsi_bridge: [drm:nwl_dsi_host_attach] lanes=2, format=0x0 flags=0x411
[ 1.521393] imx-drm display-subsystem: bound mipi_dsi@56228000 (ops imx_nwl_dsi_component_ops)
[ 1.530092] [drm] fb_helper->crtc_count: 2
[ 1.534201] [drm] desired_mode: 0, mode_set: 1927159296
[ 1.539446] [drm] desired_mode: 0, mode_set: 1927159360
[ 1.544687] [drm] Cannot find any crtc or sizes, crtc_count=0, sizes.fb_width=-1, sizes.fb_height=-1
[ 1.554625] [drm] Initialized imx-drm 1.0.0 20120507 for display-subsystem on minor 0
[ 1.580112] brd: module loaded
[ 1.590345] loop: module loaded
[ 1.594251] zram: Added device: zram0

The main error I'm seeing is "Cannot find any crtc or sizes". I've traced this back to the crtc not having a 'desired_mode' configured. The screen is blank (although the backlight is working).

My current thinking is that this is a device tree configuration issue. The following is an excerpt of my device tree:

&mipi_dsi_phy1 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "mixel,imx8qxp-mipi-dsi-phy";
reg = <0x0 0x56228300 0x0 0x100>;
#phy-cells = <0>;
status = "okay";
};


&mipi_dsi_bridge1 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "nwl,mipi-dsi";
reg = <0x0 0x56228000 0x0 0x300>;
interrupts = <16 IRQ_TYPE_LEVEL_HIGH>;
interrupt-parent = <&irqsteer_mipi_lvds0>;
clocks =
<&clk IMX8QXP_MIPI0_DSI_PHY_CLK>,
<&clk IMX8QXP_MIPI0_DSI_TX_ESC_CLK>,
<&clk IMX8QXP_MIPI0_DSI_RX_ESC_CLK>;
clock-names = "phy_ref", "tx_esc", "rx_esc";
assigned-clocks =
<&clk IMX8QXP_MIPI0_DSI_PHY_SEL>,
<&clk IMX8QXP_MIPI0_DSI_TX_ESC_SEL>,
<&clk IMX8QXP_MIPI0_DSI_RX_ESC_SEL>,
<&clk IMX8QXP_MIPI0_DSI_TX_ESC_CLK>,
<&clk IMX8QXP_MIPI0_DSI_RX_ESC_CLK>;
assigned-clock-rates = <0>, <0>, <0>, <18000000>, <72000000>;
assigned-clock-parents =
<&clk IMX8QXP_MIPI0_DSI_PLL_DIV2_CLK>,
<&clk IMX8QXP_MIPI0_DSI_PLL_DIV2_CLK>,
<&clk IMX8QXP_MIPI0_DSI_PLL_DIV2_CLK>;
power-domains = <&pd_mipi_dsi0>;
phys = <&mipi_dsi_phy1>;
phy-names = "dphy";
status = "okay";

panel@0 {
compatible = "bananapi,lhr050h41", "ilitek,ili9881c";
label = "ili9881c - WF50DTYA3MNG10";
reg = <0>;
reset-gpio = <&gpio0 4 GPIO_ACTIVE_LOW>;
dsi-lanes = <2>;
/*backlight = <&backlight>;*/
port {
panel1_in: endpoint {
remote-endpoint = <&mipi_dsi_bridge1_out>;
};
};
};

port@1 {
mipi_dsi_bridge1_out: endpoint {
remote-endpoint = <&panel1_in>;
};
};
};

&mipi_dsi1 {
compatible = "fsl,imx8qxp-mipi-dsi";
clocks =
<&clk IMX8QXP_MIPI0_PIXEL_CLK>,
<&clk IMX8QXP_MIPI0_BYPASS_CLK>,
<&clk IMX8QXP_MIPI0_DSI_PHY_CLK>;
clock-names = "pixel", "bypass", "phy_ref";
power-domains = <&pd_mipi_dsi0>;
csr = <&mipi_dsi_csr1>;
phys = <&mipi_dsi_phy1>;
phy-names = "dphy";
status = "okay";

port@0 {
mipi_dsi1_in: endpoint {
remote-endpoint = <&dpu_disp0_mipi_dsi>;
};
};

port@1 {
mipi_dsi1_out: endpoint {
remote-endpoint = <&mipi_dsi_bridge1_in>;
};
};
};

Any suggestions on what could be causing this issue?

Thank you,

Donal

0 Kudos
3 Replies

1,607 Views
jhgorse
Contributor I

Donal,

Did you happen to get the ili9881c to work for the iMX8QXP?

Cheers,
Joe Gorse

0 Kudos

2,407 Views
igorpadykov
NXP Employee
NXP Employee

Hi Donal

one can try to use mipi-dsi lcd dts : fsl-imx8qxp-mek-dsi-rm67191.dts

fsl-imx8qxp-mek-dsi-rm67191.dts\freescale\dts\boot\arm64\arch - linux-imx - i.MX Linux kernel 

and panel-raydium-rm67191.c driver, modify it for custom lcd

panel-raydium-rm67191.c\panel\drm\gpu\drivers - linux-imx - i.MX Linux kernel 

pay attention to specific lcd initialization in functions:

cmd_set_entry manufacturer_cmd_set[], rad_panel_push_cmd_list,rad_panel_prepare,
struct display_timing rad_default_timing - modify according to ILI9881C datasheet
also in dts file:
dsi-lanes = <4>;
        panel-width-mm = <68>;
        panel-height-mm = <121>;

Best regards
igor
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos

1,810 Views
VinithNama
Contributor III

Hi,

I'm using an NXP EVK for adding custom LVDS. Here we are using the bridge in between LVDS and EVK (i,e SN65DSI83).

In drivers/gpu/drm/panel/panel-raydium-rm67191.c 

I have adding my LVDS display data into the static const cmd_set_table manufacturer_cmd_set[] function and also adding the sn65dsi83 folder in the gpu/drm/bridge/sn65dsi83 and also adding the data in imx8mmevk.dts i,e

&i2c2 {
clock-frequency = <100000>;
pinctrl-names = "default", "gpio";
pinctrl-0 = <&pinctrl_i2c3>;
pinctrl-1 = <&pinctrl_i2c3_gpio>;
scl-gpios = <&gpio5 18 GPIO_ACTIVE_HIGH>;
sda-gpios = <&gpio5 19 GPIO_ACTIVE_HIGH>;
status = "okay";

dsi_lvds_bridge: sn65dsi84@2c {
compatible = "ti,sn65dsi83";
reg = <0x2c>;
ti,dsi-lanes = <4>;
ti,lvds-format = <1>;
ti,lvds-bpp = <24>;
ti,width-mm = <217>;
ti,height-mm = <136>;
enable-gpios = <&gpio3 0 GPIO_ACTIVE_HIGH>;
interrupt-parent = <&gpio3>;
interrupts = <6 IRQ_TYPE_LEVEL_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_lvds>;
status = "disabled";

display-timings {
native-mode = <&lvds0_g101evn010>;

/* AUO G101EVN01.0 */
lvds0_g101evn010: timing@0 {
clock-frequency = <69000000>;
hactive = <1280>;
vactive = <800>;
hfront-porch = <120>;
hback-porch = <1>;
hsync-len = <8>;
vback-porch = <10>;
vfront-porch = <1>;
vsync-len = <6>;
hsync-active = <1>;
vsync-active = <1>;
de-active = <1>;
pixelclk-active = <0>;
};

/* Fusion 10" F10A-0102 */
lvds0_hsd101pfw2: timing@1 {
clock-frequency = <45000000>;
hactive = <1024>;
vactive = <600>;
hfront-porch = <120>;
hback-porch = <1>;
hsync-len = <8>;
vback-porch = <10>;
vfront-porch = <1>;
vsync-len = <6>;
hsync-active = <1>;
vsync-active = <1>;
de-active = <1>;
pixelclk-active = <0>;
};
};

port {
dsi_lvds_bridge_in: endpoint {
remote-endpoint = <&mipi_dsi_lvds_out>;
};
};
};

...

};

...

&mipi_dsi {
status = "okay";

...

port@2 {
mipi_dsi_lvds_out: endpoint {
remote-endpoint = <&dsi_lvds_bridge_in>;
};
};
};

 

After generating image I'm unable to see any image on LVDS.

 

0 Kudos