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

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

?? spi.c

?? cmmb if101 linux driver sample
?? C
字號:
#include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/sched.h>#include <linux/mm.h>#include <asm/page.h>#include <linux/poll.h>#include <linux/kdev_t.h>#include <asm/semaphore.h>//#include <asm/arch/pxa-regs.h>#include <asm-arm/arch-pxa/pxa-regs.h>#include <linux/slab.h>#include <linux/delay.h>#include <asm/uaccess.h>#include <linux/i2c.h>//#include <asm/arch/gpio.h>//#include <asm/arch/ssp.h>//#include <asm/arch/mfp.h>#include <asm/arch/hardware.h>#include <asm/dma.h>#include <linux/dma-mapping.h>#include "IF101_Operation.h"#include "IF101_Communication.h"#include <linux/interrupt.h>#include <linux/sem.h>/************************************************************************** * *		Declaration for SPI part	 *****************************************************************************/#define SPI_MODE_0  	0     //idle low, transmit falling edge, receive rising edge.#define SPI_MODE_1	1     //idle high, transmit rising edge, receive falling edge#define SPI_MODE_2  	2     //idle low, transmit rising edge, receive falling edge#define SPI_MODE_3  	3     //idle high, transmit falling edge, receive rising edge.#define SSP_PORT	1#define SPI_CLK_PIN	23//MFP_PIN_GPIO85#define SPI_CS_PIN	24//MFP_PIN_GPIO86#define SPI_SDOUT_PIN	25//MFP_PIN_GPIO87#define SPI_SDIN_PIN	26//MFP_PIN_GPIO88#define DMA_BUFFER_SIZE		PAGE_SIZE#if(SSP_PORT==1)#define DRCMR_SPI_RX	DRCMR13#define DRCMR_SPI_TX	DRCMR14#elif(SSP_PORT==2)#define DRCMR_SPI_RX	DRCMR15#define DRCMR_SPI_TX	DRCMR16#elif(SSP_PORT==3)#define DRCMR_SPI_RX	DRCMR66#define DRCMR_SPI_TX	DRCMR67#elif(SSP_PORT==4)#define DRCMR_SPI_RX	DRCMR2#define DRCMR_SPI_TX	DRCMR3#endif#define PXA_SSP_PORTS 	1#if 0static struct mhn_pin_config ssp1_pins[] = {	MHN_MFP_CFG("CLK", SPI_CLK_PIN, MFP_AF1, MFP_DS03X, 0, MFP_LPM_PULL_HIGH, MFP_EDGE_NONE),//	MHN_MFP_CFG("CS",  SPI_CS_PIN, MFP_AF1, MFP_DS03X, 0, MFP_LPM_PULL_HIGH, MFP_EDGE_NONE),	MHN_MFP_CFG("CS",  SPI_CS_PIN, MFP_AF0, MFP_DS03X, 0, MFP_LPM_PULL_HIGH, MFP_EDGE_NONE),	// manual control cs	MHN_MFP_CFG("SOUT",SPI_SDOUT_PIN, MFP_AF1, MFP_DS03X, 0, MFP_LPM_PULL_HIGH, MFP_EDGE_NONE),	MHN_MFP_CFG("SIN", SPI_SDIN_PIN, MFP_AF1, MFP_DS03X, 0, MFP_LPM_PULL_HIGH, MFP_EDGE_NONE),};#endifstruct inno_spi_dma_info{	int		txdma;	int   		rxdma;	void		*txdma_addr;	void      	*rxdma_addr;	dma_addr_t  	txdma_addr_phys;	dma_addr_t  	rxdma_addr_phys;};struct ssp_dev {        u32 port;        u32 mode;        u32 flags;        u32 psp_flags;        u32 speed;};static int spi_inited = 0;static DECLARE_MUTEX(sem);static int use_count[PXA_SSP_PORTS] = {0, 0, 0};static unsigned short clk_mode = SPI_MODE_0;static struct ssp_dev	inno_spi_dev;struct inno_spi_dma_info inno_dma;static DECLARE_MUTEX_LOCKED(dma_sem);static void inno_spi_pin_config(void);static void inno_spi_dma_init(void);static void inno_spi_dma_uninit(void);void inno_spi_write_byte(u8 cmd);void inno_spi_read_bytes(u8* pdata, u32 len);static irqreturn_t ssp_interrupt(int irq, void *dev_id, struct pt_regs *regs){	struct ssp_dev *dev = (struct ssp_dev*) dev_id;	unsigned int status = SSSR_P(dev->port);	SSSR_P(dev->port) = status; /* clear status bits */	if (status & SSSR_ROR)		printk(KERN_WARNING "SSP(%d): receiver overrun\n", dev->port);	if (status & SSSR_TUR)		printk(KERN_WARNING "SSP(%d): transmitter underrun\n", dev->port);	if (status & SSSR_BCE)		printk(KERN_WARNING "SSP(%d): bit count error\n", dev->port);	return IRQ_HANDLED;}static int ssp_init(struct ssp_dev *dev, u32 port){	int ret, irq;	if (port > PXA_SSP_PORTS || port == 0)		return -ENODEV;	down(&sem);	if (use_count[port - 1]) {		up(&sem);		return -EBUSY;	}	use_count[port - 1]++;	if (!request_mem_region(__PREG(SSCR0_P(port)), 0x2c, "SSP")) {		use_count[port - 1]--;		up(&sem);		return -EBUSY;	}	switch (port) {		case 1:			irq = IRQ_SSP;			break;#if defined (CONFIG_PXA27x)		case 2:			irq = IRQ_SSP2;			break;		case 3:			irq = IRQ_SSP3;			break;#else		case 2:			irq = IRQ_NSSP;			break;		case 3:			irq = IRQ_ASSP;			break;#endif		default:			return -ENODEV;	}	dev->port = port;	ret = request_irq(irq, ssp_interrupt, 0, "SSP", dev);	if (ret)		goto out_region;	/* turn on SSP port clock */	switch (dev->port) {#if defined (CONFIG_PXA27x)		case 1:			pxa_set_cken(CKEN23_SSP1, 1);			break;		case 2:			pxa_set_cken(CKEN3_SSP2, 1);			break;		case 3:			pxa_set_cken(CKEN4_SSP3, 1);			break;#else		case 1:			pxa_set_cken(CKEN3_SSP, 1);			break;		case 2:			pxa_set_cken(CKEN9_NSSP, 1);			break;		case 3:			pxa_set_cken(CKEN10_ASSP, 1);			break;#endif	}	up(&sem);	return 0;out_region:	release_mem_region(__PREG(SSCR0_P(port)), 0x2c);	use_count[port - 1]--;	up(&sem);	return ret;}int ssp_write_word(struct ssp_dev *dev, u32 data){	while (!(SSSR_P(dev->port) & SSSR_TNF))		cpu_relax();	SSDR_P(dev->port) = data;	return 0;}void ssp_flush(struct ssp_dev *dev){	do {		while (SSSR_P(dev->port) & SSSR_RNE) {			(void) SSDR_P(dev->port);		}	} while (SSSR_P(dev->port) & SSSR_BSY);}int ssp_read_word(struct ssp_dev *dev){	int i = 0;	for(i = 0; i< 500; i++);	while (!(SSSR_P(dev->port) & SSSR_RNE))	{		for(i = 0; i < 100; i++);			cpu_relax();	}	return SSDR_P(dev->port);}void ssp_enable(struct ssp_dev *dev){	SSCR0_P(dev->port) |= SSCR0_SSE;}void ssp_disable(struct ssp_dev *dev){	SSCR0_P(dev->port) &= ~SSCR0_SSE;}int ssp_config(struct ssp_dev *dev, u32 mode, u32 flags, u32 psp_flags, u32 speed){	dev->mode = mode;	dev->flags = flags;	dev->psp_flags = psp_flags;	dev->speed = speed;	/* set up port type, speed, port settings */	SSCR0_P(dev->port) = (dev->speed | dev->mode);	SSCR1_P(dev->port) = dev->flags;	SSPSP_P(dev->port) = dev->psp_flags;	return 0;}void ssp_exit(struct ssp_dev *dev){	int irq;	down(&sem);	SSCR0_P(dev->port) &= ~SSCR0_SSE;	/* find irq, save power and turn off SSP port clock */	switch (dev->port) {#if defined (CONFIG_PXA27x)		case 1:			irq = IRQ_SSP;			pxa_set_cken(CKEN23_SSP1, 0);			break;		case 2:			irq = IRQ_SSP2;			pxa_set_cken(CKEN3_SSP2, 0);			break;		case 3:			irq = IRQ_SSP3;			pxa_set_cken(CKEN4_SSP3, 0);			break;#else		case 1:			irq = IRQ_SSP;			pxa_set_cken(CKEN3_SSP, 0);			break;		case 2:			irq = IRQ_NSSP;			pxa_set_cken(CKEN9_NSSP, 0);			break;		case 3:			irq = IRQ_ASSP;			pxa_set_cken(CKEN10_ASSP, 0);			break;#endif		default:			printk(KERN_WARNING "SSP: tried to close invalid port\n");			return;	}	free_irq(irq, dev);	release_mem_region(__PREG(SSCR0_P(dev->port)), 0x2c);	use_count[dev->port - 1]--;	up(&sem);}static void SPI_StartFrame(void){	GPCR(SPI_CS_PIN) |= GPIO_bit(SPI_CS_PIN);}static void SPI_EndFrame(void){	GPSR(SPI_CS_PIN) |= GPIO_bit(SPI_CS_PIN);}INNO_RETURN_CODE INNO_SPI_Init(int enable){	int ret;	int spi_timming_mode;	if(spi_inited)		return 0;	//printk("clk_mode ====== %d\n", clk_mode);	switch(clk_mode){		case SPI_MODE_3:	//idle high, transmit falling edge, receive rising edge.			spi_timming_mode = SSCR1_SPH | SSCR1_SPO;			break;		case SPI_MODE_1:	//idle high, transmit rising edge, receive falling edge			spi_timming_mode = SSCR1_SPO;	        break;		case SPI_MODE_2:	//idle low,transmit rising edge, receive falling edge		    spi_timming_mode = SSCR1_SPH;			break;		case SPI_MODE_0:	//idle low, transmit falling edge, receive rising edge.		default:			spi_timming_mode = 0;			break;	}	printk("SSP_PORT == %d", SSP_PORT);	if(SSP_PORT == 1)	{		pxa_gpio_mode ( GPIO23_SCLK_MD );		pxa_gpio_mode (SPI_CS_PIN | GPIO_OUT);		pxa_gpio_mode ( GPIO25_STXD_MD );		pxa_gpio_mode ( GPIO26_SRXD_MD );	}	else if(SSP_PORT == 2)	{		pxa_gpio_mode( SPI_SDIN_PIN  | GPIO_ALT_FN_2_IN);		pxa_gpio_mode( SPI_CS_PIN    | GPIO_OUT);		pxa_gpio_mode( SPI_CLK_PIN   | GPIO_ALT_FN_1_OUT);		pxa_gpio_mode( SPI_SDOUT_PIN | GPIO_ALT_FN_2_OUT);	}	else if(SSP_PORT == 3)	{		pxa_gpio_mode( SPI_SDOUT_PIN | GPIO_ALT_FN_1_OUT);		pxa_gpio_mode( SPI_SDIN_PIN  | GPIO_ALT_FN_1_IN);		pxa_gpio_mode( SPI_CS_PIN    | GPIO_OUT);		pxa_gpio_mode( SPI_CLK_PIN   | GPIO_ALT_FN_1_OUT);	}	//initial SPI_nCS level high	GPSR(SPI_CS_PIN) |= GPIO_bit(SPI_CS_PIN);	memzero(&inno_spi_dev, sizeof(struct ssp_dev));	ret = ssp_init(&inno_spi_dev, SSP_PORT);	if(ret){		printk("Unable Init SPI %d.\r\n", SSP_PORT);	}else{		printk("init SPI successfully!!!");		ssp_disable(&inno_spi_dev);		ssp_config(&inno_spi_dev, (SSCR0_Motorola | (SSCR0_DSS & 0x07)), // SPI, 8bit data			(spi_timming_mode),	\			0,	\			(1<<8));		//6.5MHz	ssp_enable(&inno_spi_dev);	ssp_flush(&inno_spi_dev);	}	spi_inited = 1;	return INNO_NO_ERROR;#if 0	int ret;	int spi_timming_mode = 0;	if(enable == 1){		inno_spi_pin_config();		memzero(&inno_spi_dev, sizeof(struct ssp_dev));		ret = ssp_init(&inno_spi_dev, SSP_PORT, 0);		if(ret){			printk("Unable Init SPI %d.\r\n", SSP_PORT);		}else{			ssp_disable(&inno_spi_dev);			ssp_config(&inno_spi_dev, (SSCR0_Motorola | (SSCR0_DSS & 0x07)), // SPI, 8bit data						(spi_timming_mode),	\						0,	\						SSCR0_SerClkDiv(2));		//6.5MHz			inno_spi_dma_init();			ssp_enable(&inno_spi_dev);			ssp_flush(&inno_spi_dev);		}	}	else{		inno_spi_dma_uninit();		ssp_exit(&inno_spi_dev);	}	return INNO_NO_ERROR;#endif}INNO_RETURN_CODE INNO_SPI_Write_One_Byte(unsigned char data){	inno_spi_write_byte(data);	return INNO_NO_ERROR;}INNO_RETURN_CODE INNO_SPI_Read_One_Byte(unsigned char *data){	inno_spi_read_bytes(data,1); 	return INNO_NO_ERROR;}INNO_RETURN_CODE INNO_SPI_Read_Bytes(unsigned char *buffer, int len){	inno_spi_read_bytes(buffer,len); 	return INNO_NO_ERROR;}/* * inno spi dma functions */static void inno_spi_dma_tx_intr(int dma, void *devid, struct pt_regs *regs){	if (DCSR(inno_dma.txdma) & DCSR_ENDINTR){		DCSR(inno_dma.txdma) |= DCSR_ENDINTR;	}}static void inno_spi_dma_rx_intr(int dma, void *devid, struct pt_regs *regs){	if (DCSR(inno_dma.rxdma) & DCSR_ENDINTR){		DCSR(inno_dma.rxdma) |= DCSR_ENDINTR;	}	up(&dma_sem);}static void inno_spi_dma_init(void){	SSCR1_P(SSP_PORT) |= (SSCR1_TSRE | SSCR1_RSRE); 		//enable DMA request    	SSCR1_P(SSP_PORT) |= SSCR1_TxTresh(8)|SSCR1_RxTresh(8); //set DMA request trig threshold//	SSCR1_P(SSP_PORT) |= SSCR1_TRAIL;	inno_dma.rxdma = pxa_request_dma("Inno Rx SPI DMA", DMA_PRIO_MEDIUM, inno_spi_dma_rx_intr, NULL);    	inno_dma.txdma = pxa_request_dma("Inno TX SPI DMA", DMA_PRIO_MEDIUM, inno_spi_dma_tx_intr, NULL);    	inno_dma.txdma_addr = NULL;	inno_dma.rxdma_addr = NULL;	inno_dma.txdma_addr = dma_alloc_coherent(NULL, DMA_BUFFER_SIZE, &inno_dma.txdma_addr_phys, GFP_KERNEL);	inno_dma.rxdma_addr = dma_alloc_coherent(NULL, DMA_BUFFER_SIZE, &inno_dma.rxdma_addr_phys, GFP_KERNEL);	if((NULL == inno_dma.txdma_addr) || (NULL == inno_dma.rxdma_addr))		printk("SPI DMA alloc memory error");	memzero(inno_dma.txdma_addr, PAGE_ALIGN(DMA_BUFFER_SIZE));	memzero(inno_dma.rxdma_addr, PAGE_ALIGN(DMA_BUFFER_SIZE));		DRCMR_SPI_TX = inno_dma.txdma | DRCMR_MAPVLD;	DRCMR_SPI_RX = inno_dma.rxdma | DRCMR_MAPVLD;}static void inno_spi_dma_uninit(void){	if(inno_dma.txdma != -1){		pxa_free_dma(inno_dma.txdma);		inno_dma.txdma = -1;	}	if(inno_dma.rxdma != -1){		pxa_free_dma(inno_dma.rxdma);		inno_dma.rxdma = -1;	}	if(inno_dma.txdma_addr != NULL){		dma_free_coherent(NULL, DMA_BUFFER_SIZE, inno_dma.txdma_addr, inno_dma.txdma_addr_phys);		inno_dma.txdma_addr = NULL;	}	if(inno_dma.rxdma_addr != NULL){		dma_free_coherent(NULL, DMA_BUFFER_SIZE, inno_dma.rxdma_addr, inno_dma.rxdma_addr_phys);		inno_dma.rxdma_addr = NULL;	}}/* * start launch DMA for transfer @size bytes */static void inno_spi_rxdma_start(u32 size){	DCSR(inno_dma.rxdma)  = DCSR_NODESC;    	DSADR(inno_dma.rxdma) = __PREG(SSDR_P(SSP_PORT));	DTADR(inno_dma.rxdma) = inno_dma.rxdma_addr_phys;	DCMD(inno_dma.rxdma)  = DCMD_INCTRGADDR | DCMD_FLOWSRC | DCMD_ENDIRQEN | DCMD_WIDTH1 | DCMD_BURST8 | (size & DCMD_LENGTH);	DCSR(inno_dma.rxdma) |= DCSR_RUN;}static void inno_spi_txdma_start(u32 size){	DCSR(inno_dma.txdma)  = DCSR_NODESC;	DSADR(inno_dma.txdma) = inno_dma.txdma_addr_phys;	DTADR(inno_dma.txdma) = __PREG(SSDR_P(SSP_PORT));	DCMD(inno_dma.txdma)  =  DCMD_INCSRCADDR | DCMD_FLOWTRG | DCMD_ENDIRQEN | DCMD_WIDTH1 | DCMD_BURST8 | (size & DCMD_LENGTH);    	DCSR(inno_dma.txdma) |= DCSR_RUN;}static void inno_spi_dma_start(u32 size){	SSCR0_P(SSP_PORT) &= ~SSCR0_SSE;	SSCR0_P(SSP_PORT) |= SSCR0_SSE;		inno_spi_rxdma_start(size);	inno_spi_txdma_start(size);}/* * configure SPI GPIO Setting */static void inno_spi_pin_config(void){#if 0	if(SSP_PORT == 1){		mhn_mfp_set_configs(ssp1_pins, ARRAY_SIZE(ssp1_pins));		mhn_gpio_set_direction(SPI_CLK_PIN, GPIO_DIR_OUT);	//clk		mhn_gpio_set_direction(SPI_CS_PIN, GPIO_DIR_OUT);	//ncs		mhn_gpio_set_direction(SPI_SDOUT_PIN, GPIO_DIR_OUT);	//sdout		mhn_gpio_set_direction(SPI_SDIN_PIN, GPIO_DIR_IN);	//sdin					mhn_gpio_set_level(SPI_CS_PIN, GPIO_LEVEL_HIGH);	//init ncs high	}#endif}static void inno_spi_start_frame(void){//	mhn_gpio_set_level(SPI_CS_PIN, GPIO_LEVEL_LOW);	GPCR(SPI_CS_PIN) |= GPIO_bit(SPI_CS_PIN);}static void inno_spi_end_frame(void){	//mhn_gpio_set_level(SPI_CS_PIN, GPIO_LEVEL_HIGH);	GPSR(SPI_CS_PIN) |= GPIO_bit(SPI_CS_PIN);}/* * inno_spi_write_byte * 		@cmd 		- 8-bit length mmis command * return *		@null */void inno_spi_write_byte(u8 cmd){	inno_spi_start_frame();	ssp_write_word(&inno_spi_dev, cmd);//    /* Read null data back from device to prevent SSP overflow *///    ssp_read_word(&inno_spi_dev);	ssp_flush(&inno_spi_dev);		inno_spi_end_frame();}/*  * note: if101 chip need nCS keep low staus when read until datas read end. * if we use spi controller to control nCS, the nCS will pull high after read every byte,  * so we should manual control nCS pin */void inno_spi_read_bytes(u8* pdata, u32 len){	u32 i;		SPI_StartFrame();	for(i=0; i<len; i++){		ssp_write_word(&inno_spi_dev, 0);	// in order to generate clock to receive		*(pdata+i) = (u8)(ssp_read_word(&inno_spi_dev));	}	SPI_EndFrame();#if 0	u32 count = 0;		u32 len_dma = len;	u8* pbuf = pdata;	inno_spi_start_frame();	if(len > 8){		if(len%8!=0)	//filled to multiple of 8bytes			len_dma = (len+7)/8*8;		while(len_dma > 0){			count = min(len_dma, (u32)DMA_BUFFER_SIZE);			inno_spi_dma_start(count);			down_interruptible(&dma_sem);			len_dma -= count;			memcpy(pbuf, inno_dma.rxdma_addr, min(count, len));			len -= min(count, len);			pbuf += min(count,len);		}		goto out;	}	for(count=0; count<len; count++){		ssp_write_word(&inno_spi_dev, 0);	// in order to generate clock to receive		*(pdata+count) = ssp_read_word(&inno_spi_dev);	}out:		inno_spi_end_frame();#endif}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内精品国产三级国产a久久| 18成人在线观看| 亚洲h动漫在线| 欧美一区二区在线视频| 日韩av二区在线播放| 日韩欧美国产麻豆| 国产精品123区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 精品国一区二区三区| 精品在线视频一区| 日本一区二区动态图| 91色视频在线| 秋霞午夜鲁丝一区二区老狼| 欧美大片顶级少妇| 成人av在线资源网| 天天操天天干天天综合网| 日韩视频一区二区| aa级大片欧美| 日韩av中文在线观看| 久久久久久综合| 91久久精品国产91性色tv| 蜜桃av一区二区三区电影| 久久嫩草精品久久久久| 在线观看av一区二区| 日韩不卡一区二区| 国产精品区一区二区三区| 欧美日本视频在线| 国产91精品一区二区麻豆亚洲| 亚洲人123区| 欧美成人vps| 色婷婷综合视频在线观看| 美国欧美日韩国产在线播放| 国产精品久久久久久亚洲伦| 51久久夜色精品国产麻豆| 成人午夜看片网址| 美国一区二区三区在线播放| 中文字幕在线不卡| 欧美电影免费观看高清完整版在线 | 欧美无人高清视频在线观看| 久久99精品国产麻豆婷婷洗澡| 国产精品国产精品国产专区不蜜 | 大桥未久av一区二区三区中文| 亚洲一区在线看| 久久精品亚洲精品国产欧美kt∨| 在线视频欧美精品| 丁香天五香天堂综合| 日韩极品在线观看| 亚洲精品视频在线| 国产精品区一区二区三区| 日韩一本二本av| 欧美在线观看18| 91视频www| 成人一道本在线| 裸体一区二区三区| 亚洲高清三级视频| 国产精品久久久久久久久图文区| 欧美一区二区三区免费大片| 日本精品一区二区三区高清 | 久久先锋影音av鲁色资源网| 欧美日韩在线不卡| 91香蕉视频mp4| 成人午夜大片免费观看| 久久99在线观看| 久久av中文字幕片| 青娱乐精品在线视频| 婷婷综合久久一区二区三区| 一区av在线播放| 亚洲与欧洲av电影| 亚洲一区二区三区不卡国产欧美| 18成人在线观看| 最好看的中文字幕久久| 国产精品沙发午睡系列990531| 久久你懂得1024| xf在线a精品一区二区视频网站| 日韩精品专区在线影院重磅| 日韩一区二区三区在线视频| 日韩欧美一区二区不卡| 精品女同一区二区| 久久久久久亚洲综合影院红桃 | 亚洲欧美一区二区三区久本道91| 国产日韩欧美不卡在线| 中文一区二区在线观看| 国产精品久久久久久福利一牛影视| 国产欧美日产一区| 国产欧美日韩在线看| 国产精品久久久久久久久快鸭| 国产精品久久久久三级| 亚洲男同性视频| 亚洲综合色丁香婷婷六月图片| 一区二区在线免费观看| 丝袜美腿亚洲综合| 美女看a上一区| 高清在线不卡av| jiyouzz国产精品久久| 色婷婷亚洲婷婷| 欧美日韩国产首页在线观看| 欧美一区二区三区四区在线观看 | 欧美精品亚洲二区| 日韩一级片网址| 久久久精品tv| 亚洲欧美另类小说| 午夜视频在线观看一区二区三区| 日韩国产精品久久久| 国产主播一区二区三区| 成人av午夜电影| 欧美日韩一级片网站| 亚洲精品在线观看网站| 国产精品久久久久久久久久久免费看 | 日韩av中文字幕一区二区三区| 美洲天堂一区二卡三卡四卡视频| 国产成人免费视| 日本精品免费观看高清观看| 日韩午夜电影在线观看| 国产精品国产三级国产普通话蜜臀 | 国产精品久久毛片av大全日韩| 悠悠色在线精品| 精品中文av资源站在线观看| 99这里都是精品| 欧美一区二区久久| 国产精品国产三级国产普通话三级| 亚洲第一久久影院| 成人免费高清在线观看| 91精品国产色综合久久久蜜香臀| 国产精品女同互慰在线看 | 日韩激情一区二区| 成人97人人超碰人人99| 666欧美在线视频| 综合色天天鬼久久鬼色| 精品无人区卡一卡二卡三乱码免费卡 | 欧美精品久久99| 国产精品乱子久久久久| 日韩精品色哟哟| 91啪亚洲精品| 久久免费午夜影院| 午夜国产不卡在线观看视频| 成人av在线一区二区| 久久综合精品国产一区二区三区| 亚洲色图视频网站| 国产精选一区二区三区| 欧美日精品一区视频| 国产精品女主播在线观看| 九九视频精品免费| 欧美区视频在线观看| 亚洲欧美日韩国产手机在线 | 男人操女人的视频在线观看欧美| 成人av动漫网站| 久久久99久久| 精品综合久久久久久8888| 欧美日韩大陆在线| 亚洲一区二区三区在线看| 成人高清免费观看| 欧美精品一区二区在线观看| 日韩精品免费专区| 欧美吞精做爰啪啪高潮| 亚洲蜜桃精久久久久久久| 波多野结衣中文一区| 亚洲国产精品av| 国产69精品久久777的优势| 精品奇米国产一区二区三区| 日韩影视精彩在线| 欧美精品乱码久久久久久按摩| 一区二区三区精品| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 亚洲综合在线第一页| www.色精品| 亚洲婷婷综合色高清在线| 成人午夜精品在线| 国产精品丝袜一区| 国产成人精品一区二| 精品处破学生在线二十三| 精品亚洲porn| 欧美极品少妇xxxxⅹ高跟鞋| 国产精品一区二区在线观看不卡| 欧美精品一区二区三区在线| 国产麻豆日韩欧美久久| 久久久久国产精品麻豆ai换脸| 国产一区二区在线看| 欧美国产欧美综合| 成人动漫视频在线| 亚洲综合男人的天堂| 91久久精品日日躁夜夜躁欧美| 亚洲综合丝袜美腿| 在线电影欧美成精品| 久久99蜜桃精品| 欧美国产精品一区二区| 成人av在线播放网站| 亚洲综合图片区| 日韩欧美一级在线播放| 国产精品自拍网站| **欧美大码日韩| 欧美绝品在线观看成人午夜影视| 丝袜亚洲另类丝袜在线| 欧美精品一区视频| 9i看片成人免费高清| 午夜成人免费视频| 26uuu国产在线精品一区二区| 国产精品系列在线观看| 亚洲欧美乱综合| 日韩欧美中文字幕一区| 国产成人午夜高潮毛片|