Commit 91c45a7a authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Merge tag 'extcon-next-for-4.20' of...

Merge tag 'extcon-next-for-4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/extcon into char-misc-next

Chanwoo writes:

Update extcon for 4.20

Detailed description for this pull request:
1. Add SPDX license identifiers for Maxim and Intel extcon drivers
2. Clean-up extcon-intel-cht-wc.c driver without operation changes
3. Fix build warning of extcon core and use kasprintf instead of snprintf

* tag 'extcon-next-for-4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/extcon:
  extcon: int3496: Convert to use SPDX identifier
  extcon: cht-wc: Convert to use SPDX identifier
  extcon: cht-wc: Correct USBID bit field handling
  extcon: cht-wc: Fix definition names according to spec
  extcon: cht-wc: Return from default case to avoid warnings
  extcon: Switch to use kasprintf() instead of open coded
  extcon: Make static analyzer happy about union assignment
  extcon: maxim: Add SPDX license identifiers
parents 29c222d1 2e464ff0
// SPDX-License-Identifier: GPL-2.0
/* /*
* Extcon charger detection driver for Intel Cherrytrail Whiskey Cove PMIC * Extcon charger detection driver for Intel Cherrytrail Whiskey Cove PMIC
* Copyright (C) 2017 Hans de Goede <hdegoede@redhat.com> * Copyright (C) 2017 Hans de Goede <hdegoede@redhat.com>
* *
* Based on various non upstream patches to support the CHT Whiskey Cove PMIC: * Based on various non upstream patches to support the CHT Whiskey Cove PMIC:
* Copyright (C) 2013-2015 Intel Corporation. All rights reserved. * Copyright (C) 2013-2015 Intel Corporation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope 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.
*/ */
#include <linux/extcon-provider.h> #include <linux/extcon-provider.h>
...@@ -32,10 +24,10 @@ ...@@ -32,10 +24,10 @@
#define CHT_WC_CHGRCTRL0_EMRGCHREN BIT(1) #define CHT_WC_CHGRCTRL0_EMRGCHREN BIT(1)
#define CHT_WC_CHGRCTRL0_EXTCHRDIS BIT(2) #define CHT_WC_CHGRCTRL0_EXTCHRDIS BIT(2)
#define CHT_WC_CHGRCTRL0_SWCONTROL BIT(3) #define CHT_WC_CHGRCTRL0_SWCONTROL BIT(3)
#define CHT_WC_CHGRCTRL0_TTLCK_MASK BIT(4) #define CHT_WC_CHGRCTRL0_TTLCK BIT(4)
#define CHT_WC_CHGRCTRL0_CCSM_OFF_MASK BIT(5) #define CHT_WC_CHGRCTRL0_CCSM_OFF BIT(5)
#define CHT_WC_CHGRCTRL0_DBPOFF_MASK BIT(6) #define CHT_WC_CHGRCTRL0_DBPOFF BIT(6)
#define CHT_WC_CHGRCTRL0_WDT_NOKICK BIT(7) #define CHT_WC_CHGRCTRL0_CHR_WDT_NOKICK BIT(7)
#define CHT_WC_CHGRCTRL1 0x5e17 #define CHT_WC_CHGRCTRL1 0x5e17
...@@ -52,7 +44,7 @@ ...@@ -52,7 +44,7 @@
#define CHT_WC_USBSRC_TYPE_ACA 4 #define CHT_WC_USBSRC_TYPE_ACA 4
#define CHT_WC_USBSRC_TYPE_SE1 5 #define CHT_WC_USBSRC_TYPE_SE1 5
#define CHT_WC_USBSRC_TYPE_MHL 6 #define CHT_WC_USBSRC_TYPE_MHL 6
#define CHT_WC_USBSRC_TYPE_FLOAT_DP_DN 7 #define CHT_WC_USBSRC_TYPE_FLOATING 7
#define CHT_WC_USBSRC_TYPE_OTHER 8 #define CHT_WC_USBSRC_TYPE_OTHER 8
#define CHT_WC_USBSRC_TYPE_DCP_EXTPHY 9 #define CHT_WC_USBSRC_TYPE_DCP_EXTPHY 9
...@@ -61,9 +53,12 @@ ...@@ -61,9 +53,12 @@
#define CHT_WC_PWRSRC_STS 0x6e1e #define CHT_WC_PWRSRC_STS 0x6e1e
#define CHT_WC_PWRSRC_VBUS BIT(0) #define CHT_WC_PWRSRC_VBUS BIT(0)
#define CHT_WC_PWRSRC_DC BIT(1) #define CHT_WC_PWRSRC_DC BIT(1)
#define CHT_WC_PWRSRC_BAT BIT(2) #define CHT_WC_PWRSRC_BATT BIT(2)
#define CHT_WC_PWRSRC_ID_GND BIT(3) #define CHT_WC_PWRSRC_USBID_MASK GENMASK(4, 3)
#define CHT_WC_PWRSRC_ID_FLOAT BIT(4) #define CHT_WC_PWRSRC_USBID_SHIFT 3
#define CHT_WC_PWRSRC_RID_ACA 0
#define CHT_WC_PWRSRC_RID_GND 1
#define CHT_WC_PWRSRC_RID_FLOAT 2
#define CHT_WC_VBUS_GPIO_CTLO 0x6e2d #define CHT_WC_VBUS_GPIO_CTLO 0x6e2d
#define CHT_WC_VBUS_GPIO_CTLO_OUTPUT BIT(0) #define CHT_WC_VBUS_GPIO_CTLO_OUTPUT BIT(0)
...@@ -104,16 +99,20 @@ struct cht_wc_extcon_data { ...@@ -104,16 +99,20 @@ struct cht_wc_extcon_data {
static int cht_wc_extcon_get_id(struct cht_wc_extcon_data *ext, int pwrsrc_sts) static int cht_wc_extcon_get_id(struct cht_wc_extcon_data *ext, int pwrsrc_sts)
{ {
if (pwrsrc_sts & CHT_WC_PWRSRC_ID_GND) switch ((pwrsrc_sts & CHT_WC_PWRSRC_USBID_MASK) >> CHT_WC_PWRSRC_USBID_SHIFT) {
case CHT_WC_PWRSRC_RID_GND:
return USB_ID_GND; return USB_ID_GND;
if (pwrsrc_sts & CHT_WC_PWRSRC_ID_FLOAT) case CHT_WC_PWRSRC_RID_FLOAT:
return USB_ID_FLOAT; return USB_ID_FLOAT;
case CHT_WC_PWRSRC_RID_ACA:
/* default:
* Once we have iio support for the gpadc we should read the USBID /*
* gpadc channel here and determine ACA role based on that. * Once we have IIO support for the GPADC we should read
*/ * the USBID GPADC channel here and determine ACA role
return USB_ID_FLOAT; * based on that.
*/
return USB_ID_FLOAT;
}
} }
static int cht_wc_extcon_get_charger(struct cht_wc_extcon_data *ext, static int cht_wc_extcon_get_charger(struct cht_wc_extcon_data *ext,
...@@ -156,9 +155,9 @@ static int cht_wc_extcon_get_charger(struct cht_wc_extcon_data *ext, ...@@ -156,9 +155,9 @@ static int cht_wc_extcon_get_charger(struct cht_wc_extcon_data *ext,
dev_warn(ext->dev, dev_warn(ext->dev,
"Unhandled charger type %d, defaulting to SDP\n", "Unhandled charger type %d, defaulting to SDP\n",
ret); ret);
/* Fall through, treat as SDP */ return EXTCON_CHG_USB_SDP;
case CHT_WC_USBSRC_TYPE_SDP: case CHT_WC_USBSRC_TYPE_SDP:
case CHT_WC_USBSRC_TYPE_FLOAT_DP_DN: case CHT_WC_USBSRC_TYPE_FLOATING:
case CHT_WC_USBSRC_TYPE_OTHER: case CHT_WC_USBSRC_TYPE_OTHER:
return EXTCON_CHG_USB_SDP; return EXTCON_CHG_USB_SDP;
case CHT_WC_USBSRC_TYPE_CDP: case CHT_WC_USBSRC_TYPE_CDP:
...@@ -279,7 +278,7 @@ static int cht_wc_extcon_sw_control(struct cht_wc_extcon_data *ext, bool enable) ...@@ -279,7 +278,7 @@ static int cht_wc_extcon_sw_control(struct cht_wc_extcon_data *ext, bool enable)
{ {
int ret, mask, val; int ret, mask, val;
mask = CHT_WC_CHGRCTRL0_SWCONTROL | CHT_WC_CHGRCTRL0_CCSM_OFF_MASK; mask = CHT_WC_CHGRCTRL0_SWCONTROL | CHT_WC_CHGRCTRL0_CCSM_OFF;
val = enable ? mask : 0; val = enable ? mask : 0;
ret = regmap_update_bits(ext->regmap, CHT_WC_CHGRCTRL0, mask, val); ret = regmap_update_bits(ext->regmap, CHT_WC_CHGRCTRL0, mask, val);
if (ret) if (ret)
...@@ -292,6 +291,7 @@ static int cht_wc_extcon_probe(struct platform_device *pdev) ...@@ -292,6 +291,7 @@ static int cht_wc_extcon_probe(struct platform_device *pdev)
{ {
struct intel_soc_pmic *pmic = dev_get_drvdata(pdev->dev.parent); struct intel_soc_pmic *pmic = dev_get_drvdata(pdev->dev.parent);
struct cht_wc_extcon_data *ext; struct cht_wc_extcon_data *ext;
unsigned long mask = ~(CHT_WC_PWRSRC_VBUS | CHT_WC_PWRSRC_USBID_MASK);
int irq, ret; int irq, ret;
irq = platform_get_irq(pdev, 0); irq = platform_get_irq(pdev, 0);
...@@ -352,9 +352,7 @@ static int cht_wc_extcon_probe(struct platform_device *pdev) ...@@ -352,9 +352,7 @@ static int cht_wc_extcon_probe(struct platform_device *pdev)
} }
/* Unmask irqs */ /* Unmask irqs */
ret = regmap_write(ext->regmap, CHT_WC_PWRSRC_IRQ_MASK, ret = regmap_write(ext->regmap, CHT_WC_PWRSRC_IRQ_MASK, mask);
(int)~(CHT_WC_PWRSRC_VBUS | CHT_WC_PWRSRC_ID_GND |
CHT_WC_PWRSRC_ID_FLOAT));
if (ret) { if (ret) {
dev_err(ext->dev, "Error writing irq-mask: %d\n", ret); dev_err(ext->dev, "Error writing irq-mask: %d\n", ret);
goto disable_sw_control; goto disable_sw_control;
......
// SPDX-License-Identifier: GPL-2.0
/* /*
* Intel INT3496 ACPI device extcon driver * Intel INT3496 ACPI device extcon driver
* *
...@@ -7,15 +8,6 @@ ...@@ -7,15 +8,6 @@
* *
* Copyright (c) 2014, Intel Corporation. * Copyright (c) 2014, Intel Corporation.
* Author: David Cohen <david.a.cohen@linux.intel.com> * Author: David Cohen <david.a.cohen@linux.intel.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* 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.
*/ */
#include <linux/acpi.h> #include <linux/acpi.h>
...@@ -192,4 +184,4 @@ module_platform_driver(int3496_driver); ...@@ -192,4 +184,4 @@ module_platform_driver(int3496_driver);
MODULE_AUTHOR("Hans de Goede <hdegoede@redhat.com>"); MODULE_AUTHOR("Hans de Goede <hdegoede@redhat.com>");
MODULE_DESCRIPTION("Intel INT3496 ACPI device extcon driver"); MODULE_DESCRIPTION("Intel INT3496 ACPI device extcon driver");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL v2");
/* // SPDX-License-Identifier: GPL-2.0+
* extcon-max14577.c - MAX14577/77836 extcon driver to support MUIC //
* // extcon-max14577.c - MAX14577/77836 extcon driver to support MUIC
* Copyright (C) 2013,2014 Samsung Electronics //
* Chanwoo Choi <cw00.choi@samsung.com> // Copyright (C) 2013,2014 Samsung Electronics
* Krzysztof Kozlowski <krzk@kernel.org> // Chanwoo Choi <cw00.choi@samsung.com>
* // Krzysztof Kozlowski <krzk@kernel.org>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* 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.
*/
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
......
/* // SPDX-License-Identifier: GPL-2.0+
* extcon-max77693.c - MAX77693 extcon driver to support MAX77693 MUIC //
* // extcon-max77693.c - MAX77693 extcon driver to support MAX77693 MUIC
* Copyright (C) 2012 Samsung Electrnoics //
* Chanwoo Choi <cw00.choi@samsung.com> // Copyright (C) 2012 Samsung Electrnoics
* // Chanwoo Choi <cw00.choi@samsung.com>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* 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.
*/
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
......
/* // SPDX-License-Identifier: GPL-2.0+
* extcon-max77843.c - Maxim MAX77843 extcon driver to support //
* MUIC(Micro USB Interface Controller) // extcon-max77843.c - Maxim MAX77843 extcon driver to support
* // MUIC(Micro USB Interface Controller)
* Copyright (C) 2015 Samsung Electronics //
* Author: Jaewon Kim <jaewon02.kim@samsung.com> // Copyright (C) 2015 Samsung Electronics
* // Author: Jaewon Kim <jaewon02.kim@samsung.com>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*/
#include <linux/extcon-provider.h> #include <linux/extcon-provider.h>
#include <linux/i2c.h> #include <linux/i2c.h>
......
/* // SPDX-License-Identifier: GPL-2.0+
* extcon-max8997.c - MAX8997 extcon driver to support MAX8997 MUIC //
* // extcon-max8997.c - MAX8997 extcon driver to support MAX8997 MUIC
* Copyright (C) 2012 Samsung Electronics //
* Donggeun Kim <dg77.kim@samsung.com> // Copyright (C) 2012 Samsung Electronics
* // Donggeun Kim <dg77.kim@samsung.com>
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* 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.
*/
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/module.h> #include <linux/module.h>
......
...@@ -628,7 +628,7 @@ int extcon_get_property(struct extcon_dev *edev, unsigned int id, ...@@ -628,7 +628,7 @@ int extcon_get_property(struct extcon_dev *edev, unsigned int id,
unsigned long flags; unsigned long flags;
int index, ret = 0; int index, ret = 0;
*prop_val = (union extcon_property_value)(0); *prop_val = (union extcon_property_value){0};
if (!edev) if (!edev)
return -EINVAL; return -EINVAL;
...@@ -1123,7 +1123,6 @@ int extcon_dev_register(struct extcon_dev *edev) ...@@ -1123,7 +1123,6 @@ int extcon_dev_register(struct extcon_dev *edev)
(unsigned long)atomic_inc_return(&edev_no)); (unsigned long)atomic_inc_return(&edev_no));
if (edev->max_supported) { if (edev->max_supported) {
char buf[10];
char *str; char *str;
struct extcon_cable *cable; struct extcon_cable *cable;
...@@ -1137,9 +1136,7 @@ int extcon_dev_register(struct extcon_dev *edev) ...@@ -1137,9 +1136,7 @@ int extcon_dev_register(struct extcon_dev *edev)
for (index = 0; index < edev->max_supported; index++) { for (index = 0; index < edev->max_supported; index++) {
cable = &edev->cables[index]; cable = &edev->cables[index];
snprintf(buf, 10, "cable.%d", index); str = kasprintf(GFP_KERNEL, "cable.%d", index);
str = kzalloc(strlen(buf) + 1,
GFP_KERNEL);
if (!str) { if (!str) {
for (index--; index >= 0; index--) { for (index--; index >= 0; index--) {
cable = &edev->cables[index]; cable = &edev->cables[index];
...@@ -1149,7 +1146,6 @@ int extcon_dev_register(struct extcon_dev *edev) ...@@ -1149,7 +1146,6 @@ int extcon_dev_register(struct extcon_dev *edev)
goto err_alloc_cables; goto err_alloc_cables;
} }
strcpy(str, buf);
cable->edev = edev; cable->edev = edev;
cable->cable_index = index; cable->cable_index = index;
...@@ -1172,7 +1168,6 @@ int extcon_dev_register(struct extcon_dev *edev) ...@@ -1172,7 +1168,6 @@ int extcon_dev_register(struct extcon_dev *edev)
} }
if (edev->max_supported && edev->mutually_exclusive) { if (edev->max_supported && edev->mutually_exclusive) {
char buf[80];
char *name; char *name;
/* Count the size of mutually_exclusive array */ /* Count the size of mutually_exclusive array */
...@@ -1197,9 +1192,8 @@ int extcon_dev_register(struct extcon_dev *edev) ...@@ -1197,9 +1192,8 @@ int extcon_dev_register(struct extcon_dev *edev)
} }
for (index = 0; edev->mutually_exclusive[index]; index++) { for (index = 0; edev->mutually_exclusive[index]; index++) {
sprintf(buf, "0x%x", edev->mutually_exclusive[index]); name = kasprintf(GFP_KERNEL, "0x%x",
name = kzalloc(strlen(buf) + 1, edev->mutually_exclusive[index]);
GFP_KERNEL);
if (!name) { if (!name) {
for (index--; index >= 0; index--) { for (index--; index >= 0; index--) {
kfree(edev->d_attrs_muex[index].attr. kfree(edev->d_attrs_muex[index].attr.
...@@ -1210,7 +1204,6 @@ int extcon_dev_register(struct extcon_dev *edev) ...@@ -1210,7 +1204,6 @@ int extcon_dev_register(struct extcon_dev *edev)
ret = -ENOMEM; ret = -ENOMEM;
goto err_muex; goto err_muex;
} }
strcpy(name, buf);
sysfs_attr_init(&edev->d_attrs_muex[index].attr); sysfs_attr_init(&edev->d_attrs_muex[index].attr);
edev->d_attrs_muex[index].attr.name = name; edev->d_attrs_muex[index].attr.name = name;
edev->d_attrs_muex[index].attr.mode = 0000; edev->d_attrs_muex[index].attr.mode = 0000;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment