---
config:
  layout: elk
  elk:
    mergeEdges: true
    nodePlacementStrategy: LINEAR_SEGMENTS
---
flowchart LR
 subgraph Coordinator["Display Coordinator"]
        CoordinatorDisplayRegApi(["Display registration API"])
        CoordinatorDisplayManagementApi(["Display management API"])
        CoordinatorDisplayManagement["Display management logic"]
  end
 subgraph EngineDriver["Display engine driver"]
        DisplayManagementApi(["Display management API"])
        DisplayManagement["Display management logic"]
        DisplayCommandsApi(["DDIC commands API"])
  end
 subgraph PanelDriver["Panel driver"]
        PanelMode["Modesetting logic"]
        PanelPowerApi(["Power API"])
        PanelPower["Power + reset logic"]
  end
    CoordinatorDisplayRegApi === CoordinatorDisplayManagement
    CoordinatorDisplayManagementApi === CoordinatorDisplayManagement
    CoordinatorDisplayManagement --> DisplayManagementApi
    DisplayManagementApi === DisplayManagement
    DisplayManagement --> PanelPowerApi
    PanelPowerApi === PanelPower & PanelMode
    PanelPower --> DisplayCommandsApi
    PanelMode --> DisplayCommandsApi
    EngineDriver ~~~ PanelDriver
    PanelPower@{ shape: rect}

    CoordinatorDisplayRegApi@{ shape: stadium }
    CoordinatorDisplayManagementApi@{ shape: stadium }
    DisplayManagementApi@{ shape: stadium }
    DisplayCommandsApi@{ shape: stadium }
    PanelPowerApi@{ shape: stadium }

    PanelPower@{ shape: rect }