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

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

?? ili9325.c

?? ili9325 Frame Buffer 驅動。
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * drivers/video/ili932x.c * * Author liulf, liulf@ihep.ac.cn * Copyright (C) 2008 Changsha Wasion Meters Group * * The source code in this file can be freely used, adapted, * and redistributed in source or binary form, so long as an * acknowledgment appears in derived source files.  The citation * should list that the code comes from the book "Linux Device * Drivers" by Alessandro Rubini and Jonathan Corbet, published * by O'Reilly & Associates.   No warranty is attached; * we cannot take responsibility for errors or fitness for use. */#include <linux/clk.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h>#include <linux/mutex.h>#include <linux/string.h>#include <linux/clk.h>#include <linux/ioport.h>#include <linux/slab.h>		           /* kmalloc() */#include <linux/fs.h>		           /* everything... */#include <linux/types.h>	           /* size_t */#include <linux/fcntl.h>	           /* O_ACCMODE */#include <linux/cdev.h>                    /*cdev...*/#include <linux/interrupt.h>               /*request_irq()...*/#include <asm/irq.h>                       /*irq no.,etc.*/#include <linux/irq.h>#include <asm/io.h>                        /*writel(),readl()...*/#include <asm/system.h>		           /* cli(), *_flags */#include <linux/wait.h>                    /*wake_up_interrupkbble()...*/#include <linux/delay.h>                   /*udelay()*/#include <linux/device.h>                  /*class_create(),class_device_create()...*/#include <asm/errno.h>#include <mach/hardware.h>#include <asm/uaccess.h>#include <linux/delay.h>#include <asm/mach/arch.h>#include <asm/mach/map.h>#include <linux/platform_device.h>#include <linux/proc_fs.h>                 /*proc fs*/#include <mach/board.h>#include <mach/gpio.h>#include <mach/at91sam9260.h>#include <mach/at91sam9260_matrix.h>#include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/cdev.h>#include <linux/delay.h>#include <linux/device.h>#include <linux/jiffies.h>#include <linux/mutex.h>#include <linux/uaccess.h>#include <linux/vmalloc.h>#include <linux/workqueue.h>#include "ili932x.h"#include <linux/wfos_debug.h>struct ili932x_device {	void __iomem *membase;};/* * Module Parameters */static unsigned int ili932x_rate = CONFIG_ILI932X_RATE;module_param(ili932x_rate, uint, S_IRUGO);MODULE_PARM_DESC(ili932x_rate,	"Refresh rate (hertzs)");unsigned int ili932x_getrate(void){	return ili932x_rate;}/* * Update work */struct ili932x_device *lcd_ili932x = NULL;static  u16 ili932x_reg_cache[ILI9325_TIMING_CTRL_3 + 1];unsigned char *ili932x_buffer;static unsigned char *ili932x_cache;static DEFINE_MUTEX(ili932x_mutex);static unsigned char ili932x_updating;static void ili932x_update(struct work_struct *delayed_work);static struct workqueue_struct *ili932x_workqueue;static DECLARE_DELAYED_WORK(ili932x_work, ili932x_update);static void ili932x_queue(void){	queue_delayed_work(ili932x_workqueue, &ili932x_work,		HZ / ili932x_rate);}unsigned char ili932x_enable(void){	unsigned char ret;	mutex_lock(&ili932x_mutex);		if (!ili932x_updating) {		ili932x_updating = 1;		ili932x_queue();		ret = 0;	} else		ret = 1;	mutex_unlock(&ili932x_mutex);	return ret;}void ili932x_disable(void){	mutex_lock(&ili932x_mutex);	if (ili932x_updating) {		ili932x_updating = 0;		cancel_delayed_work(&ili932x_work);		flush_workqueue(ili932x_workqueue);	}	mutex_unlock(&ili932x_mutex);}unsigned char ili932x_isenabled(void){	return ili932x_updating;}static inline void ili9325_write_pixel(struct ili932x_device *dev, u32 pixel){#if ILI9325_BPP		== 32	u8 r, g, b; 	u32 color = 0;	/* 24/32-bit colors to 18-bit colors.*/	b = (pixel & 0xff) >> 2;	g = ((pixel >> 8 ) & 0xff) >> 2;	r = ((pixel >> 16) & 0xff ) >> 2;	color = (r << 12) | (g << 6) | (b << 0);	writew((color >> 2) & 0xffff, dev->membase);	writew((b & 0x3) << 14 , dev->membase);	#elif ILI9325_BPP		== 16	writew(pixel & 0xffff, dev->membase);				#endif	return;}static inline int ili932x_write_reg(struct ili932x_device *dev, u8 reg, u16 data){	void __iomem *index = dev->membase;	BUG_ON(reg > ILI9325_TIMING_CTRL_3);		at91_set_gpio_output(AT91_PIN_PB24, 0); /* RS = 0 */	//udelay(50);	writew(reg, index);	at91_set_gpio_output(AT91_PIN_PB24, 1); /* RS = 1 */	//udelay(50);	//writew(data, index);	writew(data, index);	ili932x_reg_cache[reg] = data;	return 0;}static inline int ili932x_read_reg(struct ili932x_device *dev, u8 reg){	void __iomem *index = dev->membase;	void __iomem *data_base = dev->membase;	if (reg > ILI9325_DRV_CODE) {		return ili932x_reg_cache[reg];	} else {		at91_set_gpio_output(AT91_PIN_PB24, 0); /* RS = 0 */		udelay(50);		writew(reg, index);		at91_set_gpio_output(AT91_PIN_PB24, 1); /* RS = 1 */		udelay(50);		//return readw(data_base);		return readw(data_base);	}}static void  ili932x_reset(void){	at91_set_gpio_output(ILI9325_LCD_RST, 0);	msleep(300);	at91_set_gpio_output(ILI9325_LCD_RST, 1);	msleep(100);	return;}/* Power On sequence */static void ili9325_pow_on(struct ili932x_device *dev){	ili932x_write_reg(dev, ILI9325_POW_CTRL_1, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB */	ili932x_write_reg(dev, ILI9325_POW_CTRL_2, 0x0007); /* DC1[2:0], DC0[2:0], VC[2:0]  */	ili932x_write_reg(dev, ILI9325_POW_CTRL_3, 0x0000); /* VREG1OUT voltage  */	ili932x_write_reg(dev, ILI9325_POW_CTRL_4, 0x0000); /* VDV[4:0] for VCOM amplitude  */	msleep(200); /* Dis-charge capacitor power voltage */	ili932x_write_reg(dev, ILI9325_POW_CTRL_1, 0x1690); /* SAP, BT[3:0], AP, DSTB, SLP, STB */	ili932x_write_reg(dev, ILI9325_POW_CTRL_2, 0x0227); /* R11h=0x0221 at VCI=3.3V, DC1[2:0], DC0[2:0], VC[2:0]  */	msleep(50);	ili932x_write_reg(dev, ILI9325_POW_CTRL_3, 0x001D); /* External reference voltage= Vci  */	msleep(50);	ili932x_write_reg(dev, ILI9325_POW_CTRL_4, 0x0800); /* R13=1D00 when R12=009D;VDV[4:0] for VCOM amplitude  */	ili932x_write_reg(dev, ILI9325_POW_CTRL_7, 0x0012); /* R29=0013 when R12=009D;VCM[5:0] for VCOMH  */	ili932x_write_reg(dev, ILI9325_FRM_RATE_COLOR, 0x000B); /* Frame Rate = 70Hz  */	msleep(50);	return;}/* Adjust the Gamma Curve  */static void ili9325_gamma_adjust(struct ili932x_device *dev){	ili932x_write_reg(dev, ILI9325_GAMMA_CTRL_1, 0x0007);	ili932x_write_reg(dev, ILI9325_GAMMA_CTRL_2, 0x0707);	ili932x_write_reg(dev, ILI9325_GAMMA_CTRL_3, 0x0006);	ili932x_write_reg(dev, ILI9325_GAMMA_CTRL_4, 0x0704);	ili932x_write_reg(dev, ILI9325_GAMMA_CTRL_5, 0x1F04);	ili932x_write_reg(dev, ILI9325_GAMMA_CTRL_6, 0x0004);	ili932x_write_reg(dev, ILI9325_GAMMA_CTRL_7, 0x0000);	ili932x_write_reg(dev, ILI9325_GAMMA_CTRL_8, 0x0706);	ili932x_write_reg(dev, ILI9325_GAMMA_CTRL_9, 0x0701);	ili932x_write_reg(dev, ILI9325_GAMMA_CTRL_10, 0x000F);	return;}/*  Partial Display Control */static void ili9325_par_dis_ctrl(struct ili932x_device *dev){	ili932x_write_reg(dev, ILI9325_PAR_IMG1_POS, 0);	ili932x_write_reg(dev, ILI9325_PAR_IMG1_START, 0);	ili932x_write_reg(dev, ILI9325_PAR_IMG1_END, 0);	ili932x_write_reg(dev, ILI9325_PAR_IMG2_POS, 0);	ili932x_write_reg(dev, ILI9325_PAR_IMG2_START, 0);	ili932x_write_reg(dev, ILI9325_PAR_IMG2_END, 0);	return;}/* Panel Control */static void ili9325_pan_ctrl(struct ili932x_device *dev){	ili932x_write_reg(dev, ILI9325_PAN_CTRL_1, 0x0010);	ili932x_write_reg(dev, ILI9325_PAN_CTRL_2, 0x0000);	ili932x_write_reg(dev, ILI9325_PAN_CTRL_3, 0x0003);	ili932x_write_reg(dev, ILI9325_PAN_CTRL_4, 0x0110);	ili932x_write_reg(dev, ILI9325_PAN_CTRL_5, 0x0000);	ili932x_write_reg(dev, ILI9325_PAN_CTRL_6, 0x0000);	ili932x_write_reg(dev, ILI9325_DIS_CTRL_1, 0x0133); /* 262K color and display ON */	return;}/* Start Initial Sequence */static void ili9325_chip_init(struct ili932x_device *dev){	printk("ili9325_chip_init.\n");	ili932x_write_reg(dev, ILI9325_TIMING_CTRL_1, 0x3008); /* Set internal timing*/	ili932x_write_reg(dev, ILI9325_TIMING_CTRL_2, 0x0012); /* Set internal timing*/	ili932x_write_reg(dev, ILI9325_TIMING_CTRL_3, 0x1231); /* Set internal timing*/	ili932x_write_reg(dev, ILI9325_DRV_OUTPUT_CTRL_1, 0x0100); /* set SS and SM bit */	ili932x_write_reg(dev, ILI9325_LCD_DRV_CTRL, 0x0700); /* set 1 line inversion */	#if ILI9325_BPP		== 16	printk("ili9325_chip init bpp16.\n");	ili932x_write_reg(dev, ILI9325_ENTRY_MOD, 0x1030); /* 16bit mode, set GRAM write direction and BGR=1. */#elif ILI9325_BPP		== 32	ili932x_write_reg(dev, ILI9325_ENTRY_MOD, 0x9030); /* 18bit mode, set GRAM write direction and BGR=1. */#endif	ili932x_write_reg(dev, ILI9325_RESIZE_CTRL, 0x0000); /* Resize register. */	ili932x_write_reg(dev, ILI9325_DIS_CTRL_2, 0x0207); /* set the back porch and front porch. */	ili932x_write_reg(dev, ILI9325_DIS_CTRL_3, 0x0000); /* set non-display area refresh cycle ISC[3:0]. */	ili932x_write_reg(dev, ILI9325_DIS_CTRL_4, 0x0000); /* FMARK function. */	ili932x_write_reg(dev, ILI9325_RGB_CTRL_1, 0x0000); /* RGB interface setting. */	ili932x_write_reg(dev, ILI9325_FRAME_MARKER_POS, 0x0000); /* Frame marker Position. */	ili932x_write_reg(dev, ILI9325_RGB_CTRL_2, 0x0000); /* RGB interface polarity. */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产毛片精品视频| 成人免费小视频| 欧美日本在线看| 在线观看日韩毛片| 欧美在线一二三| 欧美视频在线播放| 欧美日韩精品一区二区在线播放 | 久久成人久久鬼色| 另类调教123区| 国产成人在线观看| av综合在线播放| 欧美最新大片在线看| 制服丝袜国产精品| 日韩一区二区三区在线| 精品国产91九色蝌蚪| 国产婷婷精品av在线| 17c精品麻豆一区二区免费| 亚洲黄色免费网站| 日韩精品电影在线| 国产精品综合久久| 91极品美女在线| 日韩免费在线观看| 亚洲国产精品国自产拍av| 亚洲一区在线观看网站| 老司机精品视频在线| 成人av网址在线观看| 欧美日韩免费一区二区三区| 欧美大片在线观看| 成人欧美一区二区三区1314| 日韩国产在线观看一区| 国产主播一区二区| 欧美影院精品一区| 国产欧美一区二区三区沐欲| 一区二区日韩av| 国产成人精品网址| 欧美一区二区三区思思人| 中文字幕日韩av资源站| 免费欧美在线视频| 色综合天天综合在线视频| 制服.丝袜.亚洲.另类.中文| 中文字幕一区三区| 国产一区二区不卡老阿姨| 欧美午夜影院一区| 国产精品毛片久久久久久| 蜜桃一区二区三区在线| 欧美影院一区二区三区| 国产精品久久久久久久久晋中| 日本欧美大码aⅴ在线播放| 97久久精品人人爽人人爽蜜臀| 精品国产一区二区在线观看| 一区二区三区免费看视频| 成人一区二区三区| 精品免费国产二区三区| 五月激情综合婷婷| 欧美性淫爽ww久久久久无| 国产精品久久久久久久久图文区 | 欧美三级电影网| 一区二区中文视频| 国产aⅴ综合色| 久久一夜天堂av一区二区三区| 亚洲国产精品一区二区www| 一本久久精品一区二区| 国产精品三级久久久久三级| 国产一区不卡视频| 26uuu国产电影一区二区| 精品综合免费视频观看| 这里只有精品电影| 天天av天天翘天天综合网色鬼国产| 色偷偷88欧美精品久久久| 亚洲三级免费电影| 色综合久久久久综合体桃花网| 国产精品理伦片| 成人不卡免费av| 亚洲欧美日韩一区| 一本色道久久综合亚洲精品按摩| 中文字幕日韩一区二区| 色综合久久久网| 亚洲一区中文在线| 91.com视频| 韩日精品视频一区| 中文字幕不卡在线观看| 96av麻豆蜜桃一区二区| 亚洲免费av高清| 欧美日韩美女一区二区| 久久精品噜噜噜成人av农村| 91精品国产一区二区三区香蕉| 美女一区二区三区| 国产女人18水真多18精品一级做| 高清成人在线观看| 亚洲色图欧美激情| 69堂国产成人免费视频| 国产做a爰片久久毛片| 中文子幕无线码一区tr| 日本韩国视频一区二区| 日本sm残虐另类| 国产欧美综合在线观看第十页| 91老师国产黑色丝袜在线| 天天综合色天天| 国产亚洲制服色| 在线精品视频免费观看| 美国三级日本三级久久99| 国产精品色噜噜| 67194成人在线观看| 国产成a人无v码亚洲福利| 亚洲一区二区三区自拍| 欧美sm美女调教| 在线欧美日韩国产| 国产又黄又大久久| 一区二区高清免费观看影视大全| 日韩免费高清av| 色婷婷一区二区三区四区| 久久精品99国产精品日本| 亚洲同性gay激情无套| 欧美一区二区三区四区高清| 国产精品嫩草影院com| 成人性生交大片免费看中文 | 久久不见久久见免费视频7| 中文字幕亚洲成人| 精品捆绑美女sm三区| 日本丶国产丶欧美色综合| 国产美女av一区二区三区| 天堂久久一区二区三区| 亚洲欧洲综合另类| 久久久国产综合精品女国产盗摄| 精品视频全国免费看| 成人app在线| 国产乱人伦精品一区二区在线观看 | 麻豆精品视频在线观看免费| 亚洲欧美日韩国产中文在线| 久久综合色之久久综合| 欧美一区国产二区| 欧美视频中文字幕| 日本道在线观看一区二区| gogo大胆日本视频一区| 国产精品资源在线| 国产伦理精品不卡| 狠狠网亚洲精品| 青青国产91久久久久久| 亚洲一二三四区不卡| 亚洲欧洲日韩一区二区三区| 国产日产亚洲精品系列| 久久久影视传媒| 亚洲精品在线免费播放| 精品黑人一区二区三区久久| 日韩欧美一区二区在线视频| 欧美性生活大片视频| 欧美丝袜丝nylons| 欧美日韩视频在线第一区 | 亚洲自拍另类综合| 一区二区日韩电影| 亚洲综合无码一区二区| 亚洲精品国产一区二区精华液 | 日韩精品中文字幕在线一区| 91精品国产综合久久精品app| 欧美视频一区二| 欧美日韩的一区二区| 欧美日本乱大交xxxxx| 91精品国产综合久久精品图片 | 色哟哟亚洲精品| 一本久久精品一区二区| 欧美性生活影院| 在线电影欧美成精品| 欧美α欧美αv大片| 欧美成人三级电影在线| 国产午夜一区二区三区| 日本一区二区视频在线| 国产精品电影院| 亚洲国产婷婷综合在线精品| 免费在线看成人av| 国产一区二区网址| 成人丝袜高跟foot| 欧美日韩在线不卡| 精品盗摄一区二区三区| 国产精品欧美久久久久一区二区| 亚洲黄色尤物视频| 免费av成人在线| 波波电影院一区二区三区| 欧美在线播放高清精品| 欧美xxxxx牲另类人与| 中文字幕日韩欧美一区二区三区| 亚洲成人精品一区| 国产精品 日产精品 欧美精品| 99国产精品久久| 日韩欧美三级在线| 中文字幕一区二区三区在线观看| 午夜免费欧美电影| 国产精品一级片在线观看| 91久久久免费一区二区| www久久精品| 亚洲黄色小视频| 国产91精品久久久久久久网曝门| 在线亚洲精品福利网址导航| 精品国精品自拍自在线| 亚洲一区二区在线视频| 国产精华液一区二区三区| 欧美日本精品一区二区三区| 国产精品久久免费看| 国内精品国产成人国产三级粉色| 色综合久久六月婷婷中文字幕| 久久免费看少妇高潮|