Commit 74c06c28 authored by Douglas Anderson's avatar Douglas Anderson

drm/panel: panel-simple: Allow panel-simple be a DP AUX endpoint device

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: default avatarDouglas Anderson <dianders@chromium.org>
Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210611101711.v10.5.Iada41f76a7342354bae929d0bb3ceba40f27f0ea@changeid
parent aeb33699
...@@ -82,6 +82,7 @@ config DRM_PANEL_SIMPLE ...@@ -82,6 +82,7 @@ config DRM_PANEL_SIMPLE
depends on BACKLIGHT_CLASS_DEVICE depends on BACKLIGHT_CLASS_DEVICE
depends on PM depends on PM
select VIDEOMODE_HELPERS select VIDEOMODE_HELPERS
select DRM_DP_AUX_BUS
help help
DRM panel driver for dumb panels that need at most a regulator and 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 a GPIO to be powered up. Optionally a backlight can be attached so
......
...@@ -36,6 +36,7 @@ ...@@ -36,6 +36,7 @@
#include <drm/drm_crtc.h> #include <drm/drm_crtc.h>
#include <drm/drm_device.h> #include <drm/drm_device.h>
#include <drm/drm_dp_aux_bus.h>
#include <drm/drm_mipi_dsi.h> #include <drm/drm_mipi_dsi.h>
#include <drm/drm_panel.h> #include <drm/drm_panel.h>
...@@ -4957,6 +4958,38 @@ static struct mipi_dsi_driver panel_simple_dsi_driver = { ...@@ -4957,6 +4958,38 @@ static struct mipi_dsi_driver panel_simple_dsi_driver = {
.shutdown = panel_simple_dsi_shutdown, .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) static int __init panel_simple_init(void)
{ {
int err; int err;
...@@ -4965,15 +4998,25 @@ static int __init panel_simple_init(void) ...@@ -4965,15 +4998,25 @@ static int __init panel_simple_init(void)
if (err < 0) if (err < 0)
return err; 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)) { if (IS_ENABLED(CONFIG_DRM_MIPI_DSI)) {
err = mipi_dsi_driver_register(&panel_simple_dsi_driver); err = mipi_dsi_driver_register(&panel_simple_dsi_driver);
if (err < 0) { if (err < 0)
platform_driver_unregister(&panel_simple_platform_driver); goto err_did_aux_ep_register;
return err;
}
} }
return 0; 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); module_init(panel_simple_init);
...@@ -4982,6 +5025,7 @@ static void __exit panel_simple_exit(void) ...@@ -4982,6 +5025,7 @@ static void __exit panel_simple_exit(void)
if (IS_ENABLED(CONFIG_DRM_MIPI_DSI)) if (IS_ENABLED(CONFIG_DRM_MIPI_DSI))
mipi_dsi_driver_unregister(&panel_simple_dsi_driver); 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); platform_driver_unregister(&panel_simple_platform_driver);
} }
module_exit(panel_simple_exit); module_exit(panel_simple_exit);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment