Lines Matching refs:par
95 static inline void i740outb(struct i740fb_par *par, u16 port, u8 val)
97 vga_mm_w(par->regs, port, val);
99 static inline u8 i740inb(struct i740fb_par *par, u16 port)
101 return vga_mm_r(par->regs, port);
103 static inline void i740outreg(struct i740fb_par *par, u16 port, u8 reg, u8 val)
105 vga_mm_w_fast(par->regs, port, reg, val);
107 static inline u8 i740inreg(struct i740fb_par *par, u16 port, u8 reg)
109 vga_mm_w(par->regs, port, reg);
110 return vga_mm_r(par->regs, port+1);
112 static inline void i740outreg_mask(struct i740fb_par *par, u16 port, u8 reg,
115 vga_mm_w_fast(par->regs, port, reg, (val & mask)
116 | (i740inreg(par, port, reg) & ~mask));
126 struct i740fb_par *par = data;
128 i740outreg_mask(par, XRX, REG_DDC_DRIVE, DDC_SCL, DDC_SCL);
129 i740outreg_mask(par, XRX, REG_DDC_STATE, val ? DDC_SCL : 0, DDC_SCL);
134 struct i740fb_par *par = data;
136 i740outreg_mask(par, XRX, REG_DDC_DRIVE, DDC_SDA, DDC_SDA);
137 i740outreg_mask(par, XRX, REG_DDC_STATE, val ? DDC_SDA : 0, DDC_SDA);
142 struct i740fb_par *par = data;
144 i740outreg_mask(par, XRX, REG_DDC_DRIVE, 0, DDC_SCL);
146 return !!(i740inreg(par, XRX, REG_DDC_STATE) & DDC_SCL);
151 struct i740fb_par *par = data;
153 i740outreg_mask(par, XRX, REG_DDC_DRIVE, 0, DDC_SDA);
155 return !!(i740inreg(par, XRX, REG_DDC_STATE) & DDC_SDA);
160 struct i740fb_par *par = info->par;
162 strlcpy(par->ddc_adapter.name, info->fix.id,
163 sizeof(par->ddc_adapter.name));
164 par->ddc_adapter.owner = THIS_MODULE;
165 par->ddc_adapter.class = I2C_CLASS_DDC;
166 par->ddc_adapter.algo_data = &par->ddc_algo;
167 par->ddc_adapter.dev.parent = info->device;
168 par->ddc_algo.setsda = i740fb_ddc_setsda;
169 par->ddc_algo.setscl = i740fb_ddc_setscl;
170 par->ddc_algo.getsda = i740fb_ddc_getsda;
171 par->ddc_algo.getscl = i740fb_ddc_getscl;
172 par->ddc_algo.udelay = 10;
173 par->ddc_algo.timeout = 20;
174 par->ddc_algo.data = par;
176 i2c_set_adapdata(&par->ddc_adapter, par);
178 return i2c_bit_add_bus(&par->ddc_adapter);
183 struct i740fb_par *par = info->par;
185 mutex_lock(&(par->open_lock));
186 par->ref_count++;
187 mutex_unlock(&(par->open_lock));
194 struct i740fb_par *par = info->par;
196 mutex_lock(&(par->open_lock));
197 if (par->ref_count == 0) {
199 mutex_unlock(&(par->open_lock));
203 par->ref_count--;
204 mutex_unlock(&(par->open_lock));
209 static u32 i740_calc_fifo(struct i740fb_par *par, u32 freq, int bpp)
234 if (par->has_sgram) {
271 if (par->has_sgram) {
306 if (par->has_sgram) {
344 static void i740_calc_vclk(u32 freq, struct i740fb_par *par)
385 par->video_clk2_m = (m_best - 2) & 0xFF;
386 par->video_clk2_n = (n_best - 2) & 0xFF;
387 par->video_clk2_mn_msbs = ((((n_best - 2) >> 4) & VCO_N_MSBS)
389 par->video_clk2_div_sel = ((p_best << 4) | REF_DIV_1);
393 struct i740fb_par *par, struct fb_info *info)
443 dacspeed24 = par->has_sgram ? DACSPEED24_SG : DACSPEED24_SD;
501 par->crtc[VGA_CRTC_H_TOTAL] = (xtotal >> 3) - 5;
502 par->crtc[VGA_CRTC_H_DISP] = (xres >> 3) - 1;
503 par->crtc[VGA_CRTC_H_BLANK_START] = ((xres + right) >> 3) - 1;
504 par->crtc[VGA_CRTC_H_SYNC_START] = (xres + right) >> 3;
505 par->crtc[VGA_CRTC_H_SYNC_END] = (((xres + right + hslen) >> 3) & 0x1F)
507 par->crtc[VGA_CRTC_H_BLANK_END] = ((xres + right + hslen) >> 3 & 0x1F)
510 par->crtc[VGA_CRTC_V_TOTAL] = ytotal - 2;
518 par->crtc[VGA_CRTC_PRESET_ROW] = 0;
519 par->crtc[VGA_CRTC_MAX_SCAN] = 0x40; /* 1 scanline, no linecmp */
521 par->crtc[VGA_CRTC_MAX_SCAN] |= 0x80;
522 par->crtc[VGA_CRTC_CURSOR_START] = 0x00;
523 par->crtc[VGA_CRTC_CURSOR_END] = 0x00;
524 par->crtc[VGA_CRTC_CURSOR_HI] = 0x00;
525 par->crtc[VGA_CRTC_CURSOR_LO] = 0x00;
526 par->crtc[VGA_CRTC_V_DISP_END] = yres-1;
532 par->crtc[VGA_CRTC_V_BLANK_START] = yres + lower - 1;
533 par->crtc[VGA_CRTC_V_SYNC_START] = yres + lower - 1;
537 par->crtc[VGA_CRTC_MAX_SCAN] |= 0x20;
542 par->crtc[VGA_CRTC_V_SYNC_END] =
545 par->crtc[VGA_CRTC_V_BLANK_END] = (yres + lower - 1 + vslen) & 0xFF;
547 par->crtc[VGA_CRTC_UNDERLINE] = 0x00;
548 par->crtc[VGA_CRTC_MODE] = 0xC3 ;
549 par->crtc[VGA_CRTC_LINE_COMPARE] = 0xFF;
550 par->crtc[VGA_CRTC_OVERFLOW] = r7;
552 par->vss = 0x00; /* 3DA */
555 par->atc[i] = i;
556 par->atc[VGA_ATC_MODE] = 0x81;
557 par->atc[VGA_ATC_OVERSCAN] = 0x00; /* 0 for EGA, 0xFF for VGA */
558 par->atc[VGA_ATC_PLANE_ENABLE] = 0x0F;
559 par->atc[VGA_ATC_COLOR_PAGE] = 0x00;
561 par->misc = 0xC3;
563 par->misc &= ~0x40;
565 par->misc &= ~0x80;
567 par->seq[VGA_SEQ_CLOCK_MODE] = 0x01;
568 par->seq[VGA_SEQ_PLANE_WRITE] = 0x0F;
569 par->seq[VGA_SEQ_CHARACTER_MAP] = 0x00;
570 par->seq[VGA_SEQ_MEMORY_MODE] = 0x06;
572 par->gdc[VGA_GFX_SR_VALUE] = 0x00;
573 par->gdc[VGA_GFX_SR_ENABLE] = 0x00;
574 par->gdc[VGA_GFX_COMPARE_VALUE] = 0x00;
575 par->gdc[VGA_GFX_DATA_ROTATE] = 0x00;
576 par->gdc[VGA_GFX_PLANE_READ] = 0;
577 par->gdc[VGA_GFX_MODE] = 0x02;
578 par->gdc[VGA_GFX_MISC] = 0x05;
579 par->gdc[VGA_GFX_COMPARE_MASK] = 0x0F;
580 par->gdc[VGA_GFX_BIT_MASK] = 0xFF;
585 par->crtc[VGA_CRTC_OFFSET] = vxres >> 3;
586 par->ext_offset = vxres >> 11;
587 par->pixelpipe_cfg1 = DISPLAY_8BPP_MODE;
588 par->bitblt_cntl = COLEXP_8BPP;
592 par->pixelpipe_cfg1 = (var->green.length == 6) ?
594 par->crtc[VGA_CRTC_OFFSET] = vxres >> 2;
595 par->ext_offset = vxres >> 10;
596 par->bitblt_cntl = COLEXP_16BPP;
600 par->crtc[VGA_CRTC_OFFSET] = (vxres * 3) >> 3;
601 par->ext_offset = (vxres * 3) >> 11;
602 par->pixelpipe_cfg1 = DISPLAY_24BPP_MODE;
603 par->bitblt_cntl = COLEXP_24BPP;
608 par->crtc[VGA_CRTC_OFFSET] = vxres >> 1;
609 par->ext_offset = vxres >> 9;
610 par->pixelpipe_cfg1 = DISPLAY_32BPP_MODE;
611 par->bitblt_cntl = COLEXP_RESERVED; /* Unimplemented on i740 */
616 par->crtc[VGA_CRTC_START_LO] = base & 0x000000FF;
617 par->crtc[VGA_CRTC_START_HI] = (base & 0x0000FF00) >> 8;
618 par->ext_start_addr =
620 par->ext_start_addr_hi = (base & 0x3FC00000) >> 22;
622 par->pixelpipe_cfg0 = DAC_8_BIT;
624 par->pixelpipe_cfg2 = DISPLAY_GAMMA_ENABLE | OVERLAY_GAMMA_ENABLE;
625 par->io_cntl = EXTENDED_CRTC_CNTL;
626 par->address_mapping = LINEAR_MODE_ENABLE | PAGE_MAPPING_ENABLE;
627 par->display_cntl = HIRES_MODE;
630 par->pll_cntl = PLL_MEMCLK_100000KHZ; /* 100 MHz -- use as default */
633 par->ext_vert_total = (ytotal - 2) >> 8;
634 par->ext_vert_disp_end = (yres - 1) >> 8;
635 par->ext_vert_sync_start = (yres + lower) >> 8;
636 par->ext_vert_blank_start = (yres + lower) >> 8;
637 par->ext_horiz_total = ((xtotal >> 3) - 5) >> 8;
638 par->ext_horiz_blank = (((xres + right) >> 3) & 0x40) >> 6;
640 par->interlace_cntl = INTERLACE_DISABLE;
643 par->atc[VGA_ATC_OVERSCAN] = 0;
651 i740_calc_vclk(freq, par);
654 par->misc |= 0x0C;
657 par->lmi_fifo_watermark =
658 i740_calc_fifo(par, 1000000 / var->pixclock, bpp);
723 static void vga_protect(struct i740fb_par *par)
726 i740outreg_mask(par, VGA_SEQ_I, VGA_SEQ_CLOCK_MODE, 0x20, 0x20);
728 i740inb(par, 0x3DA);
729 i740outb(par, VGA_ATT_W, 0x00); /* enable palette access */
732 static void vga_unprotect(struct i740fb_par *par)
735 i740outreg_mask(par, VGA_SEQ_I, VGA_SEQ_CLOCK_MODE, 0, 0x20);
737 i740inb(par, 0x3DA);
738 i740outb(par, VGA_ATT_W, 0x20); /* disable palette access */
743 struct i740fb_par *par = info->par;
747 i = i740fb_decode_var(&info->var, par, info);
753 vga_protect(par);
755 i740outreg(par, XRX, DRAM_EXT_CNTL, DRAM_REFRESH_DISABLE);
759 i740outreg(par, XRX, VCLK2_VCO_M, par->video_clk2_m);
760 i740outreg(par, XRX, VCLK2_VCO_N, par->video_clk2_n);
761 i740outreg(par, XRX, VCLK2_VCO_MN_MSBS, par->video_clk2_mn_msbs);
762 i740outreg(par, XRX, VCLK2_VCO_DIV_SEL, par->video_clk2_div_sel);
764 i740outreg_mask(par, XRX, PIXPIPE_CONFIG_0,
765 par->pixelpipe_cfg0 & DAC_8_BIT, 0x80);
767 i740inb(par, 0x3DA);
768 i740outb(par, 0x3C0, 0x00);
771 i740outb(par, VGA_MIS_W, par->misc | 0x01);
774 i740outreg(par, VGA_SEQ_I, VGA_SEQ_RESET, 0x01);
776 i740outreg(par, VGA_SEQ_I, VGA_SEQ_CLOCK_MODE,
777 par->seq[VGA_SEQ_CLOCK_MODE] | 0x20);
779 i740outreg(par, VGA_SEQ_I, i, par->seq[i]);
782 i740outreg(par, VGA_SEQ_I, VGA_SEQ_RESET, 0x03);
785 i740outreg(par, VGA_CRT_IC, VGA_CRTC_V_SYNC_END,
786 par->crtc[VGA_CRTC_V_SYNC_END]);
790 i740outreg(par, VGA_CRT_IC, i, par->crtc[i]);
794 i740outreg(par, VGA_GFX_I, i, par->gdc[i]);
798 i740inb(par, VGA_IS1_RC); /* reset flip-flop */
799 i740outb(par, VGA_ATT_IW, i);
800 i740outb(par, VGA_ATT_IW, par->atc[i]);
803 i740inb(par, VGA_IS1_RC);
804 i740outb(par, VGA_ATT_IW, 0x20);
806 i740outreg(par, VGA_CRT_IC, EXT_VERT_TOTAL, par->ext_vert_total);
807 i740outreg(par, VGA_CRT_IC, EXT_VERT_DISPLAY, par->ext_vert_disp_end);
808 i740outreg(par, VGA_CRT_IC, EXT_VERT_SYNC_START,
809 par->ext_vert_sync_start);
810 i740outreg(par, VGA_CRT_IC, EXT_VERT_BLANK_START,
811 par->ext_vert_blank_start);
812 i740outreg(par, VGA_CRT_IC, EXT_HORIZ_TOTAL, par->ext_horiz_total);
813 i740outreg(par, VGA_CRT_IC, EXT_HORIZ_BLANK, par->ext_horiz_blank);
814 i740outreg(par, VGA_CRT_IC, EXT_OFFSET, par->ext_offset);
815 i740outreg(par, VGA_CRT_IC, EXT_START_ADDR_HI, par->ext_start_addr_hi);
816 i740outreg(par, VGA_CRT_IC, EXT_START_ADDR, par->ext_start_addr);
818 i740outreg_mask(par, VGA_CRT_IC, INTERLACE_CNTL,
819 par->interlace_cntl, INTERLACE_ENABLE);
820 i740outreg_mask(par, XRX, ADDRESS_MAPPING, par->address_mapping, 0x1F);
821 i740outreg_mask(par, XRX, BITBLT_CNTL, par->bitblt_cntl, COLEXP_MODE);
822 i740outreg_mask(par, XRX, DISPLAY_CNTL,
823 par->display_cntl, VGA_WRAP_MODE | GUI_MODE);
824 i740outreg_mask(par, XRX, PIXPIPE_CONFIG_0, par->pixelpipe_cfg0, 0x9B);
825 i740outreg_mask(par, XRX, PIXPIPE_CONFIG_2, par->pixelpipe_cfg2, 0x0C);
827 i740outreg(par, XRX, PLL_CNTL, par->pll_cntl);
829 i740outreg_mask(par, XRX, PIXPIPE_CONFIG_1,
830 par->pixelpipe_cfg1, DISPLAY_COLOR_MODE);
832 itemp = readl(par->regs + FWATER_BLC);
834 itemp |= par->lmi_fifo_watermark;
835 writel(itemp, par->regs + FWATER_BLC);
837 i740outreg(par, XRX, DRAM_EXT_CNTL, DRAM_REFRESH_60HZ);
839 i740outreg_mask(par, MRX, COL_KEY_CNTL_1, 0, BLANK_DISP_OVERLAY);
840 i740outreg_mask(par, XRX, IO_CTNL,
841 par->io_cntl, EXTENDED_ATTR_CNTL | EXTENDED_CRTC_CNTL);
843 if (par->pixelpipe_cfg1 != DISPLAY_8BPP_MODE) {
844 i740outb(par, VGA_PEL_MSK, 0xFF);
845 i740outb(par, VGA_PEL_IW, 0x00);
847 itemp = (par->pixelpipe_cfg0 & DAC_8_BIT) ? i : i >> 2;
848 i740outb(par, VGA_PEL_D, itemp);
849 i740outb(par, VGA_PEL_D, itemp);
850 i740outb(par, VGA_PEL_D, itemp);
856 vga_unprotect(par);
881 i740outb(info->par, VGA_PEL_IW, regno);
882 i740outb(info->par, VGA_PEL_D, red >> 8);
883 i740outb(info->par, VGA_PEL_D, green >> 8);
884 i740outb(info->par, VGA_PEL_D, blue >> 8);
907 struct i740fb_par *par = info->par;
934 par->crtc[VGA_CRTC_START_LO] = base & 0x000000FF;
935 par->crtc[VGA_CRTC_START_HI] = (base & 0x0000FF00) >> 8;
936 par->ext_start_addr_hi = (base & 0x3FC00000) >> 22;
937 par->ext_start_addr =
940 i740outreg(par, VGA_CRT_IC, VGA_CRTC_START_LO, base & 0x000000FF);
941 i740outreg(par, VGA_CRT_IC, VGA_CRTC_START_HI,
943 i740outreg(par, VGA_CRT_IC, EXT_START_ADDR_HI,
945 i740outreg(par, VGA_CRT_IC, EXT_START_ADDR,
953 struct i740fb_par *par = info->par;
980 i740outb(par, SRX, 0x01);
981 SEQ01 |= i740inb(par, SRX + 1) & ~0x20;
982 i740outb(par, SRX, 0x01);
983 i740outb(par, SRX + 1, SEQ01);
986 i740outreg(par, XRX, DPMS_SYNC_SELECT, DPMSSyncSelect);
1011 struct i740fb_par *par;
1020 par = info->par;
1021 mutex_init(&par->open_lock);
1026 info->pseudo_palette = par->pseudo_palette;
1047 par->regs = pci_ioremap_bar(dev, 1);
1048 if (!par->regs) {
1055 if ((i740inreg(par, XRX, DRAM_ROW_TYPE) & DRAM_ROW_1)
1057 i740outb(par, XRX, DRAM_ROW_BNDRY_1);
1059 i740outb(par, XRX, DRAM_ROW_BNDRY_0);
1060 info->screen_size = i740inb(par, XRX + 1) * 1024 * 1024;
1062 tmp = i740inreg(par, XRX, DRAM_ROW_CNTL_LO);
1063 par->has_sgram = !((tmp & DRAM_RAS_TIMING) ||
1068 par->has_sgram ? "SGRAM" : "SDRAM");
1078 par->ddc_registered = true;
1079 edid = fb_ddc_read(&par->ddc_adapter);
1145 par->wc_cookie = arch_phys_wc_add(info->fix.smem_start,
1153 if (par->ddc_registered)
1154 i2c_del_adapter(&par->ddc_adapter);
1155 pci_iounmap(dev, par->regs);
1172 struct i740fb_par *par = info->par;
1173 arch_phys_wc_del(par->wc_cookie);
1176 if (par->ddc_registered)
1177 i2c_del_adapter(&par->ddc_adapter);
1178 pci_iounmap(dev, par->regs);
1189 struct i740fb_par *par = info->par;
1192 mutex_lock(&(par->open_lock));
1195 if (par->ref_count == 0) {
1196 mutex_unlock(&(par->open_lock));
1203 mutex_unlock(&(par->open_lock));
1212 struct i740fb_par *par = info->par;
1215 mutex_lock(&(par->open_lock));
1217 if (par->ref_count == 0)
1224 mutex_unlock(&(par->open_lock));