Merge tag 'driver-core-5.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git...
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 26 Apr 2021 18:05:36 +0000 (11:05 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 26 Apr 2021 18:05:36 +0000 (11:05 -0700)
Pull driver core updates from Greg KH:
 "Here is the "big" set of driver core changes for 5.13-rc1.

  Nothing major, just lots of little core changes and cleanups, notable
  things are:

   - finally set 'fw_devlink=on' by default.

     All reported issues with this have been shaken out over the past 9
     months or so, but we will be paying attention to any fallout here
     in case we need to revert this as the default boot value (symptoms
     of problems are a simple lack of booting)

   - fixes found to be needed by fw_devlink=on value in some subsystems
     (like clock).

   - delayed work initialization cleanup

   - driver core cleanups and minor updates

   - software node cleanups and tweaks

   - devtmpfs cleanups

   - minor debugfs cleanups

  All of these have been in linux-next for a while with no reported
  issues"

* tag 'driver-core-5.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core: (53 commits)
  devm-helpers: Fix devm_delayed_work_autocancel() kerneldoc
  PM / wakeup: use dev_set_name() directly
  software node: Allow node addition to already existing device
  kunit: software node: adhear to KUNIT formatting standard
  node: fix device cleanups in error handling code
  kobject_uevent: remove warning in init_uevent_argv()
  debugfs: Make debugfs_allow RO after init
  Revert "driver core: platform: Make platform_get_irq_optional() optional"
  media: ipu3-cio2: Switch to use SOFTWARE_NODE_REFERENCE()
  software node: Introduce SOFTWARE_NODE_REFERENCE() helper macro
  software node: Imply kobj_to_swnode() to be no-op
  software node: Deduplicate code in fwnode_create_software_node()
  software node: Introduce software_node_alloc()/software_node_free()
  software node: Free resources explicitly when swnode_register() fails
  debugfs: drop pointless nul-termination in debugfs_read_file_bool()
  driver core: add helper for deferred probe reason setting
  driver core: Improve fw_devlink & deferred_probe_timeout interaction
  of: property: fw_devlink: Add support for remote-endpoint
  driver core: platform: Make platform_get_irq_optional() optional
  driver core: Replace printf() specifier and drop unneeded casting
  ...

1  2 
MAINTAINERS
drivers/extcon/extcon-qcom-spmi-misc.c

diff --combined MAINTAINERS
index 56defe56d421a3cdde26ca0d2069950b0ea1437c,c1e64c0bfab5b8641e524acc59802283335c0b16..502a7d570d117b57befc6f420e05f5eefecf65e6
@@@ -573,12 -573,6 +573,12 @@@ S:       Maintaine
  F:    Documentation/scsi/advansys.rst
  F:    drivers/scsi/advansys.c
  
 +ADVANTECH SWBTN DRIVER
 +M:    Andrea Ho <Andrea.Ho@advantech.com.tw>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/platform/x86/adv_swbutton.c
 +
  ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346)
  M:    Michael Hennerich <michael.hennerich@analog.com>
  S:    Supported
@@@ -703,11 -697,6 +703,11 @@@ S:       Maintaine
  F:    Documentation/i2c/busses/i2c-ali1563.rst
  F:    drivers/i2c/busses/i2c-ali1563.c
  
 +ALIENWARE WMI DRIVER
 +L:    Dell.Client.Kernel@dell.com
 +S:    Maintained
 +F:    drivers/platform/x86/dell/alienware-wmi.c
 +
  ALL SENSORS DLH SERIES PRESSURE SENSORS DRIVER
  M:    Tomislav Denis <tomislav.denis@avl.com>
  L:    linux-iio@vger.kernel.org
@@@ -1587,13 -1576,11 +1587,13 @@@ R:   Jernej Skrabec <jernej.skrabec@siol.
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git
 +L:    linux-sunxi@lists.linux.dev
  F:    arch/arm/mach-sunxi/
  F:    arch/arm64/boot/dts/allwinner/
  F:    drivers/clk/sunxi-ng/
  F:    drivers/pinctrl/sunxi/
  F:    drivers/soc/sunxi/
 +N:    allwinner
  N:    sun[x456789]i
  N:    sun50i
  
