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

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

?? arm9_nand.c

?? ARM9平臺上Linux下的Nand_Flash驅動
?? C
字號:

#include <linux/slab.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/nand.h>
#include <linux/mtd/partitions.h>

#include <asm/io.h>
#include <asm/sizes.h>

#include <asm/hardware.h>
#include <asm/arch/board.h>
#include <asm/arch/gpio.h>

struct at91_nand_host {
 struct nand_chip nand_chip;
 struct mtd_info  mtd;
 void __iomem  *io_base;
 struct at91_nand_data *board;
};

/*
 * Hardware specific access to control-lines
 */
static void at91_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
{
 struct nand_chip *nand_chip = mtd->priv;
 struct at91_nand_host *host = nand_chip->priv;

 if (cmd == NAND_CMD_NONE)
  return;

 if (ctrl & NAND_CLE)
  writeb(cmd, host->io_base + (1 << host->board->cle));
 else
  writeb(cmd, host->io_base + (1 << host->board->ale));
}

/*
 * Read the Device Ready pin.
 */
static int at91_nand_device_ready(struct mtd_info *mtd)
{
 struct nand_chip *nand_chip = mtd->priv;
 struct at91_nand_host *host = nand_chip->priv;

 return at91_get_gpio_value(host->board->rdy_pin);
}

/*
 * Enable NAND.
 */
static void at91_nand_enable(struct at91_nand_host *host)
{
 if (host->board->enable_pin)
  at91_set_gpio_value(host->board->enable_pin, 0);
}

/*
 * Disable NAND.
 */
static void at91_nand_disable(struct at91_nand_host *host)
{
 if (host->board->enable_pin)
  at91_set_gpio_value(host->board->enable_pin, 1);
}

/*
 * Probe for the NAND device.
 */
static int __init at91_nand_probe(struct platform_device *pdev)
{
 struct at91_nand_host *host;
 struct mtd_info *mtd;
 struct nand_chip *nand_chip;
 int res;

#ifdef CONFIG_MTD_PARTITIONS
 struct mtd_partition *partitions = NULL;
 int num_partitions = 0;
#endif

 /* Allocate memory for the device structure (and zero it) */
 host = kzalloc(sizeof(struct at91_nand_host), GFP_KERNEL);
 if (!host) {
  printk(KERN_ERR "at91_nand: failed to allocate device structure.\n");
  return -ENOMEM;
 }

 host->io_base = ioremap(pdev->resource[0].start,
    pdev->resource[0].end - pdev->resource[0].start + 1);
 if (host->io_base == NULL) {
  printk(KERN_ERR "at91_nand: ioremap failed\n");
  kfree(host);
  return -EIO;
 }

 mtd = &host->mtd;
 nand_chip = &host->nand_chip;
 host->board = pdev->dev.platform_data;

 nand_chip->priv = host;  /* link the private data structures */
 mtd->priv = nand_chip;
 mtd->owner = THIS_MODULE;

 /* Set address of NAND IO lines */
 nand_chip->IO_ADDR_R = host->io_base;
 nand_chip->IO_ADDR_W = host->io_base;
 nand_chip->cmd_ctrl = at91_nand_cmd_ctrl;
 nand_chip->dev_ready = at91_nand_device_ready;
 nand_chip->ecc.mode = NAND_ECC_SOFT; /* enable ECC */
 nand_chip->chip_delay = 20;  /* 20us command delay time */

 if (host->board->bus_width_16)  /* 16-bit bus width */
  nand_chip->options |= NAND_BUSWIDTH_16;

 platform_set_drvdata(pdev, host);
 at91_nand_enable(host);

 if (host->board->det_pin) {
  if (at91_get_gpio_value(host->board->det_pin)) {
   printk ("No SmartMedia card inserted.\n");
   res = ENXIO;
   goto out;
  }
 }

 /* Scan to find existance of the device */
 if (nand_scan(mtd, 1)) {
  res = -ENXIO;
  goto out;
 }

#ifdef CONFIG_MTD_PARTITIONS
 if (host->board->partition_info)
  partitions = host->board->partition_info(mtd->size, &num_partitions);

 if ((!partitions) || (num_partitions == 0)) {
  printk(KERN_ERR "at91_nand: No parititions defined, or unsupported device.\n");
  res = ENXIO;
  goto release;
 }

 res = add_mtd_partitions(mtd, partitions, num_partitions);
#else
 res = add_mtd_device(mtd);
#endif

 if (!res)
  return res;

release:
 nand_release(mtd);
out:
 at91_nand_disable(host);
 platform_set_drvdata(pdev, NULL);
 iounmap(host->io_base);
 kfree(host);
 return res;
}

