diff options
Diffstat (limited to 'drivers/base/core.c')
| -rw-r--r-- | drivers/base/core.c | 12 | 
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/base/core.c b/drivers/base/core.c index ac1046a382bc..f6f620aa9408 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -4264,9 +4264,9 @@ static inline bool fwnode_is_primary(struct fwnode_handle *fwnode)   */  void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode)  { -	if (fwnode) { -		struct fwnode_handle *fn = dev->fwnode; +	struct fwnode_handle *fn = dev->fwnode; +	if (fwnode) {  		if (fwnode_is_primary(fn))  			fn = fn->secondary; @@ -4276,8 +4276,12 @@ void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode)  		}  		dev->fwnode = fwnode;  	} else { -		dev->fwnode = fwnode_is_primary(dev->fwnode) ? -			dev->fwnode->secondary : NULL; +		if (fwnode_is_primary(fn)) { +			dev->fwnode = fn->secondary; +			fn->secondary = NULL; +		} else { +			dev->fwnode = NULL; +		}  	}  }  EXPORT_SYMBOL_GPL(set_primary_fwnode);  |