亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? s3c2410fb.c

?? 基于s3c2410的lcd驅動程序源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <linux/config.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/errno.h>#include <linux/string.h>#include <linux/interrupt.h>#include <linux/slab.h>#include <linux/fb.h>#include <linux/delay.h>#include <linux/pm.h>#include <linux/init.h>#include <asm/hardware.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/mach-types.h>#include <asm/uaccess.h>#include <video/fbcon.h>#include <video/fbcon-mfb.h>#include <video/fbcon-cfb4.h>#include <video/fbcon-cfb8.h>#include <video/fbcon-cfb16.h>#include "s3c2410fb.h"void (*s3c2410fb_blank_helper)(int blank);EXPORT_SYMBOL(s3c2410fb_blank_helper);/*  * CONFIG_FB_S3C2410_EMUL * * 伙己 炮飯皋平膠 ? : 96*320 俊鼓飯撈記.  * *  var.xres = 96 欄肺 竅絆, *  fix.line_length = 240*2 肺 茄促. *  app 啊 linux FB spec. 闌 霖薦茄促擱 鞏力啊 絕闌 巴撈促. * *  var.xres_virtual 闌 煉瀝竅綽 規過檔 積阿秦 杭 薦 樂瘤父, spec. 苞綽 喊檔肺 *  app. 啊 決沒 度度秦具 且 揮父 酒聰扼, panning/wrapping 苞 部老 堪妨啊 *  樂欄骨肺 硅力茄促. */static struct s3c2410fb_rgb	rgb_8 = {	red:	{offset: 0, length: 4, },	green:	{offset: 0, length: 4, },	blue:	{offset: 0, length: 4, },	transp:	{offset: 0, length: 0, },};static struct s3c2410fb_rgb	def_rgb_16 = {    	red:	{offset: 11, length: 5, },	green:	{offset: 5,  length: 6, },	blue:	{offset: 0,  length: 5, },	transp:	{offset: 0,  length: 0, },};#if 0static struct s3c2410fb_rgb	xxx_tft_rgb_16 = {    	red:	{offset: 11,	length: 5, },	green:	{offset: 6,	length: 5, },	blue:	{offset: 1,	length: 5, },	transp:	{offset: 0,	length: 1, },};#elsestatic struct s3c2410fb_rgb	xxx_tft_rgb_16 = {    	red:	{offset: 11,	length: 5, },	green:	{offset: 5,	length: 6, },	blue:	{offset: 0,	length: 5, },	transp:	{offset: 0,	length: 0, },};#endif/*#ifdef CONFIG_S3C2410_SMDKstatic struct s3c2410fb_mach_info xxx_stn_info __initdata = {    	pixclock:	174757,		bpp:		16,#ifdef CONFIG_FB_S3C2410_EMUL	xres:		96,#else	xres:		240,#endif	yres:		320,	hsync_len   :  5,    vsync_len    :  1,	left_margin :  7,    upper_margin :  1,	right_margin:  3,    lower_margin :  3,	sync:		0,		cmap_static:	1,	reg : {		lcdcon1 : LCD1_BPP_16T | LCD1_PNR_TFT | LCD1_CLKVAL(7) ,		lcdcon2 : LCD2_VBPD(1) | LCD2_VFPD(2) | LCD2_VSPW(1),		lcdcon3 : LCD3_HBPD(6) | LCD3_HFPD(2),		lcdcon4 : LCD4_HSPW(4) | LCD4_MVAL(13),		lcdcon5 : LCD5_FRM565 | LCD5_INVVLINE | LCD5_INVVFRAME | LCD5_HWSWP | LCD5_PWREN,	},};#endif*///add by HHTECH#ifdef CONFIG_S3C2410_SMDKstatic struct s3c2410fb_mach_info xxx_stn_info __initdata = {    	pixclock:	174757,		bpp:		16,#ifdef CONFIG_FB_S3C2410_EMUL	xres:		96,#else	xres:		240,#endif	yres:		320,	hsync_len   :  5,    vsync_len    :  1,	left_margin :  7,    upper_margin :  1,	right_margin:  3,    lower_margin :  3,	sync:		0,		cmap_static:	1,	reg : {		lcdcon1 : LCD1_BPP_16T | LCD1_PNR_TFT | LCD1_CLKVAL(7) ,		lcdcon2 : LCD2_VBPD(4) | LCD2_VFPD(1) | LCD2_VSPW(1),		lcdcon3 : LCD3_HBPD(6) | LCD3_HFPD(30),		lcdcon4 : LCD4_HSPW(3) | LCD4_MVAL(13),		lcdcon5 : LCD5_FRM565 | LCD5_HWSWP | LCD5_PWREN,	},};#endifstatic inline u_intchan_to_field(u_int chan, struct fb_bitfield *bf){    chan &= 0xffff;    chan >>= 16 - bf->length;    return chan << bf->offset;}/* * Convert bits-per-pixel to a hardware palette PBS value. */static inline u_intpalette_pbs(struct fb_var_screeninfo *var){   int ret = 0;   switch (var->bits_per_pixel) {#ifdef FBCON_HAS_CFB4      case 4:  ret = 0 << 12; break;#endif#ifdef FBCON_HAS_CFB8      case 8:  ret = 1 << 12; break;#endif#ifdef FBCON_HAS_CFB16      case 16: ret = 2 << 12; break;#endif   }   return ret;}static struct s3c2410fb_mach_info * __inits3c2410fb_get_machine_info(struct s3c2410fb_info *fbi){    struct s3c2410fb_mach_info *inf = NULL;    inf = &xxx_stn_info;	fbi->reg = inf->reg;    fbi->rgb[RGB_16] = &xxx_tft_rgb_16;    return inf;}static inline struct fb_var_screeninfo *get_con_var(struct fb_info *info, int con){    struct s3c2410fb_info *fbi = (struct s3c2410fb_info *)info;    return (con == fbi->currcon || con == -1) ? &fbi->fb.var : &fb_display[con].var;}static inline struct fb_cmap *get_con_cmap(struct fb_info *info, int con){    struct s3c2410fb_info *fbi = (struct s3c2410fb_info *)info;    return (con == fbi->currcon || con == -1) ? &fbi->fb.cmap : &fb_display[con].cmap;}static inline struct display *get_con_display(struct fb_info *info, int con){    struct s3c2410fb_info *fbi = (struct s3c2410fb_info *)info;    return (con < 0) ? (fbi->fb.disp) : &(fb_display[con]);}static ints3c2410fb_validate_var(struct fb_var_screeninfo *var,			      struct s3c2410fb_info *fbi){    int ret = -EINVAL;    if (var->xres < MIN_XRES)		var->xres = MIN_XRES;    if (var->yres < MIN_YRES)		var->yres = MIN_YRES;    if (var->xres > fbi->max_xres)		var->xres = fbi->max_xres;    if (var->yres > fbi->max_yres)		var->yres = fbi->max_yres;    var->xres_virtual =	var->xres_virtual < var->xres ? var->xres : var->xres_virtual;    var->yres_virtual = 	var->yres_virtual < var->yres ? var->yres : var->yres_virtual;    switch(var->bits_per_pixel) {#ifdef FBCON_HAS_CFB4	case 4:		ret = 0; break;#endif#ifdef FBCON_HAS_CFB8	case 8:		ret = 0; break;#endif#ifdef FBCON_HAS_CFB16	case 16:	ret = 0; break;#endif	default:			break;    }    return ret;}static ints3c2410fb_setpalettereg(u_int regno, u_int red, u_int green, u_int blue,			u_int trans, struct fb_info *info){    struct s3c2410fb_info *fbi = (struct s3c2410fb_info *)info;    u_int val, ret = 1;    if (regno < fbi->palette_size) {#ifndef CONFIG_S3C2400_GAMEPARK	val = ((red >> 4) & 0xf00);	val |= ((green >> 8) & 0x0f0);	val |= ((blue >> 12) & 0x00f);#else	val = ((blue >> 16) & 0x001f);    val |= ((green >> 11) & 0x07e0);    val |= ((red >> 5) & 0x0f800);	val |= 1; /* intensity bit */#endif		if (regno == 0)	    val |= palette_pbs(&fbi->fb.var);	fbi->palette_cpu[regno] = val;	ret = 0;    }    return ret;}static ints3c2410fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,		    u_int trans, struct fb_info *info){    struct s3c2410fb_info *fbi = (struct s3c2410fb_info *)info;    struct display *disp = get_con_display(info, fbi->currcon);    u_int var;    int ret = 1;    if (disp->inverse) {	red 	= 0xffff - red;	green 	= 0xffff - green;	blue	= 0xffff - blue;    }    if (fbi->fb.var.grayscale) 	red = green = blue = (19595 * red + 38470 * green + 7471 * blue) >> 16;    switch (fbi->fb.disp->visual) {	case FB_VISUAL_TRUECOLOR:	    if (regno < 16) {		u16 *pal = fbi->fb.pseudo_palette;		var = chan_to_field(red, &fbi->fb.var.red);		var |= chan_to_field(green, &fbi->fb.var.green);		var |= chan_to_field(blue, &fbi->fb.var.blue);		pal[regno] = var;		ret = 0;	    }	    break;	case FB_VISUAL_STATIC_PSEUDOCOLOR:	case FB_VISUAL_PSEUDOCOLOR:	    ret = s3c2410fb_setpalettereg(regno, red, green, blue, trans, info);	    break;    }    return ret;}static int s3c2410fb_activate_var(struct fb_var_screeninfo *var, struct s3c2410fb_info *fbi){    struct s3c2410fb_lcd_reg new_regs;    u_int half_screen_size, yres;    u_long flags;    /*new_reg 啊 絹錄絆 歷錄絆 */    unsigned long VideoPhysicalTemp = fbi->screen_dma;    save_flags_cli(flags);    new_regs.lcdcon1 = fbi->reg.lcdcon1 & ~LCD1_ENVID;    new_regs.lcdcon2 = (fbi->reg.lcdcon2 & ~LCD2_LINEVAL_MSK) 						| LCD2_LINEVAL(var->yres - 1);	/* TFT LCD only ! */    new_regs.lcdcon3 = (fbi->reg.lcdcon3 & ~LCD3_HOZVAL_MSK)						| LCD3_HOZVAL(var->xres - 1);    new_regs.lcdcon4 = fbi->reg.lcdcon4;    new_regs.lcdcon5 = fbi->reg.lcdcon5;    new_regs.lcdsaddr1 = 		LCDADDR_BANK(((unsigned long)VideoPhysicalTemp >> 22))		| LCDADDR_BASEU(((unsigned long)VideoPhysicalTemp >> 1));	/* 16bpp */    new_regs.lcdsaddr2 = LCDADDR_BASEL( 		((unsigned long)VideoPhysicalTemp + (var->xres * 2 * (var->yres/*-1*/)))		>> 1);    new_regs.lcdsaddr3 = LCDADDR_OFFSET(0) | (LCDADDR_PAGE(var->xres) /*>> 1*/);    yres = var->yres;    /* if ( dual 撈擱) */    //yres /= 2;    half_screen_size = var->bits_per_pixel;    half_screen_size = half_screen_size * var->xres * var->yres / 16;	fbi->reg.lcdcon1 = new_regs.lcdcon1;	fbi->reg.lcdcon2 = new_regs.lcdcon2;	fbi->reg.lcdcon3 = new_regs.lcdcon3;	fbi->reg.lcdcon4 = new_regs.lcdcon4;	fbi->reg.lcdcon5 = new_regs.lcdcon5;	fbi->reg.lcdsaddr1 = new_regs.lcdsaddr1;	fbi->reg.lcdsaddr2 = new_regs.lcdsaddr2;	fbi->reg.lcdsaddr3 = new_regs.lcdsaddr3;    LCDCON1 = fbi->reg.lcdcon1;    LCDCON2 = fbi->reg.lcdcon2;    LCDCON3 = fbi->reg.lcdcon3;    LCDCON4 = fbi->reg.lcdcon4;    LCDCON5 = fbi->reg.lcdcon5;    LCDADDR1 = fbi->reg.lcdsaddr1;    LCDADDR2 = fbi->reg.lcdsaddr2;    LCDADDR3 = fbi->reg.lcdsaddr3;#if defined(CONFIG_S3C2410_SMDK) && !defined(CONFIG_SMDK_AIJI)    LCDLPCSEL = 0x2;	#elif defined(CONFIG_S3C2410_SMDK) && defined(CONFIG_SMDK_AIJI)     LCDLPCSEL = 0x7;#endif//add by HHTECH    LCDLPCSEL = 0x2;    	    TPAL = 0;    LCDCON1 |= LCD1_ENVID;#if 0	{	printk("con1 = 0x%08lx\n", LCDCON1);	printk("con2 = 0x%08lx\n", LCDCON2);	printk("con3 = 0x%08lx\n", LCDCON3);	printk("con4 = 0x%08lx\n", LCDCON4);	printk("con5 = 0x%08lx\n", LCDCON5);	printk("addr1 = 0x%08lx\n", LCDADDR1);	printk("addr2 = 0x%08lx\n", LCDADDR2);	printk("addr3 = 0x%08lx\n", LCDADDR3);	}#endif    restore_flags(flags);    return 0;}static inline void s3c2410fb_set_truecolor(u_int is_true_color){    if (is_true_color) {    }    else {    }}    static voids3c2410fb_hw_set_var(struct fb_var_screeninfo *var, struct s3c2410fb_info *fbi){    u_long palette_mem_size;    fbi->palette_size = var->bits_per_pixel == 8 ? 256 : 16;    palette_mem_size = fbi->palette_size * sizeof(u16);    fbi->palette_cpu = (u16 *)(fbi->map_cpu + PAGE_SIZE - palette_mem_size);    fbi->palette_dma = fbi->map_dma + PAGE_SIZE - palette_mem_size;    fb_set_cmap(&fbi->fb.cmap, 1, s3c2410fb_setcolreg, &fbi->fb);    s3c2410fb_set_truecolor(var->bits_per_pixel >= 16);    s3c2410fb_activate_var(var, fbi);    fbi->palette_cpu[0] = (fbi->palette_cpu[0] &				0xcfff) | palette_pbs(var);}static ints3c2410fb_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info){    struct s3c2410fb_info *fbi = (struct s3c2410fb_info *)info;    struct fb_var_screeninfo *dvar = get_con_var(&fbi->fb, con);    struct display *display = get_con_display(&fbi->fb, con);    int err, chgvar = 0, rgbidx;        err = s3c2410fb_validate_var(var, fbi);    if (err) 	return err;    if (var->activate & FB_ACTIVATE_TEST)	return 0;    if ((var->activate & FB_ACTIVATE_MASK) != FB_ACTIVATE_NOW)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文在线免费一区三区高中清不卡| 亚洲欧洲三级电影| 国产精品久久久久国产精品日日| 午夜激情综合网| 成人夜色视频网站在线观看| 国产精品家庭影院| 国产精品白丝在线| 美女尤物国产一区| 一本色道久久综合狠狠躁的推荐| 欧美日韩国产美| 午夜激情久久久| 亚洲成人黄色小说| k8久久久一区二区三区| 欧美一级一区二区| 亚洲日本一区二区| 国产精品2024| 日韩欧美一级在线播放| 亚洲欧美日韩精品久久久久| 国产精品自拍av| 日韩欧美的一区二区| 亚洲一区二区三区在线播放| 国产91丝袜在线观看| 欧美一区二区在线免费播放| 亚洲国产综合色| 91在线播放网址| 国产精品视频一区二区三区不卡| 免费xxxx性欧美18vr| 欧美日韩卡一卡二| 亚洲精品亚洲人成人网| 97aⅴ精品视频一二三区| 中文字幕高清一区| 亚洲午夜精品久久久久久久久| 成人免费视频在线观看| 国产一区二区在线电影| 4hu四虎永久在线影院成人| 亚洲美女在线一区| 波多野结衣欧美| 成人欧美一区二区三区视频网页| 成人av在线播放网站| 中文字幕一区免费在线观看 | 日韩av成人高清| 欧美精品第一页| 日韩综合在线视频| 欧美一区二区性放荡片| 日本一区中文字幕 | 午夜精彩视频在线观看不卡| 欧美午夜精品一区二区蜜桃| 天天亚洲美女在线视频| 日韩一区二区免费电影| 亚洲黄色免费网站| 91在线观看美女| 亚洲国产综合在线| 日韩一区二区三区视频在线| 韩国av一区二区三区四区| 久久久亚洲欧洲日产国码αv| 国产成人av资源| 国产精品久久久一区麻豆最新章节| 成人短视频下载| 一区二区在线观看不卡| 欧美一级高清大全免费观看| 老司机午夜精品| 亚洲精品在线观| 丁香亚洲综合激情啪啪综合| 亚洲天堂a在线| 欧美中文一区二区三区| 日韩av一区二区在线影视| 欧美精品一区二区高清在线观看| 成人性生交大合| 一区二区三区精品视频| 3d动漫精品啪啪一区二区竹菊| 老司机精品视频在线| 亚洲国产精品成人综合色在线婷婷 | 欧美怡红院视频| 性感美女极品91精品| 日韩欧美123| 国产精品12区| 五月激情综合色| 久久伊99综合婷婷久久伊| 成人激情动漫在线观看| 亚洲国产精品一区二区www在线| 欧美一区二区三区色| 不卡的电影网站| 日本大胆欧美人术艺术动态| 中文乱码免费一区二区| 欧美三级中文字幕| 国产一区二区不卡| 亚洲丝袜自拍清纯另类| 欧美成人激情免费网| 欧美中文一区二区三区| 国产乱子轮精品视频| 亚洲国产中文字幕| 国产日韩一级二级三级| 欧美一区二区三区在线电影| av成人免费在线| 狠狠色2019综合网| 天天综合网天天综合色| 伊人一区二区三区| 欧美国产日韩亚洲一区| 精品久久一区二区| 欧美精品粉嫩高潮一区二区| 色婷婷综合久久久中文一区二区 | 亚洲综合小说图片| 久久久精品蜜桃| 欧美性猛交xxxx黑人交| 成人av先锋影音| 狠狠色狠狠色综合| 日韩电影一二三区| 午夜私人影院久久久久| 亚洲欧美日韩久久| 国产蜜臀av在线一区二区三区| 日韩三级高清在线| 7777精品伊人久久久大香线蕉完整版| 色综合网站在线| 成人黄色一级视频| 不卡一区在线观看| 国模套图日韩精品一区二区| 婷婷中文字幕综合| 午夜一区二区三区在线观看| 一区二区三区国产豹纹内裤在线| 国产精品网站在线观看| 国产午夜精品一区二区三区四区 | 国产精品美女久久久久av爽李琼| 日韩一区二区三区三四区视频在线观看| 色呦呦国产精品| 一本大道久久a久久精二百| 99精品视频一区二区| 91蜜桃传媒精品久久久一区二区| 99这里只有精品| 91女神在线视频| 在线观看一区日韩| 色综合久久99| 91亚洲资源网| 欧美情侣在线播放| 日韩免费在线观看| 精品国产乱码久久久久久蜜臀| 久久久久亚洲综合| 中文字幕免费不卡在线| 中文字幕一区二区三区在线播放| 国产精品天美传媒沈樵| 亚洲综合清纯丝袜自拍| 奇米精品一区二区三区在线观看 | 91香蕉视频在线| 欧美视频在线不卡| 欧美一二三四在线| 欧美激情一区二区三区四区| 亚洲欧美日韩在线| 六月丁香综合在线视频| 91一区二区在线| 日韩欧美aaaaaa| 亚洲女人****多毛耸耸8| 日韩精品一二三四| 成人午夜电影小说| 欧美精品日韩一本| 国产亚洲视频系列| 午夜精品成人在线视频| 丁香婷婷深情五月亚洲| 精品视频资源站| 中文字幕成人在线观看| 秋霞午夜鲁丝一区二区老狼| 成人国产一区二区三区精品| 欧美女孩性生活视频| 欧美激情艳妇裸体舞| 亚洲h在线观看| 久久亚洲免费视频| 色国产精品一区在线观看| 欧美一区二区高清| 中文字幕一区二区在线观看 | 99国产精品久久久久久久久久久| 欧美精品三级日韩久久| 亚洲日本在线视频观看| 国产真实乱偷精品视频免| 一本久道中文字幕精品亚洲嫩| 精品国产在天天线2019| 亚洲成精国产精品女| 99久久国产综合精品麻豆| 欧美精品一区二区三| 石原莉奈一区二区三区在线观看| eeuss影院一区二区三区| xnxx国产精品| 日韩精品1区2区3区| 在线观看国产日韩| 自拍偷自拍亚洲精品播放| 激情六月婷婷综合| 欧美一级一区二区| 香蕉久久一区二区不卡无毒影院 | 久久成人综合网| 欧美日本一道本在线视频| 亚洲欧美一区二区不卡| 懂色av一区二区三区蜜臀| 久久综合国产精品| 美女视频免费一区| 制服.丝袜.亚洲.中文.综合| 亚洲国产日韩综合久久精品| 色综合天天综合| 亚洲人成伊人成综合网小说| 99精品黄色片免费大全| 亚洲日本在线a| 日本高清视频一区二区| 天天亚洲美女在线视频| 欧美三级韩国三级日本三斤|