⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hw.c

📁 via framebuffer driver
💻 C
📖 第 1 页 / 共 5 页
字号:
		viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIASR);		/* Set FIFO High Threshold Select */		reg_value =		    IGA1_FIFO_HIGH_THRESHOLD_FORMULA(iga1_fifo_high_threshold);		viafb_load_reg_num =		    fifo_high_threshold_select_reg.		    iga1_fifo_high_threshold_select_reg.reg_num;		reg =		    fifo_high_threshold_select_reg.		    iga1_fifo_high_threshold_select_reg.reg;		viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIASR);		/* Set Display Queue Expire Num */		reg_value =		    IGA1_DISPLAY_QUEUE_EXPIRE_NUM_FORMULA		    (iga1_display_queue_expire_num);		viafb_load_reg_num =		    display_queue_expire_num_reg.		    iga1_display_queue_expire_num_reg.reg_num;		reg =		    display_queue_expire_num_reg.		    iga1_display_queue_expire_num_reg.reg;		viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIASR);	} else {		if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_K800) {			iga2_fifo_max_depth = K800_IGA2_FIFO_MAX_DEPTH;			iga2_fifo_threshold = K800_IGA2_FIFO_THRESHOLD;			iga2_fifo_high_threshold =			    K800_IGA2_FIFO_HIGH_THRESHOLD;			/* If resolution > 1280x1024, expire length = 64,			   else  expire length = 128 */			if ((hor_active > 1280) && (ver_active > 1024))				iga2_display_queue_expire_num = 16;			else				iga2_display_queue_expire_num =				    K800_IGA2_DISPLAY_QUEUE_EXPIRE_NUM;		}		if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_PM800) {			iga2_fifo_max_depth = P880_IGA2_FIFO_MAX_DEPTH;			iga2_fifo_threshold = P880_IGA2_FIFO_THRESHOLD;			iga2_fifo_high_threshold =			    P880_IGA2_FIFO_HIGH_THRESHOLD;			/* If resolution > 1280x1024, expire length = 64,			   else  expire length = 128 */			if ((hor_active > 1280) && (ver_active > 1024))				iga2_display_queue_expire_num = 16;			else				iga2_display_queue_expire_num =				    P880_IGA2_DISPLAY_QUEUE_EXPIRE_NUM;		}		if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CN700) {			iga2_fifo_max_depth = CN700_IGA2_FIFO_MAX_DEPTH;			iga2_fifo_threshold = CN700_IGA2_FIFO_THRESHOLD;			iga2_fifo_high_threshold =			    CN700_IGA2_FIFO_HIGH_THRESHOLD;			/* If resolution > 1280x1024, expire length = 64,			   else expire length = 128 */			if ((hor_active > 1280) && (ver_active > 1024))				iga2_display_queue_expire_num = 16;			else				iga2_display_queue_expire_num =				    CN700_IGA2_DISPLAY_QUEUE_EXPIRE_NUM;		}		if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_CX700) {			iga2_fifo_max_depth = CX700_IGA2_FIFO_MAX_DEPTH;			iga2_fifo_threshold = CX700_IGA2_FIFO_THRESHOLD;			iga2_fifo_high_threshold =			    CX700_IGA2_FIFO_HIGH_THRESHOLD;			iga2_display_queue_expire_num =			    CX700_IGA2_DISPLAY_QUEUE_EXPIRE_NUM;		}		if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_K8M890) {			iga2_fifo_max_depth = K8M890_IGA2_FIFO_MAX_DEPTH;			iga2_fifo_threshold = K8M890_IGA2_FIFO_THRESHOLD;			iga2_fifo_high_threshold =			    K8M890_IGA2_FIFO_HIGH_THRESHOLD;			iga2_display_queue_expire_num =			    K8M890_IGA2_DISPLAY_QUEUE_EXPIRE_NUM;		}		if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_P4M890) {			iga2_fifo_max_depth = P4M890_IGA2_FIFO_MAX_DEPTH;			iga2_fifo_threshold = P4M890_IGA2_FIFO_THRESHOLD;			iga2_fifo_high_threshold =			    P4M890_IGA2_FIFO_HIGH_THRESHOLD;			iga2_display_queue_expire_num =			    P4M890_IGA2_DISPLAY_QUEUE_EXPIRE_NUM;		}		if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_P4M900) {			iga2_fifo_max_depth = P4M900_IGA2_FIFO_MAX_DEPTH;			iga2_fifo_threshold = P4M900_IGA2_FIFO_THRESHOLD;			iga2_fifo_high_threshold =			    P4M900_IGA2_FIFO_HIGH_THRESHOLD;			iga2_display_queue_expire_num =			    P4M900_IGA2_DISPLAY_QUEUE_EXPIRE_NUM;		}		if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_VX800) {			iga2_fifo_max_depth = VX800_IGA2_FIFO_MAX_DEPTH;			iga2_fifo_threshold = VX800_IGA2_FIFO_THRESHOLD;			iga2_fifo_high_threshold =			    VX800_IGA2_FIFO_HIGH_THRESHOLD;			iga2_display_queue_expire_num =			    VX800_IGA2_DISPLAY_QUEUE_EXPIRE_NUM;		}		if (viaparinfo->chip_info->gfx_chip_name == UNICHROME_K800) {			/* Set Display FIFO Depath Select */			reg_value =			    IGA2_FIFO_DEPTH_SELECT_FORMULA(iga2_fifo_max_depth)			    - 1;			/* Patch LCD in IGA2 case */			viafb_load_reg_num =			    display_fifo_depth_reg.			    iga2_fifo_depth_select_reg.reg_num;			reg =			    display_fifo_depth_reg.			    iga2_fifo_depth_select_reg.reg;			viafb_load_reg(reg_value,				viafb_load_reg_num, reg, VIACR);		} else {			/* Set Display FIFO Depath Select */			reg_value =			    IGA2_FIFO_DEPTH_SELECT_FORMULA(iga2_fifo_max_depth);			viafb_load_reg_num =			    display_fifo_depth_reg.			    iga2_fifo_depth_select_reg.reg_num;			reg =			    display_fifo_depth_reg.			    iga2_fifo_depth_select_reg.reg;			viafb_load_reg(reg_value,				viafb_load_reg_num, reg, VIACR);		}		/* Set Display FIFO Threshold Select */		reg_value = IGA2_FIFO_THRESHOLD_FORMULA(iga2_fifo_threshold);		viafb_load_reg_num =		    fifo_threshold_select_reg.		    iga2_fifo_threshold_select_reg.reg_num;		reg =		    fifo_threshold_select_reg.		    iga2_fifo_threshold_select_reg.reg;		viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIACR);		/* Set FIFO High Threshold Select */		reg_value =		    IGA2_FIFO_HIGH_THRESHOLD_FORMULA(iga2_fifo_high_threshold);		viafb_load_reg_num =		    fifo_high_threshold_select_reg.		    iga2_fifo_high_threshold_select_reg.reg_num;		reg =		    fifo_high_threshold_select_reg.		    iga2_fifo_high_threshold_select_reg.reg;		viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIACR);		/* Set Display Queue Expire Num */		reg_value =		    IGA2_DISPLAY_QUEUE_EXPIRE_NUM_FORMULA		    (iga2_display_queue_expire_num);		viafb_load_reg_num =		    display_queue_expire_num_reg.		    iga2_display_queue_expire_num_reg.reg_num;		reg =		    display_queue_expire_num_reg.		    iga2_display_queue_expire_num_reg.reg;		viafb_load_reg(reg_value, viafb_load_reg_num, reg, VIACR);	}}u32 viafb_get_clk_value(int clk){	int i;	for (i = 0; i < NUM_TOTAL_PLL_TABLE; i++) {		if (clk == pll_value[i].clk) {			switch (viaparinfo->chip_info->gfx_chip_name) {			case UNICHROME_CLE266:			case UNICHROME_K400:				return (pll_value[i].cle266_pll);			case UNICHROME_K800:			case UNICHROME_PM800:			case UNICHROME_CN700:				return (pll_value[i].k800_pll);			case UNICHROME_CX700:			case UNICHROME_K8M890:			case UNICHROME_P4M890:			case UNICHROME_P4M900:			case UNICHROME_VX800:				return (pll_value[i].cx700_pll);			}		}	}	DEBUG_MSG(KERN_INFO "Can't find match PLL value\n\n");	return (0);}/* Set VCLK*/void viafb_set_vclock(u32 CLK, int set_iga){	unsigned char RegTemp;	/* H.W. Reset : ON */	viafb_write_reg_mask(CR17, VIACR, 0x00, BIT7);	if ((set_iga == IGA1) || (set_iga == IGA1_IGA2)) {		/* Change D,N FOR VCLK */		switch (viaparinfo->chip_info->gfx_chip_name) {		case UNICHROME_CLE266:		case UNICHROME_K400:			viafb_write_reg(SR46, VIASR, CLK / 0x100);			viafb_write_reg(SR47, VIASR, CLK % 0x100);			break;		case UNICHROME_K800:		case UNICHROME_PM800:		case UNICHROME_CN700:		case UNICHROME_CX700:		case UNICHROME_K8M890:		case UNICHROME_P4M890:		case UNICHROME_P4M900:		case UNICHROME_VX800:			viafb_write_reg(SR44, VIASR, CLK / 0x10000);			DEBUG_MSG(KERN_INFO "\nSR44=%x", CLK / 0x10000);			viafb_write_reg(SR45, VIASR, (CLK & 0xFFFF) / 0x100);			DEBUG_MSG(KERN_INFO "\nSR45=%x",				  (CLK & 0xFFFF) / 0x100);			viafb_write_reg(SR46, VIASR, CLK % 0x100);			DEBUG_MSG(KERN_INFO "\nSR46=%x", CLK % 0x100);			break;		}	}	if ((set_iga == IGA2) || (set_iga == IGA1_IGA2)) {		/* Change D,N FOR LCK */		switch (viaparinfo->chip_info->gfx_chip_name) {		case UNICHROME_CLE266:		case UNICHROME_K400:			viafb_write_reg(SR44, VIASR, CLK / 0x100);			viafb_write_reg(SR45, VIASR, CLK % 0x100);			break;		case UNICHROME_K800:		case UNICHROME_PM800:		case UNICHROME_CN700:		case UNICHROME_CX700:		case UNICHROME_K8M890:		case UNICHROME_P4M890:		case UNICHROME_P4M900:		case UNICHROME_VX800:			viafb_write_reg(SR4A, VIASR, CLK / 0x10000);			viafb_write_reg(SR4B, VIASR, (CLK & 0xFFFF) / 0x100);			viafb_write_reg(SR4C, VIASR, CLK % 0x100);			break;		}	}	/* H.W. Reset : OFF */	viafb_write_reg_mask(CR17, VIACR, 0x80, BIT7);	/* Reset PLL */	if ((set_iga == IGA1) || (set_iga == IGA1_IGA2)) {		viafb_write_reg_mask(SR40, VIASR, 0x02, BIT1);		viafb_write_reg_mask(SR40, VIASR, 0x00, BIT1);	}	if ((set_iga == IGA2) || (set_iga == IGA1_IGA2)) {		viafb_write_reg_mask(SR40, VIASR, 0x01, BIT0);		viafb_write_reg_mask(SR40, VIASR, 0x00, BIT0);	}	/* Fire! */	RegTemp = inb(VIARMisc);	outb(RegTemp | (BIT2 + BIT3), VIAWMisc);}void viafb_load_crtc_timing(struct display_timing device_timing,	int set_iga){	int i;	int viafb_load_reg_num = 0;	int reg_value = 0;	struct io_register *reg = NULL;	viafb_unlock_crt();	for (i = 0; i < 12; i++) {		if (set_iga == IGA1) {			switch (i) {			case H_TOTAL_INDEX:				reg_value =				    IGA1_HOR_TOTAL_FORMULA(device_timing.							   hor_total);				viafb_load_reg_num =					iga1_crtc_reg.hor_total.reg_num;				reg = iga1_crtc_reg.hor_total.reg;				break;			case H_ADDR_INDEX:				reg_value =				    IGA1_HOR_ADDR_FORMULA(device_timing.							  hor_addr);				viafb_load_reg_num =					iga1_crtc_reg.hor_addr.reg_num;				reg = iga1_crtc_reg.hor_addr.reg;				break;			case H_BLANK_START_INDEX:				reg_value =				    IGA1_HOR_BLANK_START_FORMULA				    (device_timing.hor_blank_start);				viafb_load_reg_num =				    iga1_crtc_reg.hor_blank_start.reg_num;				reg = iga1_crtc_reg.hor_blank_start.reg;				break;			case H_BLANK_END_INDEX:				reg_value =				    IGA1_HOR_BLANK_END_FORMULA				    (device_timing.hor_blank_start,				     device_timing.hor_blank_end);				viafb_load_reg_num =				    iga1_crtc_reg.hor_blank_end.reg_num;				reg = iga1_crtc_reg.hor_blank_end.reg;				break;			case H_SYNC_START_INDEX:				reg_value =				    IGA1_HOR_SYNC_START_FORMULA				    (device_timing.hor_sync_start);				viafb_load_reg_num =				    iga1_crtc_reg.hor_sync_start.reg_num;				reg = iga1_crtc_reg.hor_sync_start.reg;				break;			case H_SYNC_END_INDEX:				reg_value =				    IGA1_HOR_SYNC_END_FORMULA				    (device_timing.hor_sync_start,				     device_timing.hor_sync_end);				viafb_load_reg_num =				    iga1_crtc_reg.hor_sync_end.reg_num;				reg = iga1_crtc_reg.hor_sync_end.reg;				break;			case V_TOTAL_INDEX:				reg_value =				    IGA1_VER_TOTAL_FORMULA(device_timing.							   ver_total);				viafb_load_reg_num =					iga1_crtc_reg.ver_total.reg_num;				reg = iga1_crtc_reg.ver_total.reg;				break;			case V_ADDR_INDEX:				reg_value =				    IGA1_VER_ADDR_FORMULA(device_timing.							  ver_addr);				viafb_load_reg_num =					iga1_crtc_reg.ver_addr.reg_num;				reg = iga1_crtc_reg.ver_addr.reg;				break;			case V_BLANK_START_INDEX:				reg_value =				    IGA1_VER_BLANK_START_FORMULA				    (device_timing.ver_blank_start);				viafb_load_reg_num =				    iga1_crtc_reg.ver_blank_start.reg_num;				reg = iga1_crtc_reg.ver_blank_start.reg;				break;			case V_BLANK_END_INDEX:				reg_value =				    IGA1_VER_BLANK_END_FORMULA				    (device_timing.ver_blank_start,				     device_timing.ver_blank_end);				viafb_load_reg_num =				    iga1_crtc_reg.ver_blank_end.reg_num;				reg = iga1_crtc_reg.ver_blank_end.reg;				break;			case V_SYNC_START_INDEX:				reg_value =				    IGA1_VER_SYNC_START_FORMULA				    (device_timing.ver_sync_start);				viafb_load_reg_num =				    iga1_crtc_reg.ver_sync_start.reg_num;				reg = iga1_crtc_reg.ver_sync_start.reg;				break;			case V_SYNC_END_INDEX:				reg_value =				    IGA1_VER_SYNC_END_FORMULA				    (device_timing.ver_sync_start,				     device_timing.ver_sync_end);				viafb_load_reg_num =				    iga1_crtc_reg.ver_sync_end.reg_num;				reg = iga1_crtc_reg.ver_sync_end.reg;				break;			}		}		if (set_iga == IGA2) {			switch (i) {			case H_TOTAL_INDEX:				reg_value =				    IGA2_HOR_TOTAL_FORMULA(device_timing.							   hor_total);				viafb_load_reg_num =					iga2_crtc_reg.hor_total.reg_num;				reg = iga2_crtc_reg.hor_total.reg;				break;			case H_ADDR_INDEX:				reg_value =				    IGA2_HOR_ADDR_FORMULA(device_timing.							  hor_addr);				viafb_load_reg_num =					iga2_crtc_reg.hor_addr.reg_num;				reg = iga2_crtc_reg.hor_addr.reg;				break;			case H_BLANK_START_INDEX:				reg_value =				    IGA2_HOR_BLANK_START_FORMULA				    (device_timing.hor_blank_start);				viafb_load_reg_num =				    iga2_crtc_reg.hor_blank_start.reg_num;				reg = iga2_crtc_reg.hor_blank_start.reg;				break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -