Lines Matching refs:crtc

249 static void aty_get_crtc(const struct atyfb_par *par, struct crtc *crtc);
251 static void aty_set_crtc(const struct atyfb_par *par, const struct crtc *crtc);
254 struct crtc *crtc);
255 static int aty_crtc_to_var(const struct crtc *crtc,
642 static void aty_get_crtc(const struct atyfb_par *par, struct crtc *crtc) in aty_get_crtc() argument
647 crtc->lcd_index = aty_ld_le32(LCD_INDEX, par); in aty_get_crtc()
648 aty_st_le32(LCD_INDEX, crtc->lcd_index, par); in aty_get_crtc()
650 crtc->lcd_config_panel = aty_ld_lcd(CNFG_PANEL, par); in aty_get_crtc()
651 crtc->lcd_gen_cntl = aty_ld_lcd(LCD_GEN_CNTL, par); in aty_get_crtc()
655 aty_st_lcd(LCD_GEN_CNTL, crtc->lcd_gen_cntl & in aty_get_crtc()
659 crtc->horz_stretching = aty_ld_lcd(HORZ_STRETCHING, par); in aty_get_crtc()
660 crtc->vert_stretching = aty_ld_lcd(VERT_STRETCHING, par); in aty_get_crtc()
662 crtc->ext_vert_stretch = aty_ld_lcd(EXT_VERT_STRETCH, par); in aty_get_crtc()
665 crtc->h_tot_disp = aty_ld_le32(CRTC_H_TOTAL_DISP, par); in aty_get_crtc()
666 crtc->h_sync_strt_wid = aty_ld_le32(CRTC_H_SYNC_STRT_WID, par); in aty_get_crtc()
667 crtc->v_tot_disp = aty_ld_le32(CRTC_V_TOTAL_DISP, par); in aty_get_crtc()
668 crtc->v_sync_strt_wid = aty_ld_le32(CRTC_V_SYNC_STRT_WID, par); in aty_get_crtc()
669 crtc->vline_crnt_vline = aty_ld_le32(CRTC_VLINE_CRNT_VLINE, par); in aty_get_crtc()
670 crtc->off_pitch = aty_ld_le32(CRTC_OFF_PITCH, par); in aty_get_crtc()
671 crtc->gen_cntl = aty_ld_le32(CRTC_GEN_CNTL, par); in aty_get_crtc()
676 aty_st_lcd(LCD_GEN_CNTL, (crtc->lcd_gen_cntl & ~CRTC_RW_SELECT) | in aty_get_crtc()
679 crtc->shadow_h_tot_disp = aty_ld_le32(CRTC_H_TOTAL_DISP, par); in aty_get_crtc()
680 crtc->shadow_h_sync_strt_wid = aty_ld_le32(CRTC_H_SYNC_STRT_WID, par); in aty_get_crtc()
681 crtc->shadow_v_tot_disp = aty_ld_le32(CRTC_V_TOTAL_DISP, par); in aty_get_crtc()
682 crtc->shadow_v_sync_strt_wid = aty_ld_le32(CRTC_V_SYNC_STRT_WID, par); in aty_get_crtc()
684 aty_st_le32(LCD_GEN_CNTL, crtc->lcd_gen_cntl, par); in aty_get_crtc()
689 static void aty_set_crtc(const struct atyfb_par *par, const struct crtc *crtc) in aty_set_crtc() argument
694 aty_st_le32(CRTC_GEN_CNTL, crtc->gen_cntl & in aty_set_crtc()
698 aty_st_lcd(CNFG_PANEL, crtc->lcd_config_panel, par); in aty_set_crtc()
699 aty_st_lcd(LCD_GEN_CNTL, crtc->lcd_gen_cntl & in aty_set_crtc()
703 aty_st_lcd(HORZ_STRETCHING, crtc->horz_stretching & in aty_set_crtc()
705 aty_st_lcd(VERT_STRETCHING, crtc->vert_stretching & in aty_set_crtc()
711 aty_st_le32(CRTC_GEN_CNTL, crtc->gen_cntl & ~CRTC_EN, par); in aty_set_crtc()
715 ((((crtc->h_tot_disp >> 16) & 0xff) + 1) << 3), in aty_set_crtc()
716 (((crtc->v_tot_disp >> 16) & 0x7ff) + 1), in aty_set_crtc()
717 (crtc->h_sync_strt_wid & 0x200000) ? 'N' : 'P', in aty_set_crtc()
718 (crtc->v_sync_strt_wid & 0x200000) ? 'N' : 'P', in aty_set_crtc()
719 (crtc->gen_cntl & CRTC_CSYNC_EN) ? 'P' : 'N'); in aty_set_crtc()
721 DPRINTK("CRTC_H_TOTAL_DISP: %x\n", crtc->h_tot_disp); in aty_set_crtc()
722 DPRINTK("CRTC_H_SYNC_STRT_WID: %x\n", crtc->h_sync_strt_wid); in aty_set_crtc()
723 DPRINTK("CRTC_V_TOTAL_DISP: %x\n", crtc->v_tot_disp); in aty_set_crtc()
724 DPRINTK("CRTC_V_SYNC_STRT_WID: %x\n", crtc->v_sync_strt_wid); in aty_set_crtc()
725 DPRINTK("CRTC_OFF_PITCH: %x\n", crtc->off_pitch); in aty_set_crtc()
726 DPRINTK("CRTC_VLINE_CRNT_VLINE: %x\n", crtc->vline_crnt_vline); in aty_set_crtc()
727 DPRINTK("CRTC_GEN_CNTL: %x\n", crtc->gen_cntl); in aty_set_crtc()
729 aty_st_le32(CRTC_H_TOTAL_DISP, crtc->h_tot_disp, par); in aty_set_crtc()
730 aty_st_le32(CRTC_H_SYNC_STRT_WID, crtc->h_sync_strt_wid, par); in aty_set_crtc()
731 aty_st_le32(CRTC_V_TOTAL_DISP, crtc->v_tot_disp, par); in aty_set_crtc()
732 aty_st_le32(CRTC_V_SYNC_STRT_WID, crtc->v_sync_strt_wid, par); in aty_set_crtc()
733 aty_st_le32(CRTC_OFF_PITCH, crtc->off_pitch, par); in aty_set_crtc()
734 aty_st_le32(CRTC_VLINE_CRNT_VLINE, crtc->vline_crnt_vline, par); in aty_set_crtc()
736 aty_st_le32(CRTC_GEN_CNTL, crtc->gen_cntl, par); in aty_set_crtc()
746 aty_st_lcd(LCD_GEN_CNTL, (crtc->lcd_gen_cntl & ~CRTC_RW_SELECT) | in aty_set_crtc()
750 ((((crtc->shadow_h_tot_disp >> 16) & 0xff) + 1) << 3), in aty_set_crtc()
751 (((crtc->shadow_v_tot_disp >> 16) & 0x7ff) + 1), in aty_set_crtc()
752 (crtc->shadow_h_sync_strt_wid & 0x200000) ? 'N' : 'P', in aty_set_crtc()
753 (crtc->shadow_v_sync_strt_wid & 0x200000) ? 'N' : 'P'); in aty_set_crtc()
756 crtc->shadow_h_tot_disp); in aty_set_crtc()
758 crtc->shadow_h_sync_strt_wid); in aty_set_crtc()
760 crtc->shadow_v_tot_disp); in aty_set_crtc()
762 crtc->shadow_v_sync_strt_wid); in aty_set_crtc()
764 aty_st_le32(CRTC_H_TOTAL_DISP, crtc->shadow_h_tot_disp, par); in aty_set_crtc()
765 aty_st_le32(CRTC_H_SYNC_STRT_WID, crtc->shadow_h_sync_strt_wid, par); in aty_set_crtc()
766 aty_st_le32(CRTC_V_TOTAL_DISP, crtc->shadow_v_tot_disp, par); in aty_set_crtc()
767 aty_st_le32(CRTC_V_SYNC_STRT_WID, crtc->shadow_v_sync_strt_wid, par); in aty_set_crtc()
770 DPRINTK("LCD_GEN_CNTL: %x\n", crtc->lcd_gen_cntl); in aty_set_crtc()
771 DPRINTK("HORZ_STRETCHING: %x\n", crtc->horz_stretching); in aty_set_crtc()
772 DPRINTK("VERT_STRETCHING: %x\n", crtc->vert_stretching); in aty_set_crtc()
774 DPRINTK("EXT_VERT_STRETCH: %x\n", crtc->ext_vert_stretch); in aty_set_crtc()
776 aty_st_lcd(LCD_GEN_CNTL, crtc->lcd_gen_cntl, par); in aty_set_crtc()
777 aty_st_lcd(HORZ_STRETCHING, crtc->horz_stretching, par); in aty_set_crtc()
778 aty_st_lcd(VERT_STRETCHING, crtc->vert_stretching, par); in aty_set_crtc()
780 aty_st_lcd(EXT_VERT_STRETCH, crtc->ext_vert_stretch, par); in aty_set_crtc()
782 aty_st_le32(LCD_INDEX, crtc->lcd_index, par); in aty_set_crtc()
801 struct crtc *crtc) in aty_var_to_crtc() argument
891 crtc->lcd_index = lcd_index & in aty_var_to_crtc()
898 crtc->lcd_index |= CRTC2_DISPLAY_DIS; in aty_var_to_crtc()
900 crtc->lcd_config_panel = aty_ld_lcd(CNFG_PANEL, par) | 0x4000; in aty_var_to_crtc()
901 crtc->lcd_gen_cntl = aty_ld_lcd(LCD_GEN_CNTL, par) & ~CRTC_RW_SELECT; in aty_var_to_crtc()
903 crtc->lcd_gen_cntl &= in aty_var_to_crtc()
907 crtc->lcd_gen_cntl |= DONT_SHADOW_VPAR | LOCK_8DOT; in aty_var_to_crtc()
909 if ((crtc->lcd_gen_cntl & LCD_ON) && in aty_var_to_crtc()
918 if (crtc->lcd_gen_cntl & CRT_ON) { in aty_var_to_crtc()
921 crtc->lcd_gen_cntl &= ~LCD_ON; in aty_var_to_crtc()
931 if ((par->lcd_table != 0) && (crtc->lcd_gen_cntl & LCD_ON)) { in aty_var_to_crtc()
989 if ((par->lcd_table != 0) && (crtc->lcd_gen_cntl & LCD_ON)) in aty_var_to_crtc()
1009 crtc->vxres = vxres; in aty_var_to_crtc()
1010 crtc->vyres = vyres; in aty_var_to_crtc()
1011 crtc->xoffset = xoffset; in aty_var_to_crtc()
1012 crtc->yoffset = yoffset; in aty_var_to_crtc()
1013 crtc->bpp = bpp; in aty_var_to_crtc()
1014 crtc->off_pitch = in aty_var_to_crtc()
1017 crtc->vline_crnt_vline = 0; in aty_var_to_crtc()
1019 crtc->h_tot_disp = h_total | (h_disp << 16); in aty_var_to_crtc()
1020 crtc->h_sync_strt_wid = (h_sync_strt & 0xff) | (h_sync_dly << 8) | in aty_var_to_crtc()
1023 crtc->v_tot_disp = v_total | (v_disp << 16); in aty_var_to_crtc()
1024 crtc->v_sync_strt_wid = v_sync_strt | (v_sync_wid << 16) | in aty_var_to_crtc()
1028 crtc->gen_cntl = CRTC_EXT_DISP_EN | CRTC_EN | pix_width | c_sync; in aty_var_to_crtc()
1029 crtc->gen_cntl |= CRTC_VGA_LINEAR; in aty_var_to_crtc()
1033 crtc->gen_cntl |= CRTC_DBL_SCAN_EN; in aty_var_to_crtc()
1036 crtc->gen_cntl |= CRTC_INTERLACE_EN; in aty_var_to_crtc()
1042 crtc->gen_cntl &= ~(CRTC2_EN | CRTC2_PIX_WIDTH); in aty_var_to_crtc()
1043 crtc->lcd_gen_cntl &= ~(HORZ_DIVBY2_EN | DIS_HOR_CRT_DIVBY2 | in aty_var_to_crtc()
1048 crtc->lcd_gen_cntl |= DONT_SHADOW_VPAR/* | LOCK_8DOT*/; in aty_var_to_crtc()
1051 crtc->horz_stretching = aty_ld_lcd(HORZ_STRETCHING, par); in aty_var_to_crtc()
1053 crtc->ext_vert_stretch = aty_ld_lcd(EXT_VERT_STRETCH, par) & in aty_var_to_crtc()
1056 crtc->horz_stretching &= ~(HORZ_STRETCH_RATIO | in aty_var_to_crtc()
1059 if (xres < par->lcd_width && crtc->lcd_gen_cntl & LCD_ON) { in aty_var_to_crtc()
1113 crtc->horz_stretching |= (HORZ_STRETCH_EN | in aty_var_to_crtc()
1120 crtc->horz_stretching |= (HORZ_STRETCH_MODE | HORZ_STRETCH_EN | in aty_var_to_crtc()
1125 if (vdisplay < par->lcd_height && crtc->lcd_gen_cntl & LCD_ON) { in aty_var_to_crtc()
1126 crtc->vert_stretching = (VERT_STRETCH_USE0 | VERT_STRETCH_EN | in aty_var_to_crtc()
1131 crtc->ext_vert_stretch |= VERT_STRETCH_MODE; in aty_var_to_crtc()
1137 crtc->vert_stretching = 0; in aty_var_to_crtc()
1140 crtc->shadow_h_tot_disp = crtc->h_tot_disp; in aty_var_to_crtc()
1141 crtc->shadow_h_sync_strt_wid = crtc->h_sync_strt_wid; in aty_var_to_crtc()
1142 crtc->shadow_v_tot_disp = crtc->v_tot_disp; in aty_var_to_crtc()
1143 crtc->shadow_v_sync_strt_wid = crtc->v_sync_strt_wid; in aty_var_to_crtc()
1149 crtc->gen_cntl |= (aty_ld_le32(CRTC_GEN_CNTL, par) & CRTC_FIFO_LWM); in aty_var_to_crtc()
1151 crtc->dp_pix_width = dp_pix_width; in aty_var_to_crtc()
1152 crtc->dp_chain_mask = dp_chain_mask; in aty_var_to_crtc()
1157 static int aty_crtc_to_var(const struct crtc *crtc, in aty_crtc_to_var() argument
1167 h_total = crtc->h_tot_disp & 0x1ff; in aty_crtc_to_var()
1168 h_disp = (crtc->h_tot_disp >> 16) & 0xff; in aty_crtc_to_var()
1169 h_sync_strt = (crtc->h_sync_strt_wid & 0xff) | ((crtc->h_sync_strt_wid >> 4) & 0x100); in aty_crtc_to_var()
1170 h_sync_dly = (crtc->h_sync_strt_wid >> 8) & 0x7; in aty_crtc_to_var()
1171 h_sync_wid = (crtc->h_sync_strt_wid >> 16) & 0x1f; in aty_crtc_to_var()
1172 h_sync_pol = (crtc->h_sync_strt_wid >> 21) & 0x1; in aty_crtc_to_var()
1173 v_total = crtc->v_tot_disp & 0x7ff; in aty_crtc_to_var()
1174 v_disp = (crtc->v_tot_disp >> 16) & 0x7ff; in aty_crtc_to_var()
1175 v_sync_strt = crtc->v_sync_strt_wid & 0x7ff; in aty_crtc_to_var()
1176 v_sync_wid = (crtc->v_sync_strt_wid >> 16) & 0x1f; in aty_crtc_to_var()
1177 v_sync_pol = (crtc->v_sync_strt_wid >> 21) & 0x1; in aty_crtc_to_var()
1178 c_sync = crtc->gen_cntl & CRTC_CSYNC_EN ? 1 : 0; in aty_crtc_to_var()
1179 pix_width = crtc->gen_cntl & CRTC_PIX_WIDTH_MASK; in aty_crtc_to_var()
1180 double_scan = crtc->gen_cntl & CRTC_DBL_SCAN_EN; in aty_crtc_to_var()
1181 interlace = crtc->gen_cntl & CRTC_INTERLACE_EN; in aty_crtc_to_var()
1273 var->xres_virtual = crtc->vxres; in aty_crtc_to_var()
1274 var->yres_virtual = crtc->vyres; in aty_crtc_to_var()
1319 err = aty_var_to_crtc(info, var, &par->crtc); in atyfb_set_par()
1348 aty_set_crtc(par, &par->crtc); in atyfb_set_par()
1365 if (!aty_crtc_to_var(&par->crtc, &debug)) { in atyfb_set_par()
1381 if (par->crtc.gen_cntl & CRTC_INTERLACE_EN) in atyfb_set_par()
1383 if (par->crtc.gen_cntl & CRTC_DBL_SCAN_EN) in atyfb_set_par()
1470 (((par->crtc.h_tot_disp >> 16) & 0xff) + 1) * 8, in atyfb_set_par()
1471 ((par->crtc.v_tot_disp >> 16) & 0x7ff) + 1, in atyfb_set_par()
1473 par->crtc.vxres * var->bits_per_pixel / 8); in atyfb_set_par()
1477 if (!(par->crtc.gen_cntl & CRTC_EXT_DISP_EN)) in atyfb_set_par()
1478 aty_st_le32(CRTC_GEN_CNTL, par->crtc.gen_cntl | CRTC_EXT_DISP_EN, par); in atyfb_set_par()
1542 struct crtc crtc; in atyfb_check_var() local
1548 err = aty_var_to_crtc(info, var, &crtc); in atyfb_check_var()
1570 aty_crtc_to_var(&crtc, var); in atyfb_check_var()
1582 par->crtc.off_pitch = in set_off_pitch()
1622 aty_st_le32(CRTC_OFF_PITCH, par->crtc.off_pitch, par); in aty_irq()
1672 aty_st_le32(CRTC_OFF_PITCH, par->crtc.off_pitch, par); in aty_disable_irq()
1748 xres = (((par->crtc.h_tot_disp >> 16) & 0xff) + 1) * 8; in atyfb_pan_display()
1749 yres = ((par->crtc.v_tot_disp >> 16) & 0x7ff) + 1; in atyfb_pan_display()
1750 if (par->crtc.gen_cntl & CRTC_DBL_SCAN_EN) in atyfb_pan_display()
1754 if (xoffset + xres > par->crtc.vxres || in atyfb_pan_display()
1755 yoffset + yres > par->crtc.vyres) in atyfb_pan_display()
1767 aty_st_le32(CRTC_OFF_PITCH, par->crtc.off_pitch, par); in atyfb_pan_display()
1773 static int aty_waitforvblank(struct atyfb_par *par, u32 crtc) in aty_waitforvblank() argument
1779 switch (crtc) { in aty_waitforvblank()
1840 fbtyp.fb_width = par->crtc.vxres; in atyfb_ioctl()
1841 fbtyp.fb_height = par->crtc.vyres; in atyfb_ioctl()
1853 u32 crtc; in atyfb_ioctl() local
1855 if (get_user(crtc, (__u32 __user *) arg)) in atyfb_ioctl()
1858 return aty_waitforvblank(par, crtc); in atyfb_ioctl()
3067 struct crtc crtc; in atyfb_setup_sparc() local
3071 crtc.vxres = of_getintprop_default(dp, "width", 1024); in atyfb_setup_sparc()
3072 crtc.vyres = of_getintprop_default(dp, "height", 768); in atyfb_setup_sparc()
3075 crtc.h_tot_disp = aty_ld_le32(CRTC_H_TOTAL_DISP, par); in atyfb_setup_sparc()
3076 crtc.h_sync_strt_wid = aty_ld_le32(CRTC_H_SYNC_STRT_WID, par); in atyfb_setup_sparc()
3077 crtc.v_tot_disp = aty_ld_le32(CRTC_V_TOTAL_DISP, par); in atyfb_setup_sparc()
3078 crtc.v_sync_strt_wid = aty_ld_le32(CRTC_V_SYNC_STRT_WID, par); in atyfb_setup_sparc()
3079 crtc.gen_cntl = aty_ld_le32(CRTC_GEN_CNTL, par); in atyfb_setup_sparc()
3080 aty_crtc_to_var(&crtc, var); in atyfb_setup_sparc()