aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/phy/phy_device.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/phy/phy_device.c')
-rw-r--r--drivers/net/phy/phy_device.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index aeaf1bcb12d0..32fa7c76f29c 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -235,6 +235,53 @@ int phy_register_fixup_for_id(const char *bus_id,
235} 235}
236EXPORT_SYMBOL(phy_register_fixup_for_id); 236EXPORT_SYMBOL(phy_register_fixup_for_id);
237 237
238/**
239 * phy_unregister_fixup - remove a phy_fixup from the list
240 * @bus_id: A string matches fixup->bus_id (or PHY_ANY_ID) in phy_fixup_list
241 * @phy_uid: A phy id matches fixup->phy_id (or PHY_ANY_UID) in phy_fixup_list
242 * @phy_uid_mask: Applied to phy_uid and fixup->phy_uid before comparison
243 */
244int phy_unregister_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask)
245{
246 struct list_head *pos, *n;
247 struct phy_fixup *fixup;
248 int ret;
249
250 ret = -ENODEV;
251
252 mutex_lock(&phy_fixup_lock);
253 list_for_each_safe(pos, n, &phy_fixup_list) {
254 fixup = list_entry(pos, struct phy_fixup, list);
255
256 if ((!strcmp(fixup->bus_id, bus_id)) &&
257 ((fixup->phy_uid & phy_uid_mask) ==
258 (phy_uid & phy_uid_mask))) {
259 list_del(&fixup->list);
260 kfree(fixup);
261 ret = 0;
262 break;
263 }
264 }
265 mutex_unlock(&phy_fixup_lock);
266
267 return ret;
268}
269EXPORT_SYMBOL(phy_unregister_fixup);
270
271/* Unregisters a fixup of any PHY with the UID in phy_uid */
272int phy_unregister_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask)
273{
274 return phy_unregister_fixup(PHY_ANY_ID, phy_uid, phy_uid_mask);
275}
276EXPORT_SYMBOL(phy_unregister_fixup_for_uid);
277
278/* Unregisters a fixup of the PHY with id string bus_id */
279int phy_unregister_fixup_for_id(const char *bus_id)
280{
281 return phy_unregister_fixup(bus_id, PHY_ANY_UID, 0xffffffff);
282}
283EXPORT_SYMBOL(phy_unregister_fixup_for_id);
284
238/* Returns 1 if fixup matches phydev in bus_id and phy_uid. 285/* Returns 1 if fixup matches phydev in bus_id and phy_uid.
239 * Fixups can be set to match any in one or more fields. 286 * Fixups can be set to match any in one or more fields.
240 */ 287 */