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

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

?? s3c2410-kbd.c

?? 這個程序為嵌入式linux系統下的鍵盤驅動程序
?? C
字號:
#include <linux/config.h>
#include <linux/input.h>
#include <linux/interrupt.h> /* irqreturn_t */ /*包含了 linux/kernel.h*/
#include <asm/arch/regs-gpio.h>
#include <asm/arch/regs-spi.h>
#include <asm/irq.h>
#include <asm/io.h>
#include <linux/platform_device.h>
#include <linux/delay.h>
#include <linux/clk.h>
#include <asm/arch/regs-clock.h>

#define S3C2410_KBD_DEBUG
/* Debug tool */
/*capital!*/
#ifdef S3C2410_KBD_DEBUG
#define DPRINTK(fmt, args...) printk(KERN_INFO fmt, ##args)
#else
#define DPRINTK(fmt, args...) do {} while(0)
#endif

#define PFX "s3c2410-kbd: "

static struct resource * s3c2410_spi_mem;
static void __iomem *s3c2410_spi_base;
struct clk *spi_clk;


/* Write cmd to zlg7289 */
static int zlg7289_write(unsigned char c)
{
     unsigned int ret;KDBy/
     s3c2410_gpio_setpin(S3C2410_GPG2, 0);
     /* Master out */
     s3c2410_gpio_setpin(S3C2410_GPB0, 0);
     udelay(60);
     while((ioread8(s3c2410_spi_base + S3C2410_SPSTA) & 0x1) == 0);
     iowrite8(c, s3c2410_spi_base + S3C2410_SPTDAT);
     /* Master in */
     s3c2410_gpio_setpin(S3C2410_GPB0, 1);
     while((ioread8(s3c2410_spi_base + S3C2410_SPSTA) & 0x1) == 0);
     ret = ioread32(s3c2410_spi_base + S3C2410_SPRDAT);
     /* Disable CS */KDB
     s3c2410_gpio_setpin(S3C2410_GPG2, 1);
     /* Master out */
     s3c2410_gpio_setpin(S3C2410_GPB0, 0);
     return ret;
}

/* Read key value of zlg7289 */
static unsigned char zlg7289_read_key(void)
{
     unsigned char ret;
     /* Enable CS */
     s3c2410_gpio_setpin(S3C2410_GPG2, 0);
     /* Master out */
     s3c2410_gpio_setpin(S3C2410_GPB0, 0);
     udelay(60);
     /* Send read key cmd to zlg7289 */
     while((ioread8(s3c2410_spi_base + S3C2410_SPSTA) & 0x1) == 0);
     iowrite8(0x15, s3c2410_spi_base + S3C2410_SPTDAT);
     while((ioread8(s3c2410_spi_base + S3C2410_SPSTA) & 0x1) == 0);
     udelay(30);
     /* Master in */
     s3c2410_gpio_setpin(S3C2410_GPB0, 1);
     /* Write 0xff to start tx & rx procedure */
     iowrite8(0xff, s3c2410_spi_base + S3C2410_SPTDAT);
     while((ioread8(s3c2410_spi_base + S3C2410_SPSTA) & 0x1) == 0);
     ret = ioread8(s3c2410_spi_base + S3C2410_SPRDAT);
     /* Disable CS */
     s3c2410_gpio_setpin(S3C2410_GPG2, 1);
     /* Master out */
     s3c2410_gpio_setpin(S3C2410_GPB0, 0);
     return ret;
}

/*interrupt handle*/
static irqreturn_t s3c2410kbd_keyevent(int irq, void *dev_id, struct pt_regs *reg)
{
	unsigned char data;
	/*read key*/
	data=zlg7289_read_key();

	printk(PFX "key data is 0x%x\n",data);
	 return IRQ_HANDLED;
}


/*spi config*/
	
