diff options
author | Devarsh Thakkar <devarsht@ti.com> | 2024-03-06 20:39:41 +0530 |
---|---|---|
committer | Praneeth Bajjuri <praneeth@ti.com> | 2024-03-06 14:48:33 -0600 |
commit | 94d58f8c9656c7afc0166430bb1311dd22b948f2 (patch) | |
tree | c767ba89d9e12a5ab8c005dff01375e7e19452cc | |
parent | 8249372bee2649a770e778bf0108019f6879a1c6 (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.c | 37 |
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 */ |