/*
 * Remove a NAND device.
 */
static int __devexit at91_nand_remove(struct platform_device *pdev)
{
 struct at91_nand_host *host = platform_get_drvdata(pdev);
 struct mtd_info *mtd = &host->mtd;

 nand_release(mtd);

 at91_nand_disable(host);

 iounmap(host->io_base);
 kfree(host);

 return 0;
}

static struct platform_driver at91_nand_driver = {
 .probe  = at91_nand_probe,
 .remove  = at91_nand_remove,
 .driver  = {
  .name = "at91_nand",
  .owner = THIS_MODULE,
 },
};

static int __init at91_nand_init(void)
{
 return platform_driver_register(&at91_nand_driver);
}


static void __exit at91_nand_exit(void)
{
 platform_driver_unregister(&at91_nand_driver);
}


module_init(at91_nand_init);
module_exit(at91_nand_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Rick Bronson");
MODULE_DESCRIPTION("NAND/SmartMedia driver for AT91RM9200");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女任你摸久久| 欧美久久免费观看| 国产高清不卡二三区| 青椒成人免费视频| 午夜激情综合网| 午夜精品福利在线| 日本不卡视频在线| 免费成人在线影院| 毛片基地黄久久久久久天堂| 日韩精品一二三四| 免播放器亚洲一区| 久久草av在线| 精品一区二区久久| 国产乱子伦一区二区三区国色天香| 蜜臀精品一区二区三区在线观看| 久久国产精品一区二区| 国产美女精品人人做人人爽| 国产精品一区二区免费不卡| 成人精品国产一区二区4080| av影院午夜一区| 91网上在线视频| 欧美日韩高清一区二区| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲欧美另类久久久精品| 国产精品国产三级国产有无不卡| 亚洲欧美日韩中文字幕一区二区三区| 亚洲精品视频观看| 午夜精品在线看| 久久99国产精品尤物| 国产又粗又猛又爽又黄91精品| 国产白丝网站精品污在线入口| 成人免费高清在线观看| 一本在线高清不卡dvd| 欧美亚洲国产一区二区三区va| 欧美精品色综合| 2020国产精品自拍| 最近日韩中文字幕| 亚洲第一激情av| 国产一区欧美日韩| 91免费精品国自产拍在线不卡| 欧美午夜在线观看| 日韩欧美三级在线| 国产欧美日韩综合精品一区二区| 亚洲男同性恋视频| 全国精品久久少妇| 成人精品视频.| 欧美性大战xxxxx久久久| 精品国产亚洲在线| 亚洲精品成人悠悠色影视| 亚洲一区二区黄色| 国产精品资源站在线| 色av成人天堂桃色av| 日韩欧美国产wwwww| 中文字幕亚洲一区二区av在线| 首页国产欧美久久| 99综合影院在线| 日韩欧美亚洲国产另类| 亚洲伦在线观看| 国产在线观看一区二区| 欧美视频一二三区| 国产精品久久久久久久久晋中| 午夜电影一区二区| 99国产精品久久久久久久久久| 日韩三级免费观看| 一区二区三区四区五区视频在线观看| 久久成人18免费观看| 欧美亚洲一区二区在线观看| 欧美国产欧美综合| 久久精品国产亚洲aⅴ| 欧美视频第二页| 综合电影一区二区三区| 另类中文字幕网| 欧美三级电影一区| 国产精品久久福利| 狠狠狠色丁香婷婷综合久久五月| 欧美亚洲国产bt| 国产精品乱码一区二三区小蝌蚪| 美女尤物国产一区| 欧美精品日韩一本| 一区二区不卡在线视频 午夜欧美不卡在 | 麻豆精品在线看| 91国产免费观看| 国产精品国产三级国产普通话三级| 蜜臂av日日欢夜夜爽一区| 欧美在线短视频| 亚洲欧洲日韩综合一区二区| 国产福利一区在线| 337p粉嫩大胆噜噜噜噜噜91av| 日韩和的一区二区| 欧美色视频在线| 亚洲美女视频一区| 99久久久免费精品国产一区二区| 国产欧美久久久精品影院| 国产揄拍国内精品对白| 337p粉嫩大胆色噜噜噜噜亚洲| 日韩成人免费电影| 4438成人网| 婷婷六月综合亚洲| 欧美日本视频在线| 午夜电影网一区| 69堂国产成人免费视频| 天天色综合天天| 欧美一区二区三区小说| 日韩中文欧美在线| 日韩午夜精品视频| 久久se这里有精品| 精品免费国产一区二区三区四区| 免费观看91视频大全| 日韩三级精品电影久久久| 蜜桃传媒麻豆第一区在线观看| 欧美一区二区三区啪啪| 免费不卡在线视频| 欧美成人精品福利| 国产一区二区三区综合| 欧美韩国一区二区| 成人美女视频在线观看18| 国产精品短视频| 色8久久精品久久久久久蜜| 亚洲精品水蜜桃| 在线观看精品一区| 日韩激情视频在线观看| 欧美大白屁股肥臀xxxxxx| 国模无码大尺度一区二区三区| 欧美国产成人在线| 色94色欧美sute亚洲线路一ni| 亚洲图片欧美视频| 日韩欧美一区二区视频| 国产精品一区二区三区乱码| 亚洲欧洲性图库| 欧美日韩亚洲综合在线| 蜜桃91丨九色丨蝌蚪91桃色| 久久精品亚洲国产奇米99| 成人精品视频一区二区三区尤物| 亚洲精选视频免费看| 5858s免费视频成人| 国产一区二区三区免费| 国产精品久久久久aaaa樱花| 日本福利一区二区| 蜜臀av性久久久久蜜臀aⅴ| 欧美经典一区二区| 欧美体内she精视频| 久久精品国产一区二区| 亚洲欧洲三级电影| 91精品国产乱| 高清不卡在线观看| 亚洲综合色自拍一区| 欧美videos中文字幕| 99久久精品免费看国产免费软件| 亚洲成人第一页| 久久久欧美精品sm网站| 日本韩国欧美一区二区三区| 久久精品二区亚洲w码| 亚洲色图欧美偷拍| 日韩欧美一区电影| 91视视频在线直接观看在线看网页在线看 | 欧美精品一区男女天堂| 色悠久久久久综合欧美99| 久久精品国产一区二区| 亚洲欧美激情在线| 久久毛片高清国产| 欧美日韩在线一区二区| 丰满少妇在线播放bd日韩电影| 亚洲小少妇裸体bbw| 久久精品欧美日韩| 91精品国产免费| 色婷婷综合久久久久中文一区二区| 免费视频最近日韩| 亚洲精品第一国产综合野| 久久久亚洲高清| 91精品国产综合久久久久久| 91伊人久久大香线蕉| 国产尤物一区二区在线| 午夜国产精品一区| 亚洲欧美一区二区三区孕妇| 久久婷婷综合激情| 欧美一区二区三区影视| 欧美影院午夜播放| 成人国产一区二区三区精品| 美女视频黄a大片欧美| 亚洲一区二区三区精品在线| 国产精品狼人久久影院观看方式| 欧美成人a∨高清免费观看| 欧美日韩国产在线播放网站| 99国产精品久| 岛国一区二区在线观看| 激情文学综合插| 男女性色大片免费观看一区二区 | 久久精品72免费观看| 亚洲.国产.中文慕字在线| 亚洲精品欧美二区三区中文字幕| 中文字幕不卡在线播放| 久久影院午夜片一区| 精品久久久久久最新网址| 欧美一级久久久| 欧美一区二区黄| 欧美二区乱c少妇| 制服视频三区第一页精品| 欧美日韩免费一区二区三区视频| 色老汉av一区二区三区| 91美女蜜桃在线|