Merge tag 'tag-chrome-platform-for-v5.6' of git://git.kernel.org/pub/scm/linux/kernel...
[sfrench/cifs-2.6.git] / drivers / mfd / cros_ec_dev.c
index 8da4e4cef26fda8b6e5b50d31cbcf542c60ab1a3..39e611695053629114e346d27090e936aa539ea8 100644 (file)
@@ -5,6 +5,7 @@
  * Copyright (C) 2014 Google, Inc.
  */
 
+#include <linux/kconfig.h>
 #include <linux/mfd/core.h>
 #include <linux/module.h>
 #include <linux/mod_devicetable.h>
@@ -86,6 +87,10 @@ static const struct mfd_cell cros_usbpd_charger_cells[] = {
        { .name = "cros-usbpd-logger", },
 };
 
+static const struct mfd_cell cros_usbpd_notify_cells[] = {
+       { .name = "cros-usbpd-notify", },
+};
+
 static const struct cros_feature_to_cells cros_subdevices[] = {
        {
                .id             = EC_FEATURE_CEC,
@@ -201,6 +206,23 @@ static int ec_device_probe(struct platform_device *pdev)
                }
        }
 
+       /*
+        * The PD notifier driver cell is separate since it only needs to be
+        * explicitly added on platforms that don't have the PD notifier ACPI
+        * device entry defined.
+        */
+       if (IS_ENABLED(CONFIG_OF)) {
+               if (cros_ec_check_features(ec, EC_FEATURE_USB_PD)) {
+                       retval = mfd_add_hotplug_devices(ec->dev,
+                                       cros_usbpd_notify_cells,
+                                       ARRAY_SIZE(cros_usbpd_notify_cells));
+                       if (retval)
+                               dev_err(ec->dev,
+                                       "failed to add PD notify devices: %d\n",
+                                       retval);
+               }
+       }
+
        /*
         * The following subdevices cannot be detected by sending the
         * EC_FEATURE_GET_CMD to the Embedded Controller device.