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

Configure Feed

Select the types of activity you want to include in your feed.

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

Pull fbdev fixes from Helge Deller:

- fix fbcon to prevent fonts bigger than 32x32 pixels to avoid
overflows reported by syzbot

- switch omapfb to use kstrtobool()

- switch some fbdev drivers to use the backlight helpers

* tag 'fbdev-for-6.2-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/linux-fbdev:
fbcon: Check font dimension limits
fbdev: omapfb: Use kstrtobool() instead of strtobool()
fbdev: fbmon: fix function name in kernel-doc
fbdev: atmel_lcdfb: Rework backlight status updates
fbdev: riva: Use backlight helper
fbdev: omapfb: panel-dsi-cm: Use backlight helper
fbdev: nvidia: Use backlight helper
fbdev: mx3fb: Use backlight helper
fbdev: radeon: Use backlight helper
fbdev: atyfb: Use backlight helper
fbdev: aty128fb: Use backlight helper

+27 -75
+1 -21
drivers/video/fbdev/atmel_lcdfb.c
··· 49 49 struct clk *lcdc_clk; 50 50 51 51 struct backlight_device *backlight; 52 - u8 bl_power; 53 52 u8 saved_lcdcon; 54 53 55 54 u32 pseudo_palette[16]; ··· 108 109 static int atmel_bl_update_status(struct backlight_device *bl) 109 110 { 110 111 struct atmel_lcdfb_info *sinfo = bl_get_data(bl); 111 - int power = sinfo->bl_power; 112 - int brightness = bl->props.brightness; 113 - 114 - /* REVISIT there may be a meaningful difference between 115 - * fb_blank and power ... there seem to be some cases 116 - * this doesn't handle correctly. 117 - */ 118 - if (bl->props.fb_blank != sinfo->bl_power) 119 - power = bl->props.fb_blank; 120 - else if (bl->props.power != sinfo->bl_power) 121 - power = bl->props.power; 122 - 123 - if (brightness < 0 && power == FB_BLANK_UNBLANK) 124 - brightness = lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_VAL); 125 - else if (power != FB_BLANK_UNBLANK) 126 - brightness = 0; 112 + int brightness = backlight_get_brightness(bl); 127 113 128 114 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_VAL, brightness); 129 115 if (contrast_ctr & ATMEL_LCDC_POL_POSITIVE) ··· 116 132 brightness ? contrast_ctr : 0); 117 133 else 118 134 lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, contrast_ctr); 119 - 120 - bl->props.fb_blank = bl->props.power = sinfo->bl_power = power; 121 135 122 136 return 0; 123 137 } ··· 136 154 { 137 155 struct backlight_properties props; 138 156 struct backlight_device *bl; 139 - 140 - sinfo->bl_power = FB_BLANK_UNBLANK; 141 157 142 158 if (sinfo->backlight) 143 159 return;
+2 -4
drivers/video/fbdev/aty/aty128fb.c
··· 1766 1766 unsigned int reg = aty_ld_le32(LVDS_GEN_CNTL); 1767 1767 int level; 1768 1768 1769 - if (bd->props.power != FB_BLANK_UNBLANK || 1770 - bd->props.fb_blank != FB_BLANK_UNBLANK || 1771 - !par->lcd_on) 1769 + if (!par->lcd_on) 1772 1770 level = 0; 1773 1771 else 1774 - level = bd->props.brightness; 1772 + level = backlight_get_brightness(bd); 1775 1773 1776 1774 reg |= LVDS_BL_MOD_EN | LVDS_BLON; 1777 1775 if (level > 0) {
+1 -7
drivers/video/fbdev/aty/atyfb_base.c
··· 2219 2219 { 2220 2220 struct atyfb_par *par = bl_get_data(bd); 2221 2221 unsigned int reg = aty_ld_lcd(LCD_MISC_CNTL, par); 2222 - int level; 2223 - 2224 - if (bd->props.power != FB_BLANK_UNBLANK || 2225 - bd->props.fb_blank != FB_BLANK_UNBLANK) 2226 - level = 0; 2227 - else 2228 - level = bd->props.brightness; 2222 + int level = backlight_get_brightness(bd); 2229 2223 2230 2224 reg |= (BLMOD_EN | BIASMOD_EN); 2231 2225 if (level > 0) {
+1 -5
drivers/video/fbdev/aty/radeon_backlight.c
··· 57 57 * backlight. This provides some greater power saving and the display 58 58 * is useless without backlight anyway. 59 59 */ 60 - if (bd->props.power != FB_BLANK_UNBLANK || 61 - bd->props.fb_blank != FB_BLANK_UNBLANK) 62 - level = 0; 63 - else 64 - level = bd->props.brightness; 60 + level = backlight_get_brightness(bd); 65 61 66 62 del_timer_sync(&rinfo->lvds_timer); 67 63 radeon_engine_idle();
+5 -2
drivers/video/fbdev/core/fbcon.c
··· 2495 2495 h > FBCON_SWAP(info->var.rotate, info->var.yres, info->var.xres)) 2496 2496 return -EINVAL; 2497 2497 2498 + if (font->width > 32 || font->height > 32) 2499 + return -EINVAL; 2500 + 2498 2501 /* Make sure drawing engine can handle the font */ 2499 - if (!(info->pixmap.blit_x & (1 << (font->width - 1))) || 2500 - !(info->pixmap.blit_y & (1 << (font->height - 1)))) 2502 + if (!(info->pixmap.blit_x & BIT(font->width - 1)) || 2503 + !(info->pixmap.blit_y & BIT(font->height - 1))) 2501 2504 return -EINVAL; 2502 2505 2503 2506 /* Make sure driver can handle the font length */
+1 -1
drivers/video/fbdev/core/fbmon.c
··· 1050 1050 } 1051 1051 1052 1052 /** 1053 - * fb_get_hblank_by_freq - get horizontal blank time given hfreq 1053 + * fb_get_hblank_by_hfreq - get horizontal blank time given hfreq 1054 1054 * @hfreq: horizontal freq 1055 1055 * @xres: horizontal resolution in pixels 1056 1056 *
+1 -6
drivers/video/fbdev/mx3fb.c
··· 283 283 static int mx3fb_bl_update_status(struct backlight_device *bl) 284 284 { 285 285 struct mx3fb_data *fbd = bl_get_data(bl); 286 - int brightness = bl->props.brightness; 287 - 288 - if (bl->props.power != FB_BLANK_UNBLANK) 289 - brightness = 0; 290 - if (bl->props.fb_blank != FB_BLANK_UNBLANK) 291 - brightness = 0; 286 + int brightness = backlight_get_brightness(bl); 292 287 293 288 fbd->backlight_level = (fbd->backlight_level & ~0xFF) | brightness; 294 289
+1 -7
drivers/video/fbdev/nvidia/nv_backlight.c
··· 49 49 { 50 50 struct nvidia_par *par = bl_get_data(bd); 51 51 u32 tmp_pcrt, tmp_pmc, fpcontrol; 52 - int level; 52 + int level = backlight_get_brightness(bd); 53 53 54 54 if (!par->FlatPanel) 55 55 return 0; 56 - 57 - if (bd->props.power != FB_BLANK_UNBLANK || 58 - bd->props.fb_blank != FB_BLANK_UNBLANK) 59 - level = 0; 60 - else 61 - level = bd->props.brightness; 62 56 63 57 tmp_pmc = NV_RD32(par->PMC, 0x10F0) & 0x0000FFFF; 64 58 tmp_pcrt = NV_RD32(par->PCRTC0, 0x081C) & 0xFFFFFFFC;
+1 -7
drivers/video/fbdev/omap2/omapfb/displays/panel-dsi-cm.c
··· 331 331 struct panel_drv_data *ddata = dev_get_drvdata(&dev->dev); 332 332 struct omap_dss_device *in = ddata->in; 333 333 int r; 334 - int level; 335 - 336 - if (dev->props.fb_blank == FB_BLANK_UNBLANK && 337 - dev->props.power == FB_BLANK_UNBLANK) 338 - level = dev->props.brightness; 339 - else 340 - level = 0; 334 + int level = backlight_get_brightness(dev); 341 335 342 336 dev_dbg(&ddata->pdev->dev, "update brightness to %d\n", level); 343 337
+4 -3
drivers/video/fbdev/omap2/omapfb/dss/display-sysfs.c
··· 10 10 #define DSS_SUBSYS_NAME "DISPLAY" 11 11 12 12 #include <linux/kernel.h> 13 + #include <linux/kstrtox.h> 13 14 #include <linux/module.h> 14 15 #include <linux/platform_device.h> 15 16 #include <linux/sysfs.h> ··· 37 36 int r; 38 37 bool enable; 39 38 40 - r = strtobool(buf, &enable); 39 + r = kstrtobool(buf, &enable); 41 40 if (r) 42 41 return r; 43 42 ··· 74 73 if (!dssdev->driver->enable_te || !dssdev->driver->get_te) 75 74 return -ENOENT; 76 75 77 - r = strtobool(buf, &te); 76 + r = kstrtobool(buf, &te); 78 77 if (r) 79 78 return r; 80 79 ··· 184 183 if (!dssdev->driver->set_mirror || !dssdev->driver->get_mirror) 185 184 return -ENOENT; 186 185 187 - r = strtobool(buf, &mirror); 186 + r = kstrtobool(buf, &mirror); 188 187 if (r) 189 188 return r; 190 189
+4 -3
drivers/video/fbdev/omap2/omapfb/dss/manager-sysfs.c
··· 10 10 #define DSS_SUBSYS_NAME "MANAGER" 11 11 12 12 #include <linux/kernel.h> 13 + #include <linux/kstrtox.h> 13 14 #include <linux/slab.h> 14 15 #include <linux/module.h> 15 16 #include <linux/platform_device.h> ··· 247 246 bool enable; 248 247 int r; 249 248 250 - r = strtobool(buf, &enable); 249 + r = kstrtobool(buf, &enable); 251 250 if (r) 252 251 return r; 253 252 ··· 291 290 if(!dss_has_feature(FEAT_ALPHA_FIXED_ZORDER)) 292 291 return -ENODEV; 293 292 294 - r = strtobool(buf, &enable); 293 + r = kstrtobool(buf, &enable); 295 294 if (r) 296 295 return r; 297 296 ··· 330 329 if (!dss_has_feature(FEAT_CPR)) 331 330 return -ENODEV; 332 331 333 - r = strtobool(buf, &enable); 332 + r = kstrtobool(buf, &enable); 334 333 if (r) 335 334 return r; 336 335
+2 -1
drivers/video/fbdev/omap2/omapfb/dss/overlay-sysfs.c
··· 13 13 #include <linux/err.h> 14 14 #include <linux/sysfs.h> 15 15 #include <linux/kobject.h> 16 + #include <linux/kstrtox.h> 16 17 #include <linux/platform_device.h> 17 18 18 19 #include <video/omapfb_dss.h> ··· 211 210 int r; 212 211 bool enable; 213 212 214 - r = strtobool(buf, &enable); 213 + r = kstrtobool(buf, &enable); 215 214 if (r) 216 215 return r; 217 216
+2 -1
drivers/video/fbdev/omap2/omapfb/omapfb-sysfs.c
··· 15 15 #include <linux/uaccess.h> 16 16 #include <linux/platform_device.h> 17 17 #include <linux/kernel.h> 18 + #include <linux/kstrtox.h> 18 19 #include <linux/mm.h> 19 20 #include <linux/omapfb.h> 20 21 ··· 97 96 int r; 98 97 struct fb_var_screeninfo new_var; 99 98 100 - r = strtobool(buf, &mirror); 99 + r = kstrtobool(buf, &mirror); 101 100 if (r) 102 101 return r; 103 102
+1 -7
drivers/video/fbdev/riva/fbdev.c
··· 293 293 { 294 294 struct riva_par *par = bl_get_data(bd); 295 295 U032 tmp_pcrt, tmp_pmc; 296 - int level; 297 - 298 - if (bd->props.power != FB_BLANK_UNBLANK || 299 - bd->props.fb_blank != FB_BLANK_UNBLANK) 300 - level = 0; 301 - else 302 - level = bd->props.brightness; 296 + int level = backlight_get_brightness(bd); 303 297 304 298 tmp_pmc = NV_RD32(par->riva.PMC, 0x10F0) & 0x0000FFFF; 305 299 tmp_pcrt = NV_RD32(par->riva.PCRTC0, 0x081C) & 0xFFFFFFFC;