Lines Matching +full:y +full:- +full:rc

2  * linux/drivers/video/vt8623fb.c - fbdev driver for
5 * Copyright (c) 2006-2007 Ondrej Zajicek <santiago@crfreenet.org>
41 /* ------------------------------------------------------------------------- */
93 /* ------------------------------------------------------------------------- */
98 static char *mode_option = "640x480-8@60";
106 MODULE_PARM_DESC(mode_option, "Default video mode ('640x480-8@60', etc)");
108 MODULE_PARM_DESC(mode, "Default video mode e.g. '648x480-8@60' (deprecated)");
110 MODULE_PARM_DESC(mtrr, "Enable write-combining with MTRR (1=enable, 0=disable, default=1)");
113 /* ------------------------------------------------------------------------- */
117 struct vt8623fb_info *par = info->par; in vt8623fb_tilecursor()
119 svga_tilecursor(par->state.vgabase, info, cursor); in vt8623fb_tilecursor()
132 /* ------------------------------------------------------------------------- */
135 /* image data is MSB-first, fb structure is MSB-first too */
141 /* vt8623fb_iplan_imageblit silently assumes that almost everything is 8-pixel aligned */
144 u32 fg = expand_color(image->fg_color); in vt8623fb_iplan_imageblit()
145 u32 bg = expand_color(image->bg_color); in vt8623fb_iplan_imageblit()
150 int x, y; in vt8623fb_iplan_imageblit() local
152 src1 = image->data; in vt8623fb_iplan_imageblit()
153 dst1 = info->screen_base + (image->dy * info->fix.line_length) in vt8623fb_iplan_imageblit()
154 + ((image->dx / 8) * 4); in vt8623fb_iplan_imageblit()
156 for (y = 0; y < image->height; y++) { in vt8623fb_iplan_imageblit()
159 for (x = 0; x < image->width; x += 8) { in vt8623fb_iplan_imageblit()
164 src1 += image->width / 8; in vt8623fb_iplan_imageblit()
165 dst1 += info->fix.line_length; in vt8623fb_iplan_imageblit()
169 /* vt8623fb_iplan_fillrect silently assumes that almost everything is 8-pixel aligned */
172 u32 fg = expand_color(rect->color); in vt8623fb_iplan_fillrect()
175 int x, y; in vt8623fb_iplan_fillrect() local
177 dst1 = info->screen_base + (rect->dy * info->fix.line_length) in vt8623fb_iplan_fillrect()
178 + ((rect->dx / 8) * 4); in vt8623fb_iplan_fillrect()
180 for (y = 0; y < rect->height; y++) { in vt8623fb_iplan_fillrect()
182 for (x = 0; x < rect->width; x += 8) { in vt8623fb_iplan_fillrect()
185 dst1 += info->fix.line_length; in vt8623fb_iplan_fillrect()
190 /* image data is MSB-first, fb structure is high-nibble-in-low-byte-first */
197 /* vt8623fb_cfb4_imageblit silently assumes that almost everything is 8-pixel aligned */
200 u32 fg = image->fg_color * 0x11111111; in vt8623fb_cfb4_imageblit()
201 u32 bg = image->bg_color * 0x11111111; in vt8623fb_cfb4_imageblit()
206 int x, y; in vt8623fb_cfb4_imageblit() local
208 src1 = image->data; in vt8623fb_cfb4_imageblit()
209 dst1 = info->screen_base + (image->dy * info->fix.line_length) in vt8623fb_cfb4_imageblit()
210 + ((image->dx / 8) * 4); in vt8623fb_cfb4_imageblit()
212 for (y = 0; y < image->height; y++) { in vt8623fb_cfb4_imageblit()
215 for (x = 0; x < image->width; x += 8) { in vt8623fb_cfb4_imageblit()
220 src1 += image->width / 8; in vt8623fb_cfb4_imageblit()
221 dst1 += info->fix.line_length; in vt8623fb_cfb4_imageblit()
227 if ((info->var.bits_per_pixel == 4) && (image->depth == 1) in vt8623fb_imageblit()
228 && ((image->width % 8) == 0) && ((image->dx % 8) == 0)) { in vt8623fb_imageblit()
229 if (info->fix.type == FB_TYPE_INTERLEAVED_PLANES) in vt8623fb_imageblit()
239 if ((info->var.bits_per_pixel == 4) in vt8623fb_fillrect()
240 && ((rect->width % 8) == 0) && ((rect->dx % 8) == 0) in vt8623fb_fillrect()
241 && (info->fix.type == FB_TYPE_INTERLEAVED_PLANES)) in vt8623fb_fillrect()
248 /* ------------------------------------------------------------------------- */
253 struct vt8623fb_info *par = info->par; in vt8623_set_pixclock()
258 rv = svga_compute_pll(&vt8623_pll, 1000000000 / pixclock, &m, &n, &r, info->node); in vt8623_set_pixclock()
265 regval = vga_r(par->state.vgabase, VGA_MIS_R); in vt8623_set_pixclock()
266 vga_w(par->state.vgabase, VGA_MIS_W, regval | VGA_MIS_ENB_PLL_LOAD); in vt8623_set_pixclock()
269 vga_wseq(par->state.vgabase, 0x46, (n | (r << 6))); in vt8623_set_pixclock()
270 vga_wseq(par->state.vgabase, 0x47, m); in vt8623_set_pixclock()
275 svga_wseq_mask(par->state.vgabase, 0x40, 0x02, 0x02); in vt8623_set_pixclock()
276 svga_wseq_mask(par->state.vgabase, 0x40, 0x00, 0x02); in vt8623_set_pixclock()
282 struct vt8623fb_info *par = info->par; in vt8623fb_open()
284 mutex_lock(&(par->open_lock)); in vt8623fb_open()
285 if (par->ref_count == 0) { in vt8623fb_open()
286 void __iomem *vgabase = par->state.vgabase; in vt8623fb_open()
288 memset(&(par->state), 0, sizeof(struct vgastate)); in vt8623fb_open()
289 par->state.vgabase = vgabase; in vt8623fb_open()
290 par->state.flags = VGA_SAVE_MODE | VGA_SAVE_FONTS | VGA_SAVE_CMAP; in vt8623fb_open()
291 par->state.num_crtc = 0xA2; in vt8623fb_open()
292 par->state.num_seq = 0x50; in vt8623fb_open()
293 save_vga(&(par->state)); in vt8623fb_open()
296 par->ref_count++; in vt8623fb_open()
297 mutex_unlock(&(par->open_lock)); in vt8623fb_open()
304 struct vt8623fb_info *par = info->par; in vt8623fb_release()
306 mutex_lock(&(par->open_lock)); in vt8623fb_release()
307 if (par->ref_count == 0) { in vt8623fb_release()
308 mutex_unlock(&(par->open_lock)); in vt8623fb_release()
309 return -EINVAL; in vt8623fb_release()
312 if (par->ref_count == 1) in vt8623fb_release()
313 restore_vga(&(par->state)); in vt8623fb_release()
315 par->ref_count--; in vt8623fb_release()
316 mutex_unlock(&(par->open_lock)); in vt8623fb_release()
325 if (!var->pixclock) in vt8623fb_check_var()
326 return -EINVAL; in vt8623fb_check_var()
337 if (var->xres > var->xres_virtual) in vt8623fb_check_var()
338 var->xres_virtual = var->xres; in vt8623fb_check_var()
340 if (var->yres > var->yres_virtual) in vt8623fb_check_var()
341 var->yres_virtual = var->yres; in vt8623fb_check_var()
344 step = vt8623fb_formats[rv].xresstep - 1; in vt8623fb_check_var()
345 var->xres_virtual = (var->xres_virtual+step) & ~step; in vt8623fb_check_var()
348 mem = ((var->bits_per_pixel * var->xres_virtual) >> 3) * var->yres_virtual; in vt8623fb_check_var()
349 if (mem > info->screen_size) in vt8623fb_check_var()
352 mem >> 10, (unsigned int) (info->screen_size >> 10)); in vt8623fb_check_var()
353 return -EINVAL; in vt8623fb_check_var()
357 if ((var->bits_per_pixel == 0) && (mem > (256*1024))) in vt8623fb_check_var()
361 return -EINVAL; in vt8623fb_check_var()
364 rv = svga_check_timings (&vt8623_timing_regs, var, info->node); in vt8623fb_check_var()
372 if (var->vmode & FB_VMODE_INTERLACED) in vt8623fb_check_var()
373 return -EINVAL; in vt8623fb_check_var()
382 struct vt8623fb_info *par = info->par; in vt8623fb_set_par()
383 u32 bpp = info->var.bits_per_pixel; in vt8623fb_set_par()
386 info->fix.ypanstep = 1; in vt8623fb_set_par()
387 info->fix.line_length = (info->var.xres_virtual * bpp) / 8; in vt8623fb_set_par()
389 info->flags &= ~FBINFO_MISC_TILEBLITTING; in vt8623fb_set_par()
390 info->tileops = NULL; in vt8623fb_set_par()
394 bitmap_zero(info->pixmap.blit_x, FB_MAX_BLIT_WIDTH); in vt8623fb_set_par()
395 set_bit(8 - 1, info->pixmap.blit_x); in vt8623fb_set_par()
397 bitmap_fill(info->pixmap.blit_x, FB_MAX_BLIT_WIDTH); in vt8623fb_set_par()
399 bitmap_fill(info->pixmap.blit_y, FB_MAX_BLIT_HEIGHT); in vt8623fb_set_par()
401 offset_value = (info->var.xres_virtual * bpp) / 64; in vt8623fb_set_par()
402 fetch_value = ((info->var.xres * bpp) / 128) + 4; in vt8623fb_set_par()
405 fetch_value = (info->var.xres / 8) + 8; /* + 0 is OK */ in vt8623fb_set_par()
407 screen_size = info->var.yres_virtual * info->fix.line_length; in vt8623fb_set_par()
409 info->fix.ypanstep = 16; in vt8623fb_set_par()
410 info->fix.line_length = 0; in vt8623fb_set_par()
412 info->flags |= FBINFO_MISC_TILEBLITTING; in vt8623fb_set_par()
413 info->tileops = &vt8623fb_tile_ops; in vt8623fb_set_par()
416 bitmap_zero(info->pixmap.blit_x, FB_MAX_BLIT_WIDTH); in vt8623fb_set_par()
417 set_bit(8 - 1, info->pixmap.blit_x); in vt8623fb_set_par()
418 bitmap_zero(info->pixmap.blit_y, FB_MAX_BLIT_HEIGHT); in vt8623fb_set_par()
419 set_bit(16 - 1, info->pixmap.blit_y); in vt8623fb_set_par()
421 offset_value = info->var.xres_virtual / 16; in vt8623fb_set_par()
422 fetch_value = (info->var.xres / 8) + 8; in vt8623fb_set_par()
423 screen_size = (info->var.xres_virtual * info->var.yres_virtual) / 64; in vt8623fb_set_par()
426 info->var.xoffset = 0; in vt8623fb_set_par()
427 info->var.yoffset = 0; in vt8623fb_set_par()
428 info->var.activate = FB_ACTIVATE_NOW; in vt8623fb_set_par()
431 svga_wseq_mask(par->state.vgabase, 0x10, 0x01, 0x01); in vt8623fb_set_par()
432 svga_wcrt_mask(par->state.vgabase, 0x11, 0x00, 0x80); in vt8623fb_set_par()
433 svga_wcrt_mask(par->state.vgabase, 0x47, 0x00, 0x01); in vt8623fb_set_par()
436 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); in vt8623fb_set_par()
437 svga_wcrt_mask(par->state.vgabase, 0x36, 0x30, 0x30); in vt8623fb_set_par()
438 svga_wcrt_mask(par->state.vgabase, 0x17, 0x00, 0x80); in vt8623fb_set_par()
441 svga_set_default_gfx_regs(par->state.vgabase); in vt8623fb_set_par()
442 svga_set_default_atc_regs(par->state.vgabase); in vt8623fb_set_par()
443 svga_set_default_seq_regs(par->state.vgabase); in vt8623fb_set_par()
444 svga_set_default_crt_regs(par->state.vgabase); in vt8623fb_set_par()
445 svga_wcrt_multi(par->state.vgabase, vt8623_line_compare_regs, 0xFFFFFFFF); in vt8623fb_set_par()
446 svga_wcrt_multi(par->state.vgabase, vt8623_start_address_regs, 0); in vt8623fb_set_par()
448 svga_wcrt_multi(par->state.vgabase, vt8623_offset_regs, offset_value); in vt8623fb_set_par()
449 svga_wseq_multi(par->state.vgabase, vt8623_fetch_count_regs, fetch_value); in vt8623fb_set_par()
452 svga_wcrt_mask(par->state.vgabase, 0x03, 0x00, 0x60); in vt8623fb_set_par()
453 svga_wcrt_mask(par->state.vgabase, 0x05, 0x00, 0x60); in vt8623fb_set_par()
455 if (info->var.vmode & FB_VMODE_DOUBLE) in vt8623fb_set_par()
456 svga_wcrt_mask(par->state.vgabase, 0x09, 0x80, 0x80); in vt8623fb_set_par()
458 svga_wcrt_mask(par->state.vgabase, 0x09, 0x00, 0x80); in vt8623fb_set_par()
460 svga_wseq_mask(par->state.vgabase, 0x1E, 0xF0, 0xF0); // DI/DVP bus in vt8623fb_set_par()
461 svga_wseq_mask(par->state.vgabase, 0x2A, 0x0F, 0x0F); // DI/DVP bus in vt8623fb_set_par()
462 svga_wseq_mask(par->state.vgabase, 0x16, 0x08, 0xBF); // FIFO read threshold in vt8623fb_set_par()
463 vga_wseq(par->state.vgabase, 0x17, 0x1F); // FIFO depth in vt8623fb_set_par()
464 vga_wseq(par->state.vgabase, 0x18, 0x4E); in vt8623fb_set_par()
465 svga_wseq_mask(par->state.vgabase, 0x1A, 0x08, 0x08); // enable MMIO ? in vt8623fb_set_par()
467 vga_wcrt(par->state.vgabase, 0x32, 0x00); in vt8623fb_set_par()
468 vga_wcrt(par->state.vgabase, 0x34, 0x00); in vt8623fb_set_par()
469 vga_wcrt(par->state.vgabase, 0x6A, 0x80); in vt8623fb_set_par()
470 vga_wcrt(par->state.vgabase, 0x6A, 0xC0); in vt8623fb_set_par()
472 vga_wgfx(par->state.vgabase, 0x20, 0x00); in vt8623fb_set_par()
473 vga_wgfx(par->state.vgabase, 0x21, 0x00); in vt8623fb_set_par()
474 vga_wgfx(par->state.vgabase, 0x22, 0x00); in vt8623fb_set_par()
477 mode = svga_match_format(vt8623fb_formats, &(info->var), &(info->fix)); in vt8623fb_set_par()
481 svga_set_textmode_vga_regs(par->state.vgabase); in vt8623fb_set_par()
482 svga_wseq_mask(par->state.vgabase, 0x15, 0x00, 0xFE); in vt8623fb_set_par()
483 svga_wcrt_mask(par->state.vgabase, 0x11, 0x60, 0x70); in vt8623fb_set_par()
487 vga_wgfx(par->state.vgabase, VGA_GFX_MODE, 0x40); in vt8623fb_set_par()
488 svga_wseq_mask(par->state.vgabase, 0x15, 0x20, 0xFE); in vt8623fb_set_par()
489 svga_wcrt_mask(par->state.vgabase, 0x11, 0x00, 0x70); in vt8623fb_set_par()
493 svga_wseq_mask(par->state.vgabase, 0x15, 0x00, 0xFE); in vt8623fb_set_par()
494 svga_wcrt_mask(par->state.vgabase, 0x11, 0x00, 0x70); in vt8623fb_set_par()
498 svga_wseq_mask(par->state.vgabase, 0x15, 0x22, 0xFE); in vt8623fb_set_par()
502 svga_wseq_mask(par->state.vgabase, 0x15, 0xB6, 0xFE); in vt8623fb_set_par()
506 svga_wseq_mask(par->state.vgabase, 0x15, 0xAE, 0xFE); in vt8623fb_set_par()
509 printk(KERN_ERR "vt8623fb: unsupported mode - bug\n"); in vt8623fb_set_par()
510 return (-EINVAL); in vt8623fb_set_par()
513 vt8623_set_pixclock(info, info->var.pixclock); in vt8623fb_set_par()
514 svga_set_timings(par->state.vgabase, &vt8623_timing_regs, &(info->var), 1, 1, in vt8623fb_set_par()
515 (info->var.vmode & FB_VMODE_DOUBLE) ? 2 : 1, 1, in vt8623fb_set_par()
516 1, info->node); in vt8623fb_set_par()
518 if (screen_size > info->screen_size) in vt8623fb_set_par()
519 screen_size = info->screen_size; in vt8623fb_set_par()
520 memset_io(info->screen_base, 0x00, screen_size); in vt8623fb_set_par()
523 svga_wcrt_mask(par->state.vgabase, 0x17, 0x80, 0x80); in vt8623fb_set_par()
524 svga_wcrt_mask(par->state.vgabase, 0x36, 0x00, 0x30); in vt8623fb_set_par()
525 svga_wseq_mask(par->state.vgabase, 0x01, 0x00, 0x20); in vt8623fb_set_par()
534 switch (fb->var.bits_per_pixel) { in vt8623fb_setcolreg()
538 return -EINVAL; in vt8623fb_setcolreg()
548 return -EINVAL; in vt8623fb_setcolreg()
560 if (fb->var.green.length == 5) in vt8623fb_setcolreg()
561 ((u32*)fb->pseudo_palette)[regno] = ((red & 0xF800) >> 1) | in vt8623fb_setcolreg()
563 else if (fb->var.green.length == 6) in vt8623fb_setcolreg()
564 ((u32*)fb->pseudo_palette)[regno] = (red & 0xF800) | in vt8623fb_setcolreg()
567 return -EINVAL; in vt8623fb_setcolreg()
575 ((u32*)fb->pseudo_palette)[regno] = ((red & 0xFF00) << 8) | in vt8623fb_setcolreg()
579 return -EINVAL; in vt8623fb_setcolreg()
588 struct vt8623fb_info *par = info->par; in vt8623fb_blank()
593 svga_wcrt_mask(par->state.vgabase, 0x36, 0x00, 0x30); in vt8623fb_blank()
594 svga_wseq_mask(par->state.vgabase, 0x01, 0x00, 0x20); in vt8623fb_blank()
598 svga_wcrt_mask(par->state.vgabase, 0x36, 0x00, 0x30); in vt8623fb_blank()
599 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); in vt8623fb_blank()
603 svga_wcrt_mask(par->state.vgabase, 0x36, 0x10, 0x30); in vt8623fb_blank()
604 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); in vt8623fb_blank()
608 svga_wcrt_mask(par->state.vgabase, 0x36, 0x20, 0x30); in vt8623fb_blank()
609 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); in vt8623fb_blank()
613 svga_wcrt_mask(par->state.vgabase, 0x36, 0x30, 0x30); in vt8623fb_blank()
614 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); in vt8623fb_blank()
624 struct vt8623fb_info *par = info->par; in vt8623fb_pan_display()
628 if (info->var.bits_per_pixel == 0) { in vt8623fb_pan_display()
629 offset = (var->yoffset / 16) * info->var.xres_virtual in vt8623fb_pan_display()
630 + var->xoffset; in vt8623fb_pan_display()
633 offset = (var->yoffset * info->fix.line_length) + in vt8623fb_pan_display()
634 (var->xoffset * info->var.bits_per_pixel / 8); in vt8623fb_pan_display()
635 offset = offset >> ((info->var.bits_per_pixel == 4) ? 2 : 1); in vt8623fb_pan_display()
639 svga_wcrt_multi(par->state.vgabase, vt8623_start_address_regs, offset); in vt8623fb_pan_display()
645 /* ------------------------------------------------------------------------- */
677 int rc; in vt8623_pci_probe() local
681 dev_info(&(dev->dev), "ignoring secondary device\n"); in vt8623_pci_probe()
682 return -ENODEV; in vt8623_pci_probe()
685 rc = aperture_remove_conflicting_pci_devices(dev, "vt8623fb"); in vt8623_pci_probe()
686 if (rc) in vt8623_pci_probe()
687 return rc; in vt8623_pci_probe()
690 info = framebuffer_alloc(sizeof(struct vt8623fb_info), &(dev->dev)); in vt8623_pci_probe()
692 return -ENOMEM; in vt8623_pci_probe()
694 par = info->par; in vt8623_pci_probe()
695 mutex_init(&par->open_lock); in vt8623_pci_probe()
697 info->flags = FBINFO_PARTIAL_PAN_OK | FBINFO_HWACCEL_YPAN; in vt8623_pci_probe()
698 info->fbops = &vt8623fb_ops; in vt8623_pci_probe()
702 rc = pci_enable_device(dev); in vt8623_pci_probe()
703 if (rc < 0) { in vt8623_pci_probe()
704 dev_err(info->device, "cannot enable PCI device\n"); in vt8623_pci_probe()
708 rc = pci_request_regions(dev, "vt8623fb"); in vt8623_pci_probe()
709 if (rc < 0) { in vt8623_pci_probe()
710 dev_err(info->device, "cannot reserve framebuffer region\n"); in vt8623_pci_probe()
714 info->fix.smem_start = pci_resource_start(dev, 0); in vt8623_pci_probe()
715 info->fix.smem_len = pci_resource_len(dev, 0); in vt8623_pci_probe()
716 info->fix.mmio_start = pci_resource_start(dev, 1); in vt8623_pci_probe()
717 info->fix.mmio_len = pci_resource_len(dev, 1); in vt8623_pci_probe()
720 info->screen_base = pci_iomap_wc(dev, 0, 0); in vt8623_pci_probe()
721 if (! info->screen_base) { in vt8623_pci_probe()
722 rc = -ENOMEM; in vt8623_pci_probe()
723 dev_err(info->device, "iomap for framebuffer failed\n"); in vt8623_pci_probe()
727 par->mmio_base = pci_iomap(dev, 1, 0); in vt8623_pci_probe()
728 if (! par->mmio_base) { in vt8623_pci_probe()
729 rc = -ENOMEM; in vt8623_pci_probe()
730 dev_err(info->device, "iomap for MMIO failed\n"); in vt8623_pci_probe()
739 pcibios_bus_to_resource(dev->bus, &vga_res, &bus_reg); in vt8623_pci_probe()
741 par->state.vgabase = (void __iomem *) (unsigned long) vga_res.start; in vt8623_pci_probe()
744 memsize1 = (vga_rseq(par->state.vgabase, 0x34) + 1) >> 1; in vt8623_pci_probe()
745 memsize2 = vga_rseq(par->state.vgabase, 0x39) << 2; in vt8623_pci_probe()
748 info->screen_size = memsize1 << 20; in vt8623_pci_probe()
750 …dev_err(info->device, "memory size detection failed (%x %x), suppose 16 MB\n", memsize1, memsize2); in vt8623_pci_probe()
751 info->screen_size = 16 << 20; in vt8623_pci_probe()
754 info->fix.smem_len = info->screen_size; in vt8623_pci_probe()
755 strcpy(info->fix.id, "VIA VT8623"); in vt8623_pci_probe()
756 info->fix.type = FB_TYPE_PACKED_PIXELS; in vt8623_pci_probe()
757 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; in vt8623_pci_probe()
758 info->fix.ypanstep = 0; in vt8623_pci_probe()
759 info->fix.accel = FB_ACCEL_NONE; in vt8623_pci_probe()
760 info->pseudo_palette = (void*)par->pseudo_palette; in vt8623_pci_probe()
765 rc = fb_find_mode(&(info->var), info, mode_option, NULL, 0, NULL, 8); in vt8623_pci_probe()
767 if (! ((rc == 1) || (rc == 2))) { in vt8623_pci_probe()
768 rc = -EINVAL; in vt8623_pci_probe()
769 dev_err(info->device, "mode %s not found\n", mode_option); in vt8623_pci_probe()
773 rc = fb_alloc_cmap(&info->cmap, 256, 0); in vt8623_pci_probe()
774 if (rc < 0) { in vt8623_pci_probe()
775 dev_err(info->device, "cannot allocate colormap\n"); in vt8623_pci_probe()
779 rc = register_framebuffer(info); in vt8623_pci_probe()
780 if (rc < 0) { in vt8623_pci_probe()
781 dev_err(info->device, "cannot register framebuffer\n"); in vt8623_pci_probe()
786 info->fix.id, pci_name(dev), info->fix.smem_len >> 20); in vt8623_pci_probe()
792 par->wc_cookie = arch_phys_wc_add(info->fix.smem_start, in vt8623_pci_probe()
793 info->fix.smem_len); in vt8623_pci_probe()
799 fb_dealloc_cmap(&info->cmap); in vt8623_pci_probe()
802 pci_iounmap(dev, par->mmio_base); in vt8623_pci_probe()
804 pci_iounmap(dev, info->screen_base); in vt8623_pci_probe()
811 return rc; in vt8623_pci_probe()
821 struct vt8623fb_info *par = info->par; in vt8623_pci_remove()
823 arch_phys_wc_del(par->wc_cookie); in vt8623_pci_remove()
825 fb_dealloc_cmap(&info->cmap); in vt8623_pci_remove()
827 pci_iounmap(dev, info->screen_base); in vt8623_pci_remove()
828 pci_iounmap(dev, par->mmio_base); in vt8623_pci_remove()
842 struct vt8623fb_info *par = info->par; in vt8623_pci_suspend()
844 dev_info(info->device, "suspend\n"); in vt8623_pci_suspend()
847 mutex_lock(&(par->open_lock)); in vt8623_pci_suspend()
849 if (par->ref_count == 0) { in vt8623_pci_suspend()
850 mutex_unlock(&(par->open_lock)); in vt8623_pci_suspend()
857 mutex_unlock(&(par->open_lock)); in vt8623_pci_suspend()
869 struct vt8623fb_info *par = info->par; in vt8623_pci_resume()
871 dev_info(info->device, "resume\n"); in vt8623_pci_resume()
874 mutex_lock(&(par->open_lock)); in vt8623_pci_resume()
876 if (par->ref_count == 0) in vt8623_pci_resume()
883 mutex_unlock(&(par->open_lock)); in vt8623_pci_resume()
935 return -ENODEV; in vt8623fb_init()
939 return -ENODEV; in vt8623fb_init()
949 /* ------------------------------------------------------------------------- */