@@@ -1777,7 -1764,6 +1777,7 @@@ F:      Documentation/devicetree/bindings/ar
  F:    Documentation/trace/coresight/*
  F:    drivers/hwtracing/coresight/*
  F:    include/dt-bindings/arm/coresight-cti-dt.h
 +F:    include/linux/coresight*
  F:    tools/perf/arch/arm/util/auxtrace.c
  F:    tools/perf/arch/arm/util/cs-etm.c
  F:    tools/perf/arch/arm/util/cs-etm.h
@@@ -5055,19 -5041,19 +5055,19 @@@ F:   drivers/platform/x86/dell/dell_rbu.
  
  DELL SMBIOS DRIVER
  M:    Pali Rohár <pali@kernel.org>
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/dell/dell-smbios.*
  
  DELL SMBIOS SMM DRIVER
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/dell/dell-smbios-smm.c
  
  DELL SMBIOS WMI DRIVER
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/dell/dell-smbios-wmi.c
@@@ -5081,14 -5067,14 +5081,14 @@@ F:   Documentation/driver-api/dcdbas.rs
  F:    drivers/platform/x86/dell/dcdbas.*
  
  DELL WMI DESCRIPTOR DRIVER
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  S:    Maintained
  F:    drivers/platform/x86/dell/dell-wmi-descriptor.c
  
  DELL WMI SYSMAN DRIVER
  M:    Divya Bharathi <divya.bharathi@dell.com>
 -M:    Mario Limonciello <mario.limonciello@dell.com>
  M:    Prasanth Ksr <prasanth.ksr@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-class-firmware-attributes
@@@ -5120,13 -5106,6 +5120,13 @@@ S:    Maintaine
  F:    drivers/dma/dw-edma/
  F:    include/linux/dma/edma.h
  
 +DESIGNWARE XDATA IP DRIVER
 +M:    Gustavo Pimentel <gustavo.pimentel@synopsys.com>
 +L:    linux-pci@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/misc-devices/dw-xdata-pcie.rst
 +F:    drivers/misc/dw-xdata-pcie.c
 +
  DESIGNWARE USB2 DRD IP DRIVER
  M:    Minas Harutyunyan <hminas@synopsys.com>
  L:    linux-usb@vger.kernel.org
@@@ -5197,6 -5176,12 +5197,12 @@@ M:    Torben Mathiasen <device@lanana.org
  S:    Maintained
  W:    http://lanana.org/docs/device-list/index.html
  
+ DEVICE RESOURCE MANAGEMENT HELPERS
+ M:    Hans de Goede <hdegoede@redhat.com>
+ R:    Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
+ S:    Maintained
+ F:    include/linux/devm-helpers.h
  DEVICE-MAPPER  (LVM)
  M:    Alasdair Kergon <agk@redhat.com>
  M:    Mike Snitzer <snitzer@redhat.com>
@@@ -7018,7 -7003,6 +7024,7 @@@ S:      Maintaine
  F:    Documentation/ABI/testing/sysfs-bus-dfl*
  F:    Documentation/fpga/dfl.rst
  F:    drivers/fpga/dfl*
 +F:    drivers/uio/uio_dfl.c
  F:    include/linux/dfl.h
  F:    include/uapi/linux/fpga-dfl.h
  
@@@ -7118,7 -7102,7 +7124,7 @@@ S:      Maintaine
  F:    drivers/i2c/busses/i2c-cpm.c
  
  FREESCALE IMX / MXC FEC DRIVER
 -M:    Fugang Duan <fugang.duan@nxp.com>
 +M:    Joakim Zhang <qiangqing.zhang@nxp.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/net/fsl-fec.txt
@@@ -7571,12 -7555,6 +7577,12 @@@ F:    Documentation/filesystems/gfs2
  F:    fs/gfs2/
  F:    include/uapi/linux/gfs2_ondisk.h
  
 +GIGABYTE WMI DRIVER
 +M:    Thomas Weißschuh <thomas@weissschuh.net>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/platform/x86/gigabyte-wmi.c
 +
  GNSS SUBSYSTEM
  M:    Johan Hovold <johan@kernel.org>
  S:    Maintained
@@@ -7926,11 -7904,6 +7932,11 @@@ W:    https://linuxtv.or
  T:    git git://linuxtv.org/media_tree.git
  F:    drivers/media/usb/hdpvr/
  
 +HEWLETT PACKARD ENTERPRISE ILO CHIF DRIVER
 +M:    Matt Hsiao <matt.hsiao@hpe.com>
 +S:    Supported
 +F:    drivers/misc/hpilo.[ch]
 +
  HEWLETT PACKARD ENTERPRISE ILO NMI WATCHDOG DRIVER
  M:    Jerry Hoemann <jerry.hoemann@hpe.com>
  S:    Supported
@@@ -8557,9 -8530,9 +8563,9 @@@ F:      drivers/pci/hotplug/rpaphp
  
  IBM Power SRIOV Virtual NIC Device Driver
  M:    Dany Madden <drt@linux.ibm.com>
 -M:    Lijun Pan <ljp@linux.ibm.com>
  M:    Sukadev Bhattiprolu <sukadev@linux.ibm.com>
  R:    Thomas Falcon <tlfalcon@linux.ibm.com>
 +R:    Lijun Pan <lijunp213@gmail.com>
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/net/ethernet/ibm/ibmvnic.*
@@@ -8585,8 -8558,7 +8591,8 @@@ S:      Supporte
  F:    drivers/scsi/ibmvscsi/ibmvfc*
  
  IBM Power Virtual Management Channel Driver
 -M:    Steven Royer <seroyer@linux.ibm.com>
 +M:    Brad Warrum <bwarrum@linux.ibm.com>
 +M:    Ritu Agarwal <rituagar@linux.ibm.com>
  S:    Supported
  F:    drivers/misc/ibmvmc.*
  
@@@ -8644,8 -8616,9 +8650,8 @@@ F:      drivers/ide
  F:    include/linux/ide.h
  
  IDE/ATAPI DRIVERS
 -M:    Borislav Petkov <bp@alien8.de>
  L:    linux-ide@vger.kernel.org
 -S:    Maintained
 +S:    Orphan
  F:    Documentation/cdrom/ide-cd.rst
  F:    drivers/ide/ide-cd*
  
@@@ -9173,7 -9146,6 +9179,7 @@@ M:      Rajneesh Bhardwaj <irenic.rajneesh@g
  M:    David E Box <david.e.box@intel.com>
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-platform-intel-pmc
  F:    drivers/platform/x86/intel_pmc_core*
  
  INTEL PMIC GPIO DRIVERS
@@@ -9284,7 -9256,7 +9290,7 @@@ W:      https://slimbootloader.github.io/sec
  F:    drivers/platform/x86/intel-wmi-sbl-fw-update.c
  
  INTEL WMI THUNDERBOLT FORCE POWER DRIVER
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  S:    Maintained
  F:    drivers/platform/x86/intel-wmi-thunderbolt.c
  
@@@ -9314,7 -9286,6 +9320,7 @@@ Q:      https://patchwork.kernel.org/project
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/sgx
  F:    Documentation/x86/sgx.rst
  F:    arch/x86/entry/vdso/vsgx.S
 +F:    arch/x86/include/asm/sgx.h
  F:    arch/x86/include/uapi/asm/sgx.h
  F:    arch/x86/kernel/cpu/sgx/*
  F:    tools/testing/selftests/sgx/*
@@@ -9324,7 -9295,6 +9330,7 @@@ INTERCONNECT AP
  M:    Georgi Djakov <djakov@kernel.org>
  L:    linux-pm@vger.kernel.org
  S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/djakov/icc.git
  F:    Documentation/devicetree/bindings/interconnect/
  F:    Documentation/driver-api/interconnect.rst
  F:    drivers/interconnect/
@@@ -9921,14 -9891,6 +9927,14 @@@ F:    include/keys/trusted-type.
  F:    include/keys/trusted_tpm.h
  F:    security/keys/trusted-keys/
  
 +KEYS-TRUSTED-TEE
 +M:    Sumit Garg <sumit.garg@linaro.org>
 +L:    linux-integrity@vger.kernel.org
 +L:    keyrings@vger.kernel.org
 +S:    Supported
 +F:    include/keys/trusted_tee.h
 +F:    security/keys/trusted-keys/trusted_tee.c
 +
  KEYS/KEYRINGS
  M:    David Howells <dhowells@redhat.com>
  M:    Jarkko Sakkinen <jarkko@kernel.org>
@@@ -11486,8 -11448,8 +11492,8 @@@ Q:   https://patchwork.kernel.org/project
  F:    drivers/net/ethernet/mellanox/mlxfw/
  
  MELLANOX HARDWARE PLATFORM SUPPORT
 -M:    Andy Shevchenko <andy@infradead.org>
 -M:    Darren Hart <dvhart@infradead.org>
 +M:    Hans de Goede <hdegoede@redhat.com>
 +M:    Mark Gross <mgross@linux.intel.com>
  M:    Vadim Pasternak <vadimp@nvidia.com>
  L:    platform-driver-x86@vger.kernel.org
  S:    Supported
@@@ -11910,14 -11872,6 +11916,14 @@@ F: drivers/scsi/smartpqi/smartpqi*.[ch
  F:    include/linux/cciss*.h
  F:    include/uapi/linux/cciss*.h
  
 +MICROSOFT SURFACE DTX DRIVER
 +M:    Maximilian Luz <luzmaximilian@gmail.com>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/driver-api/surface_aggregator/clients/dtx.rst
 +F:    drivers/platform/surface/surface_dtx.c
 +F:    include/uapi/linux/surface_aggregator/dtx.h
 +
  MICROSOFT SURFACE GPE LID SUPPORT DRIVER
  M:    Maximilian Luz <luzmaximilian@gmail.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -11939,12 -11893,6 +11945,12 @@@ L: platform-driver-x86@vger.kernel.or
  S:    Maintained
  F:    drivers/platform/surface/surface_hotplug.c
  
 +MICROSOFT SURFACE PLATFORM PROFILE DRIVER
 +M:    Maximilian Luz <luzmaximilian@gmail.com>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/platform/surface/surface_platform_profile.c
 +
  MICROSOFT SURFACE PRO 3 BUTTON DRIVER
  M:    Chen Yu <yu.c.chen@intel.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -11960,7 -11908,6 +11966,7 @@@ F:   Documentation/driver-api/surface_agg
  F:    drivers/platform/surface/aggregator/
  F:    drivers/platform/surface/surface_acpi_notify.c
  F:    drivers/platform/surface/surface_aggregator_cdev.c
 +F:    drivers/platform/surface/surface_aggregator_registry.c
  F:    include/linux/surface_acpi_notify.h
  F:    include/linux/surface_aggregator/
  F:    include/uapi/linux/surface_aggregator/
index 9e8ccfbea026945a1c446c1ef24de9046d0ed673,74d57d951b6899a685d594af76f56d40604a6051..eb02cb962b5e18585ef4be6266351314527a8493
@@@ -1,12 -1,13 +1,13 @@@
  // SPDX-License-Identifier: GPL-2.0-only
  /**
   * extcon-qcom-spmi-misc.c - Qualcomm USB extcon driver to support USB ID
 - *                            detection based on extcon-usb-gpio.c.
 + *                    and VBUS detection based on extcon-usb-gpio.c.
   *
   * Copyright (C) 2016 Linaro, Ltd.
   * Stephen Boyd <stephen.boyd@linaro.org>
   */
  
+ #include <linux/devm-helpers.h>
  #include <linux/extcon-provider.h>
  #include <linux/init.h>
  #include <linux/interrupt.h>
  
  struct qcom_usb_extcon_info {
        struct extcon_dev *edev;
 -      int irq;
 +      int id_irq;
 +      int vbus_irq;
        struct delayed_work wq_detcable;
        unsigned long debounce_jiffies;
  };
  
  static const unsigned int qcom_usb_extcon_cable[] = {
 +      EXTCON_USB,
        EXTCON_USB_HOST,
        EXTCON_NONE,
  };
  
  static void qcom_usb_extcon_detect_cable(struct work_struct *work)
  {
 -      bool id;
 +      bool state = false;
        int ret;
 +      union extcon_property_value val;
        struct qcom_usb_extcon_info *info = container_of(to_delayed_work(work),
                                                    struct qcom_usb_extcon_info,
                                                    wq_detcable);
  
 -      /* check ID and update cable state */
 -      ret = irq_get_irqchip_state(info->irq, IRQCHIP_STATE_LINE_LEVEL, &id);
 -      if (ret)
 -              return;
 +      if (info->id_irq > 0) {
 +              /* check ID and update cable state */
 +              ret = irq_get_irqchip_state(info->id_irq,
 +                              IRQCHIP_STATE_LINE_LEVEL, &state);
 +              if (ret)
 +                      return;
 +
 +              if (!state) {
 +                      val.intval = true;
 +                      extcon_set_property(info->edev, EXTCON_USB_HOST,
 +                                              EXTCON_PROP_USB_SS, val);
 +              }
 +              extcon_set_state_sync(info->edev, EXTCON_USB_HOST, !state);
 +      }
  
 -      extcon_set_state_sync(info->edev, EXTCON_USB_HOST, !id);
 +      if (info->vbus_irq > 0) {
 +              /* check VBUS and update cable state */
 +              ret = irq_get_irqchip_state(info->vbus_irq,
 +                              IRQCHIP_STATE_LINE_LEVEL, &state);
 +              if (ret)
 +                      return;
 +
 +              if (state) {
 +                      val.intval = true;
 +                      extcon_set_property(info->edev, EXTCON_USB,
 +                                              EXTCON_PROP_USB_SS, val);
 +              }
 +              extcon_set_state_sync(info->edev, EXTCON_USB, state);
 +      }
  }
  
  static irqreturn_t qcom_usb_irq_handler(int irq, void *dev_id)
