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; }
/* * 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; }
/* * 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; }
/* * 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; }