• Home
  • Raw
  • Download

Lines Matching +full:sense +full:- +full:mode

2  *  valkyriefb.c -- frame buffer device for the PowerMac 'valkyrie' display
7 * Vmode-switching changes and vmode 15/17 modifications created 29 August
10 * Ported to m68k Macintosh by David Huggins-Daines <dhd@debian.org>
14 * controlfb.c -- frame buffer device for the PowerMac 'control' display
17 * pmc-valkyrie.c -- Console support for PowerMac "valkyrie" display adaptor.
23 * drivers/video/chipsfb.c -- frame buffer device for
30 * And from the frame buffer device for Open Firmware-initialized devices:
97 int sense; member
136 /* Sets the video mode according to info->var */
141 volatile struct valkyrie_regs __iomem *valkyrie_regs = p->valkyrie_regs; in valkyriefb_set_par()
142 struct fb_par_valkyrie *par = info->par; in valkyriefb_set_par()
146 if ((err = valkyrie_var_to_par(&info->var, par, info))) in valkyriefb_set_par()
149 valkyrie_par_to_fix(par, &info->fix); in valkyriefb_set_par()
152 out_8(&valkyrie_regs->status.r, 0); in valkyriefb_set_par()
156 init = par->init; in valkyriefb_set_par()
157 out_8(&valkyrie_regs->mode.r, init->mode | 0x80); in valkyriefb_set_par()
158 out_8(&valkyrie_regs->depth.r, par->cmode + 3); in valkyriefb_set_par()
159 set_valkyrie_clock(init->clock_params); in valkyriefb_set_par()
163 out_8(&valkyrie_regs->mode.r, init->mode); in valkyriefb_set_par()
171 return mac_vmode_to_var(par->vmode, par->cmode, var); in valkyrie_par_to_var()
189 * black. Return 0 if blanking succeeded, != 0 if un-/blanking failed due
190 * to e.g. a video mode which doesn't support it. Implements VESA suspend
200 struct fb_par_valkyrie *par = info->par; in valkyriefb_blank()
201 struct valkyrie_regvals *init = par->init; in valkyriefb_blank()
208 out_8(&p->valkyrie_regs->mode.r, init->mode); in valkyriefb_blank()
219 out_8(&p->valkyrie_regs->mode.r, init->mode | 0x40); in valkyriefb_blank()
222 out_8(&p->valkyrie_regs->mode.r, 0x66); in valkyriefb_blank()
233 volatile struct cmap_regs __iomem *cmap_regs = p->cmap_regs; in valkyriefb_setcolreg()
234 struct fb_par_valkyrie *par = info->par; in valkyriefb_setcolreg()
243 out_8(&p->cmap_regs->addr, regno); in valkyriefb_setcolreg()
246 out_8(&cmap_regs->lut, red); in valkyriefb_setcolreg()
247 out_8(&cmap_regs->lut, green); in valkyriefb_setcolreg()
248 out_8(&cmap_regs->lut, blue); in valkyriefb_setcolreg()
250 if (regno < 16 && par->cmode == CMODE_16) in valkyriefb_setcolreg()
251 ((u32 *)info->pseudo_palette)[regno] = in valkyriefb_setcolreg()
260 struct valkyrie_regvals *init = valkyrie_reg_init[video_mode-1]; in valkyrie_vram_reqd()
262 if ((pitch = init->pitch[color_mode]) == 0) in valkyrie_vram_reqd()
263 pitch = 2 * init->pitch[0]; in valkyrie_vram_reqd()
264 return init->vres * pitch; in valkyrie_vram_reqd()
284 p->sense = read_valkyrie_sense(p); in valkyrie_choose_mode()
285 printk(KERN_INFO "Monitor sense value = 0x%x\n", p->sense); in valkyrie_choose_mode()
287 /* Try to pick a video mode out of NVRAM if we have one. */ in valkyrie_choose_mode()
293 || !valkyrie_reg_init[default_vmode - 1]) in valkyrie_choose_mode()
298 default_vmode = mac_map_monitor_sense(p->sense); in valkyrie_choose_mode()
299 if (!valkyrie_reg_init[default_vmode - 1]) in valkyrie_choose_mode()
310 || valkyrie_reg_init[default_vmode-1]->pitch[default_cmode] == 0 in valkyrie_choose_mode()
311 || valkyrie_vram_reqd(default_vmode, default_cmode) > p->total_vram) in valkyrie_choose_mode()
314 printk(KERN_INFO "using video mode %d and color mode %d.\n", in valkyrie_choose_mode()
326 return -ENODEV; in valkyriefb_init()
331 return -ENODEV; in valkyriefb_init()
335 return -ENODEV; in valkyriefb_init()
337 /* Hardcoded addresses... welcome to 68k Macintosh country :-) */ in valkyriefb_init()
363 return -ENOMEM; in valkyriefb_init()
370 p->total_vram = 0x100000; in valkyriefb_init()
371 p->frame_buffer_phys = frame_buffer_phys; in valkyriefb_init()
372 p->frame_buffer = __ioremap(frame_buffer_phys, p->total_vram, flags); in valkyriefb_init()
373 p->cmap_regs_phys = cmap_regs_phys; in valkyriefb_init()
374 p->cmap_regs = ioremap(p->cmap_regs_phys, 0x1000); in valkyriefb_init()
375 p->valkyrie_regs_phys = cmap_regs_phys+0x6000; in valkyriefb_init()
376 p->valkyrie_regs = ioremap(p->valkyrie_regs_phys, 0x1000); in valkyriefb_init()
377 err = -ENOMEM; in valkyriefb_init()
378 if (p->frame_buffer == NULL || p->cmap_regs == NULL in valkyriefb_init()
379 || p->valkyrie_regs == NULL) { in valkyriefb_init()
385 mac_vmode_to_var(default_vmode, default_cmode, &p->info.var); in valkyriefb_init()
386 err = valkyrie_init_info(&p->info, p); in valkyriefb_init()
389 valkyrie_init_fix(&p->info.fix, p); in valkyriefb_init()
390 if (valkyriefb_set_par(&p->info)) in valkyriefb_init()
392 printk(KERN_ERR "valkyriefb: can't set default video mode\n"); in valkyriefb_init()
394 if ((err = register_framebuffer(&p->info)) != 0) in valkyriefb_init()
397 fb_info(&p->info, "valkyrie frame buffer device\n"); in valkyriefb_init()
401 fb_dealloc_cmap(&p->info.cmap); in valkyriefb_init()
403 if (p->frame_buffer) in valkyriefb_init()
404 iounmap(p->frame_buffer); in valkyriefb_init()
405 if (p->cmap_regs) in valkyriefb_init()
406 iounmap(p->cmap_regs); in valkyriefb_init()
407 if (p->valkyrie_regs) in valkyriefb_init()
408 iounmap(p->valkyrie_regs); in valkyriefb_init()
414 * Get the monitor sense value.
418 int sense, in; in read_valkyrie_sense() local
420 out_8(&p->valkyrie_regs->msense.r, 0); /* release all lines */ in read_valkyrie_sense()
422 sense = ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x70) << 4; in read_valkyrie_sense()
423 /* drive each sense line low in turn and collect the other 2 */ in read_valkyrie_sense()
424 out_8(&p->valkyrie_regs->msense.r, 4); /* drive A low */ in read_valkyrie_sense()
426 sense |= ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x30); in read_valkyrie_sense()
427 out_8(&p->valkyrie_regs->msense.r, 2); /* drive B low */ in read_valkyrie_sense()
429 sense |= ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x40) >> 3; in read_valkyrie_sense()
430 sense |= (in & 0x10) >> 2; in read_valkyrie_sense()
431 out_8(&p->valkyrie_regs->msense.r, 1); /* drive C low */ in read_valkyrie_sense()
433 sense |= ((in = in_8(&p->valkyrie_regs->msense.r)) & 0x60) >> 5; in read_valkyrie_sense()
435 out_8(&p->valkyrie_regs->msense.r, 7); in read_valkyrie_sense()
437 return sense; in read_valkyrie_sense()
441 * This routine takes a user-supplied var,
459 * messages.) In addition, I think the new code *might* fix some vmode-
476 var->xres, var->yres, var->bits_per_pixel); in valkyrie_var_to_par()
477 return -EINVAL; in valkyrie_var_to_par()
480 /* Check if we know about the wanted video mode */ in valkyrie_var_to_par()
481 if (vmode < 1 || vmode > VMODE_MAX || !valkyrie_reg_init[vmode-1]) { in valkyrie_var_to_par()
483 return -EINVAL; in valkyrie_var_to_par()
488 return -EINVAL; in valkyrie_var_to_par()
491 if (var->xres_virtual > var->xres || var->yres_virtual > var->yres in valkyrie_var_to_par()
492 || var->xoffset != 0 || var->yoffset != 0) { in valkyrie_var_to_par()
493 return -EINVAL; in valkyrie_var_to_par()
496 init = valkyrie_reg_init[vmode-1]; in valkyrie_var_to_par()
497 if (init->pitch[cmode] == 0) { in valkyrie_var_to_par()
500 return -EINVAL; in valkyrie_var_to_par()
503 if (valkyrie_vram_reqd(vmode, cmode) > p->total_vram) { in valkyrie_var_to_par()
506 return -EINVAL; in valkyrie_var_to_par()
509 par->vmode = vmode; in valkyrie_var_to_par()
510 par->cmode = cmode; in valkyrie_var_to_par()
511 par->init = init; in valkyrie_var_to_par()
512 par->xres = var->xres; in valkyrie_var_to_par()
513 par->yres = var->yres; in valkyrie_var_to_par()
514 par->vxres = par->xres; in valkyrie_var_to_par()
515 par->vyres = par->yres; in valkyrie_var_to_par()
523 strcpy(fix->id, "valkyrie"); in valkyrie_init_fix()
524 fix->mmio_start = p->valkyrie_regs_phys; in valkyrie_init_fix()
525 fix->mmio_len = sizeof(struct valkyrie_regs); in valkyrie_init_fix()
526 fix->type = FB_TYPE_PACKED_PIXELS; in valkyrie_init_fix()
527 fix->smem_start = p->frame_buffer_phys + 0x1000; in valkyrie_init_fix()
528 fix->smem_len = p->total_vram; in valkyrie_init_fix()
530 fix->type_aux = 0; in valkyrie_init_fix()
531 fix->ywrapstep = 0; in valkyrie_init_fix()
532 fix->ypanstep = 0; in valkyrie_init_fix()
533 fix->xpanstep = 0; in valkyrie_init_fix()
541 fix->smem_len = valkyrie_vram_reqd(par->vmode, par->cmode); in valkyrie_par_to_fix()
542 fix->visual = (par->cmode == CMODE_8) ? in valkyrie_par_to_fix()
544 fix->line_length = par->vxres << par->cmode; in valkyrie_par_to_fix()
551 info->fbops = &valkyriefb_ops; in valkyrie_init_info()
552 info->screen_base = p->frame_buffer + 0x1000; in valkyrie_init_info()
553 info->flags = FBINFO_DEFAULT; in valkyrie_init_info()
554 info->pseudo_palette = p->pseudo_palette; in valkyrie_init_info()
555 info->par = &p->par; in valkyrie_init_info()
556 return fb_alloc_cmap(&info->cmap, 256, 0); in valkyrie_init_info()