Hello,
Im building a DSI-MIPI panel interface for the TX1 J23 display connector.
The final plan is to run 2x DSI channels from (dc.0 and dc.1).
For now/testing im just trying to get one DSI panel running (in parallel with HDMI is fine).
I am running 28.1 kernel on the TX1 and have read just about every DSI post on this forum.
I also have been through all of the included L4t docs such as the host1x.txt and dc.txt.
I see some discrepancies as those txt docs mainly in the DC and DSI node description sections which declare that all of the DSI parameters are ‘required’, but i rearely see anyone using ‘nvidia,dsi-lp00-pre-panel-wakeup’ (i dont require that feature but noticed it might not be ‘required’ as the tegra210-dsi.txt suggests) some of these are clearly optional parameters. which raises the question what is the required node minimum for DC->DSI->panel nodes?
i have added tons of debug to the console output, and have seemed to find that, even though my DTB (de-compiled and attached here) shows the correct nodes as i expected to see from the DTS/DTSI flattening into the blob.
so far my steps involved
-
modding the DTS/DTSI to produce the flat DTS i posted here, which looks correct based on what ive read about the DC->DSI->panel nodes from the docs as well as this forum. it also included the <panels/panel-dsi-25x16.dtsi> file which i have modified parameter values to match my panel. this info appear correct in the flattened & de-compiled dtb-> dts i have attached
-
modded board-panel.c ( i assume we have to get this file to select the appropriate panel node to load) so i have modified and put many debug into the function “available_internal_panel_select”
-
modded board-panel.c/ internal_panel_select_by_disp_board_id, by adding the following in the 'default’switch case (as my board id comes up as 0xffff).
np_panel = of_find_compatible_node(NULL, NULL, "dsi,25x16");
if (np_panel && pdata && dc_out){
tegra_panel_register_ops(dc_out,
&dsi_s_wqxga_10_1_ops);
my debug (in board.panel.c / available_internal_panel_select ) shows it cant locate the panel nodes as children of the DSI nodes, the below code returns output confirming there are zero child nodes in the dsi node.
np_dsi = of_find_node_by_path(DSI_NODE);
pr_info("** IT HAS:%d CHILD NODES**\n", of_get_available_child_count(np_dsi));
this results in the flowing code never running as the np_panel is always 0
if (np_panel){
default_out = of_get_child_by_name
(np_panel, "disp-default-out");
i believe the nodes are present as the following code produces what looks to be a valid panel address ‘0xffffffc0ffce8a48’
(long unsigned int)of_find_node_by_path("/host1x/dsi/panel-s-wqxga-10-1")
after all this the SOR node gets registered and all hope of DSI is lost.
one more note:
it appears that my device tree is represented correctly in the /proc/device-tree hierarchy, but the DSI folders (or panel nodes below) ‘status’ does not match my de-compiled DTB file in /boot/dtb (which is tegra210-jetson-tx1-p2597-2180-a01-devkit.dtb). the ‘status’ binary will show ‘disabled’ not ‘okay’, for the dsi and both panel nodes (which look correct in the flattened dtb). I have also noticed that the /sys/bus/platform/drivers/tegradc folder only ever contains the HDMI/SOR driver tegradc.1 (in my case). dont know if any of this helps , but im hoping someone can shed some light… or provide any suggestions/guide.