static void s3c2410_spi_enable(void)
{ 
	unsigned char tmp;
	if(s3c2410_spi_base==NULL)
		return;
	 /*SETUP DIR*/
	 s3c2410_gpio_cfgpin(S3C2410_GPB0, S3C2410_GPB0_OUTP);
	 s3c2410_gpio_setpin(S3C2410_GPB0, 0);
     /*SETUP SPIMIS00*/
	 s3c2410_gpio_cfgpin(S3C2410_GPE11, S3C2410_GPE2_SPIMIS00);

	 /*SETUP NSS0*/
	 s3c2410_gpio_cfgpin(S3C2410_GPG2, S3C2410_GPG2_OUTP);
	 s3c2410_gpio_setpin(S3C2410_GPG2, 1);

	 /*SETUP SPICLK0*/
	 s3c2410_gpio_cfgpin(S3C2410_GPE13, S3C2410_GPE13_SPICLK0);

	  /*SETUP SPIMOSI0*/
	 s3c2410_gpio_cfgpin(S3C2410_GPE12, S3C2410_GPE12_SPIMOSI0);

	  /*SETUP BAND RATE REG SPPRE0*/
	 iowrite8(255,s3c2410_spi_base+S3C2410_SPPRE);

	  /*SETUP SPCON0*/
	 tmp=ioread8(s3c2410_spi_base+S3C2410_SPCON);
	 tmp&=~S3C2410_SPCON_SMOD_INT;
	 tmp|=S3C2410_SPCON_ENSCK;
	 tmp|=S3C2410_SPCON_MSTR;
	 tmp&=~S3C2410_SPCON_CPOL_HIGH;
     tmp|=S3C2410_SPCON_CPHA_FMTA;
	 tmp&=~S3C2410_SPCON_TAGD;
	 iowrite8(tmp,s3c2410_spi_base+S3C2410_SPCON);
	 dprintk(PFX"after setting SPICON,SPICON=0x%x\n",ioread8(s3c2410_spi_base+S3C2410_SPCON));

	 /*SET UP EINT*/
	 s3c2410_gpio_cfgpin(S3C2410_GPF1, S3C2410_GPF1_EINT1);

	 /*RESET ZLG7289*/
	 zlg7219_write(0xa4);

}


/*probe */
static int _init s3c2410kbd_probe(struct platform_device *pdev)
{ 
  int ret;
  struct resource *res;
  /*enable clk*/
  spi_clk=clk_get(&pdev->dev, "spi");
  if(IS_ERR(spi_clk)){
	  printk(KERN_ERR PFX "failed to get clk\n");
     ret=-ENOENT;
     goto err1;
  }
   clk_enable(spi_clk);

  /*get the mem region for the spi*/
  res=platform_get_resource(pdev, IORESOURCE_MEM,0);
  if(res==NULL){
    printk(KERN_ERR PFX "failed to get MEM region resource\n");
    ret=-EN0ENT;
    goto err2;
  }

  size=(res->end - res->start)+1;/*right?*/
  s3c2410_spi_mem=request_mem_region(res->start,size,pdev->name);
  if(s3c2410_spi_mem==NULL){
     printk(KERN_ERR PFX "failed to get men region\n");
     ret=-ENXI0;
     goto err3;
   }

  s3c2410_spi_base=ioremap(res->start,size);
   if(spi_base==NULL){
     printk(KERN_ERR PFX "failed to ioremap\n");
     ret=-ENXI0;
     goto err4;
   }

  s3c2410_spi_enable();
  ret=request_irq(IRQ_EINT1,s3c2410kbd_keyevent,SA_SAMPLE_RANDOM,pdev->name,NULL);

  if (ret != 0)
  {
	 printk(KERN_ERR PFX"faild\n");
	 goto err5;
  }
  set_irq_type(IRQ_EINT1, IRQT_FALLING);
  printk(PFX"irq=%d\n",IRQ_EINT1);
  printk("%s driver initialed\n", pdev->name);
  return 0;
  
  err5:
  err4:
  err3:
       iounmap(s3c2410_spi_base);
  err2:
       release_mem_region(res->start, size+1);
  err1:
	   printk(PFX "erro",ret);
	   return ret;
}


