|
@@ -26,6 +26,7 @@
|
|
|
|
|
|
#include <linux/io.h>
|
|
|
#include <linux/gpio.h>
|
|
|
+#include <linux/pinctrl/consumer.h>
|
|
|
|
|
|
/* SPI register offsets */
|
|
|
#define SPI_CR 0x0000
|
|
@@ -1087,14 +1088,6 @@ static int atmel_spi_one_transfer(struct spi_master *master,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if (xfer->bits_per_word > 8) {
|
|
|
- if (xfer->len % 2) {
|
|
|
- dev_dbg(&spi->dev,
|
|
|
- "buffer len should be 16 bits aligned\n");
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
/*
|
|
|
* DMA map early, for performance (empties dcache ASAP) and
|
|
|
* better fault reporting.
|
|
@@ -1221,9 +1214,6 @@ static int atmel_spi_transfer_one_message(struct spi_master *master,
|
|
|
dev_dbg(&spi->dev, "new message %p submitted for %s\n",
|
|
|
msg, dev_name(&spi->dev));
|
|
|
|
|
|
- if (unlikely(list_empty(&msg->transfers)))
|
|
|
- return -EINVAL;
|
|
|
-
|
|
|
atmel_spi_lock(as);
|
|
|
cs_activate(as, spi);
|
|
|
|
|
@@ -1244,10 +1234,10 @@ static int atmel_spi_transfer_one_message(struct spi_master *master,
|
|
|
|
|
|
list_for_each_entry(xfer, &msg->transfers, transfer_list) {
|
|
|
dev_dbg(&spi->dev,
|
|
|
- " xfer %p: len %u tx %p/%08x rx %p/%08x\n",
|
|
|
+ " xfer %p: len %u tx %p/%pad rx %p/%pad\n",
|
|
|
xfer, xfer->len,
|
|
|
- xfer->tx_buf, xfer->tx_dma,
|
|
|
- xfer->rx_buf, xfer->rx_dma);
|
|
|
+ xfer->tx_buf, &xfer->tx_dma,
|
|
|
+ xfer->rx_buf, &xfer->rx_dma);
|
|
|
}
|
|
|
|
|
|
msg_done:
|
|
@@ -1303,6 +1293,9 @@ static int atmel_spi_probe(struct platform_device *pdev)
|
|
|
struct spi_master *master;
|
|
|
struct atmel_spi *as;
|
|
|
|
|
|
+ /* Select default pin state */
|
|
|
+ pinctrl_pm_select_default_state(&pdev->dev);
|
|
|
+
|
|
|
regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
|
if (!regs)
|
|
|
return -ENXIO;
|
|
@@ -1465,6 +1458,9 @@ static int atmel_spi_suspend(struct device *dev)
|
|
|
}
|
|
|
|
|
|
clk_disable_unprepare(as->clk);
|
|
|
+
|
|
|
+ pinctrl_pm_select_sleep_state(dev);
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -1474,6 +1470,8 @@ static int atmel_spi_resume(struct device *dev)
|
|
|
struct atmel_spi *as = spi_master_get_devdata(master);
|
|
|
int ret;
|
|
|
|
|
|
+ pinctrl_pm_select_default_state(dev);
|
|
|
+
|
|
|
clk_prepare_enable(as->clk);
|
|
|
|
|
|
/* Start the queue running */
|