Merge remote-tracking branch 'spi/topic/atmel' into spi-next
This commit is contained in:
commit
2ef2e60d2f
11 changed files with 71 additions and 73 deletions
|
@ -170,18 +170,18 @@
|
|||
/* Bit manipulation macros */
|
||||
#define SPI_BIT(name) \
|
||||
(1 << SPI_##name##_OFFSET)
|
||||
#define SPI_BF(name,value) \
|
||||
#define SPI_BF(name, value) \
|
||||
(((value) & ((1 << SPI_##name##_SIZE) - 1)) << SPI_##name##_OFFSET)
|
||||
#define SPI_BFEXT(name,value) \
|
||||
#define SPI_BFEXT(name, value) \
|
||||
(((value) >> SPI_##name##_OFFSET) & ((1 << SPI_##name##_SIZE) - 1))
|
||||
#define SPI_BFINS(name,value,old) \
|
||||
( ((old) & ~(((1 << SPI_##name##_SIZE) - 1) << SPI_##name##_OFFSET)) \
|
||||
| SPI_BF(name,value))
|
||||
#define SPI_BFINS(name, value, old) \
|
||||
(((old) & ~(((1 << SPI_##name##_SIZE) - 1) << SPI_##name##_OFFSET)) \
|
||||
| SPI_BF(name, value))
|
||||
|
||||
/* Register access macros */
|
||||
#define spi_readl(port,reg) \
|
||||
#define spi_readl(port, reg) \
|
||||
__raw_readl((port)->regs + SPI_##reg)
|
||||
#define spi_writel(port,reg,value) \
|
||||
#define spi_writel(port, reg, value) \
|
||||
__raw_writel((value), (port)->regs + SPI_##reg)
|
||||
|
||||
/* use PIO for small transfers, avoiding DMA setup/teardown overhead and
|
||||
|
@ -1401,8 +1401,8 @@ static int atmel_spi_transfer(struct spi_device *spi, struct spi_message *msg)
|
|||
asd = spi->controller_state;
|
||||
bits = (asd->csr >> 4) & 0xf;
|
||||
if (bits != xfer->bits_per_word - 8) {
|
||||
dev_dbg(&spi->dev, "you can't yet change "
|
||||
"bits_per_word in transfers\n");
|
||||
dev_dbg(&spi->dev,
|
||||
"you can't yet change bits_per_word in transfers\n");
|
||||
return -ENOPROTOOPT;
|
||||
}
|
||||
}
|
||||
|
@ -1516,7 +1516,7 @@ static int atmel_spi_probe(struct platform_device *pdev)
|
|||
|
||||
/* setup spi core then atmel-specific driver state */
|
||||
ret = -ENOMEM;
|
||||
master = spi_alloc_master(&pdev->dev, sizeof *as);
|
||||
master = spi_alloc_master(&pdev->dev, sizeof(*as));
|
||||
if (!master)
|
||||
goto out_free;
|
||||
|
||||
|
@ -1546,9 +1546,11 @@ static int atmel_spi_probe(struct platform_device *pdev)
|
|||
INIT_LIST_HEAD(&as->queue);
|
||||
|
||||
as->pdev = pdev;
|
||||
as->regs = ioremap(regs->start, resource_size(regs));
|
||||
if (!as->regs)
|
||||
as->regs = devm_ioremap_resource(&pdev->dev, regs);
|
||||
if (IS_ERR(as->regs)) {
|
||||
ret = PTR_ERR(as->regs);
|
||||
goto out_free_buffer;
|
||||
}
|
||||
as->phybase = regs->start;
|
||||
as->irq = irq;
|
||||
as->clk = clk;
|
||||
|
@ -1617,7 +1619,6 @@ out_free_dma:
|
|||
out_free_irq:
|
||||
free_irq(irq, master);
|
||||
out_unmap_regs:
|
||||
iounmap(as->regs);
|
||||
out_free_buffer:
|
||||
if (!as->use_pdc)
|
||||
tasklet_kill(&as->tasklet);
|
||||
|
@ -1669,36 +1670,36 @@ static int atmel_spi_remove(struct platform_device *pdev)
|
|||
clk_disable_unprepare(as->clk);
|
||||
clk_put(as->clk);
|
||||
free_irq(as->irq, master);
|
||||
iounmap(as->regs);
|
||||
|
||||
spi_unregister_master(master);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
static int atmel_spi_suspend(struct platform_device *pdev, pm_message_t mesg)
|
||||
#ifdef CONFIG_PM_SLEEP
|
||||
static int atmel_spi_suspend(struct device *dev)
|
||||
{
|
||||
struct spi_master *master = platform_get_drvdata(pdev);
|
||||
struct spi_master *master = dev_get_drvdata(dev);
|
||||
struct atmel_spi *as = spi_master_get_devdata(master);
|
||||
|
||||
clk_disable_unprepare(as->clk);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int atmel_spi_resume(struct platform_device *pdev)
|
||||
static int atmel_spi_resume(struct device *dev)
|
||||
{
|
||||
struct spi_master *master = platform_get_drvdata(pdev);
|
||||
struct spi_master *master = dev_get_drvdata(dev);
|
||||
struct atmel_spi *as = spi_master_get_devdata(master);
|
||||
|
||||
return clk_prepare_enable(as->clk);
|
||||
clk_prepare_enable(as->clk);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static SIMPLE_DEV_PM_OPS(atmel_spi_pm_ops, atmel_spi_suspend, atmel_spi_resume);
|
||||
|
||||
#define ATMEL_SPI_PM_OPS (&atmel_spi_pm_ops)
|
||||
#else
|
||||
#define atmel_spi_suspend NULL
|
||||
#define atmel_spi_resume NULL
|
||||
#define ATMEL_SPI_PM_OPS NULL
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_OF)
|
||||
|
@ -1714,10 +1715,9 @@ static struct platform_driver atmel_spi_driver = {
|
|||
.driver = {
|
||||
.name = "atmel_spi",
|
||||
.owner = THIS_MODULE,
|
||||
.pm = ATMEL_SPI_PM_OPS,
|
||||
.of_match_table = of_match_ptr(atmel_spi_dt_ids),
|
||||
},
|
||||
.suspend = atmel_spi_suspend,
|
||||
.resume = atmel_spi_resume,
|
||||
.probe = atmel_spi_probe,
|
||||
.remove = atmel_spi_remove,
|
||||
};
|
||||
|
|
|
@ -592,7 +592,7 @@ bfin_sport_spi_setup(struct spi_device *spi)
|
|||
*/
|
||||
if (chip_info->ctl_reg || chip_info->enable_dma) {
|
||||
ret = -EINVAL;
|
||||
dev_err(&spi->dev, "don't set ctl_reg/enable_dma fields");
|
||||
dev_err(&spi->dev, "don't set ctl_reg/enable_dma fields\n");
|
||||
goto error;
|
||||
}
|
||||
chip->cs_chg_udelay = chip_info->cs_chg_udelay;
|
||||
|
|
|
@ -524,7 +524,7 @@ static irqreturn_t bfin_spi_dma_irq_handler(int irq, void *dev_id)
|
|||
timeout = jiffies + HZ;
|
||||
while (!(bfin_read(&drv_data->regs->stat) & BIT_STAT_SPIF))
|
||||
if (!time_before(jiffies, timeout)) {
|
||||
dev_warn(&drv_data->pdev->dev, "timeout waiting for SPIF");
|
||||
dev_warn(&drv_data->pdev->dev, "timeout waiting for SPIF\n");
|
||||
break;
|
||||
} else
|
||||
cpu_relax();
|
||||
|
@ -913,8 +913,9 @@ static void bfin_spi_pump_messages(struct work_struct *work)
|
|||
drv_data->cur_transfer = list_entry(drv_data->cur_msg->transfers.next,
|
||||
struct spi_transfer, transfer_list);
|
||||
|
||||
dev_dbg(&drv_data->pdev->dev, "got a message to pump, "
|
||||
"state is set to: baud %d, flag 0x%x, ctl 0x%x\n",
|
||||
dev_dbg(&drv_data->pdev->dev,
|
||||
"got a message to pump, state is set to: baud "
|
||||
"%d, flag 0x%x, ctl 0x%x\n",
|
||||
drv_data->cur_chip->baud, drv_data->cur_chip->flag,
|
||||
drv_data->cur_chip->ctl_reg);
|
||||
|
||||
|
@ -1013,8 +1014,8 @@ static int bfin_spi_setup(struct spi_device *spi)
|
|||
* but let's assume (for now) they do.
|
||||
*/
|
||||
if (chip_info->ctl_reg & ~bfin_ctl_reg) {
|
||||
dev_err(&spi->dev, "do not set bits in ctl_reg "
|
||||
"that the SPI framework manages\n");
|
||||
dev_err(&spi->dev,
|
||||
"do not set bits in ctl_reg that the SPI framework manages\n");
|
||||
goto error;
|
||||
}
|
||||
chip->enable_dma = chip_info->enable_dma != 0
|
||||
|
@ -1050,17 +1051,17 @@ static int bfin_spi_setup(struct spi_device *spi)
|
|||
chip->chip_select_num = spi->chip_select;
|
||||
if (chip->chip_select_num < MAX_CTRL_CS) {
|
||||
if (!(spi->mode & SPI_CPHA))
|
||||
dev_warn(&spi->dev, "Warning: SPI CPHA not set:"
|
||||
" Slave Select not under software control!\n"
|
||||
" See Documentation/blackfin/bfin-spi-notes.txt");
|
||||
dev_warn(&spi->dev,
|
||||
"Warning: SPI CPHA not set: Slave Select not under software control!\n"
|
||||
"See Documentation/blackfin/bfin-spi-notes.txt\n");
|
||||
|
||||
chip->flag = (1 << spi->chip_select) << 8;
|
||||
} else
|
||||
chip->cs_gpio = chip->chip_select_num - MAX_CTRL_CS;
|
||||
|
||||
if (chip->enable_dma && chip->pio_interrupt) {
|
||||
dev_err(&spi->dev, "enable_dma is set, "
|
||||
"do not set pio_interrupt\n");
|
||||
dev_err(&spi->dev,
|
||||
"enable_dma is set, do not set pio_interrupt\n");
|
||||
goto error;
|
||||
}
|
||||
/*
|
||||
|
|
|
@ -870,8 +870,8 @@ void dw_spi_remove_host(struct dw_spi *dws)
|
|||
/* Remove the queue */
|
||||
status = destroy_queue(dws);
|
||||
if (status != 0)
|
||||
dev_err(&dws->master->dev, "dw_spi_remove: workqueue will not "
|
||||
"complete, message memory not freed\n");
|
||||
dev_err(&dws->master->dev,
|
||||
"dw_spi_remove: workqueue will not complete, message memory not freed\n");
|
||||
|
||||
if (dws->dma_ops && dws->dma_ops->dma_exit)
|
||||
dws->dma_ops->dma_exit(dws);
|
||||
|
|
|
@ -330,7 +330,7 @@ static int ep93xx_spi_chip_setup(const struct ep93xx_spi *espi,
|
|||
|
||||
dev_dbg(&espi->pdev->dev, "setup: mode %d, cpsr %d, scr %d, dss %d\n",
|
||||
chip->spi->mode, div_cpsr, div_scr, dss);
|
||||
dev_dbg(&espi->pdev->dev, "setup: cr0 %#x", cr0);
|
||||
dev_dbg(&espi->pdev->dev, "setup: cr0 %#x\n", cr0);
|
||||
|
||||
ep93xx_spi_write_u8(espi, SSPCPSR, div_cpsr);
|
||||
ep93xx_spi_write_u16(espi, SSPCR0, cr0);
|
||||
|
@ -509,7 +509,7 @@ ep93xx_spi_dma_prepare(struct ep93xx_spi *espi, enum dma_transfer_direction dir)
|
|||
}
|
||||
|
||||
if (WARN_ON(len)) {
|
||||
dev_warn(&espi->pdev->dev, "len = %zu expected 0!", len);
|
||||
dev_warn(&espi->pdev->dev, "len = %zu expected 0!\n", len);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
|
|
|
@ -299,7 +299,7 @@ int fsl_spi_cpm_init(struct mpc8xxx_spi *mspi)
|
|||
|
||||
switch (mspi->subblock) {
|
||||
default:
|
||||
dev_warn(dev, "cell-index unspecified, assuming SPI1");
|
||||
dev_warn(dev, "cell-index unspecified, assuming SPI1\n");
|
||||
/* fall through */
|
||||
case 0:
|
||||
mspi->subblock = QE_CR_SUBBLOCK_SPI1;
|
||||
|
|
|
@ -289,8 +289,8 @@ static void fsl_espi_do_trans(struct spi_message *m,
|
|||
if ((first->bits_per_word != t->bits_per_word) ||
|
||||
(first->speed_hz != t->speed_hz)) {
|
||||
espi_trans->status = -EINVAL;
|
||||
dev_err(mspi->dev, "bits_per_word/speed_hz should be"
|
||||
" same for the same SPI transfer\n");
|
||||
dev_err(mspi->dev,
|
||||
"bits_per_word/speed_hz should be same for the same SPI transfer\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -383,8 +383,8 @@ static int mpc52xx_psc_spi_do_probe(struct device *dev, u32 regaddr,
|
|||
|
||||
mps->irq = irq;
|
||||
if (pdata == NULL) {
|
||||
dev_warn(dev, "probe called without platform data, no "
|
||||
"cs_control function will be called\n");
|
||||
dev_warn(dev,
|
||||
"probe called without platform data, no cs_control function will be called\n");
|
||||
mps->cs_control = NULL;
|
||||
mps->sysclk = 0;
|
||||
master->bus_num = bus_num;
|
||||
|
|
|
@ -504,7 +504,7 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer,
|
|||
((u32 *)xfer->rx_buf)[elements++] = w;
|
||||
} else {
|
||||
int bytes_per_word = mcspi_bytes_per_word(word_len);
|
||||
dev_err(&spi->dev, "DMA RX penultimate word empty");
|
||||
dev_err(&spi->dev, "DMA RX penultimate word empty\n");
|
||||
count -= (bytes_per_word << 1);
|
||||
omap2_mcspi_set_enable(spi, 1);
|
||||
return count;
|
||||
|
@ -522,7 +522,7 @@ omap2_mcspi_rx_dma(struct spi_device *spi, struct spi_transfer *xfer,
|
|||
else /* word_len <= 32 */
|
||||
((u32 *)xfer->rx_buf)[elements] = w;
|
||||
} else {
|
||||
dev_err(&spi->dev, "DMA RX last word empty");
|
||||
dev_err(&spi->dev, "DMA RX last word empty\n");
|
||||
count -= mcspi_bytes_per_word(word_len);
|
||||
}
|
||||
omap2_mcspi_set_enable(spi, 1);
|
||||
|
|
|
@ -573,8 +573,8 @@ static irqreturn_t ssp_int(int irq, void *dev_id)
|
|||
write_SSTO(0, reg);
|
||||
write_SSSR_CS(drv_data, drv_data->clear_sr);
|
||||
|
||||
dev_err(&drv_data->pdev->dev, "bad message state "
|
||||
"in interrupt handler\n");
|
||||
dev_err(&drv_data->pdev->dev,
|
||||
"bad message state in interrupt handler\n");
|
||||
|
||||
/* Never fail */
|
||||
return IRQ_HANDLED;
|
||||
|
@ -651,8 +651,8 @@ static void pump_transfers(unsigned long data)
|
|||
if (message->is_dma_mapped
|
||||
|| transfer->rx_dma || transfer->tx_dma) {
|
||||
dev_err(&drv_data->pdev->dev,
|
||||
"pump_transfers: mapped transfer length "
|
||||
"of %u is greater than %d\n",
|
||||
"pump_transfers: mapped transfer length of "
|
||||
"%u is greater than %d\n",
|
||||
transfer->len, MAX_DMA_LEN);
|
||||
message->status = -EINVAL;
|
||||
giveback(drv_data);
|
||||
|
@ -660,11 +660,10 @@ static void pump_transfers(unsigned long data)
|
|||
}
|
||||
|
||||
/* warn ... we force this to PIO mode */
|
||||
if (printk_ratelimit())
|
||||
dev_warn(&message->spi->dev, "pump_transfers: "
|
||||
"DMA disabled for transfer length %ld "
|
||||
"greater than %d\n",
|
||||
(long)drv_data->len, MAX_DMA_LEN);
|
||||
dev_warn_ratelimited(&message->spi->dev,
|
||||
"pump_transfers: DMA disabled for transfer length %ld "
|
||||
"greater than %d\n",
|
||||
(long)drv_data->len, MAX_DMA_LEN);
|
||||
}
|
||||
|
||||
/* Setup the transfer state based on the type of transfer */
|
||||
|
@ -726,11 +725,8 @@ static void pump_transfers(unsigned long data)
|
|||
message->spi,
|
||||
bits, &dma_burst,
|
||||
&dma_thresh))
|
||||
if (printk_ratelimit())
|
||||
dev_warn(&message->spi->dev,
|
||||
"pump_transfers: "
|
||||
"DMA burst size reduced to "
|
||||
"match bits_per_word\n");
|
||||
dev_warn_ratelimited(&message->spi->dev,
|
||||
"pump_transfers: DMA burst size reduced to match bits_per_word\n");
|
||||
}
|
||||
|
||||
cr0 = clk_div
|
||||
|
@ -854,8 +850,8 @@ static int setup_cs(struct spi_device *spi, struct chip_data *chip,
|
|||
if (gpio_is_valid(chip_info->gpio_cs)) {
|
||||
err = gpio_request(chip_info->gpio_cs, "SPI_CS");
|
||||
if (err) {
|
||||
dev_err(&spi->dev, "failed to request chip select "
|
||||
"GPIO%d\n", chip_info->gpio_cs);
|
||||
dev_err(&spi->dev, "failed to request chip select GPIO%d\n",
|
||||
chip_info->gpio_cs);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -899,8 +895,8 @@ static int setup(struct spi_device *spi)
|
|||
|
||||
if (drv_data->ssp_type == CE4100_SSP) {
|
||||
if (spi->chip_select > 4) {
|
||||
dev_err(&spi->dev, "failed setup: "
|
||||
"cs number must not be > 4.\n");
|
||||
dev_err(&spi->dev,
|
||||
"failed setup: cs number must not be > 4.\n");
|
||||
kfree(chip);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -956,8 +952,8 @@ static int setup(struct spi_device *spi)
|
|||
spi->bits_per_word,
|
||||
&chip->dma_burst_size,
|
||||
&chip->dma_threshold)) {
|
||||
dev_warn(&spi->dev, "in setup: DMA burst size reduced "
|
||||
"to match bits_per_word\n");
|
||||
dev_warn(&spi->dev,
|
||||
"in setup: DMA burst size reduced to match bits_per_word\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -506,8 +506,8 @@ static int pch_spi_transfer(struct spi_device *pspi, struct spi_message *pmsg)
|
|||
goto err_out;
|
||||
}
|
||||
|
||||
dev_dbg(&pspi->dev, "%s Transfer List not empty. "
|
||||
"Transfer Speed is set.\n", __func__);
|
||||
dev_dbg(&pspi->dev,
|
||||
"%s Transfer List not empty. Transfer Speed is set.\n", __func__);
|
||||
|
||||
spin_lock_irqsave(&data->lock, flags);
|
||||
/* validate Tx/Rx buffers and Transfer length */
|
||||
|
@ -526,8 +526,9 @@ static int pch_spi_transfer(struct spi_device *pspi, struct spi_message *pmsg)
|
|||
goto err_return_spinlock;
|
||||
}
|
||||
|
||||
dev_dbg(&pspi->dev, "%s Tx/Rx buffer valid. Transfer length"
|
||||
" valid\n", __func__);
|
||||
dev_dbg(&pspi->dev,
|
||||
"%s Tx/Rx buffer valid. Transfer length valid\n",
|
||||
__func__);
|
||||
|
||||
/* if baud rate has been specified validate the same */
|
||||
if (transfer->speed_hz > PCH_MAX_BAUDRATE)
|
||||
|
@ -1181,8 +1182,8 @@ static void pch_spi_process_messages(struct work_struct *pwork)
|
|||
spin_lock(&data->lock);
|
||||
/* check if suspend has been initiated;if yes flush queue */
|
||||
if (data->board_dat->suspend_sts || (data->status == STATUS_EXITING)) {
|
||||
dev_dbg(&data->master->dev, "%s suspend/remove initiated,"
|
||||
"flushing queue\n", __func__);
|
||||
dev_dbg(&data->master->dev,
|
||||
"%s suspend/remove initiated, flushing queue\n", __func__);
|
||||
list_for_each_entry_safe(pmsg, tmp, data->queue.next, queue) {
|
||||
pmsg->status = -EIO;
|
||||
|
||||
|
|
Loading…
Reference in a new issue