static int s3c2410kbd_remove(struct platform_device *pdev)
{
	struct resource *res = pdev->resource;
	disable_irq(IRQ_EINT1);
	free_irq(IRQ_EINT1,NULL);

	iounmap(s3c2410_spi_base);
	release_mem_region(res->start, (res->end - res->start) + 1);
	return 0;
}

static struct platform_driver s3c2410kbd_driver = {
.probe = s3c2410kbd_probe,
.remove = s3c2410kbd_remove,
.suspend = NULL,
.resume = NULL,
.driver = {
.owner = THIS_MODULE,
.name = "s3c2410-kbd",
}
};


static int __init s3c2410kbd_init(void)
{
return platform_driver_register(&s3c2410kbd_driver);
}

static void __exit s3c2410kbd_exit(void)
{
platform_driver_unregister(&s3c2410kbd_driver);
}

module_init(s3c2410kbd_init);
module_exit(s3c2410kbd_exit);

MODULE_DESCRIPTION("S3C2410 KBD Driver");
MODULE_AUTHOR("yuandaode&yianxi");
MODULE_LICENSE("Dual/GPL");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲激情男女视频| 国产99一区视频免费| 国产综合色视频| 91色综合久久久久婷婷| 欧美一区二区大片| 亚洲在线免费播放| 成人18视频日本| 精品成人免费观看| 日韩激情av在线| 99久久精品免费精品国产| 久久久一区二区| 免费看日韩a级影片| 精品视频在线免费| 亚洲综合一区二区三区| 成人av网站在线观看免费| 久久久亚洲精品石原莉奈| 免费看日韩a级影片| 欧美丝袜丝交足nylons图片| 国产精品全国免费观看高清| 国产麻豆视频一区二区| 欧美www视频| 美腿丝袜亚洲色图| 欧美精品丝袜久久久中文字幕| 亚洲人xxxx| 色综合视频一区二区三区高清| 欧美极品美女视频| 国产成人av一区二区| 久久精品网站免费观看| 国产很黄免费观看久久| 久久久精品影视| 国产成+人+日韩+欧美+亚洲| 久久精品视频在线免费观看| 国产精品自拍网站| 欧美国产欧美亚州国产日韩mv天天看完整| 激情综合网激情| 国产日韩欧美高清在线| 高清日韩电视剧大全免费| 国产欧美一区二区三区沐欲| 国产 日韩 欧美大片| 国产精品进线69影院| 91黄色激情网站| 天堂av在线一区| 久久综合av免费| 成人av免费在线播放| 亚洲精品大片www| 欧美日韩久久不卡| 免费在线视频一区| 国产日韩三级在线| 91麻豆国产福利在线观看| 午夜一区二区三区视频| 日韩一级完整毛片| 成人一级片在线观看| 亚洲四区在线观看| 91麻豆精品国产91久久久久久| 老司机精品视频线观看86| 国产欧美日韩视频在线观看| www.成人网.com| 五月综合激情婷婷六月色窝| 久久亚洲免费视频| 色综合中文字幕| 免费黄网站欧美| 中文字幕欧美国产| 欧美男男青年gay1069videost | 成人h版在线观看| 一区二区三区中文在线观看| 欧美日韩不卡一区二区| 国产成人h网站| 日韩精品午夜视频| 日本一区二区三区dvd视频在线| 日本韩国一区二区三区视频| 七七婷婷婷婷精品国产| **欧美大码日韩| 欧美成人一区二区| 欧美丝袜自拍制服另类| 成人午夜在线免费| 日本中文字幕一区| 亚洲欧美日韩中文播放| 欧美电视剧在线看免费| 欧美综合一区二区三区| 国产精品一级片| 午夜久久久久久久久久一区二区| 国产农村妇女精品| 日韩三级高清在线| 欧美日韩精品一区二区天天拍小说| 国产激情一区二区三区四区| 天堂精品中文字幕在线| 亚洲精品第一国产综合野| 中文字幕欧美日韩一区| 精品乱人伦一区二区三区| 欧美日本一道本| 色婷婷亚洲一区二区三区| 丁香网亚洲国际| 国产在线一区二区| 日本午夜一本久久久综合| 一区二区三区久久| 亚洲精品久久7777| 国产精品国产自产拍高清av| 久久久久久久久久美女| 日韩免费观看高清完整版| 欧美日韩国产小视频在线观看| 99久久99久久久精品齐齐| 高清久久久久久| 国产风韵犹存在线视精品| 韩国一区二区视频| 黄色小说综合网站| 精品一二三四区| 韩国成人精品a∨在线观看| 最新热久久免费视频| 久久综合99re88久久爱| 精品国产亚洲一区二区三区在线观看| 欧美中文字幕亚洲一区二区va在线| av不卡在线播放| av一区二区三区在线| 成人av午夜影院| 一本到不卡精品视频在线观看 | 欧美国产禁国产网站cc| 欧美精品一区二区三区高清aⅴ| 日韩视频免费直播| 日韩情涩欧美日韩视频| 精品国产伦一区二区三区观看体验 | 极品少妇一区二区| 国产尤物一区二区| 国产麻豆91精品| 成人一道本在线| 色悠悠久久综合| 欧美日韩国产在线观看| 91精品国产综合久久福利 | 欧美性视频一区二区三区| 欧美日本在线播放| 欧美电影精品一区二区| 国产欧美精品一区| 亚洲人妖av一区二区| 樱桃视频在线观看一区| 午夜精品免费在线| 国内成人精品2018免费看| 成人夜色视频网站在线观看| 不卡一区在线观看| 精品视频全国免费看| 精品免费视频一区二区| 国产精品二三区| 五月天亚洲精品| 国产精品一二一区| 色欧美88888久久久久久影院| 欧美高清视频在线高清观看mv色露露十八| 欧美xxxx在线观看| 亚洲免费在线视频一区 二区| 天堂午夜影视日韩欧美一区二区| 国产精品一级二级三级| 欧美色综合影院| 久久久久亚洲蜜桃| 亚洲免费在线看| 国产一区二区三区四| 在线观看中文字幕不卡| 欧美精品一区二区三区四区| 亚洲视频一二三| 日本中文字幕一区| 91色.com| 久久这里只精品最新地址| 一区二区三区中文字幕在线观看| 老汉av免费一区二区三区| 成人av资源网站| 日韩欧美的一区二区| 一区二区在线看| 福利电影一区二区| 日韩欧美一区电影| 亚洲超碰精品一区二区| 成人免费av网站| 日韩欧美激情在线| 香蕉久久夜色精品国产使用方法 | 国产一区二区三区在线观看免费 | 日韩一区二区电影| 亚洲尤物视频在线| 成人av在线播放网站| 久久久久久免费网| 欧美aaa在线| 欧美女孩性生活视频| 亚洲乱码中文字幕综合| 成人在线综合网| 亚洲精品一区在线观看| 免费成人在线观看| 555www色欧美视频| 天堂精品中文字幕在线| 欧美综合一区二区| 一区二区三区四区国产精品| 粗大黑人巨茎大战欧美成人| 精品1区2区在线观看| 麻豆精品新av中文字幕| 制服丝袜在线91| 日本午夜一区二区| 日韩精品专区在线影院重磅| 日韩电影一区二区三区四区| 欧美午夜精品一区二区三区| 亚洲色欲色欲www在线观看| 99精品一区二区| 亚洲人成网站影音先锋播放| 色综合视频一区二区三区高清| 亚洲男人电影天堂| 欧美亚洲国产bt| 亚洲国产一区二区在线播放| 欧美三级在线视频|