Commit 14379cdc authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'fbdev-fixes-4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux

Pull fbdev fixes from Tomi Valkeinen:
 - fix omap2plus_defconfig to enable omapfb as it was in v4.4
 - ocfb: fix timings for margins
 - s6e8ax0, da8xx-fb: fix compile warnings
 - mmp: fix build failure caused by bad printk parameters
 - imxfb: fix clock issue which kept the display off

* tag 'fbdev-fixes-4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/tomba/linux:
  video: fbdev: imxfb: Provide a reset mechanism
  fbdev: mmp: print IRQ resource using %pR format string
  fbdev: da8xx-fb: remove incorrect type cast
  fbdev: s6e8ax0: avoid unused function warnings
  ocfb: fix tgdel and tvdel timing parameters
  ARM: omap2plus_defconfig: update display configs
parents 4c05121e b82fe6dd
...@@ -292,24 +292,23 @@ CONFIG_FB=y ...@@ -292,24 +292,23 @@ CONFIG_FB=y
CONFIG_FIRMWARE_EDID=y CONFIG_FIRMWARE_EDID=y
CONFIG_FB_MODE_HELPERS=y CONFIG_FB_MODE_HELPERS=y
CONFIG_FB_TILEBLITTING=y CONFIG_FB_TILEBLITTING=y
CONFIG_OMAP2_DSS=m CONFIG_FB_OMAP5_DSS_HDMI=y
CONFIG_OMAP5_DSS_HDMI=y CONFIG_FB_OMAP2_DSS_SDI=y
CONFIG_OMAP2_DSS_SDI=y CONFIG_FB_OMAP2_DSS_DSI=y
CONFIG_OMAP2_DSS_DSI=y
CONFIG_FB_OMAP2=m CONFIG_FB_OMAP2=m
CONFIG_DISPLAY_ENCODER_TFP410=m CONFIG_FB_OMAP2_ENCODER_TFP410=m
CONFIG_DISPLAY_ENCODER_TPD12S015=m CONFIG_FB_OMAP2_ENCODER_TPD12S015=m
CONFIG_DISPLAY_CONNECTOR_DVI=m CONFIG_FB_OMAP2_CONNECTOR_DVI=m
CONFIG_DISPLAY_CONNECTOR_HDMI=m CONFIG_FB_OMAP2_CONNECTOR_HDMI=m
CONFIG_DISPLAY_CONNECTOR_ANALOG_TV=m CONFIG_FB_OMAP2_CONNECTOR_ANALOG_TV=m
CONFIG_DISPLAY_PANEL_DPI=m CONFIG_FB_OMAP2_PANEL_DPI=m
CONFIG_DISPLAY_PANEL_DSI_CM=m CONFIG_FB_OMAP2_PANEL_DSI_CM=m
CONFIG_DISPLAY_PANEL_SONY_ACX565AKM=m CONFIG_FB_OMAP2_PANEL_SONY_ACX565AKM=m
CONFIG_DISPLAY_PANEL_LGPHILIPS_LB035Q02=m CONFIG_FB_OMAP2_PANEL_LGPHILIPS_LB035Q02=m
CONFIG_DISPLAY_PANEL_SHARP_LS037V7DW01=m CONFIG_FB_OMAP2_PANEL_SHARP_LS037V7DW01=m
CONFIG_DISPLAY_PANEL_TPO_TD028TTEC1=m CONFIG_FB_OMAP2_PANEL_TPO_TD028TTEC1=m
CONFIG_DISPLAY_PANEL_TPO_TD043MTEA1=m CONFIG_FB_OMAP2_PANEL_TPO_TD043MTEA1=m
CONFIG_DISPLAY_PANEL_NEC_NL8048HL11=m CONFIG_FB_OMAP2_PANEL_NEC_NL8048HL11=m
CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=y CONFIG_LCD_CLASS_DEVICE=y
CONFIG_LCD_PLATFORM=y CONFIG_LCD_PLATFORM=y
......
...@@ -152,7 +152,7 @@ static void lcdc_write(unsigned int val, unsigned int addr) ...@@ -152,7 +152,7 @@ static void lcdc_write(unsigned int val, unsigned int addr)
struct da8xx_fb_par { struct da8xx_fb_par {
struct device *dev; struct device *dev;
resource_size_t p_palette_base; dma_addr_t p_palette_base;
unsigned char *v_palette_base; unsigned char *v_palette_base;
dma_addr_t vram_phys; dma_addr_t vram_phys;
unsigned long vram_size; unsigned long vram_size;
...@@ -1428,7 +1428,7 @@ static int fb_probe(struct platform_device *device) ...@@ -1428,7 +1428,7 @@ static int fb_probe(struct platform_device *device)
par->vram_virt = dma_alloc_coherent(NULL, par->vram_virt = dma_alloc_coherent(NULL,
par->vram_size, par->vram_size,
(resource_size_t *) &par->vram_phys, &par->vram_phys,
GFP_KERNEL | GFP_DMA); GFP_KERNEL | GFP_DMA);
if (!par->vram_virt) { if (!par->vram_virt) {
dev_err(&device->dev, dev_err(&device->dev,
...@@ -1448,7 +1448,7 @@ static int fb_probe(struct platform_device *device) ...@@ -1448,7 +1448,7 @@ static int fb_probe(struct platform_device *device)
/* allocate palette buffer */ /* allocate palette buffer */
par->v_palette_base = dma_zalloc_coherent(NULL, PALETTE_SIZE, par->v_palette_base = dma_zalloc_coherent(NULL, PALETTE_SIZE,
(resource_size_t *)&par->p_palette_base, &par->p_palette_base,
GFP_KERNEL | GFP_DMA); GFP_KERNEL | GFP_DMA);
if (!par->v_palette_base) { if (!par->v_palette_base) {
dev_err(&device->dev, dev_err(&device->dev,
......
...@@ -829,8 +829,7 @@ static int s6e8ax0_probe(struct mipi_dsim_lcd_device *dsim_dev) ...@@ -829,8 +829,7 @@ static int s6e8ax0_probe(struct mipi_dsim_lcd_device *dsim_dev)
return 0; return 0;
} }
#ifdef CONFIG_PM static int __maybe_unused s6e8ax0_suspend(struct mipi_dsim_lcd_device *dsim_dev)
static int s6e8ax0_suspend(struct mipi_dsim_lcd_device *dsim_dev)
{ {
struct s6e8ax0 *lcd = dev_get_drvdata(&dsim_dev->dev); struct s6e8ax0 *lcd = dev_get_drvdata(&dsim_dev->dev);
...@@ -843,7 +842,7 @@ static int s6e8ax0_suspend(struct mipi_dsim_lcd_device *dsim_dev) ...@@ -843,7 +842,7 @@ static int s6e8ax0_suspend(struct mipi_dsim_lcd_device *dsim_dev)
return 0; return 0;
} }
static int s6e8ax0_resume(struct mipi_dsim_lcd_device *dsim_dev) static int __maybe_unused s6e8ax0_resume(struct mipi_dsim_lcd_device *dsim_dev)
{ {
struct s6e8ax0 *lcd = dev_get_drvdata(&dsim_dev->dev); struct s6e8ax0 *lcd = dev_get_drvdata(&dsim_dev->dev);
...@@ -855,10 +854,6 @@ static int s6e8ax0_resume(struct mipi_dsim_lcd_device *dsim_dev) ...@@ -855,10 +854,6 @@ static int s6e8ax0_resume(struct mipi_dsim_lcd_device *dsim_dev)
return 0; return 0;
} }
#else
#define s6e8ax0_suspend NULL
#define s6e8ax0_resume NULL
#endif
static struct mipi_dsim_lcd_driver s6e8ax0_dsim_ddi_driver = { static struct mipi_dsim_lcd_driver s6e8ax0_dsim_ddi_driver = {
.name = "s6e8ax0", .name = "s6e8ax0",
...@@ -867,8 +862,8 @@ static struct mipi_dsim_lcd_driver s6e8ax0_dsim_ddi_driver = { ...@@ -867,8 +862,8 @@ static struct mipi_dsim_lcd_driver s6e8ax0_dsim_ddi_driver = {
.power_on = s6e8ax0_power_on, .power_on = s6e8ax0_power_on,
.set_sequence = s6e8ax0_set_sequence, .set_sequence = s6e8ax0_set_sequence,
.probe = s6e8ax0_probe, .probe = s6e8ax0_probe,
.suspend = s6e8ax0_suspend, .suspend = IS_ENABLED(CONFIG_PM) ? s6e8ax0_suspend : NULL,
.resume = s6e8ax0_resume, .resume = IS_ENABLED(CONFIG_PM) ? s6e8ax0_resume : NULL,
}; };
static int s6e8ax0_init(void) static int s6e8ax0_init(void)
......
...@@ -902,6 +902,21 @@ static int imxfb_probe(struct platform_device *pdev) ...@@ -902,6 +902,21 @@ static int imxfb_probe(struct platform_device *pdev)
goto failed_getclock; goto failed_getclock;
} }
/*
* The LCDC controller does not have an enable bit. The
* controller starts directly when the clocks are enabled.
* If the clocks are enabled when the controller is not yet
* programmed with proper register values (enabled at the
* bootloader, for example) then it just goes into some undefined
* state.
* To avoid this issue, let's enable and disable LCDC IPG clock
* so that we force some kind of 'reset' to the LCDC block.
*/
ret = clk_prepare_enable(fbi->clk_ipg);
if (ret)
goto failed_getclock;
clk_disable_unprepare(fbi->clk_ipg);
fbi->clk_ahb = devm_clk_get(&pdev->dev, "ahb"); fbi->clk_ahb = devm_clk_get(&pdev->dev, "ahb");
if (IS_ERR(fbi->clk_ahb)) { if (IS_ERR(fbi->clk_ahb)) {
ret = PTR_ERR(fbi->clk_ahb); ret = PTR_ERR(fbi->clk_ahb);
......
...@@ -503,8 +503,7 @@ static int mmphw_probe(struct platform_device *pdev) ...@@ -503,8 +503,7 @@ static int mmphw_probe(struct platform_device *pdev)
ctrl->reg_base = devm_ioremap_nocache(ctrl->dev, ctrl->reg_base = devm_ioremap_nocache(ctrl->dev,
res->start, resource_size(res)); res->start, resource_size(res));
if (ctrl->reg_base == NULL) { if (ctrl->reg_base == NULL) {
dev_err(ctrl->dev, "%s: res %x - %x map failed\n", __func__, dev_err(ctrl->dev, "%s: res %pR map failed\n", __func__, res);
res->start, res->end);
ret = -ENOMEM; ret = -ENOMEM;
goto failed; goto failed;
} }
......
...@@ -123,11 +123,11 @@ static int ocfb_setupfb(struct ocfb_dev *fbdev) ...@@ -123,11 +123,11 @@ static int ocfb_setupfb(struct ocfb_dev *fbdev)
/* Horizontal timings */ /* Horizontal timings */
ocfb_writereg(fbdev, OCFB_HTIM, (var->hsync_len - 1) << 24 | ocfb_writereg(fbdev, OCFB_HTIM, (var->hsync_len - 1) << 24 |
(var->right_margin - 1) << 16 | (var->xres - 1)); (var->left_margin - 1) << 16 | (var->xres - 1));
/* Vertical timings */ /* Vertical timings */
ocfb_writereg(fbdev, OCFB_VTIM, (var->vsync_len - 1) << 24 | ocfb_writereg(fbdev, OCFB_VTIM, (var->vsync_len - 1) << 24 |
(var->lower_margin - 1) << 16 | (var->yres - 1)); (var->upper_margin - 1) << 16 | (var->yres - 1));
/* Total length of frame */ /* Total length of frame */
hlen = var->left_margin + var->right_margin + var->hsync_len + hlen = var->left_margin + var->right_margin + var->hsync_len +
......
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