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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? davinci_mmc.c

?? The latest MontaVista Linux driver about SD/MMC code
?? C
?? 第 1 頁 / 共 3 頁
字號(hào):
							       flags);					dev_dbg(&mmc_dev,						"MMCSD: Data timeout, CMD%d and status is %x\r\n",						host->cmd->opcode, status);					end_transfer = 1;					host->cmd->error |= MMC_ERR_TIMEOUT;				}				dev_dbg(&mmc_dev,					"MMCSD: Data timeout, CMD%d and status is %x\r\n",					host->cmd->opcode, status);			}			if (status & MMCSD_EVENT_ERROR_DATACRC) {				/* Data CRC error */				if (host->data) {					host->data->error |= MMC_ERR_BADCRC;					dev_dbg(&mmc_dev,						"MMCSD: Data CRC error, bytes left %d\r\n",						host->bytes_left);					end_transfer = 1;				} else {					dev_dbg(&mmc_dev,						"MMCSD: Data CRC error\r\n");				}			}			if (status & MMCSD_EVENT_ERROR_CMDTIMEOUT) {				/* Command timeout */				if (host->cmd) {					/* Timeouts are normal in case of					 * MMC_SEND_STATUS					 */					if (host->cmd->opcode !=					    MMC_ALL_SEND_CID) {						dev_dbg(&mmc_dev,							"MMCSD: Command timeout, CMD%d and status is %x\r\n",							host->cmd->opcode,							status);						spin_lock_irqsave(&mmc_lock,								  flags);						new_card_state = 0;						is_card_initialized = 0;						spin_unlock_irqrestore						    (&mmc_lock, flags);					}					host->cmd->error |= MMC_ERR_TIMEOUT;					end_command = 1;				}			}			if (status & MMCSD_EVENT_ERROR_CMDCRC) {				/* Command CRC error */				dev_dbg(&mmc_dev, "Command CRC error\r\n");				if (host->cmd) {					host->cmd->error |= MMC_ERR_BADCRC;					end_command = 1;				}			}			if (status & MMCSD_EVENT_EOFCMD) {				/* End of command phase */				end_command = 1;			}			if (host->data == NULL) {				status = mmcsd_regs->mmc_st0;				if (status != 0) {					dev_dbg(&mmc_dev,						"Status is %x at end of ISR when host->data is NULL",						status);					status = 0;				}			} else {				status = mmcsd_regs->mmc_st0;			}		}		if (end_command) {			mmc_davinci_cmd_done(host, host->cmd);		}		if (end_transfer) {			mmc_davinci_xfer_done(host, host->data);		}	} else {		if (host->cmd_code == 13) {			if (status & MMCSD_EVENT_EOFCMD) {				spin_lock_irqsave(&mmc_lock, flags);				new_card_state = 1;				spin_unlock_irqrestore(&mmc_lock, flags);			} else {				spin_lock_irqsave(&mmc_lock, flags);				new_card_state = 0;				is_card_initialized = 0;				spin_unlock_irqrestore(&mmc_lock, flags);			}			spin_lock_irqsave(&mmc_lock, flags);			is_card_detect_progress = 0;			spin_unlock_irqrestore(&mmc_lock, flags);			if (is_req_queued_up) {				mmc_davinci_request(que_mmc_host,						    que_mmc_request);				spin_lock_irqsave(&mmc_lock, flags);				is_req_queued_up = 0;				spin_unlock_irqrestore(&mmc_lock, flags);			}		}		if (host->cmd_code == 1) {			if (status & MMCSD_EVENT_EOFCMD) {				spin_lock_irqsave(&mmc_lock, flags);				new_card_state = 1;				is_card_initialized = 0;				spin_unlock_irqrestore(&mmc_lock, flags);			} else {				spin_lock_irqsave(&mmc_lock, flags);				new_card_state = 0;				is_card_initialized = 0;				spin_unlock_irqrestore(&mmc_lock, flags);			}			spin_lock_irqsave(&mmc_lock, flags);			is_card_detect_progress = 0;			spin_unlock_irqrestore(&mmc_lock, flags);			if (is_req_queued_up) {				mmc_davinci_request(que_mmc_host,						    que_mmc_request);				spin_lock_irqsave(&mmc_lock, flags);				is_req_queued_up = 0;				spin_unlock_irqrestore(&mmc_lock, flags);			}		}		if (host->cmd_code == 0) {			if (status & MMCSD_EVENT_EOFCMD) {				host->is_core_command = 0;				host->cmd_code = 1;				dev_dbg(&mmc_dev,					"MMC-Probing mmc with cmd1\n");				/* Issue cmd1 */				mmcsd_regs->mmc_arghl = 0x80300000;				mmcsd_regs->mmc_cmd = 0x00000601;			} else {				spin_lock_irqsave(&mmc_lock, flags);				new_card_state = 0;				is_card_initialized = 0;				is_card_detect_progress = 0;				spin_unlock_irqrestore(&mmc_lock, flags);			}		}	}	return IRQ_HANDLED;}static struct mmc_host_ops mmc_davinci_ops = {	.request = mmc_davinci_request,	.set_ios = mmc_davinci_set_ios,};void mmc_check_card(unsigned long data){	struct mmc_davinci_host *host = (struct mmc_davinci_host *)data;	unsigned long flags;	if ((!is_card_detect_progress) || (!is_init_progress)) {		if (is_card_initialized) {			host->is_core_command = 0;			host->cmd_code = 13;			spin_lock_irqsave(&mmc_lock, flags);			is_card_detect_progress = 1;			spin_unlock_irqrestore(&mmc_lock, flags);			/* Issue cmd13 */			mmcsd_regs->mmc_arghl = 0x10000;			mmcsd_regs->mmc_cmd = 0x0000028D;		} else {			host->is_core_command = 0;			host->cmd_code = 0;			spin_lock_irqsave(&mmc_lock, flags);			is_card_detect_progress = 1;			spin_unlock_irqrestore(&mmc_lock, flags);			/* Issue cmd0 */			mmcsd_regs->mmc_arghl = 0;			mmcsd_regs->mmc_cmd = 0x4000;		}		mmcsd_regs->mmc_im = (MMCSD_EVENT_EOFCMD |				      MMCSD_EVENT_ERROR_CMDCRC |				      MMCSD_EVENT_ERROR_DATACRC |				      MMCSD_EVENT_ERROR_CMDTIMEOUT |				      MMCSD_EVENT_ERROR_DATATIMEOUT);	}}static void davinci_mmc_check_status(unsigned long data){	unsigned long flags;	struct mmc_davinci_host *host = (struct mmc_davinci_host *)data;	if (!is_card_busy) {		if (host->old_card_state ^ new_card_state) {			mmc_detect_change(host->mmc, 0);			spin_lock_irqsave(&mmc_lock, flags);			host->old_card_state = new_card_state;			spin_unlock_irqrestore(&mmc_lock, flags);		} else {			mmc_check_card(data);		}	}	mod_timer(&host->timer, jiffies + MULTIPILER_TO_HZ * HZ);}static void init_mmcsd_host(void){	/* CMD line portion is diabled and in reset state */	mmcsd_regs->mmc_ctl = mmcsd_regs->mmc_ctl | 0x1;	/* DAT line portion is diabled and in reset state */	mmcsd_regs->mmc_ctl = mmcsd_regs->mmc_ctl | (1 << 1);	mmcsd_regs->mmc_clk = 0x0;	mmcsd_regs->mmc_clk = mmcsd_regs->mmc_clk | (1 << 8);	mmcsd_regs->mmc_tor = 0xFFFF;	mmcsd_regs->mmc_tod = 0xFFFF;	mmcsd_regs->mmc_ctl = mmcsd_regs->mmc_ctl & ~(0x1);	mmcsd_regs->mmc_ctl = mmcsd_regs->mmc_ctl & ~(1 << 1);}static int davinci_mmcsd_probe(struct device *dev){	struct mmc_davinci_host *host;	struct mmc_host *mmc;	int ret;	mmc = mmc_alloc_host(sizeof(struct mmc_davinci_host), dev);	if (!mmc) {		ret = -ENOMEM;		goto out;	}	mmcsd_regs =		(volatile mmcsd_regs_base *)IO_ADDRESS(MMCSD_REGS_BASE_ADDR);	init_mmcsd_host();	mmc->ops = &mmc_davinci_ops;	mmc->f_min = 312500;	mmc->f_max = 20000000;	mmc->ocr_avail = MMC_VDD_32_33;	host = mmc_priv(mmc);	host->mmc = mmc;	/* Important */	host->use_dma = mmcsd_cfg.use_dma;	host->irq = MMCINT_INTERRUPT;	host->sd_support = 1;	ret =	    request_irq(MMCINT_INTERRUPT, mmc_davinci_irq, 0, DRIVER_NAME,			host);	if (ret)		goto out;	dev_set_drvdata(dev, host);	mmc_add_host(mmc);	init_timer(&host->timer);	host->timer.data = (unsigned long)host;	host->timer.function = davinci_mmc_check_status;	host->timer.expires = jiffies + MULTIPILER_TO_HZ * HZ;	add_timer(&host->timer);	return 0;      out:	/* TBD: Free other resources too. */	return ret;}static int davinci_mmcsd_remove(struct device *dev){	struct mmc_davinci_host *host = dev_get_drvdata(dev);	dev_set_drvdata(dev, NULL);	if (host) {		mmc_remove_host(host->mmc);		free_irq(host->irq, host);	}	del_timer(&host->timer);	davinci_free_dma(DAVINCI_DMA_MMCTXEVT);	davinci_free_dma(DAVINCI_DMA_MMCRXEVT);	return 0;}#ifdef CONFIG_PMstatic int davinci_mmcsd_suspend(struct device *dev, u32 state, u32 level){	struct mmc_host *mmc = dev_get_drvdata(dev);	int ret = 0;	if (mmc && level == SUSPEND_DISABLE)		ret = mmc_suspend_host(mmc, state);	return ret;}static int davinci_mmcsd_resume(struct device *dev, u32 level){	struct mmc_host *mmc = dev_get_drvdata(dev);	int ret = 0;	if (mmc && level == RESUME_ENABLE)		ret = mmc_resume_host(mmc);	return ret;}#else#define davinci_mmcsd_suspend	NULL#define davinci_mmcsd_resume	NULL#endifstatic struct device_driver davinci_mmcsd_driver = {	.name = DRIVER_NAME,	.bus = &platform_bus_type,	.probe = davinci_mmcsd_probe,	.remove = davinci_mmcsd_remove,	.suspend = davinci_mmcsd_suspend,	.resume = davinci_mmcsd_resume,};static void mmc_release(struct device *dev){	/* Nothing to release? */}static u64 mmc_dma_mask = 0xffffffff;static struct resource mmc_resources[] = {	{	 .start = IO_ADDRESS(MMCSD_REGS_BASE_ADDR),	 .end = IO_ADDRESS((MMCSD_REGS_BASE_ADDR) + 0x74),	 .flags = IORESOURCE_MEM,	 },	{	 .start = MMCINT_INTERRUPT,	 .flags = IORESOURCE_IRQ,	 },};static struct platform_device mmc_davinci_device = {	.name = DRIVER_NAME,	.id = 1,	.dev = {		.release = mmc_release,		.dma_mask = &mmc_dma_mask,		},	.num_resources = ARRAY_SIZE(&mmc_resources),	.resource = mmc_resources,};static int davinci_mmcsd_init(void){	int ret = 0;	struct clk *clkp = NULL;	clkp = clk_get(NULL, "MMCSDCLK");	if (clkp != NULL) {		mmc_clkp = clkp;		clk_use(mmc_clkp);		clk_enable(mmc_clkp);		mmc_input_clk = clk_get_rate(mmc_clkp);		ret = platform_device_register(&mmc_davinci_device);		if (ret != 0)			goto free1;		ret = driver_register(&davinci_mmcsd_driver);		mmc_davinci_device.dev.driver = &davinci_mmcsd_driver;		mmc_dev = mmc_davinci_device.dev;		if (ret == 0)			return 0;	      free1:		platform_device_unregister(&mmc_davinci_device);	}	return -ENODEV;}static void __exit davinci_mmcsd_exit(void){	driver_unregister(&davinci_mmcsd_driver);	platform_device_unregister(&mmc_davinci_device);	clk_disable(mmc_clkp);	clk_unuse(mmc_clkp);}module_init(davinci_mmcsd_init);module_exit(davinci_mmcsd_exit);MODULE_LICENSE("GPL");MODULE_DESCRIPTION("MMCSD driver for Davinci MMC controller");

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区四区视频精品免费 | 色偷偷久久人人79超碰人人澡| 亚洲综合在线视频| 欧美精品一区在线观看| 欧美视频一区在线观看| 不卡在线观看av| 免费成人av资源网| 亚洲理论在线观看| 欧美国产成人精品| 日韩午夜激情av| 欧美日韩的一区二区| 色悠悠久久综合| 成人精品小蝌蚪| 国产一区在线观看视频| 丝袜美腿亚洲一区二区图片| 亚洲婷婷综合色高清在线| 2023国产精品自拍| 日韩精品一区在线观看| 精品污污网站免费看| 99国产精品久久久| 成人午夜碰碰视频| 精品一区二区在线视频| 日韩精品1区2区3区| 亚洲综合清纯丝袜自拍| 亚洲免费大片在线观看| 国产精品久久久99| 国产欧美久久久精品影院| 欧美一级精品大片| 制服.丝袜.亚洲.中文.综合| 在线观看av一区二区| 色猫猫国产区一区二在线视频| 国产99久久久精品| 久久国产精品免费| 久久国产视频网| 久久不见久久见免费视频1| 理论电影国产精品| 六月丁香综合在线视频| 免费三级欧美电影| 日本欧美久久久久免费播放网| 亚洲国产精品综合小说图片区| 伊人婷婷欧美激情| 一区二区三区四区蜜桃 | 夜夜精品浪潮av一区二区三区| 国产精品久久久久久户外露出| 国产精品久久久一区麻豆最新章节| 亚洲国产精华液网站w| 国产精品看片你懂得 | 免费一级欧美片在线观看| 天使萌一区二区三区免费观看| 午夜精品久久久| 人人狠狠综合久久亚洲| 久久精品av麻豆的观看方式| 国产在线视频精品一区| 粉嫩欧美一区二区三区高清影视 | 国产盗摄视频一区二区三区| 国产成人综合在线观看| 丁香一区二区三区| 在线免费av一区| 欧美日韩高清在线| 久久这里只精品最新地址| 国产女人18水真多18精品一级做| 中文字幕一区二区三区不卡在线| 亚洲精品乱码久久久久久久久 | 久久国产精品99精品国产| 国产乱码精品一区二区三区五月婷| 国产99精品国产| 在线观看日产精品| 日韩亚洲电影在线| 国产精品久久毛片a| 亚洲.国产.中文慕字在线| 久久99久久精品| 色综合久久综合网欧美综合网| 欧美日韩精品欧美日韩精品一| 久久综合久久综合亚洲| 1024成人网| 视频一区欧美精品| 国产a精品视频| 欧美日韩精品高清| 国产三区在线成人av| 一级日本不卡的影视| 久久精品国产亚洲一区二区三区| 成人免费三级在线| 欧美日韩国产bt| 国产精品电影一区二区| 热久久免费视频| 91在线精品一区二区| 日韩欧美国产午夜精品| 专区另类欧美日韩| 国产在线播放一区| 在线观看三级视频欧美| 国产亚洲欧美日韩俺去了| 亚洲最色的网站| 国产麻豆一精品一av一免费| 欧美亚洲禁片免费| 国产女人aaa级久久久级| 日韩福利电影在线观看| eeuss鲁一区二区三区| 日韩欧美激情在线| 亚洲成人免费在线观看| 成人在线视频一区二区| 日韩久久久精品| 亚洲九九爱视频| 国产成人免费视频精品含羞草妖精| 欧美中文字幕一区二区三区亚洲| 国产日韩精品一区二区浪潮av| 日韩精品一二区| 91在线国产福利| 国产欧美精品一区二区色综合| 麻豆精品精品国产自在97香蕉| 91在线无精精品入口| 日本一区二区高清| 久热成人在线视频| 91精品一区二区三区在线观看| 亚洲欧美日韩电影| 成人污污视频在线观看| 精品99一区二区| 免费观看一级特黄欧美大片| 欧美美女直播网站| 亚洲黄色免费电影| 99久久久免费精品国产一区二区| 久久久久久久久久久久久夜| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧美在线啊v一区| 亚洲欧洲另类国产综合| proumb性欧美在线观看| 国产欧美视频在线观看| 国内欧美视频一区二区 | 亚洲欧美经典视频| 岛国精品在线播放| 国产欧美精品日韩区二区麻豆天美| 久久疯狂做爰流白浆xx| 日韩精品一区二区三区swag| 污片在线观看一区二区| 欧美另类videos死尸| 亚洲mv在线观看| 欧美精品亚洲一区二区在线播放| 亚洲一卡二卡三卡四卡| 欧美三电影在线| 亚洲午夜久久久久久久久电影网| 欧美日韩一区二区三区免费看| 亚洲网友自拍偷拍| 欧美精品vⅰdeose4hd| 日本伊人午夜精品| 欧美精品一区二区在线播放| 国产成人精品免费网站| 欧美激情综合网| www.色综合.com| 亚洲免费大片在线观看| 欧美日韩亚洲高清一区二区| 日韩国产欧美在线播放| 欧美va亚洲va香蕉在线| 国产精品一区在线| 亚洲男人电影天堂| 欧美日韩在线综合| 久久精品国产网站| 中文字幕成人av| 欧美伊人精品成人久久综合97 | 偷拍一区二区三区四区| 日韩一区二区在线看| 国产精品一区久久久久| 日韩一区中文字幕| 7777精品伊人久久久大香线蕉的 | 国产91精品一区二区| ㊣最新国产の精品bt伙计久久| 在线免费观看日韩欧美| 免费观看成人鲁鲁鲁鲁鲁视频| 国产日韩欧美精品电影三级在线| 91年精品国产| 蜜臀av一区二区在线免费观看| 亚洲国产成人一区二区三区| 欧美影片第一页| 国产一区二区美女诱惑| 亚洲综合偷拍欧美一区色| 日韩精品专区在线影院观看 | 色视频欧美一区二区三区| 日韩中文欧美在线| 国产亚洲精品7777| 欧美三级韩国三级日本三斤| 国产一区二区久久| 亚洲动漫第一页| 国产精品嫩草99a| 6080亚洲精品一区二区| av高清久久久| 久久99热99| 亚洲一区二区三区国产| 国产喷白浆一区二区三区| 欧美综合一区二区| 成人性生交大合| 七七婷婷婷婷精品国产| 一区二区三区在线视频免费| 久久久久国色av免费看影院| 欧美性xxxxxx少妇| 懂色av中文字幕一区二区三区| 三级在线观看一区二区| 中文字幕色av一区二区三区| 欧美videos中文字幕| 欧美群妇大交群中文字幕| 99riav久久精品riav| 国产aⅴ综合色| 国产综合色产在线精品|