Lines Matching full:phy

4 #include <linux/phy.h>
10 static struct phy_led_trigger *phy_speed_to_led_trigger(struct phy_device *phy,
15 for (i = 0; i < phy->phy_num_led_triggers; i++) {
16 if (phy->phy_led_triggers[i].speed == speed)
17 return &phy->phy_led_triggers[i];
22 static void phy_led_trigger_no_link(struct phy_device *phy)
24 if (phy->last_triggered) {
25 led_trigger_event(&phy->last_triggered->trigger, LED_OFF);
26 led_trigger_event(&phy->led_link_trigger->trigger, LED_OFF);
27 phy->last_triggered = NULL;
31 void phy_led_trigger_change_speed(struct phy_device *phy)
35 if (!phy->link)
36 return phy_led_trigger_no_link(phy);
38 if (phy->speed == 0)
41 plt = phy_speed_to_led_trigger(phy, phy->speed);
43 netdev_alert(phy->attached_dev,
44 "No phy led trigger registered for speed(%d)\n",
45 phy->speed);
46 return phy_led_trigger_no_link(phy);
49 if (plt != phy->last_triggered) {
50 if (!phy->last_triggered)
51 led_trigger_event(&phy->led_link_trigger->trigger,
54 led_trigger_event(&phy->last_triggered->trigger, LED_OFF);
57 phy->last_triggered = plt;
62 static void phy_led_trigger_format_name(struct phy_device *phy, char *buf,
66 phy->mdio.bus->id, phy->mdio.addr, suffix);
69 static int phy_led_trigger_register(struct phy_device *phy,
75 phy_led_trigger_format_name(phy, plt->name, sizeof(plt->name), suffix);
86 int phy_led_triggers_register(struct phy_device *phy)
91 phy->phy_num_led_triggers = phy_supported_speeds(phy, speeds,
93 if (!phy->phy_num_led_triggers)
96 phy->led_link_trigger = kzalloc(sizeof(*phy->led_link_trigger),
98 if (!phy->led_link_trigger) {
103 err = phy_led_trigger_register(phy, phy->led_link_trigger, 0, "link");
107 phy->phy_led_triggers = kcalloc(phy->phy_num_led_triggers,
110 if (!phy->phy_led_triggers) {
115 for (i = 0; i < phy->phy_num_led_triggers; i++) {
116 err = phy_led_trigger_register(phy, &phy->phy_led_triggers[i],
123 phy->last_triggered = NULL;
124 phy_led_trigger_change_speed(phy);
129 phy_led_trigger_unregister(&phy->phy_led_triggers[i]);
130 kfree(phy->phy_led_triggers);
132 phy_led_trigger_unregister(phy->led_link_trigger);
134 kfree(phy->led_link_trigger);
135 phy->led_link_trigger = NULL;
137 phy->phy_num_led_triggers = 0;
142 void phy_led_triggers_unregister(struct phy_device *phy)
146 for (i = 0; i < phy->phy_num_led_triggers; i++)
147 phy_led_trigger_unregister(&phy->phy_led_triggers[i]);
148 kfree(phy->phy_led_triggers);
149 phy->phy_led_triggers = NULL;
151 if (phy->led_link_trigger) {
152 phy_led_trigger_unregister(phy->led_link_trigger);
153 kfree(phy->led_link_trigger);
154 phy->led_link_trigger = NULL;