@@@ -105,48 -80,25 +106,52 @@@ static int qcom_usb_extcon_probe(struc
                return ret;
        }
  
 +      ret = extcon_set_property_capability(info->edev,
 +                      EXTCON_USB, EXTCON_PROP_USB_SS);
 +      ret |= extcon_set_property_capability(info->edev,
 +                      EXTCON_USB_HOST, EXTCON_PROP_USB_SS);
 +      if (ret) {
 +              dev_err(dev, "failed to register extcon props rc=%d\n",
 +                                              ret);
 +              return ret;
 +      }
 +
        info->debounce_jiffies = msecs_to_jiffies(USB_ID_DEBOUNCE_MS);
-       INIT_DELAYED_WORK(&info->wq_detcable, qcom_usb_extcon_detect_cable);
+       ret = devm_delayed_work_autocancel(dev, &info->wq_detcable,
+                                          qcom_usb_extcon_detect_cable);
+       if (ret)
+               return ret;
  
 -      info->irq = platform_get_irq_byname(pdev, "usb_id");
 -      if (info->irq < 0)
 -              return info->irq;
 +      info->id_irq = platform_get_irq_byname(pdev, "usb_id");
 +      if (info->id_irq > 0) {
 +              ret = devm_request_threaded_irq(dev, info->id_irq, NULL,
 +                                      qcom_usb_irq_handler,
 +                                      IRQF_TRIGGER_RISING |
 +                                      IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
 +                                      pdev->name, info);
 +              if (ret < 0) {
 +                      dev_err(dev, "failed to request handler for ID IRQ\n");
 +                      return ret;
 +              }
 +      }
  
 -      ret = devm_request_threaded_irq(dev, info->irq, NULL,
 +      info->vbus_irq = platform_get_irq_byname(pdev, "usb_vbus");
 +      if (info->vbus_irq > 0) {
 +              ret = devm_request_threaded_irq(dev, info->vbus_irq, NULL,
                                        qcom_usb_irq_handler,
                                        IRQF_TRIGGER_RISING |
                                        IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
                                        pdev->name, info);
 -      if (ret < 0) {
 -              dev_err(dev, "failed to request handler for ID IRQ\n");
 -              return ret;
 +              if (ret < 0) {
 +                      dev_err(dev, "failed to request handler for VBUS IRQ\n");
 +                      return ret;
 +              }
 +      }
 +
 +      if (info->id_irq < 0 && info->vbus_irq < 0) {
 +              dev_err(dev, "ID and VBUS IRQ not found\n");
 +              return -EINVAL;
        }
  
        platform_set_drvdata(pdev, info);
        return 0;
  }
  
- static int qcom_usb_extcon_remove(struct platform_device *pdev)
- {
-       struct qcom_usb_extcon_info *info = platform_get_drvdata(pdev);
-       cancel_delayed_work_sync(&info->wq_detcable);
-       return 0;
- }
  #ifdef CONFIG_PM_SLEEP
  static int qcom_usb_extcon_suspend(struct device *dev)
  {
        struct qcom_usb_extcon_info *info = dev_get_drvdata(dev);
        int ret = 0;
  
 -      if (device_may_wakeup(dev))
 -              ret = enable_irq_wake(info->irq);
 +      if (device_may_wakeup(dev)) {
 +              if (info->id_irq > 0)
 +                      ret = enable_irq_wake(info->id_irq);
 +              if (info->vbus_irq > 0)
 +                      ret = enable_irq_wake(info->vbus_irq);
 +      }
  
        return ret;
  }
@@@ -188,12 -127,8 +184,12 @@@ static int qcom_usb_extcon_resume(struc
        struct qcom_usb_extcon_info *info = dev_get_drvdata(dev);
        int ret = 0;
  
 -      if (device_may_wakeup(dev))
 -              ret = disable_irq_wake(info->irq);
 +      if (device_may_wakeup(dev)) {
 +              if (info->id_irq > 0)
 +                      ret = disable_irq_wake(info->id_irq);
 +              if (info->vbus_irq > 0)
 +                      ret = disable_irq_wake(info->vbus_irq);
 +      }
  
        return ret;
  }
@@@ -210,7 -145,6 +206,6 @@@ MODULE_DEVICE_TABLE(of, qcom_usb_extcon
  
  static struct platform_driver qcom_usb_extcon_driver = {
        .probe          = qcom_usb_extcon_probe,
-       .remove         = qcom_usb_extcon_remove,
        .driver         = {
                .name   = "extcon-pm8941-misc",
                .pm     = &qcom_usb_extcon_pm_ops,