Patch "i2c: mark device nodes only in case of successful instantiation" has been added to the 4.8-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
i2c: mark device nodes only in case of successful instantiation
to the 4.8-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
i2c-mark-device-nodes-only-in-case-of-successful-instantiation.patch
and it can be found in the queue-4.8 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
6a676fb69dcbf3310b9e462c1db66c8e7f6ead38Mon Sep 17 00:00:00 2001
From: Ralf Ramsauer <[email protected]>
Date: Mon, 17 Oct 2016 15:59:57 +0200
Subject: i2c: mark device nodes only in case of successful instantiation
From: Ralf Ramsauer <[email protected]>
commit 6a676fb69dcbf3310b9e462c1db66c8e7f6ead38 upstream.
Instantiated I2C device nodes are marked with OF_POPULATE. This was introduced in 4f001fd30145a6. On unloading, loaded device nodes will of course be unmarked. The problem are nodes that fail during
initialisation: If a node fails, it won't be unloaded and hence not be unmarked.
If a I2C driver module is unloaded and reloaded, it will skip nodes that failed before.
Skip device nodes that are already populated and mark them only in case of success.
--- drivers/i2c/i2c-core.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-)
drivers/i2c/i2c-core.c +10 -1
@@ -1592,6 +1592,7 @@ static struct i2c_client *of_i2c_registestatic void of_i2c_register_devices (struct i2c_adapter *adap) {struct device_node *node; +struct i2c_client *client;/* Only register child devices if the adapter has a node pointer set */ if (!adap->dev.of_node)
@@ -1602,7 +1603,14 @@ static void of_i2c_register_devices(strufor_each_available_child_of_node (adap->dev.of_node, node) {if (of_node_test_and_set_flag (node,OF_POPULATED ))continue ; -of_i2c_register_device (adap, node); + + client =of_i2c_register_device (adap, node); +if (IS_ERR (client)) { +dev_warn (&adap->dev, +"Failed to create I2C device for %s\n" , + node->full_name); +of_node_clear_flag (node,OF_POPULATED ); + } } }
@@ -2201,6 +2209,7 @@ static int of_i2c_notify(struct notifierif (IS_ERR (client)) {dev_err (&adap->dev,"failed to create client for '%s'\n" , rd->dn->full_name); +of_node_clear_flag (rd->dn,OF_POPULATED );return notifier_from_errno (PTR_ERR (client)); }break ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.8/i2c-mark-device-nodes-only-in-case-of-successful-instantiation.patch queue-4.8/spi-mark-device-nodes-only-in-case-of-successful-instantiation.patch