From d2ede0b2227fc00e3c80bdd4043245332c3047a8 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Tue, 15 Dec 2015 12:17:16 -0800 Subject: Add support for Yoga touch input (rhbz 1275718) --- ...-Do-not-overwrite-secondary-fwnode-with-N.patch | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 0011-driver-core-Do-not-overwrite-secondary-fwnode-with-N.patch (limited to '0011-driver-core-Do-not-overwrite-secondary-fwnode-with-N.patch') diff --git a/0011-driver-core-Do-not-overwrite-secondary-fwnode-with-N.patch b/0011-driver-core-Do-not-overwrite-secondary-fwnode-with-N.patch new file mode 100644 index 000000000..4d090acd9 --- /dev/null +++ b/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 +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 +Signed-off-by: Andy Shevchenko +Signed-off-by: Rafael J. Wysocki +--- + 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 + -- cgit