Commit 8ab2afa2 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'for-5.19/fbdev-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/linux-fbdev

Pull fbdev fixes and updates from Helge Deller:
 "A buch of small fixes and cleanups, including:

   - vesafb: Fix a use-after-free due early fb_info cleanup

   - clcdfb: Fix refcount leak in clcdfb_of_vram_setup

   - hyperv_fb: Allow resolutions with size > 64 MB for Gen1

   - pxa3xx-gcu: release the resources correctly in
     pxa3xx_gcu_probe/remove()

   - omapfb: Prevent compiler warning regarding
     hwa742_update_window_async()"

* tag 'for-5.19/fbdev-1' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/linux-fbdev:
  video: fbdev: omap: Add prototype for hwa742_update_window_async()
  video: fbdev: vesafb: Fix a use-after-free due early fb_info cleanup
  video: fbdev: radeon: Fix spelling typo in comment
  video: fbdev: xen: remove setting of 'transp' parameter
  video: fbdev: pxa3xx-gcu: release the resources correctly in pxa3xx_gcu_probe/remove()
  video: fbdev: omapfb: simplify the return expression of nec_8048_connect()
  video: fbdev: omapfb: simplify the return expression of dsi_init_pll_data()
  video: fbdev: clcdfb: Fix refcount leak in clcdfb_of_vram_setup
  video: fbdev: hyperv_fb: Allow resolutions with size > 64 MB for Gen1
