Commit e59bf428 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'spi-fix-v5.2-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi

Pull spi fixes from Mark Brown:
 "A small set of fixes here.

  One core fix for error handling when we fail to set up the hardware
  before initiating a transfer and another one reverting a change in the
  core which broke Raspberry Pi in common use cases as part of some
  optimization work.

  There's also a couple of driver specific fixes"

* tag 'spi-fix-v5.2-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi:
  spi: abort spi_sync if failed to prepare_transfer_hardware
  spi: spi-fsl-spi: call spi_finalize_current_message() at the end
  spi: bitbang: Fix NULL pointer dereference in spi_unregister_master
  spi: Fix Raspberry Pi breakage
parents d1fdb6d8 f3440d9a
...@@ -406,7 +406,7 @@ int spi_bitbang_start(struct spi_bitbang *bitbang) ...@@ -406,7 +406,7 @@ int spi_bitbang_start(struct spi_bitbang *bitbang)
if (ret) if (ret)
spi_master_put(master); spi_master_put(master);
return 0; return ret;
} }
EXPORT_SYMBOL_GPL(spi_bitbang_start); EXPORT_SYMBOL_GPL(spi_bitbang_start);
......
...@@ -428,7 +428,6 @@ static int fsl_spi_do_one_msg(struct spi_master *master, ...@@ -428,7 +428,6 @@ static int fsl_spi_do_one_msg(struct spi_master *master,
} }
m->status = status; m->status = status;
spi_finalize_current_message(master);
if (status || !cs_change) { if (status || !cs_change) {
ndelay(nsecs); ndelay(nsecs);
...@@ -436,6 +435,7 @@ static int fsl_spi_do_one_msg(struct spi_master *master, ...@@ -436,6 +435,7 @@ static int fsl_spi_do_one_msg(struct spi_master *master,
} }
fsl_spi_setup_transfer(spi, NULL); fsl_spi_setup_transfer(spi, NULL);
spi_finalize_current_message(master);
return 0; return 0;
} }
......
...@@ -1181,10 +1181,10 @@ static int spi_transfer_one_message(struct spi_controller *ctlr, ...@@ -1181,10 +1181,10 @@ static int spi_transfer_one_message(struct spi_controller *ctlr,
if (msg->status && ctlr->handle_err) if (msg->status && ctlr->handle_err)
ctlr->handle_err(ctlr, msg); ctlr->handle_err(ctlr, msg);
spi_finalize_current_message(ctlr);
spi_res_release(ctlr, msg); spi_res_release(ctlr, msg);
spi_finalize_current_message(ctlr);
return ret; return ret;
} }
...@@ -1307,10 +1307,15 @@ static void __spi_pump_messages(struct spi_controller *ctlr, bool in_kthread) ...@@ -1307,10 +1307,15 @@ static void __spi_pump_messages(struct spi_controller *ctlr, bool in_kthread)
ret = ctlr->prepare_transfer_hardware(ctlr); ret = ctlr->prepare_transfer_hardware(ctlr);
if (ret) { if (ret) {
dev_err(&ctlr->dev, dev_err(&ctlr->dev,
"failed to prepare transfer hardware\n"); "failed to prepare transfer hardware: %d\n",
ret);
if (ctlr->auto_runtime_pm) if (ctlr->auto_runtime_pm)
pm_runtime_put(ctlr->dev.parent); pm_runtime_put(ctlr->dev.parent);
ctlr->cur_msg->status = ret;
spi_finalize_current_message(ctlr);
mutex_unlock(&ctlr->io_mutex); mutex_unlock(&ctlr->io_mutex);
return; return;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment