From 5a8d0fdaf3fda851347041d42ce3753454afa296 Mon Sep 17 00:00:00 2001 From: jogo Date: Tue, 3 Jul 2012 21:42:03 +0000 Subject: kernel: generic: spi: allow empty (un)prepare transfer git-svn-id: svn://svn.openwrt.org/openwrt/trunk@32590 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- ...ll-prepare-unprepare-transfer-if-not-popu.patch | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 target/linux/generic/patches-3.3/048-spi-Dont-call-prepare-unprepare-transfer-if-not-popu.patch (limited to 'target/linux/generic') diff --git a/target/linux/generic/patches-3.3/048-spi-Dont-call-prepare-unprepare-transfer-if-not-popu.patch b/target/linux/generic/patches-3.3/048-spi-Dont-call-prepare-unprepare-transfer-if-not-popu.patch new file mode 100644 index 000000000..deef32e45 --- /dev/null +++ b/target/linux/generic/patches-3.3/048-spi-Dont-call-prepare-unprepare-transfer-if-not-popu.patch @@ -0,0 +1,39 @@ +From 7dfd2bd70228d1f8d468d58cb3d12ecd618479ed Mon Sep 17 00:00:00 2001 +From: Shubhrajyoti D +Date: Thu, 10 May 2012 19:20:41 +0530 +Subject: [PATCH] spi: Dont call prepare/unprepare transfer if not populated + +Currently the prepare/unprepare transfer are called unconditionally. +The assumption is that every driver using the spi core queue infrastructure +has to populate the prepare and unprepare functions. This encourages +drivers to populate empty functions to prevent crashing. +This patch prevents the call to prepare/unprepare if not populated. + +Signed-off-by: Shubhrajyoti D +Acked-by: Linus Walleij +[grant.likely: fix whitespace defect] +Signed-off-by: Grant Likely +--- + drivers/spi/spi.c | 4 ++-- + 1 files changed, 2 insertions(+), 2 deletions(-) + +--- a/drivers/spi/spi.c ++++ b/drivers/spi/spi.c +@@ -530,7 +530,7 @@ static void spi_pump_messages(struct kth + /* Lock queue and check for queue work */ + spin_lock_irqsave(&master->queue_lock, flags); + if (list_empty(&master->queue) || !master->running) { +- if (master->busy) { ++ if (master->busy && master->unprepare_transfer_hardware) { + ret = master->unprepare_transfer_hardware(master); + if (ret) { + dev_err(&master->dev, +@@ -559,7 +559,7 @@ static void spi_pump_messages(struct kth + master->busy = true; + spin_unlock_irqrestore(&master->queue_lock, flags); + +- if (!was_busy) { ++ if (!was_busy && master->prepare_transfer_hardware) { + ret = master->prepare_transfer_hardware(master); + if (ret) { + dev_err(&master->dev, -- cgit v1.2.3