Lines Matching +full:io +full:- +full:multiplex

2  *  linux/drivers/video/arkfb.c -- Frame buffer device driver for ARK 2000PV
42 /* ------------------------------------------------------------------------- */
95 /* ------------------------------------------------------------------------- */
100 static char *mode_option = "640x480-8@60";
107 MODULE_PARM_DESC(mode_option, "Default video mode ('640x480-8@60', etc)");
109 MODULE_PARM_DESC(mode, "Default video mode ('640x480-8@60', etc) (deprecated)");
117 /* ------------------------------------------------------------------------- */
122 const u8 *font = map->data; in arkfb_settile()
123 u8 __iomem *fb = (u8 __iomem *)info->screen_base; in arkfb_settile()
126 if ((map->width != 8) || (map->height != 16) || in arkfb_settile()
127 (map->depth != 1) || (map->length != 256)) { in arkfb_settile()
129 map->width, map->height, map->depth, map->length); in arkfb_settile()
134 for (c = 0; c < map->length; c++) { in arkfb_settile()
135 for (i = 0; i < map->height; i++) { in arkfb_settile()
144 font += map->height; in arkfb_settile()
150 struct arkfb_info *par = info->par; in arkfb_tilecursor()
152 svga_tilecursor(par->state.vgabase, info, cursor); in arkfb_tilecursor()
165 /* ------------------------------------------------------------------------- */
168 /* image data is MSB-first, fb structure is MSB-first too */
174 /* arkfb_iplan_imageblit silently assumes that almost everything is 8-pixel aligned */
177 u32 fg = expand_color(image->fg_color); in arkfb_iplan_imageblit()
178 u32 bg = expand_color(image->bg_color); in arkfb_iplan_imageblit()
185 src1 = image->data; in arkfb_iplan_imageblit()
186 dst1 = info->screen_base + (image->dy * info->fix.line_length) in arkfb_iplan_imageblit()
187 + ((image->dx / 8) * 4); in arkfb_iplan_imageblit()
189 for (y = 0; y < image->height; y++) { in arkfb_iplan_imageblit()
192 for (x = 0; x < image->width; x += 8) { in arkfb_iplan_imageblit()
197 src1 += image->width / 8; in arkfb_iplan_imageblit()
198 dst1 += info->fix.line_length; in arkfb_iplan_imageblit()
203 /* arkfb_iplan_fillrect silently assumes that almost everything is 8-pixel aligned */
206 u32 fg = expand_color(rect->color); in arkfb_iplan_fillrect()
211 dst1 = info->screen_base + (rect->dy * info->fix.line_length) in arkfb_iplan_fillrect()
212 + ((rect->dx / 8) * 4); in arkfb_iplan_fillrect()
214 for (y = 0; y < rect->height; y++) { in arkfb_iplan_fillrect()
216 for (x = 0; x < rect->width; x += 8) { in arkfb_iplan_fillrect()
219 dst1 += info->fix.line_length; in arkfb_iplan_fillrect()
225 /* image data is MSB-first, fb structure is high-nibble-in-low-byte-first */
232 /* arkfb_cfb4_imageblit silently assumes that almost everything is 8-pixel aligned */
235 u32 fg = image->fg_color * 0x11111111; in arkfb_cfb4_imageblit()
236 u32 bg = image->bg_color * 0x11111111; in arkfb_cfb4_imageblit()
243 src1 = image->data; in arkfb_cfb4_imageblit()
244 dst1 = info->screen_base + (image->dy * info->fix.line_length) in arkfb_cfb4_imageblit()
245 + ((image->dx / 8) * 4); in arkfb_cfb4_imageblit()
247 for (y = 0; y < image->height; y++) { in arkfb_cfb4_imageblit()
250 for (x = 0; x < image->width; x += 8) { in arkfb_cfb4_imageblit()
255 src1 += image->width / 8; in arkfb_cfb4_imageblit()
256 dst1 += info->fix.line_length; in arkfb_cfb4_imageblit()
263 if ((info->var.bits_per_pixel == 4) && (image->depth == 1) in arkfb_imageblit()
264 && ((image->width % 8) == 0) && ((image->dx % 8) == 0)) { in arkfb_imageblit()
265 if (info->fix.type == FB_TYPE_INTERLEAVED_PLANES) in arkfb_imageblit()
275 if ((info->var.bits_per_pixel == 4) in arkfb_fillrect()
276 && ((rect->width % 8) == 0) && ((rect->dx % 8) == 0) in arkfb_fillrect()
277 && (info->fix.type == FB_TYPE_INTERLEAVED_PLANES)) in arkfb_fillrect()
284 /* ------------------------------------------------------------------------- */
323 info->dac_read_regs(info->data, code, count); in dac_read_regs()
329 info->dac_write_regs(info->data, code, 1); in dac_write_reg()
334 info->dac_write_regs(info->data, code, count); in dac_write_regs()
339 return info->dacops->dac_set_mode(info, mode); in dac_set_mode()
344 return info->dacops->dac_set_freq(info, channel, freq); in dac_set_freq()
349 info->dacops->dac_release(info); in dac_release()
353 /* ------------------------------------------------------------------------- */
378 return -EINVAL; in ics5342_set_mode()
383 return -EINVAL; in ics5342_set_mode()
386 DAC_PAR(info)->mode = mode; in ics5342_set_mode()
394 /* pd4 - allow only posdivider 4 (r=2) */
406 int rv = svga_compute_pll((DAC_PAR(info)->mode == DAC_PSEUDO8_16) in ics5342_set_freq()
411 return -EINVAL; in ics5342_set_freq()
413 u8 code[6] = {4, 3, 5, m-2, 5, (n-2) | (r << 5)}; in ics5342_set_freq()
439 info->dacops = &ics5342_ops; in ics5342_init()
440 info->dac_read_regs = drr; in ics5342_init()
441 info->dac_write_regs = dwr; in ics5342_init()
442 info->data = data; in ics5342_init()
443 DAC_PAR(info)->mode = DAC_PSEUDO8_8; /* estimation */ in ics5342_init()
448 /* ------------------------------------------------------------------------- */
459 par = info->par; in ark_dac_read_regs()
460 regval = vga_rseq(par->state.vgabase, 0x1C); in ark_dac_read_regs()
463 vga_wseq(par->state.vgabase, 0x1C, regval | (code[0] & 4 ? 0x80 : 0)); in ark_dac_read_regs()
464 code[1] = vga_r(par->state.vgabase, dac_regs[code[0] & 3]); in ark_dac_read_regs()
465 count--; in ark_dac_read_regs()
469 vga_wseq(par->state.vgabase, 0x1C, regval); in ark_dac_read_regs()
478 par = info->par; in ark_dac_write_regs()
479 regval = vga_rseq(par->state.vgabase, 0x1C); in ark_dac_write_regs()
482 vga_wseq(par->state.vgabase, 0x1C, regval | (code[0] & 4 ? 0x80 : 0)); in ark_dac_write_regs()
483 vga_w(par->state.vgabase, dac_regs[code[0] & 3], code[1]); in ark_dac_write_regs()
484 count--; in ark_dac_write_regs()
488 vga_wseq(par->state.vgabase, 0x1C, regval); in ark_dac_write_regs()
494 struct arkfb_info *par = info->par; in ark_set_pixclock()
497 int rv = dac_set_freq(par->dac, 0, 1000000000 / pixclock); in ark_set_pixclock()
504 regval = vga_r(par->state.vgabase, VGA_MIS_R); in ark_set_pixclock()
505 vga_w(par->state.vgabase, VGA_MIS_W, regval | VGA_MIS_ENB_PLL_LOAD); in ark_set_pixclock()
513 struct arkfb_info *par = info->par; in arkfb_open()
515 mutex_lock(&(par->open_lock)); in arkfb_open()
516 if (par->ref_count == 0) { in arkfb_open()
517 void __iomem *vgabase = par->state.vgabase; in arkfb_open()
519 memset(&(par->state), 0, sizeof(struct vgastate)); in arkfb_open()
520 par->state.vgabase = vgabase; in arkfb_open()
521 par->state.flags = VGA_SAVE_MODE | VGA_SAVE_FONTS | VGA_SAVE_CMAP; in arkfb_open()
522 par->state.num_crtc = 0x60; in arkfb_open()
523 par->state.num_seq = 0x30; in arkfb_open()
524 save_vga(&(par->state)); in arkfb_open()
527 par->ref_count++; in arkfb_open()
528 mutex_unlock(&(par->open_lock)); in arkfb_open()
537 struct arkfb_info *par = info->par; in arkfb_release()
539 mutex_lock(&(par->open_lock)); in arkfb_release()
540 if (par->ref_count == 0) { in arkfb_release()
541 mutex_unlock(&(par->open_lock)); in arkfb_release()
542 return -EINVAL; in arkfb_release()
545 if (par->ref_count == 1) { in arkfb_release()
546 restore_vga(&(par->state)); in arkfb_release()
547 dac_set_mode(par->dac, DAC_PSEUDO8_8); in arkfb_release()
550 par->ref_count--; in arkfb_release()
551 mutex_unlock(&(par->open_lock)); in arkfb_release()
562 if (!var->pixclock) in arkfb_check_var()
563 return -EINVAL; in arkfb_check_var()
574 if (var->xres > var->xres_virtual) in arkfb_check_var()
575 var->xres_virtual = var->xres; in arkfb_check_var()
577 if (var->yres > var->yres_virtual) in arkfb_check_var()
578 var->yres_virtual = var->yres; in arkfb_check_var()
581 step = arkfb_formats[rv].xresstep - 1; in arkfb_check_var()
582 var->xres_virtual = (var->xres_virtual+step) & ~step; in arkfb_check_var()
586 mem = ((var->bits_per_pixel * var->xres_virtual) >> 3) * var->yres_virtual; in arkfb_check_var()
587 if (mem > info->screen_size) in arkfb_check_var()
590 mem >> 10, (unsigned int) (info->screen_size >> 10)); in arkfb_check_var()
591 return -EINVAL; in arkfb_check_var()
594 rv = svga_check_timings (&ark_timing_regs, var, info->node); in arkfb_check_var()
602 if (var->vmode & FB_VMODE_INTERLACED) in arkfb_check_var()
603 return -EINVAL; in arkfb_check_var()
612 struct arkfb_info *par = info->par; in arkfb_set_par()
614 u32 bpp = info->var.bits_per_pixel; in arkfb_set_par()
618 info->fix.ypanstep = 1; in arkfb_set_par()
619 info->fix.line_length = (info->var.xres_virtual * bpp) / 8; in arkfb_set_par()
621 info->flags &= ~FBINFO_MISC_TILEBLITTING; in arkfb_set_par()
622 info->tileops = NULL; in arkfb_set_par()
626 bitmap_zero(info->pixmap.blit_x, FB_MAX_BLIT_WIDTH); in arkfb_set_par()
627 set_bit(8 - 1, info->pixmap.blit_x); in arkfb_set_par()
629 bitmap_fill(info->pixmap.blit_x, FB_MAX_BLIT_WIDTH); in arkfb_set_par()
631 bitmap_fill(info->pixmap.blit_y, FB_MAX_BLIT_HEIGHT); in arkfb_set_par()
633 offset_value = (info->var.xres_virtual * bpp) / 64; in arkfb_set_par()
634 screen_size = info->var.yres_virtual * info->fix.line_length; in arkfb_set_par()
636 info->fix.ypanstep = 16; in arkfb_set_par()
637 info->fix.line_length = 0; in arkfb_set_par()
639 info->flags |= FBINFO_MISC_TILEBLITTING; in arkfb_set_par()
640 info->tileops = &arkfb_tile_ops; in arkfb_set_par()
643 bitmap_zero(info->pixmap.blit_x, FB_MAX_BLIT_WIDTH); in arkfb_set_par()
644 set_bit(8 - 1, info->pixmap.blit_x); in arkfb_set_par()
645 bitmap_zero(info->pixmap.blit_y, FB_MAX_BLIT_HEIGHT); in arkfb_set_par()
646 set_bit(16 - 1, info->pixmap.blit_y); in arkfb_set_par()
648 offset_value = info->var.xres_virtual / 16; in arkfb_set_par()
649 screen_size = (info->var.xres_virtual * info->var.yres_virtual) / 64; in arkfb_set_par()
652 info->var.xoffset = 0; in arkfb_set_par()
653 info->var.yoffset = 0; in arkfb_set_par()
654 info->var.activate = FB_ACTIVATE_NOW; in arkfb_set_par()
657 svga_wcrt_mask(par->state.vgabase, 0x11, 0x00, 0x80); in arkfb_set_par()
660 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); in arkfb_set_par()
661 svga_wcrt_mask(par->state.vgabase, 0x17, 0x00, 0x80); in arkfb_set_par()
664 svga_set_default_gfx_regs(par->state.vgabase); in arkfb_set_par()
665 svga_set_default_atc_regs(par->state.vgabase); in arkfb_set_par()
666 svga_set_default_seq_regs(par->state.vgabase); in arkfb_set_par()
667 svga_set_default_crt_regs(par->state.vgabase); in arkfb_set_par()
668 svga_wcrt_multi(par->state.vgabase, ark_line_compare_regs, 0xFFFFFFFF); in arkfb_set_par()
669 svga_wcrt_multi(par->state.vgabase, ark_start_address_regs, 0); in arkfb_set_par()
672 …svga_wseq_mask(par->state.vgabase, 0x10, 0x1F, 0x1F); /* enable linear framebuffer and full memory… in arkfb_set_par()
673 svga_wseq_mask(par->state.vgabase, 0x12, 0x03, 0x03); /* 4 MB linear framebuffer size */ in arkfb_set_par()
675 vga_wseq(par->state.vgabase, 0x13, info->fix.smem_start >> 16); in arkfb_set_par()
676 vga_wseq(par->state.vgabase, 0x14, info->fix.smem_start >> 24); in arkfb_set_par()
677 vga_wseq(par->state.vgabase, 0x15, 0); in arkfb_set_par()
678 vga_wseq(par->state.vgabase, 0x16, 0); in arkfb_set_par()
681 /* It is fascinating way to store 5-bit value in 8-bit register */ in arkfb_set_par()
683 vga_wseq(par->state.vgabase, 0x18, regval); in arkfb_set_par()
687 svga_wcrt_multi(par->state.vgabase, ark_offset_regs, offset_value); in arkfb_set_par()
689 /* fix for hi-res textmode */ in arkfb_set_par()
690 svga_wcrt_mask(par->state.vgabase, 0x40, 0x08, 0x08); in arkfb_set_par()
692 if (info->var.vmode & FB_VMODE_DOUBLE) in arkfb_set_par()
693 svga_wcrt_mask(par->state.vgabase, 0x09, 0x80, 0x80); in arkfb_set_par()
695 svga_wcrt_mask(par->state.vgabase, 0x09, 0x00, 0x80); in arkfb_set_par()
697 if (info->var.vmode & FB_VMODE_INTERLACED) in arkfb_set_par()
698 svga_wcrt_mask(par->state.vgabase, 0x44, 0x04, 0x04); in arkfb_set_par()
700 svga_wcrt_mask(par->state.vgabase, 0x44, 0x00, 0x04); in arkfb_set_par()
704 mode = svga_match_format(arkfb_formats, &(info->var), &(info->fix)); in arkfb_set_par()
706 /* Set mode-specific register values */ in arkfb_set_par()
710 svga_set_textmode_vga_regs(par->state.vgabase); in arkfb_set_par()
712 vga_wseq(par->state.vgabase, 0x11, 0x10); /* basic VGA mode */ in arkfb_set_par()
713 svga_wcrt_mask(par->state.vgabase, 0x46, 0x00, 0x04); /* 8bit pixel path */ in arkfb_set_par()
714 dac_set_mode(par->dac, DAC_PSEUDO8_8); in arkfb_set_par()
719 vga_wgfx(par->state.vgabase, VGA_GFX_MODE, 0x40); in arkfb_set_par()
721 vga_wseq(par->state.vgabase, 0x11, 0x10); /* basic VGA mode */ in arkfb_set_par()
722 svga_wcrt_mask(par->state.vgabase, 0x46, 0x00, 0x04); /* 8bit pixel path */ in arkfb_set_par()
723 dac_set_mode(par->dac, DAC_PSEUDO8_8); in arkfb_set_par()
728 vga_wseq(par->state.vgabase, 0x11, 0x10); /* basic VGA mode */ in arkfb_set_par()
729 svga_wcrt_mask(par->state.vgabase, 0x46, 0x00, 0x04); /* 8bit pixel path */ in arkfb_set_par()
730 dac_set_mode(par->dac, DAC_PSEUDO8_8); in arkfb_set_par()
735 vga_wseq(par->state.vgabase, 0x11, 0x16); /* 8bpp accel mode */ in arkfb_set_par()
737 if (info->var.pixclock > 20000) { in arkfb_set_par()
738 fb_dbg(info, "not using multiplex\n"); in arkfb_set_par()
739 svga_wcrt_mask(par->state.vgabase, 0x46, 0x00, 0x04); /* 8bit pixel path */ in arkfb_set_par()
740 dac_set_mode(par->dac, DAC_PSEUDO8_8); in arkfb_set_par()
742 fb_dbg(info, "using multiplex\n"); in arkfb_set_par()
743 svga_wcrt_mask(par->state.vgabase, 0x46, 0x04, 0x04); /* 16bit pixel path */ in arkfb_set_par()
744 dac_set_mode(par->dac, DAC_PSEUDO8_16); in arkfb_set_par()
751 vga_wseq(par->state.vgabase, 0x11, 0x1A); /* 16bpp accel mode */ in arkfb_set_par()
752 svga_wcrt_mask(par->state.vgabase, 0x46, 0x04, 0x04); /* 16bit pixel path */ in arkfb_set_par()
753 dac_set_mode(par->dac, DAC_RGB1555_16); in arkfb_set_par()
758 vga_wseq(par->state.vgabase, 0x11, 0x1A); /* 16bpp accel mode */ in arkfb_set_par()
759 svga_wcrt_mask(par->state.vgabase, 0x46, 0x04, 0x04); /* 16bit pixel path */ in arkfb_set_par()
760 dac_set_mode(par->dac, DAC_RGB0565_16); in arkfb_set_par()
765 vga_wseq(par->state.vgabase, 0x11, 0x16); /* 8bpp accel mode ??? */ in arkfb_set_par()
766 svga_wcrt_mask(par->state.vgabase, 0x46, 0x04, 0x04); /* 16bit pixel path */ in arkfb_set_par()
767 dac_set_mode(par->dac, DAC_RGB0888_16); in arkfb_set_par()
774 vga_wseq(par->state.vgabase, 0x11, 0x1E); /* 32bpp accel mode */ in arkfb_set_par()
775 svga_wcrt_mask(par->state.vgabase, 0x46, 0x04, 0x04); /* 16bit pixel path */ in arkfb_set_par()
776 dac_set_mode(par->dac, DAC_RGB8888_16); in arkfb_set_par()
780 fb_err(info, "unsupported mode - bug\n"); in arkfb_set_par()
781 return -EINVAL; in arkfb_set_par()
784 value = (hdiv * info->var.pixclock) / hmul; in arkfb_set_par()
790 svga_set_timings(par->state.vgabase, &ark_timing_regs, &(info->var), hmul, hdiv, in arkfb_set_par()
791 (info->var.vmode & FB_VMODE_DOUBLE) ? 2 : 1, in arkfb_set_par()
792 (info->var.vmode & FB_VMODE_INTERLACED) ? 2 : 1, in arkfb_set_par()
793 hmul, info->node); in arkfb_set_par()
796 value = info->var.xres + info->var.left_margin + info->var.right_margin + info->var.hsync_len; in arkfb_set_par()
797 value = ((value * hmul / hdiv) / 8) - 5; in arkfb_set_par()
798 vga_wcrt(par->state.vgabase, 0x42, (value + 1) / 2); in arkfb_set_par()
800 if (screen_size > info->screen_size) in arkfb_set_par()
801 screen_size = info->screen_size; in arkfb_set_par()
802 memset_io(info->screen_base, 0x00, screen_size); in arkfb_set_par()
804 svga_wcrt_mask(par->state.vgabase, 0x17, 0x80, 0x80); in arkfb_set_par()
805 svga_wseq_mask(par->state.vgabase, 0x01, 0x00, 0x20); in arkfb_set_par()
815 switch (fb->var.bits_per_pixel) { in arkfb_setcolreg()
819 return -EINVAL; in arkfb_setcolreg()
821 if ((fb->var.bits_per_pixel == 4) && in arkfb_setcolreg()
822 (fb->var.nonstd == 0)) { in arkfb_setcolreg()
835 return -EINVAL; in arkfb_setcolreg()
847 if (fb->var.green.length == 5) in arkfb_setcolreg()
848 ((u32*)fb->pseudo_palette)[regno] = ((red & 0xF800) >> 1) | in arkfb_setcolreg()
850 else if (fb->var.green.length == 6) in arkfb_setcolreg()
851 ((u32*)fb->pseudo_palette)[regno] = (red & 0xF800) | in arkfb_setcolreg()
854 return -EINVAL; in arkfb_setcolreg()
861 ((u32*)fb->pseudo_palette)[regno] = ((red & 0xFF00) << 8) | in arkfb_setcolreg()
865 return -EINVAL; in arkfb_setcolreg()
875 struct arkfb_info *par = info->par; in arkfb_blank()
880 svga_wseq_mask(par->state.vgabase, 0x01, 0x00, 0x20); in arkfb_blank()
881 svga_wcrt_mask(par->state.vgabase, 0x17, 0x80, 0x80); in arkfb_blank()
885 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); in arkfb_blank()
886 svga_wcrt_mask(par->state.vgabase, 0x17, 0x80, 0x80); in arkfb_blank()
892 svga_wseq_mask(par->state.vgabase, 0x01, 0x20, 0x20); in arkfb_blank()
893 svga_wcrt_mask(par->state.vgabase, 0x17, 0x00, 0x80); in arkfb_blank()
904 struct arkfb_info *par = info->par; in arkfb_pan_display()
908 if (info->var.bits_per_pixel == 0) { in arkfb_pan_display()
909 offset = (var->yoffset / 16) * (info->var.xres_virtual / 2) in arkfb_pan_display()
910 + (var->xoffset / 2); in arkfb_pan_display()
913 offset = (var->yoffset * info->fix.line_length) + in arkfb_pan_display()
914 (var->xoffset * info->var.bits_per_pixel / 8); in arkfb_pan_display()
915 offset = offset >> ((info->var.bits_per_pixel == 4) ? 2 : 3); in arkfb_pan_display()
919 svga_wcrt_multi(par->state.vgabase, ark_start_address_regs, offset); in arkfb_pan_display()
925 /* ------------------------------------------------------------------------- */
948 /* ------------------------------------------------------------------------- */
967 dev_info(&(dev->dev), "ignoring secondary device\n"); in ark_pci_probe()
968 return -ENODEV; in ark_pci_probe()
972 info = framebuffer_alloc(sizeof(struct arkfb_info), &(dev->dev)); in ark_pci_probe()
974 return -ENOMEM; in ark_pci_probe()
976 par = info->par; in ark_pci_probe()
977 mutex_init(&par->open_lock); in ark_pci_probe()
979 info->flags = FBINFO_PARTIAL_PAN_OK | FBINFO_HWACCEL_YPAN; in ark_pci_probe()
980 info->fbops = &arkfb_ops; in ark_pci_probe()
985 dev_err(info->device, "cannot enable PCI device\n"); in ark_pci_probe()
991 dev_err(info->device, "cannot reserve framebuffer region\n"); in ark_pci_probe()
995 par->dac = ics5342_init(ark_dac_read_regs, ark_dac_write_regs, info); in ark_pci_probe()
996 if (! par->dac) { in ark_pci_probe()
997 rc = -ENOMEM; in ark_pci_probe()
998 dev_err(info->device, "RAMDAC initialization failed\n"); in ark_pci_probe()
1002 info->fix.smem_start = pci_resource_start(dev, 0); in ark_pci_probe()
1003 info->fix.smem_len = pci_resource_len(dev, 0); in ark_pci_probe()
1005 /* Map physical IO memory address into kernel space */ in ark_pci_probe()
1006 info->screen_base = pci_iomap_wc(dev, 0, 0); in ark_pci_probe()
1007 if (! info->screen_base) { in ark_pci_probe()
1008 rc = -ENOMEM; in ark_pci_probe()
1009 dev_err(info->device, "iomap for framebuffer failed\n"); in ark_pci_probe()
1018 pcibios_bus_to_resource(dev->bus, &vga_res, &bus_reg); in ark_pci_probe()
1020 par->state.vgabase = (void __iomem *) (unsigned long) vga_res.start; in ark_pci_probe()
1023 regval = vga_rseq(par->state.vgabase, 0x10); in ark_pci_probe()
1024 info->screen_size = (1 << (regval >> 6)) << 20; in ark_pci_probe()
1025 info->fix.smem_len = info->screen_size; in ark_pci_probe()
1027 strcpy(info->fix.id, "ARK 2000PV"); in ark_pci_probe()
1028 info->fix.mmio_start = 0; in ark_pci_probe()
1029 info->fix.mmio_len = 0; in ark_pci_probe()
1030 info->fix.type = FB_TYPE_PACKED_PIXELS; in ark_pci_probe()
1031 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; in ark_pci_probe()
1032 info->fix.ypanstep = 0; in ark_pci_probe()
1033 info->fix.accel = FB_ACCEL_NONE; in ark_pci_probe()
1034 info->pseudo_palette = (void*) (par->pseudo_palette); in ark_pci_probe()
1037 rc = fb_find_mode(&(info->var), info, mode_option, NULL, 0, NULL, 8); in ark_pci_probe()
1039 rc = -EINVAL; in ark_pci_probe()
1040 dev_err(info->device, "mode %s not found\n", mode_option); in ark_pci_probe()
1044 rc = fb_alloc_cmap(&info->cmap, 256, 0); in ark_pci_probe()
1046 dev_err(info->device, "cannot allocate colormap\n"); in ark_pci_probe()
1052 dev_err(info->device, "cannot register framebuffer\n"); in ark_pci_probe()
1057 info->fix.id, pci_name(dev), info->fix.smem_len >> 20); in ark_pci_probe()
1061 par->wc_cookie = arch_phys_wc_add(info->fix.smem_start, in ark_pci_probe()
1062 info->fix.smem_len); in ark_pci_probe()
1067 fb_dealloc_cmap(&info->cmap); in ark_pci_probe()
1070 pci_iounmap(dev, info->screen_base); in ark_pci_probe()
1072 dac_release(par->dac); in ark_pci_probe()
1089 struct arkfb_info *par = info->par; in ark_pci_remove()
1090 arch_phys_wc_del(par->wc_cookie); in ark_pci_remove()
1091 dac_release(par->dac); in ark_pci_remove()
1093 fb_dealloc_cmap(&info->cmap); in ark_pci_remove()
1095 pci_iounmap(dev, info->screen_base); in ark_pci_remove()
1109 struct arkfb_info *par = info->par; in ark_pci_suspend()
1111 dev_info(info->device, "suspend\n"); in ark_pci_suspend()
1114 mutex_lock(&(par->open_lock)); in ark_pci_suspend()
1116 if (par->ref_count == 0) { in ark_pci_suspend()
1117 mutex_unlock(&(par->open_lock)); in ark_pci_suspend()
1124 mutex_unlock(&(par->open_lock)); in ark_pci_suspend()
1136 struct arkfb_info *par = info->par; in ark_pci_resume()
1138 dev_info(info->device, "resume\n"); in ark_pci_resume()
1141 mutex_lock(&(par->open_lock)); in ark_pci_resume()
1143 if (par->ref_count == 0) in ark_pci_resume()
1150 mutex_unlock(&(par->open_lock)); in ark_pci_resume()
1202 return -ENODEV; in arkfb_init()
1206 return -ENODEV; in arkfb_init()