mirror of https://github.com/OpenIPC/firmware.git
				
				
				
			
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Diff
		
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Diff
		
	
	
| --- linux-4.9.37/drivers/net/phy/phy_device.c	2017-07-12 16:42:41.000000000 +0300
 | |
| +++ linux-4.9.y/drivers/net/phy/phy_device.c	2021-06-07 13:01:33.000000000 +0300
 | |
| @@ -234,6 +234,53 @@
 | |
|  }
 | |
|  EXPORT_SYMBOL(phy_register_fixup_for_id);
 | |
|  
 | |
| +/**
 | |
| + * phy_unregister_fixup - remove a phy_fixup from the list
 | |
| + * @bus_id: A string matches fixup->bus_id (or PHY_ANY_ID) in phy_fixup_list
 | |
| + * @phy_uid: A phy id matches fixup->phy_id (or PHY_ANY_UID) in phy_fixup_list
 | |
| + * @phy_uid_mask: Applied to phy_uid and fixup->phy_uid before comparison
 | |
| + */
 | |
| +int phy_unregister_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask)
 | |
| +{
 | |
| +	struct list_head *pos, *n;
 | |
| +	struct phy_fixup *fixup;
 | |
| +	int ret;
 | |
| +
 | |
| +	ret = -ENODEV;
 | |
| +
 | |
| +	mutex_lock(&phy_fixup_lock);
 | |
| +	list_for_each_safe(pos, n, &phy_fixup_list) {
 | |
| +		fixup = list_entry(pos, struct phy_fixup, list);
 | |
| +
 | |
| +		if ((!strcmp(fixup->bus_id, bus_id)) &&
 | |
| +		    ((fixup->phy_uid & phy_uid_mask) ==
 | |
| +		     (phy_uid & phy_uid_mask))) {
 | |
| +			list_del(&fixup->list);
 | |
| +			kfree(fixup);
 | |
| +			ret = 0;
 | |
| +			break;
 | |
| +		}
 | |
| +	}
 | |
| +	mutex_unlock(&phy_fixup_lock);
 | |
| +
 | |
| +	return ret;
 | |
| +}
 | |
| +EXPORT_SYMBOL(phy_unregister_fixup);
 | |
| +
 | |
| +/* Unregisters a fixup of any PHY with the UID in phy_uid */
 | |
| +int phy_unregister_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask)
 | |
| +{
 | |
| +	return phy_unregister_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask);
 | |
| +}
 | |
| +EXPORT_SYMBOL(phy_unregister_fixup_for_uid);
 | |
| +
 | |
| +/* Unregisters a fixup of the PHY with id string bus_id */
 | |
| +int phy_unregister_fixup_for_id(const char *bus_id)
 | |
| +{
 | |
| +	return phy_unregister_fixup(bus_id, PHY_ANY_UID, 0xffffffff);
 | |
| +}
 | |
| +EXPORT_SYMBOL(phy_unregister_fixup_for_id);
 | |
| +
 | |
|  /* Returns 1 if fixup matches phydev in bus_id and phy_uid.
 | |
|   * Fixups can be set to match any in one or more fields.
 | |
|   */
 |