fbdev changes for v4.13:

- fix get_fb_unmapped_area() helper handling (Benjamin Gaignard)
 - check return value of clk_prepare_enable() in pxafb driver (Arvind Yadav)
 - fix error path handling in vmlfb driver (Alexey Khoroshilov)
 - printks fixes/cleanups for uvesafb driver (Joe Perches)
 - fix unusued variable warning in atyfb driver (Arnd Bergmann)
 - constifications for sh_mobile_lcdcfb, fsl-diu-fb, omapfb (Arvind Yadav)
 - mdacon driver cleanups (Jiri Slaby)
 - misc cleanups
   (Andy Shevchenko, Karim Eshapa, Gustavo A. R. Silva, Dan Carpenter)
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABCAAGBQJZZ1jkAAoJEH4ztj+gR8ILXRsP/RGy2Vs3N3h9TQEaNRgm/en9
 fqeufaKinwqCCSfQ3NoY4ZZbGNUchmeebX6kVRJBu5I16diuYFEWtn+O+yXpe8d3
 4EMg1FQrcwSizwX6TT/SBQ5ndddVurugrVRdSeiWzXMLgQuqksgef5rSzje4yZb1
 UmFuc8I6DpB2rIiUV2nvp8gCf7AfEjLqggUJN45qAh5MS4HWdkvv+X0v5lqBSxJK
 iLc/4RY7LqgsK4d8xFVBzxwQbeUyJzTcdORRgo9N5b/hzQkTlVjPYNcI3ZF8JgzZ
 Y6+98OJDvCuHVrT6eyunFchegMlQ7zMKbFMND/xTFDLsSmD2NVu5dKf8nv6AYG0M
 67xpsn5JOMqcWkWY+p0kAswCepmyffpENd0/fUjVY5VbycCHO3pt6J1aXu88544I
 mHI40nVn7k1Gi0gcEu4m93r21H8zewJGSPlTt/6YPDkqgsCmbiIXkFRyl8CUIxxR
 kuqbpRL6ObRDirSJxULj4O3BTxL3Kez1KjFbtjwUMr9lb4w9NmZzz0sRZ4L6SI1/
 kxxWBRGl3G+YGRhBX/T+ykzKloFR+4RdCuEgPk+Kfd9eaSlg927yOniloNFCrUOs
 GVNIhh9PCbGDnRs8sHoRC/xmyc3TFvJ6WrAq44WwxLoDDt6XLqRu2yoGHWwinCB1
 YzWi9TfzunZQ6pD+4uqb
 =icOY
 -----END PGP SIGNATURE-----

Merge tag 'fbdev-v4.13' of git://github.com/bzolnier/linux

Pull fbdev updates from Bartlomiej Zolnierkiewicz:
 "There is nothing really major here, just a couple of small bugfixes,
  improvements and cleanups.

   - fix get_fb_unmapped_area() helper handling (Benjamin Gaignard)

   - check return value of clk_prepare_enable() in pxafb driver (Arvind
     Yadav)

   - fix error path handling in vmlfb driver (Alexey Khoroshilov)

   - printks fixes/cleanups for uvesafb driver (Joe Perches)

   - fix unusued variable warning in atyfb driver (Arnd Bergmann)

   - constifications for sh_mobile_lcdcfb, fsl-diu-fb, omapfb (Arvind
     Yadav)

   - mdacon driver cleanups (Jiri Slaby)

   - misc cleanups (Andy Shevchenko, Karim Eshapa, Gustavo A. R. Silva,
     Dan Carpenter)"

* tag 'fbdev-v4.13' of git://github.com/bzolnier/linux:
  fbdev: make get_fb_unmapped_area depends of !MMU
  atyfb: hide unused variable
  video: fbdev: matrox: the list iterator can't be NULL
  video: fbdev: aty: remove useless variable assignments in aty_var_to_crtc()
  fbdev: omapfb: constify ctrl_caps, color_caps, panel_attr_grp and ctrl_attr_grp
  omapfb: panel-dsi-cm: constify dsicm_attr_group
  vmlfb: Fix error handling in cr_pll_init()
  video: fbdev: fsl-diu-fb: constify mfb_template and fsl_diu_match.
  uvesafb: Fix continuation printks without KERN_LEVEL to pr_cont, neatening
  video: fbdev: sh_mobile_lcdcfb: constify sh_mobile_lcdc_bl_ops.
  omapfb: Use sysfs_match_string() helper
  video: fbdev: pxafb: Handle return value of clk_prepare_enable
  video: fbdev: omap2: omapfb: displays: panel-dsi-cm: Use time comparison kernel macro.
  mdacon: replace MDA_ADDR macro by inline function
  mdacon: make mda_vram_base u16 *
  mdacon: align code in mda_detect properly
This commit is contained in:
Linus Torvalds 2017-07-13 11:52:00 -07:00
commit da16dd9785
12 changed files with 137 additions and 155 deletions

View File

