forked from Minki/linux
spi: uniphier: Add handle_err callback function
This adds master->handle_err() callback function to stop transfer due to error. The function also resets FIFOs and disables interrupt. Signed-off-by: Kunihiko Hayashi <hayashi.kunihiko@socionext.com> Link: https://lore.kernel.org/r/1577149107-30670-4-git-send-email-hayashi.kunihiko@socionext.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
9859db5138
commit
11299c5cd8
@ -425,6 +425,22 @@ static int uniphier_spi_unprepare_transfer_hardware(struct spi_master *master)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void uniphier_spi_handle_err(struct spi_master *master,
|
||||
struct spi_message *msg)
|
||||
{
|
||||
struct uniphier_spi_priv *priv = spi_master_get_devdata(master);
|
||||
u32 val;
|
||||
|
||||
/* stop running spi transfer */
|
||||
writel(0, priv->base + SSI_CTL);
|
||||
|
||||
/* reset FIFOs */
|
||||
val = SSI_FC_TXFFL | SSI_FC_RXFFL;
|
||||
writel(val, priv->base + SSI_FC);
|
||||
|
||||
uniphier_spi_irq_disable(priv, SSI_IE_RCIE | SSI_IE_RORIE);
|
||||
}
|
||||
|
||||
static irqreturn_t uniphier_spi_handler(int irq, void *dev_id)
|
||||
{
|
||||
struct uniphier_spi_priv *priv = dev_id;
|
||||
@ -531,6 +547,7 @@ static int uniphier_spi_probe(struct platform_device *pdev)
|
||||
= uniphier_spi_prepare_transfer_hardware;
|
||||
master->unprepare_transfer_hardware
|
||||
= uniphier_spi_unprepare_transfer_hardware;
|
||||
master->handle_err = uniphier_spi_handle_err;
|
||||
master->num_chipselect = 1;
|
||||
|
||||
ret = devm_spi_register_master(&pdev->dev, master);
|
||||
|
Loading…
Reference in New Issue
Block a user