diff options
Diffstat (limited to 'drivers/spi/spi.c')
| -rw-r--r-- | drivers/spi/spi.c | 11 | 
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index 5e75944ad5d1..5e4654032bfa 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -1181,10 +1181,10 @@ out:  	if (msg->status && ctlr->handle_err)  		ctlr->handle_err(ctlr, msg); -	spi_finalize_current_message(ctlr); -  	spi_res_release(ctlr, msg); +	spi_finalize_current_message(ctlr); +  	return ret;  } @@ -1307,10 +1307,15 @@ static void __spi_pump_messages(struct spi_controller *ctlr, bool in_kthread)  		ret = ctlr->prepare_transfer_hardware(ctlr);  		if (ret) {  			dev_err(&ctlr->dev, -				"failed to prepare transfer hardware\n"); +				"failed to prepare transfer hardware: %d\n", +				ret);  			if (ctlr->auto_runtime_pm)  				pm_runtime_put(ctlr->dev.parent); + +			ctlr->cur_msg->status = ret; +			spi_finalize_current_message(ctlr); +  			mutex_unlock(&ctlr->io_mutex);  			return;  		}  |