---
config:
  layout: elk
  elk:
    mergeEdges: true
    nodePlacementStrategy: LINEAR_SEGMENTS
title: Display Engine Driver / Panel Driver Interactions (after initialization)
---
flowchart TB
 subgraph Coordinator["Display Coordinator"]
        CoordinatorDisplayRegApi(["Display registration API"])
        CoordinatorDisplayManagementApi(["Display management API"])
        CoordinatorDisplayManagement["Display management logic"]
  end
 subgraph EngineDriver["Display engine driver"]
        DisplayRegistration["Display registration logic"]
        DisplayMode["Modesetting logic"]
        DisplayManagementApi(["Display management API"])
        DisplayManagement["Display management logic"]
        DisplayCommandsApi(["DDIC commands API"])
  end
 subgraph PanelDriver["Panel driver"]
        PanelCapabilitiesApi(["Capabilities API"])
        PanelBrightnessApi(["Brightness API"])
        PanelBrightness["Brightness logic"]
        PanelModeApi(["Modesetting API"])
        PanelMode["Modesetting logic"]
        PanelPowerApi(["Power API"])
        PanelPower["Power + reset logic"]
        DdicCommands["DDIC Commands"]
  end
    CoordinatorDisplayRegApi === CoordinatorDisplayManagement
    CoordinatorDisplayManagementApi === CoordinatorDisplayManagement
    CoordinatorDisplayManagement --> DisplayManagementApi
    DisplayManagementApi === DisplayManagement
    DisplayManagement --> PanelPowerApi & PanelBrightnessApi
    DisplayMode -- Display mode --> PanelModeApi
    PanelBrightnessApi === PanelBrightness
    PanelPowerApi === PanelPower & PanelMode
    PanelModeApi === PanelMode
    PanelPower --> DdicCommands
    PanelMode --> DdicCommands
    PanelBrightness --> DdicCommands
    DdicCommands --> DisplayCommandsApi
    DisplayRegistration@{ shape: rect}
    PanelBrightness@{ shape: rect}
    PanelPower@{ shape: rect}