aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/phone_svn/ipc_spi/spi_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/phone_svn/ipc_spi/spi_main.c')
-rw-r--r--drivers/phone_svn/ipc_spi/spi_main.c37
1 files changed, 25 insertions, 12 deletions
diff --git a/drivers/phone_svn/ipc_spi/spi_main.c b/drivers/phone_svn/ipc_spi/spi_main.c
index 6b104fa..bb1765c 100644
--- a/drivers/phone_svn/ipc_spi/spi_main.c
+++ b/drivers/phone_svn/ipc_spi/spi_main.c
@@ -211,7 +211,6 @@ static void _start_packet_tx(void)
if (spi_data_check_tx_queue() == 0)
return;
-
/* check SUB SRDY state */
if (spi_dev_get_gpio(spi_dev_gpio_subsrdy) ==
SPI_DEV_GPIOLEVEL_HIGH) {
@@ -231,6 +230,9 @@ static void _start_packet_tx(void)
return;
}
+ if (spi_main_state == SPI_MAIN_STATE_END)
+ return;
+
/* change state SPI_MAIN_STATE_IDLE to SPI_MAIN_STATE_TX_WAIT */
spi_main_state = SPI_MAIN_STATE_TX_WAIT;
@@ -292,24 +294,37 @@ static void _start_packet_tx(void)
static void _start_packet_tx_send(void)
{
char *spi_packet_buf = NULL;
- char *spi_sync_buf = NULL;
/* change state SPI_MAIN_STATE_TX_WAIT to SPI_MAIN_STATE_TX_SENDING */
spi_main_state = SPI_MAIN_STATE_TX_SENDING;
spi_packet_buf = gspi_data_packet_buf;
- spi_sync_buf = gspi_data_sync_buf;
spi_os_memset(spi_packet_buf, 0, SPI_DEV_MAX_PACKET_SIZE);
- spi_os_memset(spi_sync_buf, 0, SPI_DEV_MAX_PACKET_SIZE);
spi_data_prepare_tx_packet(spi_packet_buf);
- if (spi_dev_send((void *)spi_packet_buf, (void *)spi_sync_buf,
+ if (spi_dev_send((void *)spi_packet_buf,
SPI_DEV_MAX_PACKET_SIZE) != 0) {
/* TODO: save failed packet */
/* back data to each queue */
SPI_OS_ERROR(("[SPI] spi_dev_send fail\n"));
- panic("[SPI] spi_dev_send\n");
+
+ spi_dev_set_gpio(spi_dev_gpio_submrdy, SPI_DEV_GPIOLEVEL_HIGH);
+
+ while (spi_dev_get_gpio(spi_dev_gpio_subsrdy) ==
+ SPI_DEV_GPIOLEVEL_LOW) {
+ };
+
+ spi_os_sleep(1);
+
+ if (spi_dev_send((void *)spi_packet_buf,
+ SPI_DEV_MAX_PACKET_SIZE) != 0) {
+ panic("[SPI] spi_dev_send\n");
+ } else {
+ SPI_OS_ERROR(("[SPI] spi_dev_send\n"));
+ }
+
+ spi_dev_set_gpio(spi_dev_gpio_submrdy, SPI_DEV_GPIOLEVEL_LOW);
}
spi_main_state = SPI_MAIN_STATE_TX_TERMINATE;
@@ -331,7 +346,6 @@ static void _start_packet_tx_send(void)
static void _start_packet_receive(void)
{
char *spi_packet_buf = NULL;
- char *spi_sync_buf = NULL;
struct spi_data_packet_header spi_receive_packet_header = {0, };
int i = 0;
@@ -344,12 +358,13 @@ static void _start_packet_receive(void)
if (get_console_suspended())
return;
- spi_main_state = SPI_MAIN_STATE_RX_WAIT;
+ if (spi_main_state == SPI_MAIN_STATE_END)
+ return;
+ spi_main_state = SPI_MAIN_STATE_RX_WAIT;
spi_dev_set_gpio(spi_dev_gpio_submrdy, SPI_DEV_GPIOLEVEL_HIGH);
-
/* check SUBSRDY state */
while (spi_dev_get_gpio(spi_dev_gpio_subsrdy) ==
SPI_DEV_GPIOLEVEL_LOW) {
@@ -384,12 +399,10 @@ static void _start_packet_receive(void)
return;
spi_packet_buf = gspi_data_packet_buf;
- spi_sync_buf = gspi_data_sync_buf;
spi_os_memset(spi_packet_buf, 0, SPI_DEV_MAX_PACKET_SIZE);
- spi_os_memset(spi_sync_buf, 0, SPI_DEV_MAX_PACKET_SIZE);
- if (spi_dev_receive((void *)spi_sync_buf, (void *)spi_packet_buf,
+ if (spi_dev_receive((void *)spi_packet_buf,
SPI_DEV_MAX_PACKET_SIZE) == 0) {
/* parsing SPI packet */
spi_os_memcpy(&spi_receive_packet_header, spi_packet_buf,