diff options
54 files changed, 189 insertions, 233 deletions
| diff --git a/Documentation/devicetree/bindings/display/simple-framebuffer.yaml b/Documentation/devicetree/bindings/display/simple-framebuffer.yaml index 44a29d813f14..27ba4323d221 100644 --- a/Documentation/devicetree/bindings/display/simple-framebuffer.yaml +++ b/Documentation/devicetree/bindings/display/simple-framebuffer.yaml @@ -52,11 +52,13 @@ description: |+  properties:    compatible: -    items: -      - enum: -          - apple,simple-framebuffer -          - allwinner,simple-framebuffer -          - amlogic,simple-framebuffer +    oneOf: +      - items: +          - enum: +              - apple,simple-framebuffer +              - allwinner,simple-framebuffer +              - amlogic,simple-framebuffer +          - const: simple-framebuffer        - const: simple-framebuffer    reg: diff --git a/arch/parisc/include/asm/agp.h b/arch/parisc/include/asm/agp.h index cb04470e63d0..14ae54cfd368 100644 --- a/arch/parisc/include/asm/agp.h +++ b/arch/parisc/include/asm/agp.h @@ -8,8 +8,8 @@   *   */ -#define map_page_into_agp(page)		/* nothing */ -#define unmap_page_from_agp(page)	/* nothing */ +#define map_page_into_agp(page)		do { } while (0) +#define unmap_page_from_agp(page)	do { } while (0)  #define flush_agp_cache()		mb()  /* GATT allocation. Returns/accepts GATT kernel virtual address. */ diff --git a/arch/powerpc/include/asm/agp.h b/arch/powerpc/include/asm/agp.h index b29b1186f819..6b6485c988dd 100644 --- a/arch/powerpc/include/asm/agp.h +++ b/arch/powerpc/include/asm/agp.h @@ -5,8 +5,8 @@  #include <asm/io.h> -#define map_page_into_agp(page) -#define unmap_page_from_agp(page) +#define map_page_into_agp(page) do {} while (0) +#define unmap_page_from_agp(page) do {} while (0)  #define flush_agp_cache() mb()  /* GATT allocation. Returns/accepts GATT kernel virtual address. */ diff --git a/arch/sparc/include/asm/agp.h b/arch/sparc/include/asm/agp.h index efe0d6a12e5a..2d0ff84cee3f 100644 --- a/arch/sparc/include/asm/agp.h +++ b/arch/sparc/include/asm/agp.h @@ -4,9 +4,9 @@  /* dummy for now */ -#define map_page_into_agp(page) -#define unmap_page_from_agp(page) -#define flush_agp_cache() mb() +#define map_page_into_agp(page)		do { } while (0) +#define unmap_page_from_agp(page)	do { } while (0) +#define flush_agp_cache()		mb()  /* GATT allocation. Returns/accepts GATT kernel virtual address. */  #define alloc_gatt_pages(order)		\ diff --git a/drivers/video/backlight/lm3630a_bl.c b/drivers/video/backlight/lm3630a_bl.c index e8b185bb6f5e..1d17c439430e 100644 --- a/drivers/video/backlight/lm3630a_bl.c +++ b/drivers/video/backlight/lm3630a_bl.c @@ -594,7 +594,6 @@ static int lm3630a_remove(struct i2c_client *client)  	if (pchip->irq) {  		free_irq(pchip->irq, pchip); -		flush_workqueue(pchip->irqthread);  		destroy_workqueue(pchip->irqthread);  	}  	return 0; diff --git a/drivers/video/backlight/qcom-wled.c b/drivers/video/backlight/qcom-wled.c index 306bcc6ccb92..527210e85795 100644 --- a/drivers/video/backlight/qcom-wled.c +++ b/drivers/video/backlight/qcom-wled.c @@ -1734,6 +1734,7 @@ static const struct of_device_id wled_match_table[] = {  	{ .compatible = "qcom,pmi8994-wled", .data = (void *)4 },  	{ .compatible = "qcom,pmi8998-wled", .data = (void *)4 },  	{ .compatible = "qcom,pm660l-wled", .data = (void *)4 }, +	{ .compatible = "qcom,pm6150l-wled", .data = (void *)5 },  	{ .compatible = "qcom,pm8150l-wled", .data = (void *)5 },  	{}  }; diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig index 6ed5e608dd04..93b8d84c34cf 100644 --- a/drivers/video/fbdev/Kconfig +++ b/drivers/video/fbdev/Kconfig @@ -829,7 +829,7 @@ config FB_PVR2  	  You can pass several parameters to the driver at boot time or at  	  module load time.  The parameters look like "video=pvr2:XXX", where  	  the meaning of XXX can be found at the end of the main source file -	  (<file:drivers/video/pvr2fb.c>). Please see the file +	  (<file:drivers/video/fbdev/pvr2fb.c>). Please see the file  	  <file:Documentation/fb/pvr2fb.rst>.  config FB_OPENCORES diff --git a/drivers/video/fbdev/asiliantfb.c b/drivers/video/fbdev/asiliantfb.c index 84c56f525889..f8ef62542f7f 100644 --- a/drivers/video/fbdev/asiliantfb.c +++ b/drivers/video/fbdev/asiliantfb.c @@ -110,7 +110,7 @@ static const struct fb_ops asiliantfb_ops = {  static void asiliant_calc_dclk2(u32 *ppixclock, u8 *dclk2_m, u8 *dclk2_n, u8 *dclk2_div)  {  	unsigned pixclock = *ppixclock; -	unsigned Ftarget = 1000000 * (1000000 / pixclock); +	unsigned Ftarget;  	unsigned n;  	unsigned best_error = 0xffffffff;  	unsigned best_m = 0xffffffff, diff --git a/drivers/video/fbdev/atafb.c b/drivers/video/fbdev/atafb.c index e3812a8ff55a..52a35b661643 100644 --- a/drivers/video/fbdev/atafb.c +++ b/drivers/video/fbdev/atafb.c @@ -76,8 +76,6 @@  #define SWITCH_SND7 0x80  #define SWITCH_NONE 0x00 -#define up(x, r) (((x) + (r) - 1) & ~((r)-1)) -  static int default_par;		/* default resolution (0=none) */ @@ -487,8 +485,8 @@ static struct fb_videomode atafb_modedb[] __initdata = {  		"tt-mid", 60, 640, 480, 31041, 120, 100, 8, 16, 140, 30,  		0, FB_VMODE_NONINTERLACED | FB_VMODE_YWRAP  	}, { -		/* 1280x960, 29 kHz, 60 Hz (TT high) */ -		"tt-high", 57, 640, 960, 31041, 120, 100, 8, 16, 140, 30, +		/* 1280x960, 72 kHz, 72 Hz (TT high) */ +		"tt-high", 57, 1280, 960, 7760, 260, 60, 36, 4, 192, 4,  		0, FB_VMODE_NONINTERLACED | FB_VMODE_YWRAP  	}, @@ -1649,12 +1647,12 @@ static int falcon_pan_display(struct fb_var_screeninfo *var,  	int bpp = info->var.bits_per_pixel;  	if (bpp == 1) -		var->xoffset = up(var->xoffset, 32); +		var->xoffset = round_up(var->xoffset, 32);  	if (bpp != 16)  		par->hw.falcon.xoffset = var->xoffset & 15;  	else {  		par->hw.falcon.xoffset = 0; -		var->xoffset = up(var->xoffset, 2); +		var->xoffset = round_up(var->xoffset, 2);  	}  	par->hw.falcon.line_offset = bpp *  		(info->var.xres_virtual - info->var.xres) / 16; @@ -1683,9 +1681,9 @@ static int falcon_setcolreg(unsigned int regno, unsigned int red,  			   ((blue & 0xfc00) >> 8));  	if (regno < 16) {  		shifter_tt.color_reg[regno] = -			(((red & 0xe000) >> 13) | ((red & 0x1000) >> 12) << 8) | -			(((green & 0xe000) >> 13) | ((green & 0x1000) >> 12) << 4) | -			((blue & 0xe000) >> 13) | ((blue & 0x1000) >> 12); +			((((red & 0xe000) >> 13)   | ((red & 0x1000) >> 12)) << 8)   | +			((((green & 0xe000) >> 13) | ((green & 0x1000) >> 12)) << 4) | +			   ((blue & 0xe000) >> 13) | ((blue & 0x1000) >> 12);  		((u32 *)info->pseudo_palette)[regno] = ((red & 0xf800) |  						       ((green & 0xfc00) >> 5) |  						       ((blue & 0xf800) >> 11)); @@ -1971,9 +1969,9 @@ static int stste_setcolreg(unsigned int regno, unsigned int red,  	green >>= 12;  	if (ATARIHW_PRESENT(EXTD_SHIFTER))  		shifter_tt.color_reg[regno] = -			(((red & 0xe) >> 1) | ((red & 1) << 3) << 8) | -			(((green & 0xe) >> 1) | ((green & 1) << 3) << 4) | -			((blue & 0xe) >> 1) | ((blue & 1) << 3); +			((((red & 0xe)   >> 1) | ((red & 1)   << 3)) << 8) | +			((((green & 0xe) >> 1) | ((green & 1) << 3)) << 4) | +			  ((blue & 0xe)  >> 1) | ((blue & 1)  << 3);  	else  		shifter_tt.color_reg[regno] =  			((red & 0xe) << 7) | @@ -2268,7 +2266,7 @@ static int pan_display(struct fb_var_screeninfo *var, struct fb_info *info)  	if (!fbhw->set_screen_base ||  	    (!ATARIHW_PRESENT(EXTD_SHIFTER) && var->xoffset))  		return -EINVAL; -	var->xoffset = up(var->xoffset, 16); +	var->xoffset = round_up(var->xoffset, 16);  	par->screen_base = screen_base +  	        (var->yoffset * info->var.xres_virtual + var->xoffset)  	        * info->var.bits_per_pixel / 8; @@ -2406,16 +2404,6 @@ static void atafb_set_disp(struct fb_info *info)  				atari_stram_to_virt(info->fix.smem_start));  } -static int atafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, -			   u_int transp, struct fb_info *info) -{ -	red >>= 8; -	green >>= 8; -	blue >>= 8; - -	return info->fbops->fb_setcolreg(regno, red, green, blue, transp, info); -} -  static int  atafb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info)  { @@ -2726,7 +2714,6 @@ static struct fb_ops atafb_ops = {  	.owner =	THIS_MODULE,  	.fb_check_var	= atafb_check_var,  	.fb_set_par	= atafb_set_par, -	.fb_setcolreg	= atafb_setcolreg,  	.fb_blank =	atafb_blank,  	.fb_pan_display	= atafb_pan_display,  	.fb_fillrect	= atafb_fillrect, diff --git a/drivers/video/fbdev/atmel_lcdfb.c b/drivers/video/fbdev/atmel_lcdfb.c index 355b6120dc4f..1fc8de4ecbeb 100644 --- a/drivers/video/fbdev/atmel_lcdfb.c +++ b/drivers/video/fbdev/atmel_lcdfb.c @@ -1062,15 +1062,16 @@ static int __init atmel_lcdfb_probe(struct platform_device *pdev)  	INIT_LIST_HEAD(&info->modelist); -	if (pdev->dev.of_node) { -		ret = atmel_lcdfb_of_init(sinfo); -		if (ret) -			goto free_info; -	} else { +	if (!pdev->dev.of_node) {  		dev_err(dev, "cannot get default configuration\n");  		goto free_info;  	} +	ret = atmel_lcdfb_of_init(sinfo); +	if (ret) +		goto free_info; + +	ret = -ENODEV;  	if (!sinfo->config)  		goto free_info; diff --git a/drivers/video/fbdev/aty/aty128fb.c b/drivers/video/fbdev/aty/aty128fb.c index e6a48689c294..6ff16d3132e5 100644 --- a/drivers/video/fbdev/aty/aty128fb.c +++ b/drivers/video/fbdev/aty/aty128fb.c @@ -952,7 +952,7 @@ static void aty128_timings(struct aty128fb_par *par)  	u32 x_mpll_ref_fb_div;  	u32 xclk_cntl;  	u32 Nx, M; -	unsigned PostDivSet[] = { 0, 1, 2, 4, 8, 3, 6, 12 }; +	static const unsigned int PostDivSet[] = { 0, 1, 2, 4, 8, 3, 6, 12 };  #endif  	if (!par->constants.ref_clk) @@ -1321,8 +1321,10 @@ static void aty128_set_pll(struct aty128_pll *pll,  {  	u32 div3; -	unsigned char post_conv[] =	/* register values for post dividers */ -        { 2, 0, 1, 4, 2, 2, 6, 2, 3, 2, 2, 2, 7 }; +	/* register values for post dividers */ +	static const unsigned char post_conv[] = { +		2, 0, 1, 4, 2, 2, 6, 2, 3, 2, 2, 2, 7 +	};  	/* select PPLL_DIV_3 */  	aty_st_le32(CLOCK_CNTL_INDEX, aty_ld_le32(CLOCK_CNTL_INDEX) | (3 << 8)); @@ -1360,7 +1362,7 @@ static int aty128_var_to_pll(u32 period_in_ps, struct aty128_pll *pll,  			     const struct aty128fb_par *par)  {  	const struct aty128_constants c = par->constants; -	unsigned char post_dividers[] = {1,2,4,8,3,6,12}; +	static const unsigned char post_dividers[] = { 1, 2, 4, 8, 3, 6, 12 };  	u32 output_freq;  	u32 vclk;        /* in .01 MHz */  	int i = 0; diff --git a/drivers/video/fbdev/aty/mach64_ct.c b/drivers/video/fbdev/aty/mach64_ct.c index 011b07e44e0d..e967536af166 100644 --- a/drivers/video/fbdev/aty/mach64_ct.c +++ b/drivers/video/fbdev/aty/mach64_ct.c @@ -22,13 +22,11 @@ static u32 aty_pll_to_var_ct(const struct fb_info *info, const union aty_pll *pl  u8 aty_ld_pll_ct(int offset, const struct atyfb_par *par)  { -	u8 res;  	/* write addr byte */  	aty_st_8(CLOCK_CNTL_ADDR, (offset << 2) & PLL_ADDR, par);  	/* read the register value */ -	res = aty_ld_8(CLOCK_CNTL_DATA, par); -	return res; +	return aty_ld_8(CLOCK_CNTL_DATA, par);  }  static void aty_st_pll_ct(int offset, u8 val, const struct atyfb_par *par) diff --git a/drivers/video/fbdev/aty/mach64_gx.c b/drivers/video/fbdev/aty/mach64_gx.c index 9c37e28fb78b..d06d24830080 100644 --- a/drivers/video/fbdev/aty/mach64_gx.c +++ b/drivers/video/fbdev/aty/mach64_gx.c @@ -352,10 +352,8 @@ static int aty_var_to_pll_18818(const struct fb_info *info, u32 vclk_per,  	post_divider = 1;  	if (MHz100 > MAX_FREQ_2595) { -		MHz100 = MAX_FREQ_2595;  		return -EINVAL;  	} else if (MHz100 < ABS_MIN_FREQ_2595) { -		program_bits = 0;	/* MHz100 = 257 */  		return -EINVAL;  	} else {  		while (MHz100 < MIN_FREQ_2595) { diff --git a/drivers/video/fbdev/au1100fb.c b/drivers/video/fbdev/au1100fb.c index 37a6512feda0..52f731a61482 100644 --- a/drivers/video/fbdev/au1100fb.c +++ b/drivers/video/fbdev/au1100fb.c @@ -239,7 +239,7 @@ int au1100fb_fb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned  	u32 value;  	fbdev = to_au1100fb_device(fbi); -	palette = fbdev->regs->lcd_pallettebase; +	palette = fbdev->regs->lcd_palettebase;  	if (regno > (AU1100_LCD_NBR_PALETTE_ENTRIES - 1))  		return -EINVAL; diff --git a/drivers/video/fbdev/au1100fb.h b/drivers/video/fbdev/au1100fb.h index e7239bceefd3..79f4048726f1 100644 --- a/drivers/video/fbdev/au1100fb.h +++ b/drivers/video/fbdev/au1100fb.h @@ -92,7 +92,7 @@ struct au1100fb_regs  	u32  lcd_pwmdiv;  	u32  lcd_pwmhi;  	u32  reserved[(0x0400-0x002C)/4]; -	u32  lcd_pallettebase[256]; +	u32  lcd_palettebase[256];  };  struct au1100fb_device { diff --git a/drivers/video/fbdev/au1200fb.c b/drivers/video/fbdev/au1200fb.c index c00e01a17368..81c315454428 100644 --- a/drivers/video/fbdev/au1200fb.c +++ b/drivers/video/fbdev/au1200fb.c @@ -1233,8 +1233,8 @@ static int au1200fb_fb_mmap(struct fb_info *info, struct vm_area_struct *vma)  {  	struct au1200fb_device *fbdev = info->par; -	return dma_mmap_attrs(fbdev->dev, vma, fbdev->fb_mem, fbdev->fb_phys, -			fbdev->fb_len, 0); +	return dma_mmap_coherent(fbdev->dev, vma, +				 fbdev->fb_mem, fbdev->fb_phys, fbdev->fb_len);  }  static void set_global(u_int cmd, struct au1200_lcd_global_regs_t *pdata) diff --git a/drivers/video/fbdev/cirrusfb.c b/drivers/video/fbdev/cirrusfb.c index 93802abbbc72..3d47c347b897 100644 --- a/drivers/video/fbdev/cirrusfb.c +++ b/drivers/video/fbdev/cirrusfb.c @@ -469,7 +469,7 @@ static int cirrusfb_check_mclk(struct fb_info *info, long freq)  	return 0;  } -static int cirrusfb_check_pixclock(const struct fb_var_screeninfo *var, +static int cirrusfb_check_pixclock(struct fb_var_screeninfo *var,  				   struct fb_info *info)  {  	long freq; @@ -478,9 +478,7 @@ static int cirrusfb_check_pixclock(const struct fb_var_screeninfo *var,  	unsigned maxclockidx = var->bits_per_pixel >> 3;  	/* convert from ps to kHz */ -	freq = PICOS2KHZ(var->pixclock); - -	dev_dbg(info->device, "desired pixclock: %ld kHz\n", freq); +	freq = PICOS2KHZ(var->pixclock ? : 1);  	maxclock = cirrusfb_board_info[cinfo->btype].maxclock[maxclockidx];  	cinfo->multiplexing = 0; @@ -488,11 +486,13 @@ static int cirrusfb_check_pixclock(const struct fb_var_screeninfo *var,  	/* If the frequency is greater than we can support, we might be able  	 * to use multiplexing for the video mode */  	if (freq > maxclock) { -		dev_err(info->device, -			"Frequency greater than maxclock (%ld kHz)\n", -			maxclock); -		return -EINVAL; +		var->pixclock = KHZ2PICOS(maxclock); + +		while ((freq = PICOS2KHZ(var->pixclock)) > maxclock) +			var->pixclock++;  	} +	dev_dbg(info->device, "desired pixclock: %ld kHz\n", freq); +  	/*  	 * Additional constraint: 8bpp uses DAC clock doubling to allow maximum  	 * pixel clock diff --git a/drivers/video/fbdev/controlfb.c b/drivers/video/fbdev/controlfb.c index 509311471d51..bd59e7b11ed5 100644 --- a/drivers/video/fbdev/controlfb.c +++ b/drivers/video/fbdev/controlfb.c @@ -67,7 +67,9 @@  #define out_8(addr, val)	(void)(val)  #define in_le32(addr)		0  #define out_le32(addr, val)	(void)(val) +#ifndef pgprot_cached_wthru  #define pgprot_cached_wthru(prot) (prot) +#endif  #else  static void invalid_vram_cache(void __force *addr)  { diff --git a/drivers/video/fbdev/core/fbcvt.c b/drivers/video/fbdev/core/fbcvt.c index 55d2bd0ce5c0..64843464c661 100644 --- a/drivers/video/fbdev/core/fbcvt.c +++ b/drivers/video/fbdev/core/fbcvt.c @@ -214,9 +214,11 @@ static u32 fb_cvt_aspect_ratio(struct fb_cvt_data *cvt)  static void fb_cvt_print_name(struct fb_cvt_data *cvt)  {  	u32 pixcount, pixcount_mod; -	int cnt = 255, offset = 0, read = 0; -	u8 *buf = kzalloc(256, GFP_KERNEL); +	int size = 256; +	int off = 0; +	u8 *buf; +	buf = kzalloc(size, GFP_KERNEL);  	if (!buf)  		return; @@ -224,43 +226,30 @@ static void fb_cvt_print_name(struct fb_cvt_data *cvt)  	pixcount_mod = (cvt->xres * (cvt->yres/cvt->interlace)) % 1000000;  	pixcount_mod /= 1000; -	read = snprintf(buf+offset, cnt, "fbcvt: %dx%d@%d: CVT Name - ", -			cvt->xres, cvt->yres, cvt->refresh); -	offset += read; -	cnt -= read; +	off += scnprintf(buf + off, size - off, "fbcvt: %dx%d@%d: CVT Name - ", +			    cvt->xres, cvt->yres, cvt->refresh); -	if (cvt->status) -		snprintf(buf+offset, cnt, "Not a CVT standard - %d.%03d Mega " -			 "Pixel Image\n", pixcount, pixcount_mod); -	else { -		if (pixcount) { -			read = snprintf(buf+offset, cnt, "%d", pixcount); -			cnt -= read; -			offset += read; -		} +	if (cvt->status) { +		off += scnprintf(buf + off, size - off, +				 "Not a CVT standard - %d.%03d Mega Pixel Image\n", +				 pixcount, pixcount_mod); +	} else { +		if (pixcount) +			off += scnprintf(buf + off, size - off, "%d", pixcount); -		read = snprintf(buf+offset, cnt, ".%03dM", pixcount_mod); -		cnt -= read; -		offset += read; +		off += scnprintf(buf + off, size - off, ".%03dM", pixcount_mod);  		if (cvt->aspect_ratio == 0) -			read = snprintf(buf+offset, cnt, "3"); +			off += scnprintf(buf + off, size - off, "3");  		else if (cvt->aspect_ratio == 3) -			read = snprintf(buf+offset, cnt, "4"); +			off += scnprintf(buf + off, size - off, "4");  		else if (cvt->aspect_ratio == 1 || cvt->aspect_ratio == 4) -			read = snprintf(buf+offset, cnt, "9"); +			off += scnprintf(buf + off, size - off, "9");  		else if (cvt->aspect_ratio == 2) -			read = snprintf(buf+offset, cnt, "A"); -		else -			read = 0; -		cnt -= read; -		offset += read; - -		if (cvt->flags & FB_CVT_FLAG_REDUCED_BLANK) { -			read = snprintf(buf+offset, cnt, "-R"); -			cnt -= read; -			offset += read; -		} +			off += scnprintf(buf + off, size - off, "A"); + +		if (cvt->flags & FB_CVT_FLAG_REDUCED_BLANK) +			off += scnprintf(buf + off, size - off, "-R");  	}  	printk(KERN_INFO "%s\n", buf); diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c index 13083ad8d751..8df3ac991e5a 100644 --- a/drivers/video/fbdev/core/fbmem.c +++ b/drivers/video/fbdev/core/fbmem.c @@ -396,18 +396,14 @@ static void fb_rotate_logo(struct fb_info *info, u8 *dst,  	} else if (rotate == FB_ROTATE_CW) {  		fb_rotate_logo_cw(image->data, dst, image->width,  				  image->height); -		tmp = image->width; -		image->width = image->height; -		image->height = tmp; +		swap(image->width, image->height);  		tmp = image->dy;  		image->dy = image->dx;  		image->dx = info->var.xres - image->width - tmp;  	} else if (rotate == FB_ROTATE_CCW) {  		fb_rotate_logo_ccw(image->data, dst, image->width,  				   image->height); -		tmp = image->width; -		image->width = image->height; -		image->height = tmp; +		swap(image->width, image->height);  		tmp = image->dx;  		image->dx = image->dy;  		image->dy = info->var.yres - image->height - tmp; diff --git a/drivers/video/fbdev/da8xx-fb.c b/drivers/video/fbdev/da8xx-fb.c index 005ac3c17aa1..ae76a2111c77 100644 --- a/drivers/video/fbdev/da8xx-fb.c +++ b/drivers/video/fbdev/da8xx-fb.c @@ -1354,10 +1354,9 @@ static int fb_probe(struct platform_device *device)  		return PTR_ERR(da8xx_fb_reg_base);  	tmp_lcdc_clk = devm_clk_get(&device->dev, "fck"); -	if (IS_ERR(tmp_lcdc_clk)) { -		dev_err(&device->dev, "Can not get device clock\n"); -		return PTR_ERR(tmp_lcdc_clk); -	} +	if (IS_ERR(tmp_lcdc_clk)) +		return dev_err_probe(&device->dev, PTR_ERR(tmp_lcdc_clk), +				     "Can not get device clock\n");  	pm_runtime_enable(&device->dev);  	pm_runtime_get_sync(&device->dev); diff --git a/drivers/video/fbdev/imxfb.c b/drivers/video/fbdev/imxfb.c index ad598257ab38..68288756ffff 100644 --- a/drivers/video/fbdev/imxfb.c +++ b/drivers/video/fbdev/imxfb.c @@ -1083,6 +1083,8 @@ static int imxfb_remove(struct platform_device *pdev)  	struct resource *res;  	res = platform_get_resource(pdev, IORESOURCE_MEM, 0); +	if (!res) +		return -EINVAL;  	imxfb_disable_controller(fbi); diff --git a/drivers/video/fbdev/kyro/STG4000InitDevice.c b/drivers/video/fbdev/kyro/STG4000InitDevice.c index 21875d3c2dc2..edfa0a04854d 100644 --- a/drivers/video/fbdev/kyro/STG4000InitDevice.c +++ b/drivers/video/fbdev/kyro/STG4000InitDevice.c @@ -124,7 +124,7 @@ u32 ProgramClock(u32 refClock,  	u32 ulScore, ulPhaseScore, ulVcoScore;  	u32 ulTmp = 0, ulVCO;  	u32 ulScaleClockReq, ulMinClock, ulMaxClock; -	u32 ODValues[] = { 1, 2, 0 }; +	static const unsigned char ODValues[] = { 1, 2, 0 };  	/* Translate clock in Hz */  	coreClock *= 100;	/* in Hz */ diff --git a/drivers/video/fbdev/matrox/matroxfb_base.c b/drivers/video/fbdev/matrox/matroxfb_base.c index 5c82611e93d9..236521b19daf 100644 --- a/drivers/video/fbdev/matrox/matroxfb_base.c +++ b/drivers/video/fbdev/matrox/matroxfb_base.c @@ -1377,7 +1377,7 @@ static struct video_board vbG200 = {  	.lowlevel = &matrox_G100  };  static struct video_board vbG200eW = { -	.maxvram = 0x800000, +	.maxvram = 0x100000,  	.maxdisplayable = 0x800000,  	.accelID = FB_ACCEL_MATROX_MGAG200,  	.lowlevel = &matrox_G100 diff --git a/drivers/video/fbdev/mb862xx/mb862xxfb_accel.c b/drivers/video/fbdev/mb862xx/mb862xxfb_accel.c index d40b806461ca..61aed7fc0b8d 100644 --- a/drivers/video/fbdev/mb862xx/mb862xxfb_accel.c +++ b/drivers/video/fbdev/mb862xx/mb862xxfb_accel.c @@ -132,7 +132,7 @@ static void mb86290fb_imageblit8(u32 *cmd, u16 step, u16 dx, u16 dy,  	cmd[2] = (height << 16) | width;  	i = 0; -	line = ptr = image->data; +	line = image->data;  	bytes = image->width;  	while (i < height) { diff --git a/drivers/video/fbdev/mmp/hw/mmp_ctrl.c b/drivers/video/fbdev/mmp/hw/mmp_ctrl.c index 061a105afb86..a9df8ee79810 100644 --- a/drivers/video/fbdev/mmp/hw/mmp_ctrl.c +++ b/drivers/video/fbdev/mmp/hw/mmp_ctrl.c @@ -514,7 +514,8 @@ static int mmphw_probe(struct platform_device *pdev)  	/* get clock */  	ctrl->clk = devm_clk_get(ctrl->dev, mi->clk_name);  	if (IS_ERR(ctrl->clk)) { -		dev_err(ctrl->dev, "unable to get clk %s\n", mi->clk_name); +		dev_err_probe(ctrl->dev, ret, +			      "unable to get clk %s\n", mi->clk_name);  		ret = -ENOENT;  		goto failed;  	} diff --git a/drivers/video/fbdev/nvidia/nv_i2c.c b/drivers/video/fbdev/nvidia/nv_i2c.c index d7994a173245..0b48965a6420 100644 --- a/drivers/video/fbdev/nvidia/nv_i2c.c +++ b/drivers/video/fbdev/nvidia/nv_i2c.c @@ -86,7 +86,7 @@ static int nvidia_setup_i2c_bus(struct nvidia_i2c_chan *chan, const char *name,  {  	int rc; -	strcpy(chan->adapter.name, name); +	strscpy(chan->adapter.name, name, sizeof(chan->adapter.name));  	chan->adapter.owner = THIS_MODULE;  	chan->adapter.class = i2c_class;  	chan->adapter.algo_data = &chan->algo; diff --git a/drivers/video/fbdev/ocfb.c b/drivers/video/fbdev/ocfb.c index bfa4ed421148..da7e1457e58f 100644 --- a/drivers/video/fbdev/ocfb.c +++ b/drivers/video/fbdev/ocfb.c @@ -387,7 +387,7 @@ static int ocfb_remove(struct platform_device *pdev)  	return 0;  } -static struct of_device_id ocfb_match[] = { +static const struct of_device_id ocfb_match[] = {  	{ .compatible = "opencores,ocfb", },  	{},  }; diff --git a/drivers/video/fbdev/offb.c b/drivers/video/fbdev/offb.c index 4501e848a36f..afdb6aa48add 100644 --- a/drivers/video/fbdev/offb.c +++ b/drivers/video/fbdev/offb.c @@ -412,7 +412,7 @@ static void __init offb_init_fb(const char *name,  	info = framebuffer_alloc(sizeof(u32) * 16, NULL); -	if (info == 0) { +	if (!info) {  		release_mem_region(res_start, res_size);  		return;  	} diff --git a/drivers/video/fbdev/omap/lcd_ams_delta.c b/drivers/video/fbdev/omap/lcd_ams_delta.c index 8e54aae544a0..bbf871f9d862 100644 --- a/drivers/video/fbdev/omap/lcd_ams_delta.c +++ b/drivers/video/fbdev/omap/lcd_ams_delta.c @@ -131,18 +131,14 @@ static int ams_delta_panel_probe(struct platform_device *pdev)  	int ret;  	gpiod_vblen = devm_gpiod_get(&pdev->dev, "vblen", GPIOD_OUT_LOW); -	if (IS_ERR(gpiod_vblen)) { -		ret = PTR_ERR(gpiod_vblen); -		dev_err(&pdev->dev, "VBLEN GPIO request failed (%d)\n", ret); -		return ret; -	} +	if (IS_ERR(gpiod_vblen)) +		return dev_err_probe(&pdev->dev, PTR_ERR(gpiod_vblen), +				     "VBLEN GPIO request failed\n");  	gpiod_ndisp = devm_gpiod_get(&pdev->dev, "ndisp", GPIOD_OUT_LOW); -	if (IS_ERR(gpiod_ndisp)) { -		ret = PTR_ERR(gpiod_ndisp); -		dev_err(&pdev->dev, "NDISP GPIO request failed (%d)\n", ret); -		return ret; -	} +	if (IS_ERR(gpiod_ndisp)) +		return dev_err_probe(&pdev->dev, PTR_ERR(gpiod_ndisp), +				     "NDISP GPIO request failed\n");  #ifdef CONFIG_LCD_CLASS_DEVICE  	lcd_device = lcd_device_register("omapfb", &pdev->dev, NULL, diff --git a/drivers/video/fbdev/omap/omapfb_main.c b/drivers/video/fbdev/omap/omapfb_main.c index b495c09e6102..083388a4ceeb 100644 --- a/drivers/video/fbdev/omap/omapfb_main.c +++ b/drivers/video/fbdev/omap/omapfb_main.c @@ -16,6 +16,7 @@  #include <linux/slab.h>  #include <linux/uaccess.h>  #include <linux/module.h> +#include <linux/sysfs.h>  #include <linux/omap-dma.h> @@ -1303,7 +1304,7 @@ static ssize_t omapfb_show_panel_name(struct device *dev,  {  	struct omapfb_device *fbdev = dev_get_drvdata(dev); -	return snprintf(buf, PAGE_SIZE, "%s\n", fbdev->panel->name); +	return sysfs_emit(buf, "%s\n", fbdev->panel->name);  }  static ssize_t omapfb_show_bklight_level(struct device *dev, @@ -1314,8 +1315,8 @@ static ssize_t omapfb_show_bklight_level(struct device *dev,  	int r;  	if (fbdev->panel->get_bklight_level) { -		r = snprintf(buf, PAGE_SIZE, "%d\n", -			     fbdev->panel->get_bklight_level(fbdev->panel)); +		r = sysfs_emit(buf, "%d\n", +			       fbdev->panel->get_bklight_level(fbdev->panel));  	} else  		r = -ENODEV;  	return r; @@ -1348,8 +1349,8 @@ static ssize_t omapfb_show_bklight_max(struct device *dev,  	int r;  	if (fbdev->panel->get_bklight_level) { -		r = snprintf(buf, PAGE_SIZE, "%d\n", -			     fbdev->panel->get_bklight_max(fbdev->panel)); +		r = sysfs_emit(buf, "%d\n", +			       fbdev->panel->get_bklight_max(fbdev->panel));  	} else  		r = -ENODEV;  	return r; @@ -1379,7 +1380,7 @@ static ssize_t omapfb_show_ctrl_name(struct device *dev,  {  	struct omapfb_device *fbdev = dev_get_drvdata(dev); -	return snprintf(buf, PAGE_SIZE, "%s\n", fbdev->ctrl->name); +	return sysfs_emit(buf, "%s\n", fbdev->ctrl->name);  }  static struct device_attribute dev_attr_ctrl_name = diff --git a/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c b/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c index 2fa436475b40..c8ad3ef42bd3 100644 --- a/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c +++ b/drivers/video/fbdev/omap2/omapfb/displays/connector-dvi.c @@ -246,6 +246,7 @@ static int dvic_probe_of(struct platform_device *pdev)  	adapter_node = of_parse_phandle(node, "ddc-i2c-bus", 0);  	if (adapter_node) {  		adapter = of_get_i2c_adapter_by_node(adapter_node); +		of_node_put(adapter_node);  		if (adapter == NULL) {  			dev_err(&pdev->dev, "failed to parse ddc-i2c-bus\n");  			omap_dss_put_device(ddata->in); diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c index 4b0793abdd84..a2c7c5cb1523 100644 --- a/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c +++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c @@ -409,7 +409,7 @@ static ssize_t dsicm_num_errors_show(struct device *dev,  	if (r)  		return r; -	return snprintf(buf, PAGE_SIZE, "%d\n", errors); +	return sysfs_emit(buf, "%d\n", errors);  }  static ssize_t dsicm_hw_revision_show(struct device *dev, @@ -439,7 +439,7 @@ static ssize_t dsicm_hw_revision_show(struct device *dev,  	if (r)  		return r; -	return snprintf(buf, PAGE_SIZE, "%02x.%02x.%02x\n", id1, id2, id3); +	return sysfs_emit(buf, "%02x.%02x.%02x\n", id1, id2, id3);  }  static ssize_t dsicm_store_ulps(struct device *dev, @@ -487,7 +487,7 @@ static ssize_t dsicm_show_ulps(struct device *dev,  	t = ddata->ulps_enabled;  	mutex_unlock(&ddata->lock); -	return snprintf(buf, PAGE_SIZE, "%u\n", t); +	return sysfs_emit(buf, "%u\n", t);  }  static ssize_t dsicm_store_ulps_timeout(struct device *dev, @@ -532,7 +532,7 @@ static ssize_t dsicm_show_ulps_timeout(struct device *dev,  	t = ddata->ulps_timeout;  	mutex_unlock(&ddata->lock); -	return snprintf(buf, PAGE_SIZE, "%u\n", t); +	return sysfs_emit(buf, "%u\n", t);  }  static DEVICE_ATTR(num_dsi_errors, S_IRUGO, dsicm_num_errors_show, NULL); diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-lgphilips-lb035q02.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-lgphilips-lb035q02.c index aab67721263d..3ce1f9d2e7c4 100644 --- a/drivers/video/fbdev/omap2/omapfb/displays/panel-lgphilips-lb035q02.c +++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-lgphilips-lb035q02.c @@ -244,10 +244,9 @@ static int lb035q02_probe_of(struct spi_device *spi)  	struct gpio_desc *gpio;  	gpio = devm_gpiod_get(&spi->dev, "enable", GPIOD_OUT_LOW); -	if (IS_ERR(gpio)) { -		dev_err(&spi->dev, "failed to parse enable gpio\n"); -		return PTR_ERR(gpio); -	} +	if (IS_ERR(gpio)) +		return dev_err_probe(&spi->dev, PTR_ERR(gpio), +				     "failed to parse enable gpio\n");  	ddata->enable_gpio = gpio; diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-sharp-ls037v7dw01.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-sharp-ls037v7dw01.c index 602324c5c9f9..f1072c319de8 100644 --- a/drivers/video/fbdev/omap2/omapfb/displays/panel-sharp-ls037v7dw01.c +++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-sharp-ls037v7dw01.c @@ -211,10 +211,9 @@ static int sharp_ls_probe_of(struct platform_device *pdev)  	int r;  	ddata->vcc = devm_regulator_get(&pdev->dev, "envdd"); -	if (IS_ERR(ddata->vcc)) { -		dev_err(&pdev->dev, "failed to get regulator\n"); -		return PTR_ERR(ddata->vcc); -	} +	if (IS_ERR(ddata->vcc)) +		return dev_err_probe(&pdev->dev, PTR_ERR(ddata->vcc), +				     "failed to get regulator\n");  	/* lcd INI */  	r = sharp_ls_get_gpio_of(&pdev->dev, 0, 0, "enable", &ddata->ini_gpio); diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c index a909b5385ca5..c0965bee12c5 100644 --- a/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c +++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c @@ -476,7 +476,7 @@ static ssize_t show_cabc_available_modes(struct device *dev,  	int i;  	if (!ddata->has_cabc) -		return snprintf(buf, PAGE_SIZE, "%s\n", cabc_modes[0]); +		return sysfs_emit(buf, "%s\n", cabc_modes[0]);  	for (i = 0, len = 0;  	     len < PAGE_SIZE && i < ARRAY_SIZE(cabc_modes); i++) diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c index 58bbba7c037f..c0e4e0315b6b 100644 --- a/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c +++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c @@ -169,7 +169,7 @@ static ssize_t tpo_td043_vmirror_show(struct device *dev,  {  	struct panel_drv_data *ddata = dev_get_drvdata(dev); -	return snprintf(buf, PAGE_SIZE, "%d\n", ddata->vmirror); +	return sysfs_emit(buf, "%d\n", ddata->vmirror);  }  static ssize_t tpo_td043_vmirror_store(struct device *dev, @@ -199,7 +199,7 @@ static ssize_t tpo_td043_mode_show(struct device *dev,  {  	struct panel_drv_data *ddata = dev_get_drvdata(dev); -	return snprintf(buf, PAGE_SIZE, "%d\n", ddata->mode); +	return sysfs_emit(buf, "%d\n", ddata->mode);  }  static ssize_t tpo_td043_mode_store(struct device *dev, @@ -517,8 +517,7 @@ static int tpo_td043_probe(struct spi_device *spi)  	ddata->vcc_reg = devm_regulator_get(&spi->dev, "vcc");  	if (IS_ERR(ddata->vcc_reg)) { -		dev_err(&spi->dev, "failed to get LCD VCC regulator\n"); -		r = PTR_ERR(ddata->vcc_reg); +		r = dev_err_probe(&spi->dev, r, "failed to get LCD VCC regulator\n");  		goto err_regulator;  	} diff --git a/drivers/video/fbdev/omap2/omapfb/dss/display-sysfs.c b/drivers/video/fbdev/omap2/omapfb/dss/display-sysfs.c index 8f355d1caf86..bc5a44c2a144 100644 --- a/drivers/video/fbdev/omap2/omapfb/dss/display-sysfs.c +++ b/drivers/video/fbdev/omap2/omapfb/dss/display-sysfs.c @@ -265,6 +265,7 @@ static struct attribute *display_sysfs_attrs[] = {  	&display_attr_wss.attr,  	NULL  }; +ATTRIBUTE_GROUPS(display_sysfs);  static ssize_t display_attr_show(struct kobject *kobj, struct attribute *attr,  		char *buf) @@ -303,7 +304,7 @@ static const struct sysfs_ops display_sysfs_ops = {  static struct kobj_type display_ktype = {  	.sysfs_ops = &display_sysfs_ops, -	.default_attrs = display_sysfs_attrs, +	.default_groups = display_sysfs_groups,  };  int display_init_sysfs(struct platform_device *pdev) diff --git a/drivers/video/fbdev/omap2/omapfb/dss/manager-sysfs.c b/drivers/video/fbdev/omap2/omapfb/dss/manager-sysfs.c index 3ffb1fe4a38a..ba21c4a2633d 100644 --- a/drivers/video/fbdev/omap2/omapfb/dss/manager-sysfs.c +++ b/drivers/video/fbdev/omap2/omapfb/dss/manager-sysfs.c @@ -457,6 +457,7 @@ static struct attribute *manager_sysfs_attrs[] = {  	&manager_attr_cpr_coef.attr,  	NULL  }; +ATTRIBUTE_GROUPS(manager_sysfs);  static ssize_t manager_attr_show(struct kobject *kobj, struct attribute *attr,  		char *buf) @@ -495,7 +496,7 @@ static const struct sysfs_ops manager_sysfs_ops = {  static struct kobj_type manager_ktype = {  	.sysfs_ops = &manager_sysfs_ops, -	.default_attrs = manager_sysfs_attrs, +	.default_groups = manager_sysfs_groups,  };  int dss_manager_kobj_init(struct omap_overlay_manager *mgr, diff --git a/drivers/video/fbdev/omap2/omapfb/dss/overlay-sysfs.c b/drivers/video/fbdev/omap2/omapfb/dss/overlay-sysfs.c index 421dcb7564ad..601c0beb6de9 100644 --- a/drivers/video/fbdev/omap2/omapfb/dss/overlay-sysfs.c +++ b/drivers/video/fbdev/omap2/omapfb/dss/overlay-sysfs.c @@ -390,6 +390,7 @@ static struct attribute *overlay_sysfs_attrs[] = {  	&overlay_attr_zorder.attr,  	NULL  }; +ATTRIBUTE_GROUPS(overlay_sysfs);  static ssize_t overlay_attr_show(struct kobject *kobj, struct attribute *attr,  		char *buf) @@ -428,7 +429,7 @@ static const struct sysfs_ops overlay_sysfs_ops = {  static struct kobj_type overlay_ktype = {  	.sysfs_ops = &overlay_sysfs_ops, -	.default_attrs = overlay_sysfs_attrs, +	.default_groups = overlay_sysfs_groups,  };  int dss_overlay_kobj_init(struct omap_overlay *ovl, diff --git a/drivers/video/fbdev/omap2/omapfb/omapfb-main.c b/drivers/video/fbdev/omap2/omapfb/omapfb-main.c index a3decc7fadde..afa688e754b9 100644 --- a/drivers/video/fbdev/omap2/omapfb/omapfb-main.c +++ b/drivers/video/fbdev/omap2/omapfb/omapfb-main.c @@ -1854,7 +1854,6 @@ static void omapfb_free_resources(struct omapfb2_device *fbdev)  	}  	if (fbdev->auto_update_wq != NULL) { -		flush_workqueue(fbdev->auto_update_wq);  		destroy_workqueue(fbdev->auto_update_wq);  		fbdev->auto_update_wq = NULL;  	} diff --git a/drivers/video/fbdev/pxa168fb.c b/drivers/video/fbdev/pxa168fb.c index 47e6a1d0d229..e943300d23e8 100644 --- a/drivers/video/fbdev/pxa168fb.c +++ b/drivers/video/fbdev/pxa168fb.c @@ -593,8 +593,8 @@ static void pxa168fb_init_mode(struct fb_info *info,  static int pxa168fb_probe(struct platform_device *pdev)  {  	struct pxa168fb_mach_info *mi; -	struct fb_info *info = 0; -	struct pxa168fb_info *fbi = 0; +	struct fb_info *info = NULL; +	struct pxa168fb_info *fbi = NULL;  	struct resource *res;  	struct clk *clk;  	int irq, ret; @@ -606,10 +606,9 @@ static int pxa168fb_probe(struct platform_device *pdev)  	}  	clk = devm_clk_get(&pdev->dev, "LCDCLK"); -	if (IS_ERR(clk)) { -		dev_err(&pdev->dev, "unable to get LCDCLK"); -		return PTR_ERR(clk); -	} +	if (IS_ERR(clk)) +		return dev_err_probe(&pdev->dev, PTR_ERR(clk), +				     "unable to get LCDCLK");  	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);  	if (res == NULL) { @@ -618,10 +617,8 @@ static int pxa168fb_probe(struct platform_device *pdev)  	}  	irq = platform_get_irq(pdev, 0); -	if (irq < 0) { -		dev_err(&pdev->dev, "no IRQ defined\n"); +	if (irq < 0)  		return -ENOENT; -	}  	info = framebuffer_alloc(sizeof(struct pxa168fb_info), &pdev->dev);  	if (info == NULL) { diff --git a/drivers/video/fbdev/pxa3xx-gcu.c b/drivers/video/fbdev/pxa3xx-gcu.c index 4279e13a3b58..350b3139c863 100644 --- a/drivers/video/fbdev/pxa3xx-gcu.c +++ b/drivers/video/fbdev/pxa3xx-gcu.c @@ -606,17 +606,13 @@ static int pxa3xx_gcu_probe(struct platform_device *pdev)  	/* enable the clock */  	priv->clk = devm_clk_get(dev, NULL); -	if (IS_ERR(priv->clk)) { -		dev_err(dev, "failed to get clock\n"); -		return PTR_ERR(priv->clk); -	} +	if (IS_ERR(priv->clk)) +		return dev_err_probe(dev, PTR_ERR(priv->clk), "failed to get clock\n");  	/* request the IRQ */  	irq = platform_get_irq(pdev, 0); -	if (irq < 0) { -		dev_err(dev, "no IRQ defined: %d\n", irq); +	if (irq < 0)  		return irq; -	}  	ret = devm_request_irq(dev, irq, pxa3xx_gcu_handle_irq,  			       0, DRV_NAME, priv); diff --git a/drivers/video/fbdev/s3c-fb.c b/drivers/video/fbdev/s3c-fb.c index 3b134e1bbc38..fe3c8b6935cf 100644 --- a/drivers/video/fbdev/s3c-fb.c +++ b/drivers/video/fbdev/s3c-fb.c @@ -1360,7 +1360,6 @@ static int s3c_fb_probe(struct platform_device *pdev)  	struct device *dev = &pdev->dev;  	struct s3c_fb_platdata *pd;  	struct s3c_fb *sfb; -	struct resource *res;  	int win;  	int ret = 0;  	u32 reg; @@ -1392,18 +1391,17 @@ static int s3c_fb_probe(struct platform_device *pdev)  	spin_lock_init(&sfb->slock);  	sfb->bus_clk = devm_clk_get(dev, "lcd"); -	if (IS_ERR(sfb->bus_clk)) { -		dev_err(dev, "failed to get bus clock\n"); -		return PTR_ERR(sfb->bus_clk); -	} +	if (IS_ERR(sfb->bus_clk)) +		return dev_err_probe(dev, PTR_ERR(sfb->bus_clk), +				     "failed to get bus clock\n");  	clk_prepare_enable(sfb->bus_clk);  	if (!sfb->variant.has_clksel) {  		sfb->lcd_clk = devm_clk_get(dev, "sclk_fimd");  		if (IS_ERR(sfb->lcd_clk)) { -			dev_err(dev, "failed to get lcd clock\n"); -			ret = PTR_ERR(sfb->lcd_clk); +			ret = dev_err_probe(dev, PTR_ERR(sfb->lcd_clk), +					    "failed to get lcd clock\n");  			goto err_bus_clk;  		} @@ -1418,13 +1416,12 @@ static int s3c_fb_probe(struct platform_device *pdev)  		goto err_lcd_clk;  	} -	res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); -	if (!res) { -		dev_err(dev, "failed to acquire irq resource\n"); +	sfb->irq_no = platform_get_irq(pdev, 0); +	if (sfb->irq_no < 0) {  		ret = -ENOENT;  		goto err_lcd_clk;  	} -	sfb->irq_no = res->start; +  	ret = devm_request_irq(dev, sfb->irq_no, s3c_fb_irq,  			  0, "s3c_fb", sfb);  	if (ret) { @@ -1810,4 +1807,3 @@ module_platform_driver(s3c_fb_driver);  MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");  MODULE_DESCRIPTION("Samsung S3C SoC Framebuffer driver");  MODULE_LICENSE("GPL"); -MODULE_ALIAS("platform:s3c-fb"); diff --git a/drivers/video/fbdev/savage/savagefb.h b/drivers/video/fbdev/savage/savagefb.h index 3314d5b6b43b..b6b8cc208293 100644 --- a/drivers/video/fbdev/savage/savagefb.h +++ b/drivers/video/fbdev/savage/savagefb.h @@ -195,7 +195,6 @@ struct savagefb_par {  	struct savage_reg initial;  	struct vgastate vgastate;  	struct mutex open_lock; -	unsigned char   *edid;  	u32 pseudo_palette[16];  	u32 open_count;  	int paletteEnabled; diff --git a/drivers/video/fbdev/savage/savagefb_driver.c b/drivers/video/fbdev/savage/savagefb_driver.c index 0ac750cc5ea1..8114c921ceb8 100644 --- a/drivers/video/fbdev/savage/savagefb_driver.c +++ b/drivers/video/fbdev/savage/savagefb_driver.c @@ -2170,6 +2170,7 @@ static int savagefb_probe(struct pci_dev *dev, const struct pci_device_id *id)  	struct fb_info *info;  	struct savagefb_par *par;  	u_int h_sync, v_sync; +	unsigned char __maybe_unused *edid;  	int err, lpitch;  	int video_len; @@ -2212,9 +2213,9 @@ static int savagefb_probe(struct pci_dev *dev, const struct pci_device_id *id)  	INIT_LIST_HEAD(&info->modelist);  #if defined(CONFIG_FB_SAVAGE_I2C)  	savagefb_create_i2c_busses(info); -	savagefb_probe_i2c_connector(info, &par->edid); -	fb_edid_to_monspecs(par->edid, &info->monspecs); -	kfree(par->edid); +	savagefb_probe_i2c_connector(info, &edid); +	fb_edid_to_monspecs(edid, &info->monspecs); +	kfree(edid);  	fb_videomode_to_modelist(info->monspecs.modedb,  				 info->monspecs.modedb_len,  				 &info->modelist); diff --git a/drivers/video/fbdev/sis/sis_main.c b/drivers/video/fbdev/sis/sis_main.c index 266a5582f94d..742f62986b80 100644 --- a/drivers/video/fbdev/sis/sis_main.c +++ b/drivers/video/fbdev/sis/sis_main.c @@ -213,7 +213,7 @@ static void sisfb_search_mode(char *name, bool quiet)  		/* This does some fuzzy mode naming detection */  		if(sscanf(strbuf1, "%u %u %u %u", &xres, &yres, &depth, &rate) == 4) {  			if((rate <= 32) || (depth > 32)) { -				j = rate; rate = depth; depth = j; +				swap(rate, depth);  			}  			sprintf(strbuf, "%ux%ux%u", xres, yres, depth);  			nameptr = strbuf; diff --git a/drivers/video/fbdev/sm712fb.c b/drivers/video/fbdev/sm712fb.c index 0dbc6bf8268a..092a1caa1208 100644 --- a/drivers/video/fbdev/sm712fb.c +++ b/drivers/video/fbdev/sm712fb.c @@ -1047,7 +1047,7 @@ static ssize_t smtcfb_read(struct fb_info *info, char __user *buf,  	if (count + p > total_size)  		count = total_size - p; -	buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL); +	buffer = kmalloc(PAGE_SIZE, GFP_KERNEL);  	if (!buffer)  		return -ENOMEM; @@ -1059,25 +1059,14 @@ static ssize_t smtcfb_read(struct fb_info *info, char __user *buf,  	while (count) {  		c = (count > PAGE_SIZE) ? PAGE_SIZE : count;  		dst = buffer; -		for (i = c >> 2; i--;) { -			*dst = fb_readl(src++); -			*dst = big_swap(*dst); +		for (i = (c + 3) >> 2; i--;) { +			u32 val; + +			val = fb_readl(src); +			*dst = big_swap(val); +			src++;  			dst++;  		} -		if (c & 3) { -			u8 *dst8 = (u8 *)dst; -			u8 __iomem *src8 = (u8 __iomem *)src; - -			for (i = c & 3; i--;) { -				if (i & 1) { -					*dst8++ = fb_readb(++src8); -				} else { -					*dst8++ = fb_readb(--src8); -					src8 += 2; -				} -			} -			src = (u32 __iomem *)src8; -		}  		if (copy_to_user(buf, buffer, c)) {  			err = -EFAULT; @@ -1130,7 +1119,7 @@ static ssize_t smtcfb_write(struct fb_info *info, const char __user *buf,  		count = total_size - p;  	} -	buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL); +	buffer = kmalloc(PAGE_SIZE, GFP_KERNEL);  	if (!buffer)  		return -ENOMEM; @@ -1148,24 +1137,11 @@ static ssize_t smtcfb_write(struct fb_info *info, const char __user *buf,  			break;  		} -		for (i = c >> 2; i--;) { -			fb_writel(big_swap(*src), dst++); +		for (i = (c + 3) >> 2; i--;) { +			fb_writel(big_swap(*src), dst); +			dst++;  			src++;  		} -		if (c & 3) { -			u8 *src8 = (u8 *)src; -			u8 __iomem *dst8 = (u8 __iomem *)dst; - -			for (i = c & 3; i--;) { -				if (i & 1) { -					fb_writeb(*src8++, ++dst8); -				} else { -					fb_writeb(*src8++, --dst8); -					dst8 += 2; -				} -			} -			dst = (u32 __iomem *)dst8; -		}  		*ppos += c;  		buf += c; diff --git a/drivers/video/fbdev/smscufx.c b/drivers/video/fbdev/smscufx.c index bfac3ee4a642..28768c272b73 100644 --- a/drivers/video/fbdev/smscufx.c +++ b/drivers/video/fbdev/smscufx.c @@ -1656,6 +1656,7 @@ static int ufx_usb_probe(struct usb_interface *interface,  	info->par = dev;  	info->pseudo_palette = dev->pseudo_palette;  	info->fbops = &ufx_ops; +	INIT_LIST_HEAD(&info->modelist);  	retval = fb_alloc_cmap(&info->cmap, 256, 0);  	if (retval < 0) { @@ -1666,8 +1667,6 @@ static int ufx_usb_probe(struct usb_interface *interface,  	INIT_DELAYED_WORK(&dev->free_framebuffer_work,  			  ufx_free_framebuffer_work); -	INIT_LIST_HEAD(&info->modelist); -  	retval = ufx_reg_read(dev, 0x3000, &id_rev);  	check_warn_goto_error(retval, "error %d reading 0x3000 register from device", retval);  	dev_dbg(dev->gdev, "ID_REV register value 0x%08x", id_rev); diff --git a/drivers/video/fbdev/ssd1307fb.c b/drivers/video/fbdev/ssd1307fb.c index 1e2f71c2f8a8..c6d5df31111d 100644 --- a/drivers/video/fbdev/ssd1307fb.c +++ b/drivers/video/fbdev/ssd1307fb.c @@ -658,9 +658,8 @@ static int ssd1307fb_probe(struct i2c_client *client)  	par->reset = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);  	if (IS_ERR(par->reset)) { -		dev_err(dev, "failed to get reset gpio: %ld\n", -			PTR_ERR(par->reset)); -		ret = PTR_ERR(par->reset); +		ret = dev_err_probe(dev, PTR_ERR(par->reset), +				    "failed to get reset gpio\n");  		goto fb_alloc_error;  	} @@ -670,7 +669,7 @@ static int ssd1307fb_probe(struct i2c_client *client)  		if (ret == -ENODEV) {  			par->vbat_reg = NULL;  		} else { -			dev_err(dev, "failed to get VBAT regulator: %d\n", ret); +			dev_err_probe(dev, ret, "failed to get VBAT regulator\n");  			goto fb_alloc_error;  		}  	} diff --git a/drivers/video/fbdev/udlfb.c b/drivers/video/fbdev/udlfb.c index b9cdd02c1000..90f48b71fd8f 100644 --- a/drivers/video/fbdev/udlfb.c +++ b/drivers/video/fbdev/udlfb.c @@ -1426,7 +1426,7 @@ static ssize_t metrics_bytes_rendered_show(struct device *fbdev,  				   struct device_attribute *a, char *buf) {  	struct fb_info *fb_info = dev_get_drvdata(fbdev);  	struct dlfb_data *dlfb = fb_info->par; -	return snprintf(buf, PAGE_SIZE, "%u\n", +	return sysfs_emit(buf, "%u\n",  			atomic_read(&dlfb->bytes_rendered));  } @@ -1434,7 +1434,7 @@ static ssize_t metrics_bytes_identical_show(struct device *fbdev,  				   struct device_attribute *a, char *buf) {  	struct fb_info *fb_info = dev_get_drvdata(fbdev);  	struct dlfb_data *dlfb = fb_info->par; -	return snprintf(buf, PAGE_SIZE, "%u\n", +	return sysfs_emit(buf, "%u\n",  			atomic_read(&dlfb->bytes_identical));  } @@ -1442,7 +1442,7 @@ static ssize_t metrics_bytes_sent_show(struct device *fbdev,  				   struct device_attribute *a, char *buf) {  	struct fb_info *fb_info = dev_get_drvdata(fbdev);  	struct dlfb_data *dlfb = fb_info->par; -	return snprintf(buf, PAGE_SIZE, "%u\n", +	return sysfs_emit(buf, "%u\n",  			atomic_read(&dlfb->bytes_sent));  } @@ -1450,7 +1450,7 @@ static ssize_t metrics_cpu_kcycles_used_show(struct device *fbdev,  				   struct device_attribute *a, char *buf) {  	struct fb_info *fb_info = dev_get_drvdata(fbdev);  	struct dlfb_data *dlfb = fb_info->par; -	return snprintf(buf, PAGE_SIZE, "%u\n", +	return sysfs_emit(buf, "%u\n",  			atomic_read(&dlfb->cpu_kcycles_used));  } diff --git a/drivers/video/fbdev/via/lcd.c b/drivers/video/fbdev/via/lcd.c index 088b962076b5..beec5c8d4d08 100644 --- a/drivers/video/fbdev/via/lcd.c +++ b/drivers/video/fbdev/via/lcd.c @@ -543,7 +543,7 @@ void viafb_lcd_set_mode(const struct fb_var_screeninfo *var, u16 cxres,  	/* Get panel table Pointer */  	panel_crt_table = viafb_get_best_mode(panel_hres, panel_vres, 60);  	viafb_fill_var_timing_info(&panel_var, panel_crt_table); -	DEBUG_MSG(KERN_INFO "bellow viafb_lcd_set_mode!!\n"); +	DEBUG_MSG(KERN_INFO "below viafb_lcd_set_mode!!\n");  	if (VT1636_LVDS == plvds_chip_info->lvds_chip_name)  		viafb_init_lvds_vt1636(plvds_setting_info, plvds_chip_info);  	clock = PICOS2KHZ(panel_crt_table->pixclock) * 1000; diff --git a/drivers/video/fbdev/via/viafbdev.c b/drivers/video/fbdev/via/viafbdev.c index 22deb340a048..2d67c92c5774 100644 --- a/drivers/video/fbdev/via/viafbdev.c +++ b/drivers/video/fbdev/via/viafbdev.c @@ -1939,8 +1939,12 @@ static int __init viafb_setup(void)  		if (!strncmp(this_opt, "viafb_mode1=", 12)) {  			viafb_mode1 = kstrdup(this_opt + 12, GFP_KERNEL); +			if (!viafb_mode1) +				return -ENOMEM;  		} else if (!strncmp(this_opt, "viafb_mode=", 11)) {  			viafb_mode = kstrdup(this_opt + 11, GFP_KERNEL); +			if (!viafb_mode) +				return -ENOMEM;  		} else if (!strncmp(this_opt, "viafb_bpp1=", 11)) {  			if (kstrtouint(this_opt + 11, 0, &viafb_bpp1) < 0)  				return -EINVAL; @@ -1969,6 +1973,8 @@ static int __init viafb_setup(void)  				return -EINVAL;  		} else if (!strncmp(this_opt, "viafb_active_dev=", 17)) {  			viafb_active_dev = kstrdup(this_opt + 17, GFP_KERNEL); +			if (!viafb_active_dev) +				return -ENOMEM;  		} else if (!strncmp(this_opt,  			"viafb_display_hardware_layout=", 30)) {  			if (kstrtoint(this_opt + 30, 0, @@ -1995,8 +2001,12 @@ static int __init viafb_setup(void)  				return -EINVAL;  		} else if (!strncmp(this_opt, "viafb_lcd_port=", 15)) {  			viafb_lcd_port = kstrdup(this_opt + 15, GFP_KERNEL); +			if (!viafb_lcd_port) +				return -ENOMEM;  		} else if (!strncmp(this_opt, "viafb_dvi_port=", 15)) {  			viafb_dvi_port = kstrdup(this_opt + 15, GFP_KERNEL); +			if (!viafb_dvi_port) +				return -ENOMEM;  		}  	}  	return 0; diff --git a/drivers/video/fbdev/w100fb.c b/drivers/video/fbdev/w100fb.c index d96ab28f8ce4..4e641a780726 100644 --- a/drivers/video/fbdev/w100fb.c +++ b/drivers/video/fbdev/w100fb.c @@ -770,12 +770,18 @@ out:  		fb_dealloc_cmap(&info->cmap);  		kfree(info->pseudo_palette);  	} -	if (remapped_fbuf != NULL) +	if (remapped_fbuf != NULL) {  		iounmap(remapped_fbuf); -	if (remapped_regs != NULL) +		remapped_fbuf = NULL; +	} +	if (remapped_regs != NULL) {  		iounmap(remapped_regs); -	if (remapped_base != NULL) +		remapped_regs = NULL; +	} +	if (remapped_base != NULL) {  		iounmap(remapped_base); +		remapped_base = NULL; +	}  	if (info)  		framebuffer_release(info);  	return err; @@ -795,8 +801,11 @@ static int w100fb_remove(struct platform_device *pdev)  	fb_dealloc_cmap(&info->cmap);  	iounmap(remapped_base); +	remapped_base = NULL;  	iounmap(remapped_regs); +	remapped_regs = NULL;  	iounmap(remapped_fbuf); +	remapped_fbuf = NULL;  	framebuffer_release(info); | 
