diff options
Diffstat (limited to 'freed-ora/current/master/0011-driver-core-Do-not-overwrite-secondary-fwnode-with-N.patch')
-rw-r--r-- | freed-ora/current/master/0011-driver-core-Do-not-overwrite-secondary-fwnode-with-N.patch | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/freed-ora/current/master/0011-driver-core-Do-not-overwrite-secondary-fwnode-with-N.patch b/freed-ora/current/master/0011-driver-core-Do-not-overwrite-secondary-fwnode-with-N.patch new file mode 100644 index 000000000..4d090acd9 --- /dev/null +++ b/freed-ora/current/master/0011-driver-core-Do-not-overwrite-secondary-fwnode-with-N.patch @@ -0,0 +1,47 @@ +From 55f89a8a4538803195395bdf347cbba51dcb1906 Mon Sep 17 00:00:00 2001 +From: Mika Westerberg <mika.westerberg@linux.intel.com> +Date: Mon, 30 Nov 2015 17:11:39 +0200 +Subject: [PATCH 11/16] driver core: Do not overwrite secondary fwnode with + NULL if it is set + +If multiple devices share single firmware node like it is case with MFD +devices, the same firmware node (ACPI) is assigned to all of them. The +function also modifies the shared firmware node in order to preserve +secondary firmware node of the device in question. + +If the new device which is sharing the firmware node does not have +secondary node it will be NULL which will be assigned to the secondary node +of the shared firmware node losing all built-in properties. + +Prevent this by setting the secondary firmware node only if the replacement +is non-NULL. + +Print also warning if someone tries to overwrite secondary node that has +already been assigned. + +Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com> +Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> +Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> +--- + drivers/base/core.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/drivers/base/core.c b/drivers/base/core.c +index b7d56c5..0a8bdad 100644 +--- a/drivers/base/core.c ++++ b/drivers/base/core.c +@@ -2261,7 +2261,10 @@ void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode) + if (fwnode_is_primary(fn)) + fn = fn->secondary; + +- fwnode->secondary = fn; ++ if (fn) { ++ WARN_ON(fwnode->secondary); ++ fwnode->secondary = fn; ++ } + dev->fwnode = fwnode; + } else { + dev->fwnode = fwnode_is_primary(dev->fwnode) ? +-- +2.5.0 + |