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 branch 'fbdev-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/fbdev-2.6

* 'fbdev-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/fbdev-2.6:
fbdev: sh_mobile_lcdc: increase maximum framebuffer size to support 1080p
video: imxfb: Fix the maximum value for yres
fb: fix overlapping test off-by-one.
fbdev: sh-mobile: retrieve and propagate display sizes from EDID
fbdev: sh-mobile: restore display size configuration

+28 -29
+1 -1
drivers/video/fbmem.c
··· 1458 1458 if (gen->base == hw->base) 1459 1459 return true; 1460 1460 /* is the generic aperture base inside the hw base->hw base+size */ 1461 - if (gen->base > hw->base && gen->base <= hw->base + hw->size) 1461 + if (gen->base > hw->base && gen->base < hw->base + hw->size) 1462 1462 return true; 1463 1463 return false; 1464 1464 }
+3 -6
drivers/video/imxfb.c
··· 53 53 #define LCDC_SIZE 0x04 54 54 #define SIZE_XMAX(x) ((((x) >> 4) & 0x3f) << 20) 55 55 56 - #ifdef CONFIG_ARCH_MX1 57 - #define SIZE_YMAX(y) ((y) & 0x1ff) 58 - #else 59 - #define SIZE_YMAX(y) ((y) & 0x3ff) 60 - #endif 56 + #define YMAX_MASK (cpu_is_mx1() ? 0x1ff : 0x3ff) 57 + #define SIZE_YMAX(y) ((y) & YMAX_MASK) 61 58 62 59 #define LCDC_VPW 0x08 63 60 #define VPW_VPW(x) ((x) & 0x3ff) ··· 620 623 if (var->right_margin > 255) 621 624 printk(KERN_ERR "%s: invalid right_margin %d\n", 622 625 info->fix.id, var->right_margin); 623 - if (var->yres < 1 || var->yres > 511) 626 + if (var->yres < 1 || var->yres > YMAX_MASK) 624 627 printk(KERN_ERR "%s: invalid yres %d\n", 625 628 info->fix.id, var->yres); 626 629 if (var->vsync_len > 100)
+13 -3
drivers/video/sh_mobile_hdmi.c
··· 787 787 found_rate_error = rate_error; 788 788 } 789 789 790 + hdmi->var.width = hdmi->monspec.max_x * 10; 791 + hdmi->var.height = hdmi->monspec.max_y * 10; 792 + 790 793 /* 791 794 * TODO 1: if no ->info is present, postpone running the config until 792 795 * after ->info first gets registered. ··· 963 960 dev_dbg(info->dev, "Old %ux%u, new %ux%u\n", 964 961 mode1.xres, mode1.yres, mode2.xres, mode2.yres); 965 962 966 - if (fb_mode_is_equal(&mode1, &mode2)) 963 + if (fb_mode_is_equal(&mode1, &mode2)) { 964 + /* It can be a different monitor with an equal video-mode */ 965 + old_var->width = new_var->width; 966 + old_var->height = new_var->height; 967 967 return false; 968 + } 968 969 969 970 dev_dbg(info->dev, "Switching %u -> %u lines\n", 970 971 mode1.yres, mode2.yres); ··· 1064 1057 * on, if we run a resume here, the logo disappears 1065 1058 */ 1066 1059 if (lock_fb_info(hdmi->info)) { 1067 - sh_hdmi_display_on(hdmi, hdmi->info); 1068 - unlock_fb_info(hdmi->info); 1060 + struct fb_info *info = hdmi->info; 1061 + info->var.width = hdmi->var.width; 1062 + info->var.height = hdmi->var.height; 1063 + sh_hdmi_display_on(hdmi, info); 1064 + unlock_fb_info(info); 1069 1065 } 1070 1066 } else { 1071 1067 /* New monitor or have to wake up */
+11 -19
drivers/video/sh_mobile_lcdcfb.c
··· 54 54 }; 55 55 #define NR_SHARED_REGS ARRAY_SIZE(lcdc_shared_regs) 56 56 57 - #define DEFAULT_XRES 1280 58 - #define DEFAULT_YRES 1024 57 + #define MAX_XRES 1920 58 + #define MAX_YRES 1080 59 59 60 60 static unsigned long lcdc_offs_mainlcd[NR_CH_REGS] = { 61 61 [LDDCKPAT1R] = 0x400, ··· 914 914 { 915 915 struct sh_mobile_lcdc_chan *ch = info->par; 916 916 917 - if (var->xres < 160 || var->xres > 1920 || 918 - var->yres < 120 || var->yres > 1080 || 919 - var->left_margin < 32 || var->left_margin > 320 || 920 - var->right_margin < 12 || var->right_margin > 240 || 921 - var->upper_margin < 12 || var->upper_margin > 120 || 922 - var->lower_margin < 1 || var->lower_margin > 64 || 923 - var->hsync_len < 32 || var->hsync_len > 240 || 924 - var->vsync_len < 2 || var->vsync_len > 64 || 925 - var->pixclock < 6000 || var->pixclock > 40000 || 917 + if (var->xres > MAX_XRES || var->yres > MAX_YRES || 926 918 var->xres * var->yres * (ch->cfg.bpp / 8) * 2 > info->fix.smem_len) { 927 - dev_warn(info->dev, "Invalid info: %u %u %u %u %u %u %u %u %u!\n", 928 - var->xres, var->yres, 929 - var->left_margin, var->right_margin, 930 - var->upper_margin, var->lower_margin, 931 - var->hsync_len, var->vsync_len, 932 - var->pixclock); 919 + dev_warn(info->dev, "Invalid info: %u-%u-%u-%u x %u-%u-%u-%u @ %ukHz!\n", 920 + var->left_margin, var->xres, var->right_margin, var->hsync_len, 921 + var->upper_margin, var->yres, var->lower_margin, var->vsync_len, 922 + PICOS2KHZ(var->pixclock)); 933 923 return -EINVAL; 934 924 } 935 925 return 0; ··· 1216 1226 } 1217 1227 1218 1228 if (!mode) 1219 - max_size = DEFAULT_XRES * DEFAULT_YRES; 1229 + max_size = MAX_XRES * MAX_YRES; 1220 1230 else if (max_cfg) 1221 1231 dev_dbg(&pdev->dev, "Found largest videomode %ux%u\n", 1222 1232 max_cfg->xres, max_cfg->yres); ··· 1228 1238 mode = &default_720p; 1229 1239 num_cfg = 1; 1230 1240 } else { 1231 - num_cfg = ch->cfg.num_cfg; 1241 + num_cfg = cfg->num_cfg; 1232 1242 } 1233 1243 1234 1244 fb_videomode_to_modelist(mode, num_cfg, &info->modelist); 1235 1245 1236 1246 fb_videomode_to_var(var, mode); 1247 + var->width = cfg->lcd_size_cfg.width; 1248 + var->height = cfg->lcd_size_cfg.height; 1237 1249 /* Default Y virtual resolution is 2x panel size */ 1238 1250 var->yres_virtual = var->yres * 2; 1239 1251 var->activate = FB_ACTIVATE_NOW;