Imx8m dsi panel hardware reset problem

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

Imx8m dsi panel hardware reset problem

580 Views
fiengzeng
Contributor I

I am trying to do a hardware reset to the DSI panel in the user space. The code has been implemented. However, after hardware reset, the screen panel white out and never display any meaningful content. 

My screen is ili9488  and my hardware reset code is listed below. Does anyone have an idea what could have happened? 

gpiod_set_value_cansleep(ctx->reset, 1);
msleep(120);

gpiod_set_value_cansleep(ctx->reset, 0);
msleep(120);

Thank you!

0 Kudos
Reply
2 Replies

553 Views
Manuel_Salas
NXP TechSupport
NXP TechSupport

Hello @fiengzeng 

I hope you are doing very well.

 

Could you please share more details?

Are you using a custom driver?

After of Reset the screen, do you initialized again the screen?

Device tree would be appreciated to check the node related to your display.

 

Best regards,

Salas.

0 Kudos
Reply

540 Views
fiengzeng
Contributor I

Hello, 

Thank you for your reply!

The driver is custom made. In the driver, we have hardware reset in prepare() function using the GPIO pin. Then in enable() function, many DCS_write functions are called to initialize the panel. During normal boot, this sequence works perfect and we can see the panel displaying  contents.

Then what we would like to do is to issue a hardware reset during runtime in the user space to recover the panel from disturbance such as ESD. 

What we have done is to create a file using sysfs to allow a user to call a function in the driver called user_reset(). In user_reset(), we copied the hardware reset portion from prepare() and panel initialization from enable() and put them together. We can see that the user_reset() function can be properly called from user space. Unfortunately, the panel will reset to weird state: all white out and no meaning content is shown.

We tried several things to see what could have caused the white out. We tried to call mipi_dsi_dcs_soft_reset(), but no luck. We also tried to make the driver a module so that we can rmmod it and modprobe back, but still no luck.

Please let us know there is more info you would like to know. 

Here is content in our device tree related to dsi:

mipi_dsi: mipi_dsi@32e10000 {
#address-cells = <1>;
#size-cells = <0>;
compatible = "fsl,imx8mm-mipi-dsim";
reg = <0x32e10000 0x400>;
clocks = <&clk IMX8MM_CLK_DSI_CORE>,
<&clk IMX8MM_CLK_DSI_PHY_REF>;
clock-names = "cfg", "pll-ref";
assigned-clocks = <&clk IMX8MM_CLK_DSI_CORE>,
<&clk IMX8MM_CLK_DSI_PHY_REF>;
assigned-clock-parents = <&clk IMX8MM_SYS_PLL1_266M>,
<&clk IMX8MM_CLK_24M>;
assigned-clock-rates = <266000000>, <12000000>;
interrupts = <GIC_SPI 18 IRQ_TYPE_LEVEL_HIGH>;
dsi-gpr = <&dispmix_gpr>;
resets = <&mipi_dsi_resets>;
power-domains = <&mipi_pd>;
status = "disabled";

port@0 {
dsim_from_lcdif: endpoint {
remote-endpoint = <&lcdif_to_dsim>;
};
};
};

 

Thank you!

 

 

 

0 Kudos
Reply