All of lore.kernel.org
 help / color / mirror / Atom feed
* [bug report] drm/tve200: Clean up panel bridging
@ 2022-04-01 10:07 Dan Carpenter
  0 siblings, 0 replies; only message in thread
From: Dan Carpenter @ 2022-04-01 10:07 UTC (permalink / raw)
  To: linus.walleij; +Cc: dri-devel

[ Old code... ]

Hello Linus Walleij,

The patch 9ab12e88a0b4: "drm/tve200: Clean up panel bridging" from
Sep 11, 2017, leads to the following Smatch static checker warning:

	drivers/gpu/drm/tve200/tve200_drv.c:96 tve200_modeset_init()
	warn: missing error code here? '_dev_err()' failed. 'ret' = '0'

drivers/gpu/drm/tve200/tve200_drv.c
    62 static int tve200_modeset_init(struct drm_device *dev)
    63 {
    64         struct drm_mode_config *mode_config;
    65         struct tve200_drm_dev_private *priv = dev->dev_private;
    66         struct drm_panel *panel;
    67         struct drm_bridge *bridge;
    68         int ret = 0;
    69 
    70         drm_mode_config_init(dev);
    71         mode_config = &dev->mode_config;
    72         mode_config->funcs = &mode_config_funcs;
    73         mode_config->min_width = 352;
    74         mode_config->max_width = 720;
    75         mode_config->min_height = 240;
    76         mode_config->max_height = 576;
    77 
    78         ret = drm_of_find_panel_or_bridge(dev->dev->of_node,
    79                                           0, 0, &panel, &bridge);
    80         if (ret && ret != -ENODEV)
    81                 return ret;

There is a return check here.

    82         if (panel) {
    83                 bridge = drm_panel_bridge_add_typed(panel,
    84                                                     DRM_MODE_CONNECTOR_Unknown);
    85                 if (IS_ERR(bridge)) {
    86                         ret = PTR_ERR(bridge);
    87                         goto out_bridge;
    88                 }
    89         } else {
    90                 /*
    91                  * TODO: when we are using a different bridge than a panel
    92                  * (such as a dumb VGA connector) we need to devise a different
    93                  * method to get the connector out of the bridge.
    94                  */
    95                 dev_err(dev->dev, "the bridge is not a panel\n");
--> 96                 goto out_bridge;

From reading this code without looking deeply into the context it looks
like ret can be either 0 or -ENODEV.  Smatch does cross function
analysis (sometimes badly) and says that drm_of_find_panel_or_bridge()
only returns -EINVAL, zero, and -EPROBE_DEFER so it must be zero here.

    97         }
    98 
    99         ret = tve200_display_init(dev);
    100         if (ret) {
    101                 dev_err(dev->dev, "failed to init display\n");
    102                 goto out_bridge;
    103         }
    104 
    105         ret = drm_simple_display_pipe_attach_bridge(&priv->pipe,
    106                                                     bridge);
    107         if (ret) {
    108                 dev_err(dev->dev, "failed to attach bridge\n");
    109                 goto out_bridge;
    110         }
    111 
    112         priv->panel = panel;
    113         priv->connector = drm_panel_bridge_connector(bridge);
    114         priv->bridge = bridge;
    115 
    116         dev_info(dev->dev, "attached to panel %s\n",
    117                  dev_name(panel->dev));
    118 
    119         ret = drm_vblank_init(dev, 1);
    120         if (ret) {
    121                 dev_err(dev->dev, "failed to init vblank\n");
    122                 goto out_bridge;
    123         }
    124 
    125         drm_mode_config_reset(dev);
    126         drm_kms_helper_poll_init(dev);
    127 
    128         goto finish;
    129 
    130 out_bridge:
    131         if (panel)
    132                 drm_panel_bridge_remove(bridge);
    133         drm_mode_config_cleanup(dev);
    134 finish:
    135         return ret;
    136 }

regards,
dan carpenter

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-04-01 10:07 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-04-01 10:07 [bug report] drm/tve200: Clean up panel bridging Dan Carpenter

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.