diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-07-21 08:13:02 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-07-21 08:13:02 +0200 |
commit | 64ce7e9de7739cad574a965f27f6477c1342479f (patch) | |
tree | 46058586d496e7b8746b57d75183dbfa590b13b7 /drivers/extcon | |
parent | misc: vexpress/syscfg: Use devm_ioremap_resource() to map memory (diff) | |
parent | extcon: Release locking when sending the notification of connector state (diff) | |
download | linux-64ce7e9de7739cad574a965f27f6477c1342479f.tar.xz linux-64ce7e9de7739cad574a965f27f6477c1342479f.zip |
Merge tag 'extcon-next-for-4.19' of git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/extcon into char-misc-next
Chanwoo writes:
Update extcon for 4.19
Detailed description for this pull request:
1. Release locking when sending the connector state in extcon_sync()
- Previously, extcon used the spinlock before calling the notifier_call_chain
to prevent the scheduled out of task and to prevent the notification delay.
When spinlock is locked for sending the notification, deadlock issue
occured on the side of extcon consumer device. To fix this issue on extcon
consumer device, release locking when sending the connector state.
2. Fix minor issues of extcon provider driver
- extcon-intel-int3496.c uses 'linux/gpio/consumer.h' instead of 'linux/gpio.h'
- extcon-usbc-cors-ec.c adds SPDX license and fix the wrong license information
Diffstat (limited to 'drivers/extcon')
-rw-r--r-- | drivers/extcon/extcon-intel-int3496.c | 2 | ||||
-rw-r--r-- | drivers/extcon/extcon-usbc-cros-ec.c | 22 | ||||
-rw-r--r-- | drivers/extcon/extcon.c | 3 |
3 files changed, 9 insertions, 18 deletions
diff --git a/drivers/extcon/extcon-intel-int3496.c b/drivers/extcon/extcon-intel-int3496.c index acaccb128fc4..fd24debe58a3 100644 --- a/drivers/extcon/extcon-intel-int3496.c +++ b/drivers/extcon/extcon-intel-int3496.c @@ -20,7 +20,7 @@ #include <linux/acpi.h> #include <linux/extcon-provider.h> -#include <linux/gpio.h> +#include <linux/gpio/consumer.h> #include <linux/interrupt.h> #include <linux/module.h> #include <linux/platform_device.h> diff --git a/drivers/extcon/extcon-usbc-cros-ec.c b/drivers/extcon/extcon-usbc-cros-ec.c index 6721ab01fe7d..43c0a936ab82 100644 --- a/drivers/extcon/extcon-usbc-cros-ec.c +++ b/drivers/extcon/extcon-usbc-cros-ec.c @@ -1,18 +1,8 @@ -/** - * drivers/extcon/extcon-usbc-cros-ec - ChromeOS Embedded Controller extcon - * - * Copyright (C) 2017 Google, Inc - * Author: Benson Leung <bleung@chromium.org> - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ +// SPDX-License-Identifier: GPL-2.0 +// ChromeOS Embedded Controller extcon +// +// Copyright (C) 2017 Google, Inc. +// Author: Benson Leung <bleung@chromium.org> #include <linux/extcon-provider.h> #include <linux/kernel.h> @@ -548,4 +538,4 @@ module_platform_driver(extcon_cros_ec_driver); MODULE_DESCRIPTION("ChromeOS Embedded Controller extcon driver"); MODULE_AUTHOR("Benson Leung <bleung@chromium.org>"); -MODULE_LICENSE("GPL"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/extcon/extcon.c b/drivers/extcon/extcon.c index af83ad58819c..b9d27c8fe57e 100644 --- a/drivers/extcon/extcon.c +++ b/drivers/extcon/extcon.c @@ -433,8 +433,8 @@ int extcon_sync(struct extcon_dev *edev, unsigned int id) return index; spin_lock_irqsave(&edev->lock, flags); - state = !!(edev->state & BIT(index)); + spin_unlock_irqrestore(&edev->lock, flags); /* * Call functions in a raw notifier chain for the specific one @@ -448,6 +448,7 @@ int extcon_sync(struct extcon_dev *edev, unsigned int id) */ raw_notifier_call_chain(&edev->nh_all, state, edev); + spin_lock_irqsave(&edev->lock, flags); /* This could be in interrupt handler */ prop_buf = (char *)get_zeroed_page(GFP_ATOMIC); if (!prop_buf) { |