drm/panel: Let of_drm_find_panel() return -ENODEV when the panel is disabled
authorBoris Brezillon <boris.brezillon@bootlin.com>
Wed, 9 May 2018 13:00:40 +0000 (15:00 +0200)
committerThierry Reding <treding@nvidia.com>
Tue, 10 Jul 2018 15:59:05 +0000 (17:59 +0200)
DT nodes might be present in the DT but with a status property set to
"disabled" or "fail". In this case, we should not return -EPROBE_DEFER
when the caller asks for a drm_panel instance. Return -ENODEV instead.

Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
Reviewed-by: Thierry Reding <treding@nvidia.com>
Acked-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180509130042.9435-3-boris.brezillon@bootlin.com
drivers/gpu/drm/drm_panel.c

index 7e5530a048464b610910ae612ef0ab266f9fa8c1..b902361dee6e1db300c10ce5798de7bada296b65 100644 (file)
@@ -152,13 +152,18 @@ EXPORT_SYMBOL(drm_panel_detach);
  *
  * Return: A pointer to the panel registered for the specified device tree
  * node or an ERR_PTR() if no panel matching the device tree node can be found.
- * The only error that can be reported is -EPROBE_DEFER, meaning that the panel
- * device has not been probed yet, and the caller should retry later.
+ * Possible error codes returned by this function:
+ * - EPROBE_DEFER: the panel device has not been probed yet, and the caller
+ *   should retry later
+ * - ENODEV: the device is not available (status != "okay" or "ok")
  */
 struct drm_panel *of_drm_find_panel(const struct device_node *np)
 {
        struct drm_panel *panel;
 
+       if (!of_device_is_available(np))
+               return ERR_PTR(-ENODEV);
+
        mutex_lock(&panel_lock);
 
        list_for_each_entry(panel, &panel_list, list) {