The panel-simple driver can already have devices instantiated as
platform devices or MIPI DSI devices. Let's add a 3rd way to
instantiate it: as DP AUX endpoint devices.

At the moment there is no benefit to instantiating it in this way,
but:
- In the next patch we'll give it access to the DDC channel via the DP
  AUX bus.
- Possibly in the future we may use this channel to configure the
  backlight.

Signed-off-by: Douglas Anderson <diand...@chromium.org>
Reviewed-by: Lyude Paul <ly...@redhat.com>
---

(no changes since v7)

Changes in v7:
- Patch to allow panel-simple to be DP AUX EP new for v7.

 drivers/gpu/drm/panel/Kconfig        |  1 +
 drivers/gpu/drm/panel/panel-simple.c | 52 +++++++++++++++++++++++++---
 2 files changed, 49 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
index 1352dffda705..7c32b040aa72 100644
--- a/drivers/gpu/drm/panel/Kconfig
+++ b/drivers/gpu/drm/panel/Kconfig
@@ -82,6 +82,7 @@ config DRM_PANEL_SIMPLE
        depends on BACKLIGHT_CLASS_DEVICE
        depends on PM
        select VIDEOMODE_HELPERS
+       select DRM_DP_AUX_BUS
        help
          DRM panel driver for dumb panels that need at most a regulator and
          a GPIO to be powered up. Optionally a backlight can be attached so
diff --git a/drivers/gpu/drm/panel/panel-simple.c 
b/drivers/gpu/drm/panel/panel-simple.c
index 21939d4352cf..d3b5ae22d939 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -36,6 +36,7 @@
 
 #include <drm/drm_crtc.h>
 #include <drm/drm_device.h>
+#include <drm/drm_dp_aux_bus.h>
 #include <drm/drm_mipi_dsi.h>
 #include <drm/drm_panel.h>
 
@@ -4957,6 +4958,38 @@ static struct mipi_dsi_driver panel_simple_dsi_driver = {
        .shutdown = panel_simple_dsi_shutdown,
 };
 
+static int panel_simple_dp_aux_ep_probe(struct dp_aux_ep_device *aux_ep)
+{
+       const struct of_device_id *id;
+
+       id = of_match_node(platform_of_match, aux_ep->dev.of_node);
+       if (!id)
+               return -ENODEV;
+
+       return panel_simple_probe(&aux_ep->dev, id->data);
+}
+
+static void panel_simple_dp_aux_ep_remove(struct dp_aux_ep_device *aux_ep)
+{
+       panel_simple_remove(&aux_ep->dev);
+}
+
+static void panel_simple_dp_aux_ep_shutdown(struct dp_aux_ep_device *aux_ep)
+{
+       panel_simple_shutdown(&aux_ep->dev);
+}
+
+static struct dp_aux_ep_driver panel_simple_dp_aux_ep_driver = {
+       .driver = {
+               .name = "panel-simple-dp-aux",
+               .of_match_table = platform_of_match,    /* Same as platform 
one! */
+               .pm = &panel_simple_pm_ops,
+       },
+       .probe = panel_simple_dp_aux_ep_probe,
+       .remove = panel_simple_dp_aux_ep_remove,
+       .shutdown = panel_simple_dp_aux_ep_shutdown,
+};
+
 static int __init panel_simple_init(void)
 {
        int err;
@@ -4965,15 +4998,25 @@ static int __init panel_simple_init(void)
        if (err < 0)
                return err;
 
+       err = dp_aux_dp_driver_register(&panel_simple_dp_aux_ep_driver);
+       if (err < 0)
+               goto err_did_platform_register;
+
        if (IS_ENABLED(CONFIG_DRM_MIPI_DSI)) {
                err = mipi_dsi_driver_register(&panel_simple_dsi_driver);
-               if (err < 0) {
-                       
platform_driver_unregister(&panel_simple_platform_driver);
-                       return err;
-               }
+               if (err < 0)
+                       goto err_did_aux_ep_register;
        }
 
        return 0;
+
+err_did_aux_ep_register:
+       dp_aux_dp_driver_unregister(&panel_simple_dp_aux_ep_driver);
+
+err_did_platform_register:
+       platform_driver_unregister(&panel_simple_platform_driver);
+
+       return err;
 }
 module_init(panel_simple_init);
 
@@ -4982,6 +5025,7 @@ static void __exit panel_simple_exit(void)
        if (IS_ENABLED(CONFIG_DRM_MIPI_DSI))
                mipi_dsi_driver_unregister(&panel_simple_dsi_driver);
 
+       dp_aux_dp_driver_unregister(&panel_simple_dp_aux_ep_driver);
        platform_driver_unregister(&panel_simple_platform_driver);
 }
 module_exit(panel_simple_exit);
-- 
2.32.0.272.g935e593368-goog

Reply via email to