|
@@ -21,6 +21,7 @@
|
|
|
#include <linux/phy.h>
|
|
|
|
|
|
struct property_set {
|
|
|
+ struct device *dev;
|
|
|
struct fwnode_handle fwnode;
|
|
|
const struct property_entry *properties;
|
|
|
};
|
|
@@ -891,6 +892,7 @@ static struct property_set *pset_copy_set(const struct property_set *pset)
|
|
|
void device_remove_properties(struct device *dev)
|
|
|
{
|
|
|
struct fwnode_handle *fwnode;
|
|
|
+ struct property_set *pset;
|
|
|
|
|
|
fwnode = dev_fwnode(dev);
|
|
|
if (!fwnode)
|
|
@@ -900,16 +902,16 @@ void device_remove_properties(struct device *dev)
|
|
|
* the pset. If there is no real firmware node (ACPI/DT) primary
|
|
|
* will hold the pset.
|
|
|
*/
|
|
|
- if (is_pset_node(fwnode)) {
|
|
|
+ pset = to_pset_node(fwnode);
|
|
|
+ if (pset) {
|
|
|
set_primary_fwnode(dev, NULL);
|
|
|
- pset_free_set(to_pset_node(fwnode));
|
|
|
} else {
|
|
|
- fwnode = fwnode->secondary;
|
|
|
- if (!IS_ERR(fwnode) && is_pset_node(fwnode)) {
|
|
|
+ pset = to_pset_node(fwnode->secondary);
|
|
|
+ if (pset && dev == pset->dev)
|
|
|
set_secondary_fwnode(dev, NULL);
|
|
|
- pset_free_set(to_pset_node(fwnode));
|
|
|
- }
|
|
|
}
|
|
|
+ if (pset && dev == pset->dev)
|
|
|
+ pset_free_set(pset);
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(device_remove_properties);
|
|
|
|
|
@@ -938,6 +940,7 @@ int device_add_properties(struct device *dev,
|
|
|
|
|
|
p->fwnode.ops = &pset_fwnode_ops;
|
|
|
set_secondary_fwnode(dev, &p->fwnode);
|
|
|
+ p->dev = dev;
|
|
|
return 0;
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(device_add_properties);
|