aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2011-06-02 14:18:47 -0400
committerSamuel Ortiz <sameo@linux.intel.com>2011-07-31 17:28:19 -0400
commitca7a71824ac957b1b9d3322656c05aad38d7275c (patch)
treeff89c76b4cda114343c01f332aa28fb80095f3db /include
parent24c3047095fa3954f114bfff2e37b8fcbb216396 (diff)
mfd: Fix bus lock interaction for WM831x IRQ set_type() operation
The WM831x IRQ set_type() operation is doing a direct register write when called but since set_type() is called with the bus lock held this isn't legal and could cause deadlocks in the IRQ core. Fix this by posting the updates into an array and syncing in the bus_sync_unlock() callback. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'include')
-rw-r--r--include/linux/mfd/wm831x/core.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/include/linux/mfd/wm831x/core.h b/include/linux/mfd/wm831x/core.h
index 0d515ee1c247..ebead1c401aa 100644
--- a/include/linux/mfd/wm831x/core.h
+++ b/include/linux/mfd/wm831x/core.h
@@ -237,6 +237,7 @@
237struct regulator_dev; 237struct regulator_dev;
238 238
239#define WM831X_NUM_IRQ_REGS 5 239#define WM831X_NUM_IRQ_REGS 5
240#define WM831X_NUM_GPIO_REGS 16
240 241
241enum wm831x_parent { 242enum wm831x_parent {
242 WM8310 = 0x8310, 243 WM8310 = 0x8310,
@@ -272,6 +273,9 @@ struct wm831x {
272 273
273 int num_gpio; 274 int num_gpio;
274 275
276 /* Used by the interrupt controller code to post writes */
277 int gpio_update[WM831X_NUM_GPIO_REGS];
278
275 struct mutex auxadc_lock; 279 struct mutex auxadc_lock;
276 struct completion auxadc_done; 280 struct completion auxadc_done;
277 281