#include <linux/io.h>
#include <linux/gpio.h>
++ ++++++#include <linux/pinctrl/consumer.h>
/* SPI register offsets */
#define SPI_CR 0x0000
}
}
-- ------ 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.
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);
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:
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;
{
struct spi_master *master = dev_get_drvdata(dev);
struct atmel_spi *as = spi_master_get_devdata(master);
++++++++ int ret;
++++++++
++++++++ /* Stop the queue running */
++++++++ ret = spi_master_suspend(master);
++++++++ if (ret) {
++++++++ dev_warn(dev, "cannot suspend master\n");
++++++++ return ret;
++++++++ }
clk_disable_unprepare(as->clk);
++ ++++++
++ ++++++ pinctrl_pm_select_sleep_state(dev);
++ ++++++
return 0;
}
{
struct spi_master *master = dev_get_drvdata(dev);
struct atmel_spi *as = spi_master_get_devdata(master);
++++++++ int ret;
+ ++++++
++ ++++++ pinctrl_pm_select_default_state(dev);
+
clk_prepare_enable(as->clk);
-------- return 0;
++++++++
++++++++ /* Start the queue running */
++++++++ ret = spi_master_resume(master);
++++++++ if (ret)
++++++++ dev_err(dev, "problem starting queue (%d)\n", ret);
++++++++
++++++++ return ret;
}
static SIMPLE_DEV_PM_OPS(atmel_spi_pm_ops, atmel_spi_suspend, atmel_spi_resume);