@ -48,7 +48,7 @@ static DEFINE_SPINLOCK(mda_lock);
/* description of the hardware layout */ /* description of the hardware layout */
static unsigned long mda_vram_base; /* Base of video memory */ static u16 *mda_vram_base; /* Base of video memory */
static unsigned long mda_vram_len; /* Size of video memory */ static unsigned long mda_vram_len; /* Size of video memory */
static unsigned int mda_num_columns; /* Number of text columns */ static unsigned int mda_num_columns; /* Number of text columns */
static unsigned int mda_num_lines; /* Number of text lines */ static unsigned int mda_num_lines; /* Number of text lines */
@ -205,13 +205,20 @@ static int mda_detect(void)
/* do a memory check */ /* do a memory check */
p = (u16 *) mda_vram_base; p = mda_vram_base;
q = (u16 *) (mda_vram_base + 0x01000); q = mda_vram_base + 0x01000 / 2;
p_save = scr_readw(p); q_save = scr_readw(q); p_save = scr_readw(p);
q_save = scr_readw(q);
scr_writew(0xAA55, p);
if (scr_readw(p) == 0xAA55)
count++;
scr_writew(0x55AA, p);
if (scr_readw(p) == 0x55AA)
count++;
scr_writew(0xAA55, p); if (scr_readw(p) == 0xAA55) count++;
scr_writew(0x55AA, p); if (scr_readw(p) == 0x55AA) count++;
scr_writew(p_save, p); scr_writew(p_save, p);
if (count != 2) { if (count != 2) {
@ -220,13 +227,18 @@ static int mda_detect(void)
/* check if we have 4K or 8K */ /* check if we have 4K or 8K */
scr_writew(0xA55A, q); scr_writew(0x0000, p); scr_writew(0xA55A, q);
if (scr_readw(q) == 0xA55A) count++; scr_writew(0x0000, p);
if (scr_readw(q) == 0xA55A)
count++;
scr_writew(0x5AA5, q); scr_writew(0x0000, p); scr_writew(0x5AA5, q);
if (scr_readw(q) == 0x5AA5) count++; scr_writew(0x0000, p);
if (scr_readw(q) == 0x5AA5)
count++;
scr_writew(p_save, p); scr_writew(q_save, q); scr_writew(p_save, p);
scr_writew(q_save, q);
if (count == 4) { if (count == 4) {
mda_vram_len = 0x02000; mda_vram_len = 0x02000;
@ -240,14 +252,12 @@ static int mda_detect(void)
/* Edward: These two mess `tests' mess up my cursor on bootup */ /* Edward: These two mess `tests' mess up my cursor on bootup */
/* cursor low register */ /* cursor low register */
if (! test_mda_b(0x66, 0x0f)) { if (!test_mda_b(0x66, 0x0f))
return 0; return 0;
}
/* cursor low register */ /* cursor low register */
if (! test_mda_b(0x99, 0x0f)) { if (!test_mda_b(0x99, 0x0f))
return 0; return 0;
}
#endif #endif
/* See if the card is a Hercules, by checking whether the vsync /* See if the card is a Hercules, by checking whether the vsync
@ -257,25 +267,25 @@ static int mda_detect(void)
p_save = q_save = inb_p(mda_status_port) & MDA_STATUS_VSYNC; p_save = q_save = inb_p(mda_status_port) & MDA_STATUS_VSYNC;
for (count=0; count < 50000 && p_save == q_save; count++) { for (count = 0; count < 50000 && p_save == q_save; count++) {
q_save = inb(mda_status_port) & MDA_STATUS_VSYNC; q_save = inb(mda_status_port) & MDA_STATUS_VSYNC;
udelay(2); udelay(2);
} }
if (p_save != q_save) { if (p_save != q_save) {
switch (inb_p(mda_status_port) & 0x70) { switch (inb_p(mda_status_port) & 0x70) {
case 0x10: case 0x10:
mda_type = TYPE_HERCPLUS; mda_type = TYPE_HERCPLUS;
mda_type_name = "HerculesPlus"; mda_type_name = "HerculesPlus";
break; break;
case 0x50: case 0x50:
mda_type = TYPE_HERCCOLOR; mda_type = TYPE_HERCCOLOR;
mda_type_name = "HerculesColor"; mda_type_name = "HerculesColor";
break; break;
default: default:
mda_type = TYPE_HERC; mda_type = TYPE_HERC;
mda_type_name = "Hercules"; mda_type_name = "Hercules";
break; break;
} }
} }
@ -313,7 +323,7 @@ static const char *mdacon_startup(void)
mda_num_lines = 25; mda_num_lines = 25;
mda_vram_len = 0x01000; mda_vram_len = 0x01000;
mda_vram_base = VGA_MAP_MEM(0xb0000, mda_vram_len); mda_vram_base = (u16 *)VGA_MAP_MEM(0xb0000, mda_vram_len);
mda_index_port = 0x3b4; mda_index_port = 0x3b4;
mda_value_port = 0x3b5; mda_value_port = 0x3b5;
@ -410,17 +420,20 @@ static void mdacon_invert_region(struct vc_data *c, u16 *p, int count)
} }
} }
#define MDA_ADDR(x,y) ((u16 *) mda_vram_base + (y)*mda_num_columns + (x)) static inline u16 *mda_addr(unsigned int x, unsigned int y)
{
return mda_vram_base + y * mda_num_columns + x;
}
static void mdacon_putc(struct vc_data *c, int ch, int y, int x) static void mdacon_putc(struct vc_data *c, int ch, int y, int x)
{ {
scr_writew(mda_convert_attr(ch), MDA_ADDR(x, y)); scr_writew(mda_convert_attr(ch), mda_addr(x, y));
} }
static void mdacon_putcs(struct vc_data *c, const unsigned short *s, static void mdacon_putcs(struct vc_data *c, const unsigned short *s,
int count, int y, int x) int count, int y, int x)
{ {
u16 *dest = MDA_ADDR(x, y); u16 *dest = mda_addr(x, y);
for (; count > 0; count--) { for (; count > 0; count--) {
scr_writew(mda_convert_attr(scr_readw(s++)), dest++); scr_writew(mda_convert_attr(scr_readw(s++)), dest++);
@ -430,7 +443,7 @@ static void mdacon_putcs(struct vc_data *c, const unsigned short *s,
static void mdacon_clear(struct vc_data *c, int y, int x, static void mdacon_clear(struct vc_data *c, int y, int x,
int height, int width) int height, int width)
{ {
u16 *dest = MDA_ADDR(x, y); u16 *dest = mda_addr(x, y);
u16 eattr = mda_convert_attr(c->vc_video_erase_char); u16 eattr = mda_convert_attr(c->vc_video_erase_char);
if (width <= 0 || height <= 0) if (width <= 0 || height <= 0)
@ -453,7 +466,7 @@ static int mdacon_blank(struct vc_data *c, int blank, int mode_switch)
{ {
if (mda_type == TYPE_MDA) { if (mda_type == TYPE_MDA) {
if (blank) if (blank)
scr_memsetw((void *)mda_vram_base, scr_memsetw(mda_vram_base,
mda_convert_attr(c->vc_video_erase_char), mda_convert_attr(c->vc_video_erase_char),
c->vc_screenbuf_size); c->vc_screenbuf_size);
/* Tell console.c that it has to restore the screen itself */ /* Tell console.c that it has to restore the screen itself */
@ -502,16 +515,16 @@ static bool mdacon_scroll(struct vc_data *c, unsigned int t, unsigned int b,
switch (dir) { switch (dir) {
case SM_UP: case SM_UP:
scr_memmovew(MDA_ADDR(0,t), MDA_ADDR(0,t+lines), scr_memmovew(mda_addr(0, t), mda_addr(0, t + lines),
(b-t-lines)*mda_num_columns*2); (b-t-lines)*mda_num_columns*2);
scr_memsetw(MDA_ADDR(0,b-lines), eattr, scr_memsetw(mda_addr(0, b - lines), eattr,
lines*mda_num_columns*2); lines*mda_num_columns*2);
break; break;
case SM_DOWN: case SM_DOWN:
scr_memmovew(MDA_ADDR(0,t+lines), MDA_ADDR(0,t), scr_memmovew(mda_addr(0, t + lines), mda_addr(0, t),
(b-t-lines)*mda_num_columns*2); (b-t-lines)*mda_num_columns*2);
scr_memsetw(MDA_ADDR(0,t), eattr, lines*mda_num_columns*2); scr_memsetw(mda_addr(0, t), eattr, lines*mda_num_columns*2);
break; break;
} }

View File

@ -802,7 +802,7 @@ static int aty_var_to_crtc(const struct fb_info *info,
{ {
struct atyfb_par *par = (struct atyfb_par *) info->par; struct atyfb_par *par = (struct atyfb_par *) info->par;
u32 xres, yres, vxres, vyres, xoffset, yoffset, bpp; u32 xres, yres, vxres, vyres, xoffset, yoffset, bpp;
u32 sync, vmode, vdisplay; u32 sync, vmode;
u32 h_total, h_disp, h_sync_strt, h_sync_end, h_sync_dly, h_sync_wid, h_sync_pol; u32 h_total, h_disp, h_sync_strt, h_sync_end, h_sync_dly, h_sync_wid, h_sync_pol;
u32 v_total, v_disp, v_sync_strt, v_sync_end, v_sync_wid, v_sync_pol, c_sync; u32 v_total, v_disp, v_sync_strt, v_sync_end, v_sync_wid, v_sync_pol, c_sync;
u32 pix_width, dp_pix_width, dp_chain_mask; u32 pix_width, dp_pix_width, dp_chain_mask;
@ -984,12 +984,6 @@ static int aty_var_to_crtc(const struct fb_info *info,
v_total <<= 1; v_total <<= 1;
} }
vdisplay = yres;
#ifdef CONFIG_FB_ATY_GENERIC_LCD
if ((par->lcd_table != 0) && (crtc->lcd_gen_cntl & LCD_ON))
vdisplay = par->lcd_height;
#endif
v_disp--; v_disp--;
v_sync_strt--; v_sync_strt--;
v_sync_end--; v_sync_end--;
@ -1036,7 +1030,7 @@ static int aty_var_to_crtc(const struct fb_info *info,
crtc->gen_cntl |= CRTC_INTERLACE_EN; crtc->gen_cntl |= CRTC_INTERLACE_EN;
#ifdef CONFIG_FB_ATY_GENERIC_LCD #ifdef CONFIG_FB_ATY_GENERIC_LCD
if (par->lcd_table != 0) { if (par->lcd_table != 0) {
vdisplay = yres; u32 vdisplay = yres;
if (vmode & FB_VMODE_DOUBLE) if (vmode & FB_VMODE_DOUBLE)
vdisplay <<= 1; vdisplay <<= 1;
crtc->gen_cntl &= ~(CRTC2_EN | CRTC2_PIX_WIDTH); crtc->gen_cntl &= ~(CRTC2_EN | CRTC2_PIX_WIDTH);

View File

@ -1483,7 +1483,7 @@ __releases(&info->lock)
return 0; return 0;
} }
#ifdef CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA #if defined(CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA) && !defined(CONFIG_MMU)
unsigned long get_fb_unmapped_area(struct file *filp, unsigned long get_fb_unmapped_area(struct file *filp,
unsigned long addr, unsigned long len, unsigned long addr, unsigned long len,
unsigned long pgoff, unsigned long flags) unsigned long pgoff, unsigned long flags)
@ -1510,7 +1510,8 @@ static const struct file_operations fb_fops = {
.open = fb_open, .open = fb_open,
.release = fb_release, .release = fb_release,
#if defined(HAVE_ARCH_FB_UNMAPPED_AREA) || \ #if defined(HAVE_ARCH_FB_UNMAPPED_AREA) || \
defined(CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA) (defined(CONFIG_FB_PROVIDE_GET_FB_UNMAPPED_AREA) && \
!defined(CONFIG_MMU))
.get_unmapped_area = get_fb_unmapped_area, .get_unmapped_area = get_fb_unmapped_area,
#endif #endif
#ifdef CONFIG_FB_DEFERRED_IO #ifdef CONFIG_FB_DEFERRED_IO

View File

@ -388,7 +388,7 @@ struct fsl_diu_data {
/* Determine the DMA address of a member of the fsl_diu_data structure */ /* Determine the DMA address of a member of the fsl_diu_data structure */
#define DMA_ADDR(p, f) ((p)->dma_addr + offsetof(struct fsl_diu_data, f)) #define DMA_ADDR(p, f) ((p)->dma_addr + offsetof(struct fsl_diu_data, f))
static struct mfb_info mfb_template[] = { static const struct mfb_info mfb_template[] = {
{ {
.index = PLANE0, .index = PLANE0,
.id = "Panel0", .id = "Panel0",
@ -1868,7 +1868,7 @@ static int __init fsl_diu_setup(char *options)
} }
#endif #endif
static struct of_device_id fsl_diu_match[] = { static const struct of_device_id fsl_diu_match[] = {
#ifdef CONFIG_PPC_MPC512x #ifdef CONFIG_PPC_MPC512x
{ {
.compatible = "fsl,mpc5121-diu", .compatible = "fsl,mpc5121-diu",

View File

@ -2001,7 +2001,7 @@ static void matroxfb_register_device(struct matrox_fb_info* minfo) {
for (drv = matroxfb_driver_l(matroxfb_driver_list.next); for (drv = matroxfb_driver_l(matroxfb_driver_list.next);
drv != matroxfb_driver_l(&matroxfb_driver_list); drv != matroxfb_driver_l(&matroxfb_driver_list);
drv = matroxfb_driver_l(drv->node.next)) { drv = matroxfb_driver_l(drv->node.next)) {
if (drv && drv->probe) { if (drv->probe) {
void *p = drv->probe(minfo); void *p = drv->probe(minfo);
if (p) { if (p) {
minfo->drivers_data[i] = p; minfo->drivers_data[i] = p;

View File

@ -62,7 +62,7 @@ struct caps_table_struct {
const char *name; const char *name;
}; };
static struct caps_table_struct ctrl_caps[] = { static const struct caps_table_struct ctrl_caps[] = {
{ OMAPFB_CAPS_MANUAL_UPDATE, "manual update" }, { OMAPFB_CAPS_MANUAL_UPDATE, "manual update" },
{ OMAPFB_CAPS_TEARSYNC, "tearing synchronization" }, { OMAPFB_CAPS_TEARSYNC, "tearing synchronization" },
{ OMAPFB_CAPS_PLANE_RELOCATE_MEM, "relocate plane memory" }, { OMAPFB_CAPS_PLANE_RELOCATE_MEM, "relocate plane memory" },
@ -74,7 +74,7 @@ static struct caps_table_struct ctrl_caps[] = {
{ OMAPFB_CAPS_SET_BACKLIGHT, "backlight setting" }, { OMAPFB_CAPS_SET_BACKLIGHT, "backlight setting" },
}; };
static struct caps_table_struct color_caps[] = { static const struct caps_table_struct color_caps[] = {
{ 1 << OMAPFB_COLOR_RGB565, "RGB565", }, { 1 << OMAPFB_COLOR_RGB565, "RGB565", },
{ 1 << OMAPFB_COLOR_YUV422, "YUV422", }, { 1 << OMAPFB_COLOR_YUV422, "YUV422", },
{ 1 << OMAPFB_COLOR_YUV420, "YUV420", }, { 1 << OMAPFB_COLOR_YUV420, "YUV420", },
@ -1384,7 +1384,7 @@ static struct attribute *panel_attrs[] = {
NULL, NULL,
}; };
static struct attribute_group panel_attr_grp = { static const struct attribute_group panel_attr_grp = {
.name = "panel", .name = "panel",
.attrs = panel_attrs, .attrs = panel_attrs,
}; };
@ -1406,7 +1406,7 @@ static struct attribute *ctrl_attrs[] = {
NULL, NULL,
}; };
static struct attribute_group ctrl_attr_grp = { static const struct attribute_group ctrl_attr_grp = {
.name = "ctrl", .name = "ctrl",
.attrs = ctrl_attrs, .attrs = ctrl_attrs,
}; };

View File

@ -100,7 +100,7 @@ static void hw_guard_wait(struct panel_drv_data *ddata)
{ {
unsigned long wait = ddata->hw_guard_end - jiffies; unsigned long wait = ddata->hw_guard_end - jiffies;
if ((long)wait > 0 && wait <= ddata->hw_guard_wait) { if ((long)wait > 0 && time_before_eq(wait, ddata->hw_guard_wait)) {
set_current_state(TASK_UNINTERRUPTIBLE); set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout(wait); schedule_timeout(wait);
} }
@ -559,7 +559,7 @@ static struct attribute *dsicm_attrs[] = {
NULL, NULL,
}; };
static struct attribute_group dsicm_attr_group = { static const struct attribute_group dsicm_attr_group = {
.attrs = dsicm_attrs, .attrs = dsicm_attrs,
}; };

View File

@ -182,22 +182,16 @@ static ssize_t manager_trans_key_type_show(struct omap_overlay_manager *mgr,
static ssize_t manager_trans_key_type_store(struct omap_overlay_manager *mgr, static ssize_t manager_trans_key_type_store(struct omap_overlay_manager *mgr,
const char *buf, size_t size) const char *buf, size_t size)
{ {
enum omap_dss_trans_key_type key_type;
struct omap_overlay_manager_info info; struct omap_overlay_manager_info info;
int r; int r;
for (key_type = OMAP_DSS_COLOR_KEY_GFX_DST; r = sysfs_match_string(trans_key_type_str, buf);
key_type < ARRAY_SIZE(trans_key_type_str); key_type++) { if (r < 0)
if (sysfs_streq(buf, trans_key_type_str[key_type])) return r;
break;
}
if (key_type == ARRAY_SIZE(trans_key_type_str))
return -EINVAL;
mgr->get_manager_info(mgr, &info); mgr->get_manager_info(mgr, &info);
info.trans_key_type = key_type; info.trans_key_type = r;
r = mgr->set_manager_info(mgr, &info); r = mgr->set_manager_info(mgr, &info);
if (r) if (r)

View File

@ -1436,7 +1436,10 @@ static void pxafb_enable_controller(struct pxafb_info *fbi)
pr_debug("reg_lccr3 0x%08x\n", (unsigned int) fbi->reg_lccr3); pr_debug("reg_lccr3 0x%08x\n", (unsigned int) fbi->reg_lccr3);
/* enable LCD controller clock */ /* enable LCD controller clock */
clk_prepare_enable(fbi->clk); if (clk_prepare_enable(fbi->clk)) {
pr_err("%s: Failed to prepare clock\n", __func__);
return;
}
if (fbi->lccr0 & LCCR0_LCDT) if (fbi->lccr0 & LCCR0_LCDT)
return; return;

View File

@ -2301,7 +2301,7 @@ static int sh_mobile_lcdc_check_fb(struct backlight_device *bdev,
return (info->bl_dev == bdev); return (info->bl_dev == bdev);
} }
static struct backlight_ops sh_mobile_lcdc_bl_ops = { static const struct backlight_ops sh_mobile_lcdc_bl_ops = {
.options = BL_CORE_SUSPENDRESUME, .options = BL_CORE_SUSPENDRESUME,
.update_status = sh_mobile_lcdc_update_bl, .update_status = sh_mobile_lcdc_update_bl,
.get_brightness = sh_mobile_lcdc_get_brightness, .get_brightness = sh_mobile_lcdc_get_brightness,

View File

@ -5,6 +5,9 @@
* Loosely based upon the vesafb driver. * Loosely based upon the vesafb driver.
* *
*/ */
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/init.h> #include <linux/init.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/moduleparam.h> #include <linux/moduleparam.h>
@ -149,8 +152,8 @@ static int uvesafb_exec(struct uvesafb_ktask *task)
* allowed by connector. * allowed by connector.
*/ */
if (sizeof(*m) + len > CONNECTOR_MAX_MSG_SIZE) { if (sizeof(*m) + len > CONNECTOR_MAX_MSG_SIZE) {
printk(KERN_WARNING "uvesafb: message too long (%d), " pr_warn("message too long (%d), can't execute task\n",
"can't execute task\n", (int)(sizeof(*m) + len)); (int)(sizeof(*m) + len));
return -E2BIG; return -E2BIG;
} }
@ -198,10 +201,8 @@ static int uvesafb_exec(struct uvesafb_ktask *task)
*/ */
err = uvesafb_helper_start(); err = uvesafb_helper_start();
if (err) { if (err) {
printk(KERN_ERR "uvesafb: failed to execute %s\n", pr_err("failed to execute %s\n", v86d_path);
v86d_path); pr_err("make sure that the v86d helper is installed and executable\n");
printk(KERN_ERR "uvesafb: make sure that the v86d "
"helper is installed and executable\n");
} else { } else {
v86d_started = 1; v86d_started = 1;
err = cn_netlink_send(m, 0, 0, gfp_any()); err = cn_netlink_send(m, 0, 0, gfp_any());
@ -375,9 +376,8 @@ static u8 *uvesafb_vbe_state_save(struct uvesafb_par *par)
err = uvesafb_exec(task); err = uvesafb_exec(task);
if (err || (task->t.regs.eax & 0xffff) != 0x004f) { if (err || (task->t.regs.eax & 0xffff) != 0x004f) {
printk(KERN_WARNING "uvesafb: VBE get state call " pr_warn("VBE get state call failed (eax=0x%x, err=%d)\n",
"failed (eax=0x%x, err=%d)\n", task->t.regs.eax, err);
task->t.regs.eax, err);
kfree(state); kfree(state);
state = NULL; state = NULL;
} }
@ -407,9 +407,8 @@ static void uvesafb_vbe_state_restore(struct uvesafb_par *par, u8 *state_buf)
err = uvesafb_exec(task); err = uvesafb_exec(task);
if (err || (task->t.regs.eax & 0xffff) != 0x004f) if (err || (task->t.regs.eax & 0xffff) != 0x004f)
printk(KERN_WARNING "uvesafb: VBE state restore call " pr_warn("VBE state restore call failed (eax=0x%x, err=%d)\n",
"failed (eax=0x%x, err=%d)\n", task->t.regs.eax, err);
task->t.regs.eax, err);
uvesafb_free(task); uvesafb_free(task);
} }
@ -427,24 +426,22 @@ static int uvesafb_vbe_getinfo(struct uvesafb_ktask *task,
err = uvesafb_exec(task); err = uvesafb_exec(task);
if (err || (task->t.regs.eax & 0xffff) != 0x004f) { if (err || (task->t.regs.eax & 0xffff) != 0x004f) {
printk(KERN_ERR "uvesafb: Getting VBE info block failed " pr_err("Getting VBE info block failed (eax=0x%x, err=%d)\n",
"(eax=0x%x, err=%d)\n", (u32)task->t.regs.eax, (u32)task->t.regs.eax, err);
err);
return -EINVAL; return -EINVAL;
} }
if (par->vbe_ib.vbe_version < 0x0200) { if (par->vbe_ib.vbe_version < 0x0200) {
printk(KERN_ERR "uvesafb: Sorry, pre-VBE 2.0 cards are " pr_err("Sorry, pre-VBE 2.0 cards are not supported\n");
"not supported.\n");
return -EINVAL; return -EINVAL;
} }
if (!par->vbe_ib.mode_list_ptr) { if (!par->vbe_ib.mode_list_ptr) {
printk(KERN_ERR "uvesafb: Missing mode list!\n"); pr_err("Missing mode list!\n");
return -EINVAL; return -EINVAL;
} }
printk(KERN_INFO "uvesafb: "); pr_info("");
/* /*
* Convert string pointers and the mode list pointer into * Convert string pointers and the mode list pointer into
@ -452,23 +449,24 @@ static int uvesafb_vbe_getinfo(struct uvesafb_ktask *task,
* video adapter and its vendor. * video adapter and its vendor.
*/ */
if (par->vbe_ib.oem_vendor_name_ptr) if (par->vbe_ib.oem_vendor_name_ptr)
printk("%s, ", pr_cont("%s, ",
((char *)task->buf) + par->vbe_ib.oem_vendor_name_ptr); ((char *)task->buf) + par->vbe_ib.oem_vendor_name_ptr);
if (par->vbe_ib.oem_product_name_ptr) if (par->vbe_ib.oem_product_name_ptr)
printk("%s, ", pr_cont("%s, ",
((char *)task->buf) + par->vbe_ib.oem_product_name_ptr); ((char *)task->buf) + par->vbe_ib.oem_product_name_ptr);
if (par->vbe_ib.oem_product_rev_ptr) if (par->vbe_ib.oem_product_rev_ptr)
printk("%s, ", pr_cont("%s, ",
((char *)task->buf) + par->vbe_ib.oem_product_rev_ptr); ((char *)task->buf) + par->vbe_ib.oem_product_rev_ptr);
if (par->vbe_ib.oem_string_ptr) if (par->vbe_ib.oem_string_ptr)
printk("OEM: %s, ", pr_cont("OEM: %s, ",
((char *)task->buf) + par->vbe_ib.oem_string_ptr); ((char *)task->buf) + par->vbe_ib.oem_string_ptr);
printk("VBE v%d.%d\n", ((par->vbe_ib.vbe_version & 0xff00) >> 8), pr_cont("VBE v%d.%d\n",
par->vbe_ib.vbe_version & 0xff); (par->vbe_ib.vbe_version & 0xff00) >> 8,
par->vbe_ib.vbe_version & 0xff);
return 0; return 0;
} }
@ -507,8 +505,7 @@ static int uvesafb_vbe_getmodes(struct uvesafb_ktask *task,
err = uvesafb_exec(task); err = uvesafb_exec(task);
if (err || (task->t.regs.eax & 0xffff) != 0x004f) { if (err || (task->t.regs.eax & 0xffff) != 0x004f) {
printk(KERN_WARNING "uvesafb: Getting mode info block " pr_warn("Getting mode info block for mode 0x%x failed (eax=0x%x, err=%d)\n",
"for mode 0x%x failed (eax=0x%x, err=%d)\n",
*mode, (u32)task->t.regs.eax, err); *mode, (u32)task->t.regs.eax, err);
mode++; mode++;
par->vbe_modes_cnt--; par->vbe_modes_cnt--;
@ -569,23 +566,20 @@ static int uvesafb_vbe_getpmi(struct uvesafb_ktask *task,
+ task->t.regs.edi); + task->t.regs.edi);
par->pmi_start = (u8 *)par->pmi_base + par->pmi_base[1]; par->pmi_start = (u8 *)par->pmi_base + par->pmi_base[1];
par->pmi_pal = (u8 *)par->pmi_base + par->pmi_base[2]; par->pmi_pal = (u8 *)par->pmi_base + par->pmi_base[2];
printk(KERN_INFO "uvesafb: protected mode interface info at " pr_info("protected mode interface info at %04x:%04x\n",
"%04x:%04x\n", (u16)task->t.regs.es, (u16)task->t.regs.edi);
(u16)task->t.regs.es, (u16)task->t.regs.edi); pr_info("pmi: set display start = %p, set palette = %p\n",
printk(KERN_INFO "uvesafb: pmi: set display start = %p, " par->pmi_start, par->pmi_pal);
"set palette = %p\n", par->pmi_start,
par->pmi_pal);
if (par->pmi_base[3]) { if (par->pmi_base[3]) {
printk(KERN_INFO "uvesafb: pmi: ports = "); pr_info("pmi: ports =");
for (i = par->pmi_base[3]/2; for (i = par->pmi_base[3]/2;
par->pmi_base[i] != 0xffff; i++) par->pmi_base[i] != 0xffff; i++)
printk("%x ", par->pmi_base[i]); pr_cont(" %x", par->pmi_base[i]);
printk("\n"); pr_cont("\n");
if (par->pmi_base[i] != 0xffff) { if (par->pmi_base[i] != 0xffff) {
printk(KERN_INFO "uvesafb: can't handle memory" pr_info("can't handle memory requests, pmi disabled\n");
" requests, pmi disabled\n");
par->ypan = par->pmi_setpal = 0; par->ypan = par->pmi_setpal = 0;
} }
} }
@ -634,17 +628,13 @@ static int uvesafb_vbe_getedid(struct uvesafb_ktask *task, struct fb_info *info)
return -EINVAL; return -EINVAL;
if ((task->t.regs.ebx & 0x3) == 3) { if ((task->t.regs.ebx & 0x3) == 3) {
printk(KERN_INFO "uvesafb: VBIOS/hardware supports both " pr_info("VBIOS/hardware supports both DDC1 and DDC2 transfers\n");
"DDC1 and DDC2 transfers\n");
} else if ((task->t.regs.ebx & 0x3) == 2) { } else if ((task->t.regs.ebx & 0x3) == 2) {
printk(KERN_INFO "uvesafb: VBIOS/hardware supports DDC2 " pr_info("VBIOS/hardware supports DDC2 transfers\n");
"transfers\n");
} else if ((task->t.regs.ebx & 0x3) == 1) { } else if ((task->t.regs.ebx & 0x3) == 1) {
printk(KERN_INFO "uvesafb: VBIOS/hardware supports DDC1 " pr_info("VBIOS/hardware supports DDC1 transfers\n");
"transfers\n");
} else { } else {
printk(KERN_INFO "uvesafb: VBIOS/hardware doesn't support " pr_info("VBIOS/hardware doesn't support DDC transfers\n");
"DDC transfers\n");
return -EINVAL; return -EINVAL;
} }
@ -718,14 +708,12 @@ static void uvesafb_vbe_getmonspecs(struct uvesafb_ktask *task,
} }
if (info->monspecs.gtf) if (info->monspecs.gtf)
printk(KERN_INFO pr_info("monitor limits: vf = %d Hz, hf = %d kHz, clk = %d MHz\n",
"uvesafb: monitor limits: vf = %d Hz, hf = %d kHz, " info->monspecs.vfmax,
"clk = %d MHz\n", info->monspecs.vfmax,
(int)(info->monspecs.hfmax / 1000), (int)(info->monspecs.hfmax / 1000),
(int)(info->monspecs.dclkmax / 1000000)); (int)(info->monspecs.dclkmax / 1000000));
else else
printk(KERN_INFO "uvesafb: no monitor limits have been set, " pr_info("no monitor limits have been set, default refresh rate will be used\n");
"default refresh rate will be used\n");
/* Add VBE modes to the modelist. */ /* Add VBE modes to the modelist. */
for (i = 0; i < par->vbe_modes_cnt; i++) { for (i = 0; i < par->vbe_modes_cnt; i++) {
@ -779,8 +767,7 @@ static void uvesafb_vbe_getstatesize(struct uvesafb_ktask *task,
err = uvesafb_exec(task); err = uvesafb_exec(task);
if (err || (task->t.regs.eax & 0xffff) != 0x004f) { if (err || (task->t.regs.eax & 0xffff) != 0x004f) {
printk(KERN_WARNING "uvesafb: VBE state buffer size " pr_warn("VBE state buffer size cannot be determined (eax=0x%x, err=%d)\n",
"cannot be determined (eax=0x%x, err=%d)\n",
task->t.regs.eax, err); task->t.regs.eax, err);
par->vbe_state_size = 0; par->vbe_state_size = 0;
return; return;
@ -815,8 +802,7 @@ static int uvesafb_vbe_init(struct fb_info *info)
if (par->pmi_setpal || par->ypan) { if (par->pmi_setpal || par->ypan) {
if (__supported_pte_mask & _PAGE_NX) { if (__supported_pte_mask & _PAGE_NX) {
par->pmi_setpal = par->ypan = 0; par->pmi_setpal = par->ypan = 0;
printk(KERN_WARNING "uvesafb: NX protection is active, " pr_warn("NX protection is active, better not use the PMI\n");
"better not use the PMI.\n");
} else { } else {
uvesafb_vbe_getpmi(task, par); uvesafb_vbe_getpmi(task, par);
} }
@ -859,8 +845,7 @@ static int uvesafb_vbe_init_mode(struct fb_info *info)
goto gotmode; goto gotmode;
} }
} }
printk(KERN_INFO "uvesafb: requested VBE mode 0x%x is " pr_info("requested VBE mode 0x%x is unavailable\n", vbemode);
"unavailable\n", vbemode);
vbemode = 0; vbemode = 0;
} }
@ -1181,8 +1166,8 @@ static int uvesafb_open(struct fb_info *info, int user)
if (!cnt && par->vbe_state_size) { if (!cnt && par->vbe_state_size) {
buf = uvesafb_vbe_state_save(par); buf = uvesafb_vbe_state_save(par);
if (IS_ERR(buf)) { if (IS_ERR(buf)) {
printk(KERN_WARNING "uvesafb: save hardware state" pr_warn("save hardware state failed, error code is %ld!\n",
"failed, error code is %ld!\n", PTR_ERR(buf)); PTR_ERR(buf));
} else { } else {
par->vbe_state_orig = buf; par->vbe_state_orig = buf;
} }
@ -1293,17 +1278,16 @@ setmode:
* use our own timings. Try again with the default timings. * use our own timings. Try again with the default timings.
*/ */
if (crtc != NULL) { if (crtc != NULL) {
printk(KERN_WARNING "uvesafb: mode switch failed " pr_warn("mode switch failed (eax=0x%x, err=%d) - trying again with default timings\n",
"(eax=0x%x, err=%d). Trying again with " task->t.regs.eax, err);
"default timings.\n", task->t.regs.eax, err);
uvesafb_reset(task); uvesafb_reset(task);
kfree(crtc); kfree(crtc);
crtc = NULL; crtc = NULL;
info->var.pixclock = 0; info->var.pixclock = 0;
goto setmode; goto setmode;
} else { } else {
printk(KERN_ERR "uvesafb: mode switch failed (eax=" pr_err("mode switch failed (eax=0x%x, err=%d)\n",
"0x%x, err=%d)\n", task->t.regs.eax, err); task->t.regs.eax, err);
err = -EINVAL; err = -EINVAL;
goto out; goto out;
} }
@ -1510,13 +1494,11 @@ static void uvesafb_init_info(struct fb_info *info, struct vbe_mode_ib *mode)
mode->bytes_per_scan_line; mode->bytes_per_scan_line;
if (par->ypan && info->var.yres_virtual > info->var.yres) { if (par->ypan && info->var.yres_virtual > info->var.yres) {
printk(KERN_INFO "uvesafb: scrolling: %s " pr_info("scrolling: %s using protected mode interface, yres_virtual=%d\n",
"using protected mode interface, "
"yres_virtual=%d\n",
(par->ypan > 1) ? "ywrap" : "ypan", (par->ypan > 1) ? "ywrap" : "ypan",
info->var.yres_virtual); info->var.yres_virtual);
} else { } else {
printk(KERN_INFO "uvesafb: scrolling: redraw\n"); pr_info("scrolling: redraw\n");
info->var.yres_virtual = info->var.yres; info->var.yres_virtual = info->var.yres;
par->ypan = 0; par->ypan = 0;
} }
@ -1704,7 +1686,7 @@ static int uvesafb_probe(struct platform_device *dev)
err = uvesafb_vbe_init(info); err = uvesafb_vbe_init(info);
if (err) { if (err) {
printk(KERN_ERR "uvesafb: vbe_init() failed with %d\n", err); pr_err("vbe_init() failed with %d\n", err);
goto out; goto out;
} }
@ -1726,15 +1708,15 @@ static int uvesafb_probe(struct platform_device *dev)
uvesafb_init_info(info, mode); uvesafb_init_info(info, mode);
if (!request_region(0x3c0, 32, "uvesafb")) { if (!request_region(0x3c0, 32, "uvesafb")) {
printk(KERN_ERR "uvesafb: request region 0x3c0-0x3e0 failed\n"); pr_err("request region 0x3c0-0x3e0 failed\n");
err = -EIO; err = -EIO;
goto out_mode; goto out_mode;
} }
if (!request_mem_region(info->fix.smem_start, info->fix.smem_len, if (!request_mem_region(info->fix.smem_start, info->fix.smem_len,
"uvesafb")) { "uvesafb")) {
printk(KERN_ERR "uvesafb: cannot reserve video memory at " pr_err("cannot reserve video memory at 0x%lx\n",
"0x%lx\n", info->fix.smem_start); info->fix.smem_start);
err = -EIO; err = -EIO;
goto out_reg; goto out_reg;
} }
@ -1743,10 +1725,8 @@ static int uvesafb_probe(struct platform_device *dev)
uvesafb_ioremap(info); uvesafb_ioremap(info);
if (!info->screen_base) { if (!info->screen_base) {
printk(KERN_ERR pr_err("abort, cannot ioremap 0x%x bytes of video memory at 0x%lx\n",
"uvesafb: abort, cannot ioremap 0x%x bytes of video " info->fix.smem_len, info->fix.smem_start);
"memory at 0x%lx\n",
info->fix.smem_len, info->fix.smem_start);
err = -EIO; err = -EIO;
goto out_mem; goto out_mem;
} }
@ -1754,16 +1734,14 @@ static int uvesafb_probe(struct platform_device *dev)
platform_set_drvdata(dev, info); platform_set_drvdata(dev, info);
if (register_framebuffer(info) < 0) { if (register_framebuffer(info) < 0) {
printk(KERN_ERR pr_err("failed to register framebuffer device\n");
"uvesafb: failed to register framebuffer device\n");
err = -EINVAL; err = -EINVAL;
goto out_unmap; goto out_unmap;
} }
printk(KERN_INFO "uvesafb: framebuffer at 0x%lx, mapped to 0x%p, " pr_info("framebuffer at 0x%lx, mapped to 0x%p, using %dk, total %dk\n",
"using %dk, total %dk\n", info->fix.smem_start, info->fix.smem_start, info->screen_base,
info->screen_base, info->fix.smem_len/1024, info->fix.smem_len / 1024, par->vbe_ib.total_memory * 64);
par->vbe_ib.total_memory * 64);
fb_info(info, "%s frame buffer device\n", info->fix.id); fb_info(info, "%s frame buffer device\n", info->fix.id);
err = sysfs_create_group(&dev->dev.kobj, &uvesafb_dev_attgrp); err = sysfs_create_group(&dev->dev.kobj, &uvesafb_dev_attgrp);
@ -1871,8 +1849,7 @@ static int uvesafb_setup(char *options)
else if (this_opt[0] >= '0' && this_opt[0] <= '9') { else if (this_opt[0] >= '0' && this_opt[0] <= '9') {
mode_option = this_opt; mode_option = this_opt;
} else { } else {
printk(KERN_WARNING pr_warn("unrecognized option %s\n", this_opt);
"uvesafb: unrecognized option %s\n", this_opt);
} }
} }
@ -1931,8 +1908,7 @@ static int uvesafb_init(void)
err = driver_create_file(&uvesafb_driver.driver, err = driver_create_file(&uvesafb_driver.driver,
&driver_attr_v86d); &driver_attr_v86d);
if (err) { if (err) {
printk(KERN_WARNING "uvesafb: failed to register " pr_warn("failed to register attributes\n");
"attributes\n");
err = 0; err = 0;
} }
} }

View File

@ -185,6 +185,7 @@ static int __init cr_pll_init(void)
if (err) { if (err) {
printk(KERN_ERR printk(KERN_ERR
"Carillo Ranch failed to initialize vml_sys.\n"); "Carillo Ranch failed to initialize vml_sys.\n");
iounmap(mch_regs_base);
pci_dev_put(mch_dev); pci_dev_put(mch_dev);
return err; return err;
} }