Lines Matching refs:crtc
252 static void aty_get_crtc(const struct atyfb_par *par, struct crtc *crtc);
254 static void aty_set_crtc(const struct atyfb_par *par, const struct crtc *crtc);
257 struct crtc *crtc);
258 static int aty_crtc_to_var(const struct crtc *crtc,
633 static void aty_get_crtc(const struct atyfb_par *par, struct crtc *crtc) in aty_get_crtc() argument
638 crtc->lcd_index = aty_ld_le32(LCD_INDEX, par); in aty_get_crtc()
639 aty_st_le32(LCD_INDEX, crtc->lcd_index, par); in aty_get_crtc()
641 crtc->lcd_config_panel = aty_ld_lcd(CNFG_PANEL, par); in aty_get_crtc()
642 crtc->lcd_gen_cntl = aty_ld_lcd(LCD_GEN_CNTL, par); in aty_get_crtc()
646 aty_st_lcd(LCD_GEN_CNTL, crtc->lcd_gen_cntl & in aty_get_crtc()
650 crtc->horz_stretching = aty_ld_lcd(HORZ_STRETCHING, par); in aty_get_crtc()
651 crtc->vert_stretching = aty_ld_lcd(VERT_STRETCHING, par); in aty_get_crtc()
653 crtc->ext_vert_stretch = aty_ld_lcd(EXT_VERT_STRETCH, par); in aty_get_crtc()
656 crtc->h_tot_disp = aty_ld_le32(CRTC_H_TOTAL_DISP, par); in aty_get_crtc()
657 crtc->h_sync_strt_wid = aty_ld_le32(CRTC_H_SYNC_STRT_WID, par); in aty_get_crtc()
658 crtc->v_tot_disp = aty_ld_le32(CRTC_V_TOTAL_DISP, par); in aty_get_crtc()
659 crtc->v_sync_strt_wid = aty_ld_le32(CRTC_V_SYNC_STRT_WID, par); in aty_get_crtc()
660 crtc->vline_crnt_vline = aty_ld_le32(CRTC_VLINE_CRNT_VLINE, par); in aty_get_crtc()
661 crtc->off_pitch = aty_ld_le32(CRTC_OFF_PITCH, par); in aty_get_crtc()
662 crtc->gen_cntl = aty_ld_le32(CRTC_GEN_CNTL, par); in aty_get_crtc()
667 aty_st_lcd(LCD_GEN_CNTL, (crtc->lcd_gen_cntl & ~CRTC_RW_SELECT) | in aty_get_crtc()
670 crtc->shadow_h_tot_disp = aty_ld_le32(CRTC_H_TOTAL_DISP, par); in aty_get_crtc()
671 crtc->shadow_h_sync_strt_wid = aty_ld_le32(CRTC_H_SYNC_STRT_WID, par); in aty_get_crtc()
672 crtc->shadow_v_tot_disp = aty_ld_le32(CRTC_V_TOTAL_DISP, par); in aty_get_crtc()
673 crtc->shadow_v_sync_strt_wid = aty_ld_le32(CRTC_V_SYNC_STRT_WID, par); in aty_get_crtc()
675 aty_st_le32(LCD_GEN_CNTL, crtc->lcd_gen_cntl, par); in aty_get_crtc()
680 static void aty_set_crtc(const struct atyfb_par *par, const struct crtc *crtc) in aty_set_crtc() argument
685 aty_st_le32(CRTC_GEN_CNTL, crtc->gen_cntl & in aty_set_crtc()
689 aty_st_lcd(CNFG_PANEL, crtc->lcd_config_panel, par); in aty_set_crtc()
690 aty_st_lcd(LCD_GEN_CNTL, crtc->lcd_gen_cntl & in aty_set_crtc()
694 aty_st_lcd(HORZ_STRETCHING, crtc->horz_stretching & in aty_set_crtc()
696 aty_st_lcd(VERT_STRETCHING, crtc->vert_stretching & in aty_set_crtc()
702 aty_st_le32(CRTC_GEN_CNTL, crtc->gen_cntl & ~CRTC_EN, par); in aty_set_crtc()
706 ((((crtc->h_tot_disp >> 16) & 0xff) + 1) << 3), in aty_set_crtc()
707 (((crtc->v_tot_disp >> 16) & 0x7ff) + 1), in aty_set_crtc()
708 (crtc->h_sync_strt_wid & 0x200000) ? 'N' : 'P', in aty_set_crtc()
709 (crtc->v_sync_strt_wid & 0x200000) ? 'N' : 'P', in aty_set_crtc()
710 (crtc->gen_cntl & CRTC_CSYNC_EN) ? 'P' : 'N'); in aty_set_crtc()
712 DPRINTK("CRTC_H_TOTAL_DISP: %x\n", crtc->h_tot_disp); in aty_set_crtc()
713 DPRINTK("CRTC_H_SYNC_STRT_WID: %x\n", crtc->h_sync_strt_wid); in aty_set_crtc()
714 DPRINTK("CRTC_V_TOTAL_DISP: %x\n", crtc->v_tot_disp); in aty_set_crtc()
715 DPRINTK("CRTC_V_SYNC_STRT_WID: %x\n", crtc->v_sync_strt_wid); in aty_set_crtc()
716 DPRINTK("CRTC_OFF_PITCH: %x\n", crtc->off_pitch); in aty_set_crtc()
717 DPRINTK("CRTC_VLINE_CRNT_VLINE: %x\n", crtc->vline_crnt_vline); in aty_set_crtc()
718 DPRINTK("CRTC_GEN_CNTL: %x\n", crtc->gen_cntl); in aty_set_crtc()
720 aty_st_le32(CRTC_H_TOTAL_DISP, crtc->h_tot_disp, par); in aty_set_crtc()
721 aty_st_le32(CRTC_H_SYNC_STRT_WID, crtc->h_sync_strt_wid, par); in aty_set_crtc()
722 aty_st_le32(CRTC_V_TOTAL_DISP, crtc->v_tot_disp, par); in aty_set_crtc()
723 aty_st_le32(CRTC_V_SYNC_STRT_WID, crtc->v_sync_strt_wid, par); in aty_set_crtc()
724 aty_st_le32(CRTC_OFF_PITCH, crtc->off_pitch, par); in aty_set_crtc()
725 aty_st_le32(CRTC_VLINE_CRNT_VLINE, crtc->vline_crnt_vline, par); in aty_set_crtc()
727 aty_st_le32(CRTC_GEN_CNTL, crtc->gen_cntl, par); in aty_set_crtc()
737 aty_st_lcd(LCD_GEN_CNTL, (crtc->lcd_gen_cntl & ~CRTC_RW_SELECT) | in aty_set_crtc()
741 ((((crtc->shadow_h_tot_disp >> 16) & 0xff) + 1) << 3), in aty_set_crtc()
742 (((crtc->shadow_v_tot_disp >> 16) & 0x7ff) + 1), in aty_set_crtc()
743 (crtc->shadow_h_sync_strt_wid & 0x200000) ? 'N' : 'P', in aty_set_crtc()
744 (crtc->shadow_v_sync_strt_wid & 0x200000) ? 'N' : 'P'); in aty_set_crtc()
747 crtc->shadow_h_tot_disp); in aty_set_crtc()
749 crtc->shadow_h_sync_strt_wid); in aty_set_crtc()
751 crtc->shadow_v_tot_disp); in aty_set_crtc()
753 crtc->shadow_v_sync_strt_wid); in aty_set_crtc()
755 aty_st_le32(CRTC_H_TOTAL_DISP, crtc->shadow_h_tot_disp, par); in aty_set_crtc()
756 aty_st_le32(CRTC_H_SYNC_STRT_WID, crtc->shadow_h_sync_strt_wid, par); in aty_set_crtc()
757 aty_st_le32(CRTC_V_TOTAL_DISP, crtc->shadow_v_tot_disp, par); in aty_set_crtc()
758 aty_st_le32(CRTC_V_SYNC_STRT_WID, crtc->shadow_v_sync_strt_wid, par); in aty_set_crtc()
761 DPRINTK("LCD_GEN_CNTL: %x\n", crtc->lcd_gen_cntl); in aty_set_crtc()
762 DPRINTK("HORZ_STRETCHING: %x\n", crtc->horz_stretching); in aty_set_crtc()
763 DPRINTK("VERT_STRETCHING: %x\n", crtc->vert_stretching); in aty_set_crtc()
765 DPRINTK("EXT_VERT_STRETCH: %x\n", crtc->ext_vert_stretch); in aty_set_crtc()
767 aty_st_lcd(LCD_GEN_CNTL, crtc->lcd_gen_cntl, par); in aty_set_crtc()
768 aty_st_lcd(HORZ_STRETCHING, crtc->horz_stretching, par); in aty_set_crtc()
769 aty_st_lcd(VERT_STRETCHING, crtc->vert_stretching, par); in aty_set_crtc()
771 aty_st_lcd(EXT_VERT_STRETCH, crtc->ext_vert_stretch, par); in aty_set_crtc()
773 aty_st_le32(LCD_INDEX, crtc->lcd_index, par); in aty_set_crtc()
792 struct crtc *crtc) in aty_var_to_crtc() argument
882 crtc->lcd_index = lcd_index & in aty_var_to_crtc()
889 crtc->lcd_index |= CRTC2_DISPLAY_DIS; in aty_var_to_crtc()
891 crtc->lcd_config_panel = aty_ld_lcd(CNFG_PANEL, par) | 0x4000; in aty_var_to_crtc()
892 crtc->lcd_gen_cntl = aty_ld_lcd(LCD_GEN_CNTL, par) & ~CRTC_RW_SELECT; in aty_var_to_crtc()
894 crtc->lcd_gen_cntl &= in aty_var_to_crtc()
898 crtc->lcd_gen_cntl |= DONT_SHADOW_VPAR | LOCK_8DOT; in aty_var_to_crtc()
900 if ((crtc->lcd_gen_cntl & LCD_ON) && in aty_var_to_crtc()
909 if (crtc->lcd_gen_cntl & CRT_ON) { in aty_var_to_crtc()
912 crtc->lcd_gen_cntl &= ~LCD_ON; in aty_var_to_crtc()
922 if ((par->lcd_table != 0) && (crtc->lcd_gen_cntl & LCD_ON)) { in aty_var_to_crtc()
980 if ((par->lcd_table != 0) && (crtc->lcd_gen_cntl & LCD_ON)) in aty_var_to_crtc()
1000 crtc->vxres = vxres; in aty_var_to_crtc()
1001 crtc->vyres = vyres; in aty_var_to_crtc()
1002 crtc->xoffset = xoffset; in aty_var_to_crtc()
1003 crtc->yoffset = yoffset; in aty_var_to_crtc()
1004 crtc->bpp = bpp; in aty_var_to_crtc()
1005 crtc->off_pitch = in aty_var_to_crtc()
1008 crtc->vline_crnt_vline = 0; in aty_var_to_crtc()
1010 crtc->h_tot_disp = h_total | (h_disp << 16); in aty_var_to_crtc()
1011 crtc->h_sync_strt_wid = (h_sync_strt & 0xff) | (h_sync_dly << 8) | in aty_var_to_crtc()
1014 crtc->v_tot_disp = v_total | (v_disp << 16); in aty_var_to_crtc()
1015 crtc->v_sync_strt_wid = v_sync_strt | (v_sync_wid << 16) | in aty_var_to_crtc()
1019 crtc->gen_cntl = CRTC_EXT_DISP_EN | CRTC_EN | pix_width | c_sync; in aty_var_to_crtc()
1020 crtc->gen_cntl |= CRTC_VGA_LINEAR; in aty_var_to_crtc()
1024 crtc->gen_cntl |= CRTC_DBL_SCAN_EN; in aty_var_to_crtc()
1027 crtc->gen_cntl |= CRTC_INTERLACE_EN; in aty_var_to_crtc()
1033 crtc->gen_cntl &= ~(CRTC2_EN | CRTC2_PIX_WIDTH); in aty_var_to_crtc()
1034 crtc->lcd_gen_cntl &= ~(HORZ_DIVBY2_EN | DIS_HOR_CRT_DIVBY2 | in aty_var_to_crtc()
1039 crtc->lcd_gen_cntl |= DONT_SHADOW_VPAR/* | LOCK_8DOT*/; in aty_var_to_crtc()
1042 crtc->horz_stretching = aty_ld_lcd(HORZ_STRETCHING, par); in aty_var_to_crtc()
1044 crtc->ext_vert_stretch = aty_ld_lcd(EXT_VERT_STRETCH, par) & in aty_var_to_crtc()
1047 crtc->horz_stretching &= ~(HORZ_STRETCH_RATIO | in aty_var_to_crtc()
1050 if (xres < par->lcd_width && crtc->lcd_gen_cntl & LCD_ON) { in aty_var_to_crtc()
1104 crtc->horz_stretching |= (HORZ_STRETCH_EN | in aty_var_to_crtc()
1111 crtc->horz_stretching |= (HORZ_STRETCH_MODE | HORZ_STRETCH_EN | in aty_var_to_crtc()
1116 if (vdisplay < par->lcd_height && crtc->lcd_gen_cntl & LCD_ON) { in aty_var_to_crtc()
1117 crtc->vert_stretching = (VERT_STRETCH_USE0 | VERT_STRETCH_EN | in aty_var_to_crtc()
1122 crtc->ext_vert_stretch |= VERT_STRETCH_MODE; in aty_var_to_crtc()
1128 crtc->vert_stretching = 0; in aty_var_to_crtc()
1131 crtc->shadow_h_tot_disp = crtc->h_tot_disp; in aty_var_to_crtc()
1132 crtc->shadow_h_sync_strt_wid = crtc->h_sync_strt_wid; in aty_var_to_crtc()
1133 crtc->shadow_v_tot_disp = crtc->v_tot_disp; in aty_var_to_crtc()
1134 crtc->shadow_v_sync_strt_wid = crtc->v_sync_strt_wid; in aty_var_to_crtc()
1140 crtc->gen_cntl |= (aty_ld_le32(CRTC_GEN_CNTL, par) & CRTC_FIFO_LWM); in aty_var_to_crtc()
1142 crtc->dp_pix_width = dp_pix_width; in aty_var_to_crtc()
1143 crtc->dp_chain_mask = dp_chain_mask; in aty_var_to_crtc()
1148 static int aty_crtc_to_var(const struct crtc *crtc, in aty_crtc_to_var() argument
1158 h_total = crtc->h_tot_disp & 0x1ff; in aty_crtc_to_var()
1159 h_disp = (crtc->h_tot_disp >> 16) & 0xff; in aty_crtc_to_var()
1160 h_sync_strt = (crtc->h_sync_strt_wid & 0xff) | ((crtc->h_sync_strt_wid >> 4) & 0x100); in aty_crtc_to_var()
1161 h_sync_dly = (crtc->h_sync_strt_wid >> 8) & 0x7; in aty_crtc_to_var()
1162 h_sync_wid = (crtc->h_sync_strt_wid >> 16) & 0x1f; in aty_crtc_to_var()
1163 h_sync_pol = (crtc->h_sync_strt_wid >> 21) & 0x1; in aty_crtc_to_var()
1164 v_total = crtc->v_tot_disp & 0x7ff; in aty_crtc_to_var()
1165 v_disp = (crtc->v_tot_disp >> 16) & 0x7ff; in aty_crtc_to_var()
1166 v_sync_strt = crtc->v_sync_strt_wid & 0x7ff; in aty_crtc_to_var()
1167 v_sync_wid = (crtc->v_sync_strt_wid >> 16) & 0x1f; in aty_crtc_to_var()
1168 v_sync_pol = (crtc->v_sync_strt_wid >> 21) & 0x1; in aty_crtc_to_var()
1169 c_sync = crtc->gen_cntl & CRTC_CSYNC_EN ? 1 : 0; in aty_crtc_to_var()
1170 pix_width = crtc->gen_cntl & CRTC_PIX_WIDTH_MASK; in aty_crtc_to_var()
1171 double_scan = crtc->gen_cntl & CRTC_DBL_SCAN_EN; in aty_crtc_to_var()
1172 interlace = crtc->gen_cntl & CRTC_INTERLACE_EN; in aty_crtc_to_var()
1264 var->xres_virtual = crtc->vxres; in aty_crtc_to_var()
1265 var->yres_virtual = crtc->vyres; in aty_crtc_to_var()
1310 err = aty_var_to_crtc(info, var, &par->crtc); in atyfb_set_par()
1339 aty_set_crtc(par, &par->crtc); in atyfb_set_par()
1356 if (!aty_crtc_to_var(&par->crtc, &debug)) { in atyfb_set_par()
1372 if (par->crtc.gen_cntl & CRTC_INTERLACE_EN) in atyfb_set_par()
1374 if (par->crtc.gen_cntl & CRTC_DBL_SCAN_EN) in atyfb_set_par()
1461 (((par->crtc.h_tot_disp >> 16) & 0xff) + 1) * 8, in atyfb_set_par()
1462 ((par->crtc.v_tot_disp >> 16) & 0x7ff) + 1, in atyfb_set_par()
1464 par->crtc.vxres * var->bits_per_pixel / 8); in atyfb_set_par()
1468 if (!(par->crtc.gen_cntl & CRTC_EXT_DISP_EN)) in atyfb_set_par()
1469 aty_st_le32(CRTC_GEN_CNTL, par->crtc.gen_cntl | CRTC_EXT_DISP_EN, par); in atyfb_set_par()
1533 struct crtc crtc; in atyfb_check_var() local
1539 err = aty_var_to_crtc(info, var, &crtc); in atyfb_check_var()
1561 aty_crtc_to_var(&crtc, var); in atyfb_check_var()
1573 par->crtc.off_pitch = in set_off_pitch()
1613 aty_st_le32(CRTC_OFF_PITCH, par->crtc.off_pitch, par); in aty_irq()
1663 aty_st_le32(CRTC_OFF_PITCH, par->crtc.off_pitch, par); in aty_disable_irq()
1739 xres = (((par->crtc.h_tot_disp >> 16) & 0xff) + 1) * 8; in atyfb_pan_display()
1740 yres = ((par->crtc.v_tot_disp >> 16) & 0x7ff) + 1; in atyfb_pan_display()
1741 if (par->crtc.gen_cntl & CRTC_DBL_SCAN_EN) in atyfb_pan_display()
1745 if (xoffset + xres > par->crtc.vxres || in atyfb_pan_display()
1746 yoffset + yres > par->crtc.vyres) in atyfb_pan_display()
1758 aty_st_le32(CRTC_OFF_PITCH, par->crtc.off_pitch, par); in atyfb_pan_display()
1764 static int aty_waitforvblank(struct atyfb_par *par, u32 crtc) in aty_waitforvblank() argument
1770 switch (crtc) { in aty_waitforvblank()
1831 fbtyp.fb_width = par->crtc.vxres; in atyfb_ioctl()
1832 fbtyp.fb_height = par->crtc.vyres; in atyfb_ioctl()
1844 u32 crtc; in atyfb_ioctl() local
1846 if (get_user(crtc, (__u32 __user *) arg)) in atyfb_ioctl()
1849 return aty_waitforvblank(par, crtc); in atyfb_ioctl()
3086 struct crtc crtc; in atyfb_setup_sparc() local
3090 crtc.vxres = of_getintprop_default(dp, "width", 1024); in atyfb_setup_sparc()
3091 crtc.vyres = of_getintprop_default(dp, "height", 768); in atyfb_setup_sparc()
3094 crtc.h_tot_disp = aty_ld_le32(CRTC_H_TOTAL_DISP, par); in atyfb_setup_sparc()
3095 crtc.h_sync_strt_wid = aty_ld_le32(CRTC_H_SYNC_STRT_WID, par); in atyfb_setup_sparc()
3096 crtc.v_tot_disp = aty_ld_le32(CRTC_V_TOTAL_DISP, par); in atyfb_setup_sparc()
3097 crtc.v_sync_strt_wid = aty_ld_le32(CRTC_V_SYNC_STRT_WID, par); in atyfb_setup_sparc()
3098 crtc.gen_cntl = aty_ld_le32(CRTC_GEN_CNTL, par); in atyfb_setup_sparc()
3099 aty_crtc_to_var(&crtc, var); in atyfb_setup_sparc()