Bluetooth: hci_bcm: use gpiod cansleep version
authorLoic Poulain <loic.poulain@linaro.org>
Mon, 5 Mar 2018 18:02:35 +0000 (19:02 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Sun, 1 Apr 2018 12:25:30 +0000 (14:25 +0200)
Some GPIO controller drivers request sleepable context and so can't
be accessed from IRQ context. Using gpiod_set/get_value accessors
with such controller leads to a kernel warning since they are
reserved for atomic context (according to the documentation).

Use the postfixed _cansleep version instead, indicating that context
is safe for sleeping if necessary. Note that this is the case here
since we never toggle the gpio neither from IRQ nor from a spinlocked
section.

Signed-off-by: Loic Poulain <loic.poulain@linaro.org>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
drivers/bluetooth/hci_bcm.c

index 40b9fb2..467e2f5 100644 (file)
@@ -908,13 +908,13 @@ static inline int bcm_apple_get_resources(struct bcm_device *dev)
 
 static int bcm_gpio_set_device_wakeup(struct bcm_device *dev, bool awake)
 {
-       gpiod_set_value(dev->device_wakeup, awake);
+       gpiod_set_value_cansleep(dev->device_wakeup, awake);
        return 0;
 }
 
 static int bcm_gpio_set_shutdown(struct bcm_device *dev, bool powered)
 {
-       gpiod_set_value(dev->shutdown, powered);
+       gpiod_set_value_cansleep(dev->shutdown, powered);
        return 0;
 }