Re: [PATCH] omapfb: dss: Handle return error in dss_init_ports.
From: Bartlomiej Zolnierkiewicz <hidden>
Date: 2017-02-06 15:28:28
Also in:
linux-omap, lkml
Hi, On Friday, February 03, 2017 05:53:45 PM Arvind Yadav wrote:
quoted hunk ↗ jump to hunk
Here, dss_init_ports is not handling return error form dpi_init_port and sdi_init_port. Now dss_init_ports is returning always 0. And it's making below code as a dead code. static int dss_bind(struct device *dev) { . . r = dss_init_ports(pdev); //dss_init_ports will return always 0 if (r)// This condition will always false goto err_init_ports; //Dead Code . . } This change is to handle return error from dpi_init_port and sdi_init_port. Also, It will remove dead code from function 'dss_bind'. Signed-off-by: Arvind Yadav <redacted> --- drivers/video/fbdev/omap2/omapfb/dss/dss.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dss.c b/drivers/video/fbdev/omap2/omapfb/dss/dss.c index 47d7f69..15a0dab 100644 --- a/drivers/video/fbdev/omap2/omapfb/dss/dss.c +++ b/drivers/video/fbdev/omap2/omapfb/dss/dss.c@@ -946,6 +946,7 @@ static int dss_init_ports(struct platform_device *pdev) struct device_node *parent = pdev->dev.of_node; struct device_node *port; int r; + int ret = 0; if (parent = NULL) return 0;@@ -972,17 +973,17 @@ static int dss_init_ports(struct platform_device *pdev) switch (port_type) { case OMAP_DISPLAY_TYPE_DPI: - dpi_init_port(pdev, port); + ret = dpi_init_port(pdev, port); break; case OMAP_DISPLAY_TYPE_SDI: - sdi_init_port(pdev, port); + ret = sdi_init_port(pdev, port); break; default: break; } } while ((port = omapdss_of_get_next_port(parent, port)) != NULL);
Shouldn't initialization be stopped after the first failure? i.e.: } while (!ret && (port = omapdss_of_get_next_port(parent, port)) != NULL); Also the cleanup of the partial initialization is missing. From looking at the code we should do something like this before returning: if (ret) dss_uninit_ports(pdev); (dpi_uninit_port() & sdi_uninit_port() skip not fully initialized ports)
- return 0; + return ret; } static void dss_uninit_ports(struct platform_device *pdev)
Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics