|
@@ -113,7 +113,7 @@ static int terminate_request(struct cros_ec_device *ec_dev)
|
|
|
trans.delay_usecs = ec_spi->end_of_msg_delay;
|
|
|
spi_message_add_tail(&trans, &msg);
|
|
|
|
|
|
- ret = spi_sync(ec_spi->spi, &msg);
|
|
|
+ ret = spi_sync_locked(ec_spi->spi, &msg);
|
|
|
|
|
|
/* Reset end-of-response timer */
|
|
|
ec_spi->last_transfer_ns = ktime_get_ns();
|
|
@@ -147,7 +147,7 @@ static int receive_n_bytes(struct cros_ec_device *ec_dev, u8 *buf, int n)
|
|
|
|
|
|
spi_message_init(&msg);
|
|
|
spi_message_add_tail(&trans, &msg);
|
|
|
- ret = spi_sync(ec_spi->spi, &msg);
|
|
|
+ ret = spi_sync_locked(ec_spi->spi, &msg);
|
|
|
if (ret < 0)
|
|
|
dev_err(ec_dev->dev, "spi transfer failed: %d\n", ret);
|
|
|
|
|
@@ -391,10 +391,10 @@ static int cros_ec_pkt_xfer_spi(struct cros_ec_device *ec_dev,
|
|
|
}
|
|
|
|
|
|
rx_buf = kzalloc(len, GFP_KERNEL);
|
|
|
- if (!rx_buf) {
|
|
|
- ret = -ENOMEM;
|
|
|
- goto exit;
|
|
|
- }
|
|
|
+ if (!rx_buf)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ spi_bus_lock(ec_spi->spi->master);
|
|
|
|
|
|
/*
|
|
|
* Leave a gap between CS assertion and clocking of data to allow the
|
|
@@ -414,7 +414,7 @@ static int cros_ec_pkt_xfer_spi(struct cros_ec_device *ec_dev,
|
|
|
trans.len = len;
|
|
|
trans.cs_change = 1;
|
|
|
spi_message_add_tail(&trans, &msg);
|
|
|
- ret = spi_sync(ec_spi->spi, &msg);
|
|
|
+ ret = spi_sync_locked(ec_spi->spi, &msg);
|
|
|
|
|
|
/* Get the response */
|
|
|
if (!ret) {
|
|
@@ -440,6 +440,9 @@ static int cros_ec_pkt_xfer_spi(struct cros_ec_device *ec_dev,
|
|
|
}
|
|
|
|
|
|
final_ret = terminate_request(ec_dev);
|
|
|
+
|
|
|
+ spi_bus_unlock(ec_spi->spi->master);
|
|
|
+
|
|
|
if (!ret)
|
|
|
ret = final_ret;
|
|
|
if (ret < 0)
|
|
@@ -520,10 +523,10 @@ static int cros_ec_cmd_xfer_spi(struct cros_ec_device *ec_dev,
|
|
|
}
|
|
|
|
|
|
rx_buf = kzalloc(len, GFP_KERNEL);
|
|
|
- if (!rx_buf) {
|
|
|
- ret = -ENOMEM;
|
|
|
- goto exit;
|
|
|
- }
|
|
|
+ if (!rx_buf)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ spi_bus_lock(ec_spi->spi->master);
|
|
|
|
|
|
/* Transmit phase - send our message */
|
|
|
debug_packet(ec_dev->dev, "out", ec_dev->dout, len);
|
|
@@ -534,7 +537,7 @@ static int cros_ec_cmd_xfer_spi(struct cros_ec_device *ec_dev,
|
|
|
trans.cs_change = 1;
|
|
|
spi_message_init(&msg);
|
|
|
spi_message_add_tail(&trans, &msg);
|
|
|
- ret = spi_sync(ec_spi->spi, &msg);
|
|
|
+ ret = spi_sync_locked(ec_spi->spi, &msg);
|
|
|
|
|
|
/* Get the response */
|
|
|
if (!ret) {
|
|
@@ -560,6 +563,9 @@ static int cros_ec_cmd_xfer_spi(struct cros_ec_device *ec_dev,
|
|
|
}
|
|
|
|
|
|
final_ret = terminate_request(ec_dev);
|
|
|
+
|
|
|
+ spi_bus_unlock(ec_spi->spi->master);
|
|
|
+
|
|
|
if (!ret)
|
|
|
ret = final_ret;
|
|
|
if (ret < 0)
|