INNO_RET INNO_SPI_Read_Bytes_NoCS(unsigned char *buffer, int len)       
{
	INNO_RET ret =INNO_NO_ERROR;
	unsigned char *tx_buf=NULL, *rx_buf=NULL;

#ifdef MT6589_CMMB_SPI_CONFIG
	INNO_SPI_Mode(1);
#endif

	if(len>CMMB_SPI_INTERFACE_MAX_PKT_LENGTH_PER_TIMES){	         
              tx_buf = NULL;
              rx_buf = buffer;
  		ret = INNODev_xfer(tx_buf,rx_buf, len);
	}
	else{                                                                        //buffer may not be physical continue,so use buffer cmmb_spi_src_buffer_all
		if(cmmb_spi_src_buffer_all==NULL)
			return INNO_GENERAL_ERROR;
              tx_buf = NULL;
              rx_buf = cmmb_spi_src_buffer_all;
		ret = INNODev_xfer(tx_buf,rx_buf, len);
		if(ret == INNO_NO_ERROR)
         		memcpy(buffer,cmmb_spi_src_buffer_all,len);             
	}	  	
       return ret;
}
/*
 * Write multi bytes to SPI bus without touching CS
 *
 * Parameter:
 *		buffer <in>	: the buffer point to store data which will be write to spi bus
 *		len <in>		: how many bytes will be write by SPI 
 *
 */
INNO_RET INNO_SPI_Write_Bytes_NoCS(unsigned char *buffer, int len)
{
	INNO_RET ret = INNO_NO_ERROR;
	unsigned char* tx_buf=NULL, *rx_buf=NULL;
#ifdef MT6589_CMMB_SPI_CONFIG
	INNO_SPI_Mode(0);
#endif

#ifdef MT6589_CMMB_SPI_CONFIG
	tx_buf = buffer;
	if( len > MT6589_CMMB_SPI_TX_MAX_PKT_LENGTH_PER_TIMES )
	{
		int i;
		int pkt_cnt = len / MT6589_CMMB_SPI_TX_MAX_PKT_LENGTH_PER_TIMES;
		int remainder = len % MT6589_CMMB_SPI_TX_MAX_PKT_LENGTH_PER_TIMES;
		for(i=0; i < pkt_cnt; i++)
		{
			ret += INNODev_xfer(tx_buf,rx_buf, MT6589_CMMB_SPI_TX_MAX_PKT_LENGTH_PER_TIMES);
			tx_buf += MT6589_CMMB_SPI_TX_MAX_PKT_LENGTH_PER_TIMES;		
		}
		if(remainder)
		{
			ret += INNODev_xfer(tx_buf,rx_buf, remainder);
		}
	}
	else
	ret = INNODev_xfer(tx_buf,rx_buf, len);
#else
	if(len>CMMB_SPI_INTERFACE_MAX_PKT_LENGTH_PER_TIMES){	
             tx_buf = buffer;
             rx_buf =NULL;
	}
	else{
		if(cmmb_spi_src_buffer_all==NULL)
			return INNO_GENERAL_ERROR;
		if(buffer!=cmmb_spi_src_buffer_all)
			memcpy(cmmb_spi_src_buffer_all,buffer,len);
             tx_buf = cmmb_spi_src_buffer_all;
             rx_buf =NULL;
	}
	ret = INNODev_xfer(tx_buf,rx_buf, len);
#endif
	return ret;
}
Exemple #3
0
/*
 * Read one byte from SPI bus without touching CS
 *
 * Parameter:
 *		data <out>		: the data read from SPI bus 
 *
 */
INNO_RET INNO_SPI_Read_One_Byte_NoCS(unsigned char *data)
{    	
	INNO_RET ret=INNO_NO_ERROR;
	if(cmmb_spi_src_buffer_all==NULL)
			return INNO_GENERAL_ERROR;
	cmmb_spi_src_buffer_all[0] =0;
	ret = INNODev_xfer(NULL,cmmb_spi_src_buffer_all, 1);
	*data=cmmb_spi_src_buffer_all[0];
	return ret;
}
Exemple #4
0
/*
 * Write one byte to SPI bus without touching CS
 *
 * Parameter:
 *		data <in>		: the data write to SPI bus
 *
 */
INNO_RET INNO_SPI_Write_One_Byte_NoCS(unsigned char data)
{  
	INNO_RET ret= INNO_NO_ERROR;       
	if(cmmb_spi_src_buffer_all==NULL)
			return INNO_GENERAL_ERROR;
	cmmb_spi_src_buffer_all[0]=data;

	ret = INNODev_xfer(cmmb_spi_src_buffer_all,NULL, 1);
	return ret;
}
/*
 * Write one byte to SPI bus without touching CS
 *
 * Parameter:
 *		data <in>		: the data write to SPI bus
 *
 */
INNO_RET INNO_SPI_Write_One_Byte_NoCS(unsigned char data)
{  
	INNO_RET ret= INNO_NO_ERROR;       
	if(cmmb_spi_src_buffer_all==NULL)
			return INNO_GENERAL_ERROR;
	cmmb_spi_src_buffer_all[0]=data;

#ifdef MT6589_CMMB_SPI_CONFIG
	INNO_SPI_Mode(0);
#endif

	ret = INNODev_xfer(cmmb_spi_src_buffer_all,NULL, 1);
	return ret;
}
/*
 * Read one byte from SPI bus without touching CS
 *
 * Parameter:
 *		data <out>		: the data read from SPI bus 
 *
 */
INNO_RET INNO_SPI_Read_One_Byte_NoCS(unsigned char *data)
{    	
	INNO_RET ret=INNO_NO_ERROR;
	if(cmmb_spi_src_buffer_all==NULL)
			return INNO_GENERAL_ERROR;
	cmmb_spi_src_buffer_all[0] =0;
	
#ifdef MT6589_CMMB_SPI_CONFIG
	INNO_SPI_Mode(1);
#endif

	ret = INNODev_xfer(NULL,cmmb_spi_src_buffer_all, 1);
	*data=cmmb_spi_src_buffer_all[0];
	return ret;
}
Exemple #7
0
/*
 * Write multi bytes to SPI bus without touching CS
 *
 * Parameter:
 *		buffer <in>	: the buffer point to store data which will be write to spi bus
 *		len <in>		: how many bytes will be write by SPI 
 *
 */
INNO_RET INNO_SPI_Write_Bytes_NoCS(unsigned char *buffer, int len)
{
	INNO_RET ret = INNO_NO_ERROR;
       unsigned char* tx_buf=NULL, *rx_buf=NULL;
	if(len>CMMB_SPI_INTERFACE_MAX_PKT_LENGTH_PER_TIMES){	
             tx_buf = buffer;
             rx_buf =NULL;
	}
	else{
		if(cmmb_spi_src_buffer_all==NULL)
			return INNO_GENERAL_ERROR;
		if(buffer!=cmmb_spi_src_buffer_all)
			memcpy(cmmb_spi_src_buffer_all,buffer,len);
             tx_buf = cmmb_spi_src_buffer_all;
             rx_buf =NULL;
	}	  	
	ret = INNODev_xfer(tx_buf,rx_buf, len);
	return ret;
}