summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDevarsh Thakkar <devarsht@ti.com>2024-03-06 20:39:41 +0530
committerPraneeth Bajjuri <praneeth@ti.com>2024-03-06 14:48:33 -0600
commit94d58f8c9656c7afc0166430bb1311dd22b948f2 (patch)
treec767ba89d9e12a5ab8c005dff01375e7e19452cc
parent8249372bee2649a770e778bf0108019f6879a1c6 (diff)
HACK: drm: tidss: Move simplefb detection to separate function
Move simplefb detection to a separate function and handle the node and device de-referencing properly for failure scenarios. Fixes: e59cbc4f912e ("HACK: drm: tidss: Soft reset dispc if simple-framebuffer is absent") Signed-off-by: Devarsh Thakkar <devarsht@ti.com> Reviewed-by: Aradhya Bhatia <a-bhatia1@ti.com>
-rw-r--r--drivers/gpu/drm/tidss/tidss_drv.c37
1 files changed, 24 insertions, 13 deletions
diff --git a/drivers/gpu/drm/tidss/tidss_drv.c b/drivers/gpu/drm/tidss/tidss_drv.c
index 962098e96b5f..fff3883a355a 100644
--- a/drivers/gpu/drm/tidss/tidss_drv.c
+++ b/drivers/gpu/drm/tidss/tidss_drv.c
@@ -206,11 +206,32 @@ fail:
return ret;
}
+static void check_for_simplefb_device(struct tidss_device *tidss)
+{
+ if (IS_ENABLED(CONFIG_FB_SIMPLE)) {
+ struct device *simplefb_dev;
+ struct device_node *simplefb_node;
+
+ simplefb_node = of_find_compatible_node(NULL, NULL, "simple-framebuffer");
+ if (!simplefb_node)
+ return;
+
+ simplefb_dev = bus_find_device_by_of_node(&platform_bus_type, simplefb_node);
+ if (!simplefb_dev) {
+ of_node_put(simplefb_node);
+ return;
+ }
+
+ tidss->simplefb_enabled = true;
+ dev_dbg(tidss->dev, "simple-framebuffer detected\n");
+ put_device(simplefb_dev);
+ of_node_put(simplefb_node);
+ }
+}
+
static int tidss_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
- struct device *simplefb_dev;
- struct device_node *simplefb_node;
struct tidss_device *tidss;
struct drm_device *ddev;
int ret;
@@ -232,17 +253,7 @@ static int tidss_probe(struct platform_device *pdev)
spin_lock_init(&tidss->wait_lock);
- if (IS_ENABLED(CONFIG_FB_SIMPLE)) {
- simplefb_node = of_find_compatible_node(NULL, NULL, "simple-framebuffer");
- simplefb_dev = bus_find_device_by_of_node(&platform_bus_type, simplefb_node);
- if (simplefb_dev) {
- put_device(simplefb_dev);
- of_node_put(simplefb_node);
- tidss->simplefb_enabled = true;
- dev_dbg(dev, "simple-framebuffer detected\n");
- }
- }
-
+ check_for_simplefb_device(tidss);
tidss->shared_mode = device_property_read_bool(dev, "ti,dss-shared-mode");
/* powering up associated OLDI domains */