parents e11a9356 79b66128
...@@ -758,12 +758,15 @@ static int clcdfb_of_vram_setup(struct clcd_fb *fb) ...@@ -758,12 +758,15 @@ static int clcdfb_of_vram_setup(struct clcd_fb *fb)
return -ENODEV; return -ENODEV;
fb->fb.screen_base = of_iomap(memory, 0); fb->fb.screen_base = of_iomap(memory, 0);
if (!fb->fb.screen_base) if (!fb->fb.screen_base) {
of_node_put(memory);
return -ENOMEM; return -ENOMEM;
}
fb->fb.fix.smem_start = of_translate_address(memory, fb->fb.fix.smem_start = of_translate_address(memory,
of_get_address(memory, 0, &size, NULL)); of_get_address(memory, 0, &size, NULL));
fb->fb.fix.smem_len = size; fb->fb.fix.smem_len = size;
of_node_put(memory);
return 0; return 0;
} }
......
...@@ -992,7 +992,6 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info) ...@@ -992,7 +992,6 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info)
struct pci_dev *pdev = NULL; struct pci_dev *pdev = NULL;
void __iomem *fb_virt; void __iomem *fb_virt;
int gen2vm = efi_enabled(EFI_BOOT); int gen2vm = efi_enabled(EFI_BOOT);
resource_size_t pot_start, pot_end;
phys_addr_t paddr; phys_addr_t paddr;
int ret; int ret;
...@@ -1043,23 +1042,7 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info) ...@@ -1043,23 +1042,7 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info)
dio_fb_size = dio_fb_size =
screen_width * screen_height * screen_depth / 8; screen_width * screen_height * screen_depth / 8;
if (gen2vm) { ret = vmbus_allocate_mmio(&par->mem, hdev, 0, -1,
pot_start = 0;
pot_end = -1;
} else {
if (!(pci_resource_flags(pdev, 0) & IORESOURCE_MEM) ||
pci_resource_len(pdev, 0) < screen_fb_size) {
pr_err("Resource not available or (0x%lx < 0x%lx)\n",
(unsigned long) pci_resource_len(pdev, 0),
(unsigned long) screen_fb_size);
goto err1;
}
pot_end = pci_resource_end(pdev, 0);
pot_start = pot_end - screen_fb_size + 1;
}
ret = vmbus_allocate_mmio(&par->mem, hdev, pot_start, pot_end,
screen_fb_size, 0x100000, true); screen_fb_size, 0x100000, true);
if (ret != 0) { if (ret != 0) {
pr_err("Unable to allocate framebuffer memory\n"); pr_err("Unable to allocate framebuffer memory\n");
......
...@@ -231,5 +231,9 @@ extern int omapfb_update_window_async(struct fb_info *fbi, ...@@ -231,5 +231,9 @@ extern int omapfb_update_window_async(struct fb_info *fbi,
struct omapfb_update_window *win, struct omapfb_update_window *win,
void (*callback)(void *), void (*callback)(void *),
void *callback_data); void *callback_data);
extern int hwa742_update_window_async(struct fb_info *fbi,
struct omapfb_update_window *win,
void (*callback)(void *),
void *callback_data);
#endif /* __OMAPFB_H */ #endif /* __OMAPFB_H */
...@@ -117,16 +117,11 @@ static int nec_8048_connect(struct omap_dss_device *dssdev) ...@@ -117,16 +117,11 @@ static int nec_8048_connect(struct omap_dss_device *dssdev)
{ {
struct panel_drv_data *ddata = to_panel_data(dssdev); struct panel_drv_data *ddata = to_panel_data(dssdev);
struct omap_dss_device *in = ddata->in; struct omap_dss_device *in = ddata->in;
int r;
if (omapdss_device_is_connected(dssdev)) if (omapdss_device_is_connected(dssdev))
return 0; return 0;
r = in->ops.dpi->connect(in, dssdev); return in->ops.dpi->connect(in, dssdev);
if (r)
return r;
return 0;
} }
static void nec_8048_disconnect(struct omap_dss_device *dssdev) static void nec_8048_disconnect(struct omap_dss_device *dssdev)
......
...@@ -173,7 +173,6 @@ static int dsi_init_pll_data(struct platform_device *pdev, struct hdmi_pll_data ...@@ -173,7 +173,6 @@ static int dsi_init_pll_data(struct platform_device *pdev, struct hdmi_pll_data
{ {
struct dss_pll *pll = &hpll->pll; struct dss_pll *pll = &hpll->pll;
struct clk *clk; struct clk *clk;
int r;
clk = devm_clk_get(&pdev->dev, "sys_clk"); clk = devm_clk_get(&pdev->dev, "sys_clk");
if (IS_ERR(clk)) { if (IS_ERR(clk)) {
...@@ -203,12 +202,7 @@ static int dsi_init_pll_data(struct platform_device *pdev, struct hdmi_pll_data ...@@ -203,12 +202,7 @@ static int dsi_init_pll_data(struct platform_device *pdev, struct hdmi_pll_data
} }
pll->ops = &dsi_pll_ops; pll->ops = &dsi_pll_ops;
return dss_pll_register(pll);
r = dss_pll_register(pll);
if (r)
return r;
return 0;
} }
int hdmi_pll_init(struct platform_device *pdev, struct hdmi_pll_data *pll, int hdmi_pll_init(struct platform_device *pdev, struct hdmi_pll_data *pll,
......
...@@ -646,6 +646,7 @@ static int pxa3xx_gcu_probe(struct platform_device *pdev) ...@@ -646,6 +646,7 @@ static int pxa3xx_gcu_probe(struct platform_device *pdev)
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
ret = pxa3xx_gcu_add_buffer(dev, priv); ret = pxa3xx_gcu_add_buffer(dev, priv);
if (ret) { if (ret) {
pxa3xx_gcu_free_buffers(dev, priv);
dev_err(dev, "failed to allocate DMA memory\n"); dev_err(dev, "failed to allocate DMA memory\n");
goto err_disable_clk; goto err_disable_clk;
} }
...@@ -662,15 +663,15 @@ static int pxa3xx_gcu_probe(struct platform_device *pdev) ...@@ -662,15 +663,15 @@ static int pxa3xx_gcu_probe(struct platform_device *pdev)
SHARED_SIZE, irq); SHARED_SIZE, irq);
return 0; return 0;
err_free_dma: err_disable_clk:
dma_free_coherent(dev, SHARED_SIZE, clk_disable_unprepare(priv->clk);
priv->shared, priv->shared_phys);
err_misc_deregister: err_misc_deregister:
misc_deregister(&priv->misc_dev); misc_deregister(&priv->misc_dev);
err_disable_clk: err_free_dma:
clk_disable_unprepare(priv->clk); dma_free_coherent(dev, SHARED_SIZE,
priv->shared, priv->shared_phys);
return ret; return ret;
} }
...@@ -683,6 +684,7 @@ static int pxa3xx_gcu_remove(struct platform_device *pdev) ...@@ -683,6 +684,7 @@ static int pxa3xx_gcu_remove(struct platform_device *pdev)
pxa3xx_gcu_wait_idle(priv); pxa3xx_gcu_wait_idle(priv);
misc_deregister(&priv->misc_dev); misc_deregister(&priv->misc_dev);
dma_free_coherent(dev, SHARED_SIZE, priv->shared, priv->shared_phys); dma_free_coherent(dev, SHARED_SIZE, priv->shared, priv->shared_phys);
clk_disable_unprepare(priv->clk);
pxa3xx_gcu_free_buffers(dev, priv); pxa3xx_gcu_free_buffers(dev, priv);
return 0; return 0;
......
...@@ -490,11 +490,12 @@ static int vesafb_remove(struct platform_device *pdev) ...@@ -490,11 +490,12 @@ static int vesafb_remove(struct platform_device *pdev)
{ {
struct fb_info *info = platform_get_drvdata(pdev); struct fb_info *info = platform_get_drvdata(pdev);
/* vesafb_destroy takes care of info cleanup */
unregister_framebuffer(info);
if (((struct vesafb_par *)(info->par))->region) if (((struct vesafb_par *)(info->par))->region)
release_region(0x3c0, 32); release_region(0x3c0, 32);
/* vesafb_destroy takes care of info cleanup */
unregister_framebuffer(info);
return 0; return 0;
} }
......
...@@ -223,7 +223,6 @@ static int xenfb_setcolreg(unsigned regno, unsigned red, unsigned green, ...@@ -223,7 +223,6 @@ static int xenfb_setcolreg(unsigned regno, unsigned red, unsigned green,
red = CNVT_TOHW(red, info->var.red.length); red = CNVT_TOHW(red, info->var.red.length);
green = CNVT_TOHW(green, info->var.green.length); green = CNVT_TOHW(green, info->var.green.length);
blue = CNVT_TOHW(blue, info->var.blue.length); blue = CNVT_TOHW(blue, info->var.blue.length);
transp = CNVT_TOHW(transp, info->var.transp.length);
#undef CNVT_TOHW #undef CNVT_TOHW
v = (red << info->var.red.offset) | v = (red << info->var.red.offset) |
......
...@@ -750,7 +750,7 @@ ...@@ -750,7 +750,7 @@
#define WAIT_DMA_GUI_IDLE (1 << 9) #define WAIT_DMA_GUI_IDLE (1 << 9)
#define WAIT_2D_IDLECLEAN (1 << 16) #define WAIT_2D_IDLECLEAN (1 << 16)
/* SURFACE_CNTL bit consants */ /* SURFACE_CNTL bit constants */
#define SURF_TRANSLATION_DIS (1 << 8) #define SURF_TRANSLATION_DIS (1 << 8)
#define NONSURF_AP0_SWP_16BPP (1 << 20) #define NONSURF_AP0_SWP_16BPP (1 << 20)
#define NONSURF_AP0_SWP_32BPP (1 << 21) #define NONSURF_AP0_SWP_32BPP (1 << 21)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment