Skip to content

Commit 26f30e3

Browse files
committed
spi: topcliff-pch: Use core message validation
The topcliff-pch driver requires TX and RX buffers on all transfers, open coding checks for this. Remove those open coded checks and instead rely on the core functionality, which has the added bonus that it will fix up any transfers submitted by drivers as needed rather than erroring out. Signed-off-by: Mark Brown <broonie@kernel.org> Link: https://lore.kernel.org/r/20220615174138.4060912-1-broonie@kernel.org
1 parent 2081ad1 commit 26f30e3

File tree

1 file changed

+1
-29
lines changed

1 file changed

+1
-29
lines changed

drivers/spi/spi-topcliff-pch.c

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -455,35 +455,10 @@ static void pch_spi_reset(struct spi_master *master)
455455

456456
static int pch_spi_transfer(struct spi_device *pspi, struct spi_message *pmsg)
457457
{
458-
459-
struct spi_transfer *transfer;
460458
struct pch_spi_data *data = spi_master_get_devdata(pspi->master);
461459
int retval;
462460
unsigned long flags;
463461

464-
spin_lock_irqsave(&data->lock, flags);
465-
/* validate Tx/Rx buffers and Transfer length */
466-
list_for_each_entry(transfer, &pmsg->transfers, transfer_list) {
467-
if (!transfer->tx_buf && !transfer->rx_buf) {
468-
dev_err(&pspi->dev,
469-
"%s Tx and Rx buffer NULL\n", __func__);
470-
retval = -EINVAL;
471-
goto err_return_spinlock;
472-
}
473-
474-
if (!transfer->len) {
475-
dev_err(&pspi->dev, "%s Transfer length invalid\n",
476-
__func__);
477-
retval = -EINVAL;
478-
goto err_return_spinlock;
479-
}
480-
481-
dev_dbg(&pspi->dev,
482-
"%s Tx/Rx buffer valid. Transfer length valid\n",
483-
__func__);
484-
}
485-
spin_unlock_irqrestore(&data->lock, flags);
486-
487462
/* We won't process any messages if we have been asked to terminate */
488463
if (data->status == STATUS_EXITING) {
489464
dev_err(&pspi->dev, "%s status = STATUS_EXITING.\n", __func__);
@@ -518,10 +493,6 @@ static int pch_spi_transfer(struct spi_device *pspi, struct spi_message *pmsg)
518493
err_out:
519494
dev_dbg(&pspi->dev, "%s RETURN=%d\n", __func__, retval);
520495
return retval;
521-
err_return_spinlock:
522-
dev_dbg(&pspi->dev, "%s RETURN=%d\n", __func__, retval);
523-
spin_unlock_irqrestore(&data->lock, flags);
524-
return retval;
525496
}
526497

527498
static inline void pch_spi_select_chip(struct pch_spi_data *data,
@@ -1365,6 +1336,7 @@ static int pch_spi_pd_probe(struct platform_device *plat_dev)
13651336
master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST;
13661337
master->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(16);
13671338
master->max_speed_hz = PCH_MAX_BAUDRATE;
1339+
master->flags = SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX;
13681340

13691341
data->board_dat = board_dat;
13701342
data->plat_dev = plat_dev;

0 commit comments

Comments
 (0)