Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/tilcdc: Fix tilcdc_crtc_create() return value handling

Failed tilcdc_crtc_create() error handling was broken, this patch
should fix it.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
Tested-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>

+12 -13
+7 -5
drivers/gpu/drm/tilcdc/tilcdc_crtc.c
··· 957 957 return IRQ_HANDLED; 958 958 } 959 959 960 - struct drm_crtc *tilcdc_crtc_create(struct drm_device *dev) 960 + int tilcdc_crtc_create(struct drm_device *dev) 961 961 { 962 962 struct tilcdc_drm_private *priv = dev->dev_private; 963 963 struct tilcdc_crtc *tilcdc_crtc; ··· 967 967 tilcdc_crtc = devm_kzalloc(dev->dev, sizeof(*tilcdc_crtc), GFP_KERNEL); 968 968 if (!tilcdc_crtc) { 969 969 dev_err(dev->dev, "allocation failed\n"); 970 - return NULL; 970 + return -ENOMEM; 971 971 } 972 972 973 973 if (priv->rev == 1) { ··· 977 977 &tilcdc_crtc->palette_dma_handle, 978 978 GFP_KERNEL | __GFP_ZERO); 979 979 if (!tilcdc_crtc->palette_base) 980 - return ERR_PTR(-ENOMEM); 980 + return -ENOMEM; 981 981 } 982 982 983 983 crtc = &tilcdc_crtc->base; ··· 1020 1020 if (!crtc->port) { /* This should never happen */ 1021 1021 dev_err(dev->dev, "Port node not found in %s\n", 1022 1022 dev->dev->of_node->full_name); 1023 + ret = -EINVAL; 1023 1024 goto fail; 1024 1025 } 1025 1026 } 1026 1027 1027 - return crtc; 1028 + priv->crtc = crtc; 1029 + return 0; 1028 1030 1029 1031 fail: 1030 1032 tilcdc_crtc_destroy(crtc); 1031 - return NULL; 1033 + return -ENOMEM; 1032 1034 }
+4 -7
drivers/gpu/drm/tilcdc/tilcdc_drv.c
··· 153 153 .atomic_commit = tilcdc_commit, 154 154 }; 155 155 156 - static int modeset_init(struct drm_device *dev) 156 + static void modeset_init(struct drm_device *dev) 157 157 { 158 158 struct tilcdc_drm_private *priv = dev->dev_private; 159 159 struct tilcdc_module *mod; 160 - 161 - priv->crtc = tilcdc_crtc_create(dev); 162 160 163 161 list_for_each_entry(mod, &module_list, list) { 164 162 DBG("loading module: %s", mod->name); ··· 168 170 dev->mode_config.max_width = tilcdc_crtc_max_width(priv->crtc); 169 171 dev->mode_config.max_height = 2048; 170 172 dev->mode_config.funcs = &mode_config_funcs; 171 - 172 - return 0; 173 173 } 174 174 175 175 #ifdef CONFIG_CPU_FREQ ··· 366 370 } 367 371 } 368 372 369 - ret = modeset_init(ddev); 373 + ret = tilcdc_crtc_create(ddev); 370 374 if (ret < 0) { 371 - dev_err(dev, "failed to initialize mode setting\n"); 375 + dev_err(dev, "failed to create crtc\n"); 372 376 goto init_failed; 373 377 } 378 + modeset_init(ddev); 374 379 375 380 if (priv->is_componentized) { 376 381 ret = component_bind_all(dev, ddev);
+1 -1
drivers/gpu/drm/tilcdc/tilcdc_drv.h
··· 168 168 169 169 #define DBG(fmt, ...) DRM_DEBUG(fmt"\n", ##__VA_ARGS__) 170 170 171 - struct drm_crtc *tilcdc_crtc_create(struct drm_device *dev); 171 + int tilcdc_crtc_create(struct drm_device *dev); 172 172 irqreturn_t tilcdc_crtc_irq(struct drm_crtc *crtc); 173 173 void tilcdc_crtc_update_clk(struct drm_crtc *crtc); 174 174 void tilcdc_crtc_set_panel_info(struct drm_crtc *crtc,