Lines Matching refs:crtc

266 static void aty_get_crtc(const struct atyfb_par *par, struct crtc *crtc);
268 static void aty_set_crtc(const struct atyfb_par *par, const struct crtc *crtc);
271 struct crtc *crtc);
272 static int aty_crtc_to_var(const struct crtc *crtc,
657 static void aty_get_crtc(const struct atyfb_par *par, struct crtc *crtc) in aty_get_crtc() argument
662 crtc->lcd_index = aty_ld_le32(LCD_INDEX, par); in aty_get_crtc()
663 aty_st_le32(LCD_INDEX, crtc->lcd_index, par); in aty_get_crtc()
665 crtc->lcd_config_panel = aty_ld_lcd(CNFG_PANEL, par); in aty_get_crtc()
666 crtc->lcd_gen_cntl = aty_ld_lcd(LCD_GEN_CNTL, par); in aty_get_crtc()
670 aty_st_lcd(LCD_GEN_CNTL, crtc->lcd_gen_cntl & in aty_get_crtc()
674 crtc->horz_stretching = aty_ld_lcd(HORZ_STRETCHING, par); in aty_get_crtc()
675 crtc->vert_stretching = aty_ld_lcd(VERT_STRETCHING, par); in aty_get_crtc()
677 crtc->ext_vert_stretch = aty_ld_lcd(EXT_VERT_STRETCH, par); in aty_get_crtc()
680 crtc->h_tot_disp = aty_ld_le32(CRTC_H_TOTAL_DISP, par); in aty_get_crtc()
681 crtc->h_sync_strt_wid = aty_ld_le32(CRTC_H_SYNC_STRT_WID, par); in aty_get_crtc()
682 crtc->v_tot_disp = aty_ld_le32(CRTC_V_TOTAL_DISP, par); in aty_get_crtc()
683 crtc->v_sync_strt_wid = aty_ld_le32(CRTC_V_SYNC_STRT_WID, par); in aty_get_crtc()
684 crtc->vline_crnt_vline = aty_ld_le32(CRTC_VLINE_CRNT_VLINE, par); in aty_get_crtc()
685 crtc->off_pitch = aty_ld_le32(CRTC_OFF_PITCH, par); in aty_get_crtc()
686 crtc->gen_cntl = aty_ld_le32(CRTC_GEN_CNTL, par); in aty_get_crtc()
691 aty_st_lcd(LCD_GEN_CNTL, (crtc->lcd_gen_cntl & ~CRTC_RW_SELECT) | in aty_get_crtc()
694 crtc->shadow_h_tot_disp = aty_ld_le32(CRTC_H_TOTAL_DISP, par); in aty_get_crtc()
695 crtc->shadow_h_sync_strt_wid = aty_ld_le32(CRTC_H_SYNC_STRT_WID, par); in aty_get_crtc()
696 crtc->shadow_v_tot_disp = aty_ld_le32(CRTC_V_TOTAL_DISP, par); in aty_get_crtc()
697 crtc->shadow_v_sync_strt_wid = aty_ld_le32(CRTC_V_SYNC_STRT_WID, par); in aty_get_crtc()
699 aty_st_le32(LCD_GEN_CNTL, crtc->lcd_gen_cntl, par); in aty_get_crtc()
704 static void aty_set_crtc(const struct atyfb_par *par, const struct crtc *crtc) in aty_set_crtc() argument
709 aty_st_le32(CRTC_GEN_CNTL, crtc->gen_cntl & in aty_set_crtc()
713 aty_st_lcd(CNFG_PANEL, crtc->lcd_config_panel, par); in aty_set_crtc()
714 aty_st_lcd(LCD_GEN_CNTL, crtc->lcd_gen_cntl & in aty_set_crtc()
718 aty_st_lcd(HORZ_STRETCHING, crtc->horz_stretching & in aty_set_crtc()
720 aty_st_lcd(VERT_STRETCHING, crtc->vert_stretching & in aty_set_crtc()
726 aty_st_le32(CRTC_GEN_CNTL, crtc->gen_cntl & ~CRTC_EN, par); in aty_set_crtc()
730 ((((crtc->h_tot_disp >> 16) & 0xff) + 1) << 3), in aty_set_crtc()
731 (((crtc->v_tot_disp >> 16) & 0x7ff) + 1), in aty_set_crtc()
732 (crtc->h_sync_strt_wid & 0x200000) ? 'N' : 'P', in aty_set_crtc()
733 (crtc->v_sync_strt_wid & 0x200000) ? 'N' : 'P', in aty_set_crtc()
734 (crtc->gen_cntl & CRTC_CSYNC_EN) ? 'P' : 'N'); in aty_set_crtc()
736 DPRINTK("CRTC_H_TOTAL_DISP: %x\n", crtc->h_tot_disp); in aty_set_crtc()
737 DPRINTK("CRTC_H_SYNC_STRT_WID: %x\n", crtc->h_sync_strt_wid); in aty_set_crtc()
738 DPRINTK("CRTC_V_TOTAL_DISP: %x\n", crtc->v_tot_disp); in aty_set_crtc()
739 DPRINTK("CRTC_V_SYNC_STRT_WID: %x\n", crtc->v_sync_strt_wid); in aty_set_crtc()
740 DPRINTK("CRTC_OFF_PITCH: %x\n", crtc->off_pitch); in aty_set_crtc()
741 DPRINTK("CRTC_VLINE_CRNT_VLINE: %x\n", crtc->vline_crnt_vline); in aty_set_crtc()
742 DPRINTK("CRTC_GEN_CNTL: %x\n", crtc->gen_cntl); in aty_set_crtc()
744 aty_st_le32(CRTC_H_TOTAL_DISP, crtc->h_tot_disp, par); in aty_set_crtc()
745 aty_st_le32(CRTC_H_SYNC_STRT_WID, crtc->h_sync_strt_wid, par); in aty_set_crtc()
746 aty_st_le32(CRTC_V_TOTAL_DISP, crtc->v_tot_disp, par); in aty_set_crtc()
747 aty_st_le32(CRTC_V_SYNC_STRT_WID, crtc->v_sync_strt_wid, par); in aty_set_crtc()
748 aty_st_le32(CRTC_OFF_PITCH, crtc->off_pitch, par); in aty_set_crtc()
749 aty_st_le32(CRTC_VLINE_CRNT_VLINE, crtc->vline_crnt_vline, par); in aty_set_crtc()
751 aty_st_le32(CRTC_GEN_CNTL, crtc->gen_cntl, par); in aty_set_crtc()
761 aty_st_lcd(LCD_GEN_CNTL, (crtc->lcd_gen_cntl & ~CRTC_RW_SELECT) | in aty_set_crtc()
765 ((((crtc->shadow_h_tot_disp >> 16) & 0xff) + 1) << 3), in aty_set_crtc()
766 (((crtc->shadow_v_tot_disp >> 16) & 0x7ff) + 1), in aty_set_crtc()
767 (crtc->shadow_h_sync_strt_wid & 0x200000) ? 'N' : 'P', in aty_set_crtc()
768 (crtc->shadow_v_sync_strt_wid & 0x200000) ? 'N' : 'P'); in aty_set_crtc()
771 crtc->shadow_h_tot_disp); in aty_set_crtc()
773 crtc->shadow_h_sync_strt_wid); in aty_set_crtc()
775 crtc->shadow_v_tot_disp); in aty_set_crtc()
777 crtc->shadow_v_sync_strt_wid); in aty_set_crtc()
779 aty_st_le32(CRTC_H_TOTAL_DISP, crtc->shadow_h_tot_disp, par); in aty_set_crtc()
780 aty_st_le32(CRTC_H_SYNC_STRT_WID, crtc->shadow_h_sync_strt_wid, par); in aty_set_crtc()
781 aty_st_le32(CRTC_V_TOTAL_DISP, crtc->shadow_v_tot_disp, par); in aty_set_crtc()
782 aty_st_le32(CRTC_V_SYNC_STRT_WID, crtc->shadow_v_sync_strt_wid, par); in aty_set_crtc()
785 DPRINTK("LCD_GEN_CNTL: %x\n", crtc->lcd_gen_cntl); in aty_set_crtc()
786 DPRINTK("HORZ_STRETCHING: %x\n", crtc->horz_stretching); in aty_set_crtc()
787 DPRINTK("VERT_STRETCHING: %x\n", crtc->vert_stretching); in aty_set_crtc()
789 DPRINTK("EXT_VERT_STRETCH: %x\n", crtc->ext_vert_stretch); in aty_set_crtc()
791 aty_st_lcd(LCD_GEN_CNTL, crtc->lcd_gen_cntl, par); in aty_set_crtc()
792 aty_st_lcd(HORZ_STRETCHING, crtc->horz_stretching, par); in aty_set_crtc()
793 aty_st_lcd(VERT_STRETCHING, crtc->vert_stretching, par); in aty_set_crtc()
795 aty_st_lcd(EXT_VERT_STRETCH, crtc->ext_vert_stretch, par); in aty_set_crtc()
797 aty_st_le32(LCD_INDEX, crtc->lcd_index, par); in aty_set_crtc()
816 struct crtc *crtc) in aty_var_to_crtc() argument
906 crtc->lcd_index = lcd_index & in aty_var_to_crtc()
913 crtc->lcd_index |= CRTC2_DISPLAY_DIS; in aty_var_to_crtc()
915 crtc->lcd_config_panel = aty_ld_lcd(CNFG_PANEL, par) | 0x4000; in aty_var_to_crtc()
916 crtc->lcd_gen_cntl = aty_ld_lcd(LCD_GEN_CNTL, par) & ~CRTC_RW_SELECT; in aty_var_to_crtc()
918 crtc->lcd_gen_cntl &= in aty_var_to_crtc()
922 crtc->lcd_gen_cntl |= DONT_SHADOW_VPAR | LOCK_8DOT; in aty_var_to_crtc()
924 if ((crtc->lcd_gen_cntl & LCD_ON) && in aty_var_to_crtc()
933 if (crtc->lcd_gen_cntl & CRT_ON) { in aty_var_to_crtc()
936 crtc->lcd_gen_cntl &= ~LCD_ON; in aty_var_to_crtc()
946 if ((par->lcd_table != 0) && (crtc->lcd_gen_cntl & LCD_ON)) { in aty_var_to_crtc()
1018 crtc->vxres = vxres; in aty_var_to_crtc()
1019 crtc->vyres = vyres; in aty_var_to_crtc()
1020 crtc->xoffset = xoffset; in aty_var_to_crtc()
1021 crtc->yoffset = yoffset; in aty_var_to_crtc()
1022 crtc->bpp = bpp; in aty_var_to_crtc()
1023 crtc->off_pitch = in aty_var_to_crtc()
1026 crtc->vline_crnt_vline = 0; in aty_var_to_crtc()
1028 crtc->h_tot_disp = h_total | (h_disp << 16); in aty_var_to_crtc()
1029 crtc->h_sync_strt_wid = (h_sync_strt & 0xff) | (h_sync_dly << 8) | in aty_var_to_crtc()
1032 crtc->v_tot_disp = v_total | (v_disp << 16); in aty_var_to_crtc()
1033 crtc->v_sync_strt_wid = v_sync_strt | (v_sync_wid << 16) | in aty_var_to_crtc()
1037 crtc->gen_cntl = CRTC_EXT_DISP_EN | CRTC_EN | pix_width | c_sync; in aty_var_to_crtc()
1038 crtc->gen_cntl |= CRTC_VGA_LINEAR; in aty_var_to_crtc()
1042 crtc->gen_cntl |= CRTC_DBL_SCAN_EN; in aty_var_to_crtc()
1045 crtc->gen_cntl |= CRTC_INTERLACE_EN; in aty_var_to_crtc()
1051 crtc->gen_cntl &= ~(CRTC2_EN | CRTC2_PIX_WIDTH); in aty_var_to_crtc()
1052 crtc->lcd_gen_cntl &= ~(HORZ_DIVBY2_EN | DIS_HOR_CRT_DIVBY2 | in aty_var_to_crtc()
1057 crtc->lcd_gen_cntl |= DONT_SHADOW_VPAR/* | LOCK_8DOT*/; in aty_var_to_crtc()
1060 crtc->horz_stretching = aty_ld_lcd(HORZ_STRETCHING, par); in aty_var_to_crtc()
1062 crtc->ext_vert_stretch = aty_ld_lcd(EXT_VERT_STRETCH, par) & in aty_var_to_crtc()
1065 crtc->horz_stretching &= ~(HORZ_STRETCH_RATIO | in aty_var_to_crtc()
1068 if (xres < par->lcd_width && crtc->lcd_gen_cntl & LCD_ON) { in aty_var_to_crtc()
1122 crtc->horz_stretching |= (HORZ_STRETCH_EN | in aty_var_to_crtc()
1129 crtc->horz_stretching |= (HORZ_STRETCH_MODE | HORZ_STRETCH_EN | in aty_var_to_crtc()
1134 if (vdisplay < par->lcd_height && crtc->lcd_gen_cntl & LCD_ON) { in aty_var_to_crtc()
1135 crtc->vert_stretching = (VERT_STRETCH_USE0 | VERT_STRETCH_EN | in aty_var_to_crtc()
1140 crtc->ext_vert_stretch |= VERT_STRETCH_MODE; in aty_var_to_crtc()
1146 crtc->vert_stretching = 0; in aty_var_to_crtc()
1149 crtc->shadow_h_tot_disp = crtc->h_tot_disp; in aty_var_to_crtc()
1150 crtc->shadow_h_sync_strt_wid = crtc->h_sync_strt_wid; in aty_var_to_crtc()
1151 crtc->shadow_v_tot_disp = crtc->v_tot_disp; in aty_var_to_crtc()
1152 crtc->shadow_v_sync_strt_wid = crtc->v_sync_strt_wid; in aty_var_to_crtc()
1158 crtc->gen_cntl |= (aty_ld_le32(CRTC_GEN_CNTL, par) & CRTC_FIFO_LWM); in aty_var_to_crtc()
1160 crtc->dp_pix_width = dp_pix_width; in aty_var_to_crtc()
1161 crtc->dp_chain_mask = dp_chain_mask; in aty_var_to_crtc()
1166 static int aty_crtc_to_var(const struct crtc *crtc, in aty_crtc_to_var() argument
1176 h_total = crtc->h_tot_disp & 0x1ff; in aty_crtc_to_var()
1177 h_disp = (crtc->h_tot_disp >> 16) & 0xff; in aty_crtc_to_var()
1178 h_sync_strt = (crtc->h_sync_strt_wid & 0xff) | ((crtc->h_sync_strt_wid >> 4) & 0x100); in aty_crtc_to_var()
1179 h_sync_dly = (crtc->h_sync_strt_wid >> 8) & 0x7; in aty_crtc_to_var()
1180 h_sync_wid = (crtc->h_sync_strt_wid >> 16) & 0x1f; in aty_crtc_to_var()
1181 h_sync_pol = (crtc->h_sync_strt_wid >> 21) & 0x1; in aty_crtc_to_var()
1182 v_total = crtc->v_tot_disp & 0x7ff; in aty_crtc_to_var()
1183 v_disp = (crtc->v_tot_disp >> 16) & 0x7ff; in aty_crtc_to_var()
1184 v_sync_strt = crtc->v_sync_strt_wid & 0x7ff; in aty_crtc_to_var()
1185 v_sync_wid = (crtc->v_sync_strt_wid >> 16) & 0x1f; in aty_crtc_to_var()
1186 v_sync_pol = (crtc->v_sync_strt_wid >> 21) & 0x1; in aty_crtc_to_var()
1187 c_sync = crtc->gen_cntl & CRTC_CSYNC_EN ? 1 : 0; in aty_crtc_to_var()
1188 pix_width = crtc->gen_cntl & CRTC_PIX_WIDTH_MASK; in aty_crtc_to_var()
1189 double_scan = crtc->gen_cntl & CRTC_DBL_SCAN_EN; in aty_crtc_to_var()
1190 interlace = crtc->gen_cntl & CRTC_INTERLACE_EN; in aty_crtc_to_var()
1269 var->xres_virtual = crtc->vxres; in aty_crtc_to_var()
1270 var->yres_virtual = crtc->vyres; in aty_crtc_to_var()
1315 err = aty_var_to_crtc(info, var, &par->crtc); in atyfb_set_par()
1344 aty_set_crtc(par, &par->crtc); in atyfb_set_par()
1361 if (!aty_crtc_to_var(&par->crtc, &debug)) { in atyfb_set_par()
1377 if (par->crtc.gen_cntl & CRTC_INTERLACE_EN) in atyfb_set_par()
1379 if (par->crtc.gen_cntl & CRTC_DBL_SCAN_EN) in atyfb_set_par()
1466 (((par->crtc.h_tot_disp >> 16) & 0xff) + 1) * 8, in atyfb_set_par()
1467 ((par->crtc.v_tot_disp >> 16) & 0x7ff) + 1, in atyfb_set_par()
1469 par->crtc.vxres * var->bits_per_pixel / 8); in atyfb_set_par()
1537 struct crtc crtc; in atyfb_check_var() local
1543 err = aty_var_to_crtc(info, var, &crtc); in atyfb_check_var()
1565 aty_crtc_to_var(&crtc, var); in atyfb_check_var()
1577 par->crtc.off_pitch = in set_off_pitch()
1617 aty_st_le32(CRTC_OFF_PITCH, par->crtc.off_pitch, par); in aty_irq()
1667 aty_st_le32(CRTC_OFF_PITCH, par->crtc.off_pitch, par); in aty_disable_irq()
1743 xres = (((par->crtc.h_tot_disp >> 16) & 0xff) + 1) * 8; in atyfb_pan_display()
1744 yres = ((par->crtc.v_tot_disp >> 16) & 0x7ff) + 1; in atyfb_pan_display()
1745 if (par->crtc.gen_cntl & CRTC_DBL_SCAN_EN) in atyfb_pan_display()
1749 if (xoffset + xres > par->crtc.vxres || in atyfb_pan_display()
1750 yoffset + yres > par->crtc.vyres) in atyfb_pan_display()
1762 aty_st_le32(CRTC_OFF_PITCH, par->crtc.off_pitch, par); in atyfb_pan_display()
1768 static int aty_waitforvblank(struct atyfb_par *par, u32 crtc) in aty_waitforvblank() argument
1774 switch (crtc) { in aty_waitforvblank()
1835 fbtyp.fb_width = par->crtc.vxres; in atyfb_ioctl()
1836 fbtyp.fb_height = par->crtc.vyres; in atyfb_ioctl()
1848 u32 crtc; in atyfb_ioctl() local
1850 if (get_user(crtc, (__u32 __user *) arg)) in atyfb_ioctl()
1853 return aty_waitforvblank(par, crtc); in atyfb_ioctl()
3070 struct crtc crtc; in atyfb_setup_sparc() local
3074 crtc.vxres = of_getintprop_default(dp, "width", 1024); in atyfb_setup_sparc()
3075 crtc.vyres = of_getintprop_default(dp, "height", 768); in atyfb_setup_sparc()
3078 crtc.h_tot_disp = aty_ld_le32(CRTC_H_TOTAL_DISP, par); in atyfb_setup_sparc()
3079 crtc.h_sync_strt_wid = aty_ld_le32(CRTC_H_SYNC_STRT_WID, par); in atyfb_setup_sparc()
3080 crtc.v_tot_disp = aty_ld_le32(CRTC_V_TOTAL_DISP, par); in atyfb_setup_sparc()
3081 crtc.v_sync_strt_wid = aty_ld_le32(CRTC_V_SYNC_STRT_WID, par); in atyfb_setup_sparc()
3082 crtc.gen_cntl = aty_ld_le32(CRTC_GEN_CNTL, par); in atyfb_setup_sparc()
3083 aty_crtc_to_var(&crtc, var); in atyfb_setup_sparc()