1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/acpi.h>
3 #include <linux/ctype.h>
4 #include <linux/delay.h>
5 #include <linux/gpio/consumer.h>
6 #include <linux/hwmon.h>
8 #include <linux/interrupt.h>
9 #include <linux/jiffies.h>
10 #include <linux/module.h>
11 #include <linux/mutex.h>
13 #include <linux/phy.h>
14 #include <linux/platform_device.h>
15 #include <linux/rtnetlink.h>
16 #include <linux/slab.h>
17 #include <linux/workqueue.h>
31 SFP_F_PRESENT
= BIT(GPIO_MODDEF0
),
32 SFP_F_LOS
= BIT(GPIO_LOS
),
33 SFP_F_TX_FAULT
= BIT(GPIO_TX_FAULT
),
34 SFP_F_TX_DISABLE
= BIT(GPIO_TX_DISABLE
),
35 SFP_F_RATE_SELECT
= BIT(GPIO_RATE_SELECT
),
74 static const char * const mod_state_strings
[] = {
75 [SFP_MOD_EMPTY
] = "empty",
76 [SFP_MOD_ERROR
] = "error",
77 [SFP_MOD_PROBE
] = "probe",
78 [SFP_MOD_WAITDEV
] = "waitdev",
79 [SFP_MOD_HPOWER
] = "hpower",
80 [SFP_MOD_WAITPWR
] = "waitpwr",
81 [SFP_MOD_PRESENT
] = "present",
84 static const char *mod_state_to_str(unsigned short mod_state
)
86 if (mod_state
>= ARRAY_SIZE(mod_state_strings
))
87 return "Unknown module state";
88 return mod_state_strings
[mod_state
];
91 static const char * const dev_state_strings
[] = {
92 [SFP_DEV_DETACHED
] = "detached",
93 [SFP_DEV_DOWN
] = "down",
97 static const char *dev_state_to_str(unsigned short dev_state
)
99 if (dev_state
>= ARRAY_SIZE(dev_state_strings
))
100 return "Unknown device state";
101 return dev_state_strings
[dev_state
];
104 static const char * const event_strings
[] = {
105 [SFP_E_INSERT
] = "insert",
106 [SFP_E_REMOVE
] = "remove",
107 [SFP_E_DEV_ATTACH
] = "dev_attach",
108 [SFP_E_DEV_DETACH
] = "dev_detach",
109 [SFP_E_DEV_DOWN
] = "dev_down",
110 [SFP_E_DEV_UP
] = "dev_up",
111 [SFP_E_TX_FAULT
] = "tx_fault",
112 [SFP_E_TX_CLEAR
] = "tx_clear",
113 [SFP_E_LOS_HIGH
] = "los_high",
114 [SFP_E_LOS_LOW
] = "los_low",
115 [SFP_E_TIMEOUT
] = "timeout",
118 static const char *event_to_str(unsigned short event
)
120 if (event
>= ARRAY_SIZE(event_strings
))
121 return "Unknown event";
122 return event_strings
[event
];
125 static const char * const sm_state_strings
[] = {
126 [SFP_S_DOWN
] = "down",
127 [SFP_S_FAIL
] = "fail",
128 [SFP_S_WAIT
] = "wait",
129 [SFP_S_INIT
] = "init",
130 [SFP_S_INIT_PHY
] = "init_phy",
131 [SFP_S_INIT_TX_FAULT
] = "init_tx_fault",
132 [SFP_S_WAIT_LOS
] = "wait_los",
133 [SFP_S_LINK_UP
] = "link_up",
134 [SFP_S_TX_FAULT
] = "tx_fault",
135 [SFP_S_REINIT
] = "reinit",
136 [SFP_S_TX_DISABLE
] = "rx_disable",
139 static const char *sm_state_to_str(unsigned short sm_state
)
141 if (sm_state
>= ARRAY_SIZE(sm_state_strings
))
142 return "Unknown state";
143 return sm_state_strings
[sm_state
];
146 static const char *gpio_of_names
[] = {
154 static const enum gpiod_flags gpio_flags
[] = {
162 /* t_start_up (SFF-8431) or t_init (SFF-8472) is the time required for a
163 * non-cooled module to initialise its laser safety circuitry. We wait
164 * an initial T_WAIT period before we check the tx fault to give any PHY
165 * on board (for a copper SFP) time to initialise.
167 #define T_WAIT msecs_to_jiffies(50)
168 #define T_START_UP msecs_to_jiffies(300)
169 #define T_START_UP_BAD_GPON msecs_to_jiffies(60000)
171 /* t_reset is the time required to assert the TX_DISABLE signal to reset
172 * an indicated TX_FAULT.
174 #define T_RESET_US 10
175 #define T_FAULT_RECOVER msecs_to_jiffies(1000)
177 /* N_FAULT_INIT is the number of recovery attempts at module initialisation
178 * time. If the TX_FAULT signal is not deasserted after this number of
179 * attempts at clearing it, we decide that the module is faulty.
180 * N_FAULT is the same but after the module has initialised.
182 #define N_FAULT_INIT 5
185 /* T_PHY_RETRY is the time interval between attempts to probe the PHY.
186 * R_PHY_RETRY is the number of attempts.
188 #define T_PHY_RETRY msecs_to_jiffies(50)
189 #define R_PHY_RETRY 12
191 /* SFP module presence detection is poor: the three MOD DEF signals are
192 * the same length on the PCB, which means it's possible for MOD DEF 0 to
193 * connect before the I2C bus on MOD DEF 1/2.
195 * The SFF-8472 specifies t_serial ("Time from power on until module is
196 * ready for data transmission over the two wire serial bus.") as 300ms.
198 #define T_SERIAL msecs_to_jiffies(300)
199 #define T_HPOWER_LEVEL msecs_to_jiffies(300)
200 #define T_PROBE_RETRY_INIT msecs_to_jiffies(100)
201 #define R_PROBE_RETRY_INIT 10
202 #define T_PROBE_RETRY_SLOW msecs_to_jiffies(5000)
203 #define R_PROBE_RETRY_SLOW 12
205 /* SFP modules appear to always have their PHY configured for bus address
206 * 0x56 (which with mdio-i2c, translates to a PHY address of 22).
208 #define SFP_PHY_ADDR 22
212 bool (*module_supported
)(const struct sfp_eeprom_id
*id
);
217 struct i2c_adapter
*i2c
;
218 struct mii_bus
*i2c_mii
;
219 struct sfp_bus
*sfp_bus
;
220 struct phy_device
*mod_phy
;
221 const struct sff_data
*type
;
224 unsigned int (*get_state
)(struct sfp
*);
225 void (*set_state
)(struct sfp
*, unsigned int);
226 int (*read
)(struct sfp
*, bool, u8
, void *, size_t);
227 int (*write
)(struct sfp
*, bool, u8
, void *, size_t);
229 struct gpio_desc
*gpio
[GPIO_MAX
];
230 int gpio_irq
[GPIO_MAX
];
234 struct mutex st_mutex
; /* Protects state */
235 unsigned int state_soft_mask
;
237 struct delayed_work poll
;
238 struct delayed_work timeout
;
239 struct mutex sm_mutex
; /* Protects state machine */
240 unsigned char sm_mod_state
;
241 unsigned char sm_mod_tries_init
;
242 unsigned char sm_mod_tries
;
243 unsigned char sm_dev_state
;
244 unsigned short sm_state
;
245 unsigned char sm_fault_retries
;
246 unsigned char sm_phy_retries
;
248 struct sfp_eeprom_id id
;
249 unsigned int module_power_mW
;
250 unsigned int module_t_start_up
;
252 #if IS_ENABLED(CONFIG_HWMON)
253 struct sfp_diag diag
;
254 struct delayed_work hwmon_probe
;
255 unsigned int hwmon_tries
;
256 struct device
*hwmon_dev
;
262 static bool sff_module_supported(const struct sfp_eeprom_id
*id
)
264 return id
->base
.phys_id
== SFF8024_ID_SFF_8472
&&
265 id
->base
.phys_ext_id
== SFP_PHYS_EXT_ID_SFP
;
268 static const struct sff_data sff_data
= {
269 .gpios
= SFP_F_LOS
| SFP_F_TX_FAULT
| SFP_F_TX_DISABLE
,
270 .module_supported
= sff_module_supported
,
273 static bool sfp_module_supported(const struct sfp_eeprom_id
*id
)
275 return id
->base
.phys_id
== SFF8024_ID_SFP
&&
276 id
->base
.phys_ext_id
== SFP_PHYS_EXT_ID_SFP
;
279 static const struct sff_data sfp_data
= {
280 .gpios
= SFP_F_PRESENT
| SFP_F_LOS
| SFP_F_TX_FAULT
|
281 SFP_F_TX_DISABLE
| SFP_F_RATE_SELECT
,
282 .module_supported
= sfp_module_supported
,
285 static const struct of_device_id sfp_of_match
[] = {
286 { .compatible
= "sff,sff", .data
= &sff_data
, },
287 { .compatible
= "sff,sfp", .data
= &sfp_data
, },
290 MODULE_DEVICE_TABLE(of
, sfp_of_match
);
292 static unsigned long poll_jiffies
;
294 static unsigned int sfp_gpio_get_state(struct sfp
*sfp
)
296 unsigned int i
, state
, v
;
298 for (i
= state
= 0; i
< GPIO_MAX
; i
++) {
299 if (gpio_flags
[i
] != GPIOD_IN
|| !sfp
->gpio
[i
])
302 v
= gpiod_get_value_cansleep(sfp
->gpio
[i
]);
310 static unsigned int sff_gpio_get_state(struct sfp
*sfp
)
312 return sfp_gpio_get_state(sfp
) | SFP_F_PRESENT
;
315 static void sfp_gpio_set_state(struct sfp
*sfp
, unsigned int state
)
317 if (state
& SFP_F_PRESENT
) {
318 /* If the module is present, drive the signals */
319 if (sfp
->gpio
[GPIO_TX_DISABLE
])
320 gpiod_direction_output(sfp
->gpio
[GPIO_TX_DISABLE
],
321 state
& SFP_F_TX_DISABLE
);
322 if (state
& SFP_F_RATE_SELECT
)
323 gpiod_direction_output(sfp
->gpio
[GPIO_RATE_SELECT
],
324 state
& SFP_F_RATE_SELECT
);
326 /* Otherwise, let them float to the pull-ups */
327 if (sfp
->gpio
[GPIO_TX_DISABLE
])
328 gpiod_direction_input(sfp
->gpio
[GPIO_TX_DISABLE
]);
329 if (state
& SFP_F_RATE_SELECT
)
330 gpiod_direction_input(sfp
->gpio
[GPIO_RATE_SELECT
]);
334 static int sfp_i2c_read(struct sfp
*sfp
, bool a2
, u8 dev_addr
, void *buf
,
337 struct i2c_msg msgs
[2];
338 u8 bus_addr
= a2
? 0x51 : 0x50;
342 msgs
[0].addr
= bus_addr
;
345 msgs
[0].buf
= &dev_addr
;
346 msgs
[1].addr
= bus_addr
;
347 msgs
[1].flags
= I2C_M_RD
;
356 msgs
[1].len
= this_len
;
358 ret
= i2c_transfer(sfp
->i2c
, msgs
, ARRAY_SIZE(msgs
));
362 if (ret
!= ARRAY_SIZE(msgs
))
365 msgs
[1].buf
+= this_len
;
366 dev_addr
+= this_len
;
370 return msgs
[1].buf
- (u8
*)buf
;
373 static int sfp_i2c_write(struct sfp
*sfp
, bool a2
, u8 dev_addr
, void *buf
,
376 struct i2c_msg msgs
[1];
377 u8 bus_addr
= a2
? 0x51 : 0x50;
380 msgs
[0].addr
= bus_addr
;
382 msgs
[0].len
= 1 + len
;
383 msgs
[0].buf
= kmalloc(1 + len
, GFP_KERNEL
);
387 msgs
[0].buf
[0] = dev_addr
;
388 memcpy(&msgs
[0].buf
[1], buf
, len
);
390 ret
= i2c_transfer(sfp
->i2c
, msgs
, ARRAY_SIZE(msgs
));
397 return ret
== ARRAY_SIZE(msgs
) ? len
: 0;
400 static int sfp_i2c_configure(struct sfp
*sfp
, struct i2c_adapter
*i2c
)
402 struct mii_bus
*i2c_mii
;
405 if (!i2c_check_functionality(i2c
, I2C_FUNC_I2C
))
409 sfp
->read
= sfp_i2c_read
;
410 sfp
->write
= sfp_i2c_write
;
412 i2c_mii
= mdio_i2c_alloc(sfp
->dev
, i2c
);
414 return PTR_ERR(i2c_mii
);
416 i2c_mii
->name
= "SFP I2C Bus";
417 i2c_mii
->phy_mask
= ~0;
419 ret
= mdiobus_register(i2c_mii
);
421 mdiobus_free(i2c_mii
);
425 sfp
->i2c_mii
= i2c_mii
;
431 static int sfp_read(struct sfp
*sfp
, bool a2
, u8 addr
, void *buf
, size_t len
)
433 return sfp
->read(sfp
, a2
, addr
, buf
, len
);
436 static int sfp_write(struct sfp
*sfp
, bool a2
, u8 addr
, void *buf
, size_t len
)
438 return sfp
->write(sfp
, a2
, addr
, buf
, len
);
441 static unsigned int sfp_soft_get_state(struct sfp
*sfp
)
443 unsigned int state
= 0;
447 ret
= sfp_read(sfp
, true, SFP_STATUS
, &status
, sizeof(status
));
448 if (ret
== sizeof(status
)) {
449 if (status
& SFP_STATUS_RX_LOS
)
451 if (status
& SFP_STATUS_TX_FAULT
)
452 state
|= SFP_F_TX_FAULT
;
454 dev_err_ratelimited(sfp
->dev
,
455 "failed to read SFP soft status: %d\n",
457 /* Preserve the current state */
461 return state
& sfp
->state_soft_mask
;
464 static void sfp_soft_set_state(struct sfp
*sfp
, unsigned int state
)
468 if (sfp_read(sfp
, true, SFP_STATUS
, &status
, sizeof(status
)) ==
470 if (state
& SFP_F_TX_DISABLE
)
471 status
|= SFP_STATUS_TX_DISABLE_FORCE
;
473 status
&= ~SFP_STATUS_TX_DISABLE_FORCE
;
475 sfp_write(sfp
, true, SFP_STATUS
, &status
, sizeof(status
));
479 static void sfp_soft_start_poll(struct sfp
*sfp
)
481 const struct sfp_eeprom_id
*id
= &sfp
->id
;
483 sfp
->state_soft_mask
= 0;
484 if (id
->ext
.enhopts
& SFP_ENHOPTS_SOFT_TX_DISABLE
&&
485 !sfp
->gpio
[GPIO_TX_DISABLE
])
486 sfp
->state_soft_mask
|= SFP_F_TX_DISABLE
;
487 if (id
->ext
.enhopts
& SFP_ENHOPTS_SOFT_TX_FAULT
&&
488 !sfp
->gpio
[GPIO_TX_FAULT
])
489 sfp
->state_soft_mask
|= SFP_F_TX_FAULT
;
490 if (id
->ext
.enhopts
& SFP_ENHOPTS_SOFT_RX_LOS
&&
491 !sfp
->gpio
[GPIO_LOS
])
492 sfp
->state_soft_mask
|= SFP_F_LOS
;
494 if (sfp
->state_soft_mask
& (SFP_F_LOS
| SFP_F_TX_FAULT
) &&
496 mod_delayed_work(system_wq
, &sfp
->poll
, poll_jiffies
);
499 static void sfp_soft_stop_poll(struct sfp
*sfp
)
501 sfp
->state_soft_mask
= 0;
504 static unsigned int sfp_get_state(struct sfp
*sfp
)
506 unsigned int state
= sfp
->get_state(sfp
);
508 if (state
& SFP_F_PRESENT
&&
509 sfp
->state_soft_mask
& (SFP_F_LOS
| SFP_F_TX_FAULT
))
510 state
|= sfp_soft_get_state(sfp
);
515 static void sfp_set_state(struct sfp
*sfp
, unsigned int state
)
517 sfp
->set_state(sfp
, state
);
519 if (state
& SFP_F_PRESENT
&&
520 sfp
->state_soft_mask
& SFP_F_TX_DISABLE
)
521 sfp_soft_set_state(sfp
, state
);
524 static unsigned int sfp_check(void *buf
, size_t len
)
528 for (p
= buf
, check
= 0; len
; p
++, len
--)
535 #if IS_ENABLED(CONFIG_HWMON)
536 static umode_t
sfp_hwmon_is_visible(const void *data
,
537 enum hwmon_sensor_types type
,
538 u32 attr
, int channel
)
540 const struct sfp
*sfp
= data
;
545 case hwmon_temp_min_alarm
:
546 case hwmon_temp_max_alarm
:
547 case hwmon_temp_lcrit_alarm
:
548 case hwmon_temp_crit_alarm
:
551 case hwmon_temp_lcrit
:
552 case hwmon_temp_crit
:
553 if (!(sfp
->id
.ext
.enhopts
& SFP_ENHOPTS_ALARMWARN
))
556 case hwmon_temp_input
:
557 case hwmon_temp_label
:
564 case hwmon_in_min_alarm
:
565 case hwmon_in_max_alarm
:
566 case hwmon_in_lcrit_alarm
:
567 case hwmon_in_crit_alarm
:
572 if (!(sfp
->id
.ext
.enhopts
& SFP_ENHOPTS_ALARMWARN
))
583 case hwmon_curr_min_alarm
:
584 case hwmon_curr_max_alarm
:
585 case hwmon_curr_lcrit_alarm
:
586 case hwmon_curr_crit_alarm
:
589 case hwmon_curr_lcrit
:
590 case hwmon_curr_crit
:
591 if (!(sfp
->id
.ext
.enhopts
& SFP_ENHOPTS_ALARMWARN
))
594 case hwmon_curr_input
:
595 case hwmon_curr_label
:
601 /* External calibration of receive power requires
602 * floating point arithmetic. Doing that in the kernel
603 * is not easy, so just skip it. If the module does
604 * not require external calibration, we can however
605 * show receiver power, since FP is then not needed.
607 if (sfp
->id
.ext
.diagmon
& SFP_DIAGMON_EXT_CAL
&&
611 case hwmon_power_min_alarm
:
612 case hwmon_power_max_alarm
:
613 case hwmon_power_lcrit_alarm
:
614 case hwmon_power_crit_alarm
:
615 case hwmon_power_min
:
616 case hwmon_power_max
:
617 case hwmon_power_lcrit
:
618 case hwmon_power_crit
:
619 if (!(sfp
->id
.ext
.enhopts
& SFP_ENHOPTS_ALARMWARN
))
622 case hwmon_power_input
:
623 case hwmon_power_label
:
633 static int sfp_hwmon_read_sensor(struct sfp
*sfp
, int reg
, long *value
)
638 err
= sfp_read(sfp
, true, reg
, &val
, sizeof(val
));
642 *value
= be16_to_cpu(val
);
647 static void sfp_hwmon_to_rx_power(long *value
)
649 *value
= DIV_ROUND_CLOSEST(*value
, 10);
652 static void sfp_hwmon_calibrate(struct sfp
*sfp
, unsigned int slope
, int offset
,
655 if (sfp
->id
.ext
.diagmon
& SFP_DIAGMON_EXT_CAL
)
656 *value
= DIV_ROUND_CLOSEST(*value
* slope
, 256) + offset
;
659 static void sfp_hwmon_calibrate_temp(struct sfp
*sfp
, long *value
)
661 sfp_hwmon_calibrate(sfp
, be16_to_cpu(sfp
->diag
.cal_t_slope
),
662 be16_to_cpu(sfp
->diag
.cal_t_offset
), value
);
664 if (*value
>= 0x8000)
667 *value
= DIV_ROUND_CLOSEST(*value
* 1000, 256);
670 static void sfp_hwmon_calibrate_vcc(struct sfp
*sfp
, long *value
)
672 sfp_hwmon_calibrate(sfp
, be16_to_cpu(sfp
->diag
.cal_v_slope
),
673 be16_to_cpu(sfp
->diag
.cal_v_offset
), value
);
675 *value
= DIV_ROUND_CLOSEST(*value
, 10);
678 static void sfp_hwmon_calibrate_bias(struct sfp
*sfp
, long *value
)
680 sfp_hwmon_calibrate(sfp
, be16_to_cpu(sfp
->diag
.cal_txi_slope
),
681 be16_to_cpu(sfp
->diag
.cal_txi_offset
), value
);
683 *value
= DIV_ROUND_CLOSEST(*value
, 500);
686 static void sfp_hwmon_calibrate_tx_power(struct sfp
*sfp
, long *value
)
688 sfp_hwmon_calibrate(sfp
, be16_to_cpu(sfp
->diag
.cal_txpwr_slope
),
689 be16_to_cpu(sfp
->diag
.cal_txpwr_offset
), value
);
691 *value
= DIV_ROUND_CLOSEST(*value
, 10);
694 static int sfp_hwmon_read_temp(struct sfp
*sfp
, int reg
, long *value
)
698 err
= sfp_hwmon_read_sensor(sfp
, reg
, value
);
702 sfp_hwmon_calibrate_temp(sfp
, value
);
707 static int sfp_hwmon_read_vcc(struct sfp
*sfp
, int reg
, long *value
)
711 err
= sfp_hwmon_read_sensor(sfp
, reg
, value
);
715 sfp_hwmon_calibrate_vcc(sfp
, value
);
720 static int sfp_hwmon_read_bias(struct sfp
*sfp
, int reg
, long *value
)
724 err
= sfp_hwmon_read_sensor(sfp
, reg
, value
);
728 sfp_hwmon_calibrate_bias(sfp
, value
);
733 static int sfp_hwmon_read_tx_power(struct sfp
*sfp
, int reg
, long *value
)
737 err
= sfp_hwmon_read_sensor(sfp
, reg
, value
);
741 sfp_hwmon_calibrate_tx_power(sfp
, value
);
746 static int sfp_hwmon_read_rx_power(struct sfp
*sfp
, int reg
, long *value
)
750 err
= sfp_hwmon_read_sensor(sfp
, reg
, value
);
754 sfp_hwmon_to_rx_power(value
);
759 static int sfp_hwmon_temp(struct sfp
*sfp
, u32 attr
, long *value
)
765 case hwmon_temp_input
:
766 return sfp_hwmon_read_temp(sfp
, SFP_TEMP
, value
);
768 case hwmon_temp_lcrit
:
769 *value
= be16_to_cpu(sfp
->diag
.temp_low_alarm
);
770 sfp_hwmon_calibrate_temp(sfp
, value
);
774 *value
= be16_to_cpu(sfp
->diag
.temp_low_warn
);
775 sfp_hwmon_calibrate_temp(sfp
, value
);
778 *value
= be16_to_cpu(sfp
->diag
.temp_high_warn
);
779 sfp_hwmon_calibrate_temp(sfp
, value
);
782 case hwmon_temp_crit
:
783 *value
= be16_to_cpu(sfp
->diag
.temp_high_alarm
);
784 sfp_hwmon_calibrate_temp(sfp
, value
);
787 case hwmon_temp_lcrit_alarm
:
788 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
792 *value
= !!(status
& SFP_ALARM0_TEMP_LOW
);
795 case hwmon_temp_min_alarm
:
796 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
800 *value
= !!(status
& SFP_WARN0_TEMP_LOW
);
803 case hwmon_temp_max_alarm
:
804 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
808 *value
= !!(status
& SFP_WARN0_TEMP_HIGH
);
811 case hwmon_temp_crit_alarm
:
812 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
816 *value
= !!(status
& SFP_ALARM0_TEMP_HIGH
);
825 static int sfp_hwmon_vcc(struct sfp
*sfp
, u32 attr
, long *value
)
832 return sfp_hwmon_read_vcc(sfp
, SFP_VCC
, value
);
835 *value
= be16_to_cpu(sfp
->diag
.volt_low_alarm
);
836 sfp_hwmon_calibrate_vcc(sfp
, value
);
840 *value
= be16_to_cpu(sfp
->diag
.volt_low_warn
);
841 sfp_hwmon_calibrate_vcc(sfp
, value
);
845 *value
= be16_to_cpu(sfp
->diag
.volt_high_warn
);
846 sfp_hwmon_calibrate_vcc(sfp
, value
);
850 *value
= be16_to_cpu(sfp
->diag
.volt_high_alarm
);
851 sfp_hwmon_calibrate_vcc(sfp
, value
);
854 case hwmon_in_lcrit_alarm
:
855 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
859 *value
= !!(status
& SFP_ALARM0_VCC_LOW
);
862 case hwmon_in_min_alarm
:
863 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
867 *value
= !!(status
& SFP_WARN0_VCC_LOW
);
870 case hwmon_in_max_alarm
:
871 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
875 *value
= !!(status
& SFP_WARN0_VCC_HIGH
);
878 case hwmon_in_crit_alarm
:
879 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
883 *value
= !!(status
& SFP_ALARM0_VCC_HIGH
);
892 static int sfp_hwmon_bias(struct sfp
*sfp
, u32 attr
, long *value
)
898 case hwmon_curr_input
:
899 return sfp_hwmon_read_bias(sfp
, SFP_TX_BIAS
, value
);
901 case hwmon_curr_lcrit
:
902 *value
= be16_to_cpu(sfp
->diag
.bias_low_alarm
);
903 sfp_hwmon_calibrate_bias(sfp
, value
);
907 *value
= be16_to_cpu(sfp
->diag
.bias_low_warn
);
908 sfp_hwmon_calibrate_bias(sfp
, value
);
912 *value
= be16_to_cpu(sfp
->diag
.bias_high_warn
);
913 sfp_hwmon_calibrate_bias(sfp
, value
);
916 case hwmon_curr_crit
:
917 *value
= be16_to_cpu(sfp
->diag
.bias_high_alarm
);
918 sfp_hwmon_calibrate_bias(sfp
, value
);
921 case hwmon_curr_lcrit_alarm
:
922 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
926 *value
= !!(status
& SFP_ALARM0_TX_BIAS_LOW
);
929 case hwmon_curr_min_alarm
:
930 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
934 *value
= !!(status
& SFP_WARN0_TX_BIAS_LOW
);
937 case hwmon_curr_max_alarm
:
938 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
942 *value
= !!(status
& SFP_WARN0_TX_BIAS_HIGH
);
945 case hwmon_curr_crit_alarm
:
946 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
950 *value
= !!(status
& SFP_ALARM0_TX_BIAS_HIGH
);
959 static int sfp_hwmon_tx_power(struct sfp
*sfp
, u32 attr
, long *value
)
965 case hwmon_power_input
:
966 return sfp_hwmon_read_tx_power(sfp
, SFP_TX_POWER
, value
);
968 case hwmon_power_lcrit
:
969 *value
= be16_to_cpu(sfp
->diag
.txpwr_low_alarm
);
970 sfp_hwmon_calibrate_tx_power(sfp
, value
);
973 case hwmon_power_min
:
974 *value
= be16_to_cpu(sfp
->diag
.txpwr_low_warn
);
975 sfp_hwmon_calibrate_tx_power(sfp
, value
);
978 case hwmon_power_max
:
979 *value
= be16_to_cpu(sfp
->diag
.txpwr_high_warn
);
980 sfp_hwmon_calibrate_tx_power(sfp
, value
);
983 case hwmon_power_crit
:
984 *value
= be16_to_cpu(sfp
->diag
.txpwr_high_alarm
);
985 sfp_hwmon_calibrate_tx_power(sfp
, value
);
988 case hwmon_power_lcrit_alarm
:
989 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
993 *value
= !!(status
& SFP_ALARM0_TXPWR_LOW
);
996 case hwmon_power_min_alarm
:
997 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1001 *value
= !!(status
& SFP_WARN0_TXPWR_LOW
);
1004 case hwmon_power_max_alarm
:
1005 err
= sfp_read(sfp
, true, SFP_WARN0
, &status
, sizeof(status
));
1009 *value
= !!(status
& SFP_WARN0_TXPWR_HIGH
);
1012 case hwmon_power_crit_alarm
:
1013 err
= sfp_read(sfp
, true, SFP_ALARM0
, &status
, sizeof(status
));
1017 *value
= !!(status
& SFP_ALARM0_TXPWR_HIGH
);
1026 static int sfp_hwmon_rx_power(struct sfp
*sfp
, u32 attr
, long *value
)
1032 case hwmon_power_input
:
1033 return sfp_hwmon_read_rx_power(sfp
, SFP_RX_POWER
, value
);
1035 case hwmon_power_lcrit
:
1036 *value
= be16_to_cpu(sfp
->diag
.rxpwr_low_alarm
);
1037 sfp_hwmon_to_rx_power(value
);
1040 case hwmon_power_min
:
1041 *value
= be16_to_cpu(sfp
->diag
.rxpwr_low_warn
);
1042 sfp_hwmon_to_rx_power(value
);
1045 case hwmon_power_max
:
1046 *value
= be16_to_cpu(sfp
->diag
.rxpwr_high_warn
);
1047 sfp_hwmon_to_rx_power(value
);
1050 case hwmon_power_crit
:
1051 *value
= be16_to_cpu(sfp
->diag
.rxpwr_high_alarm
);
1052 sfp_hwmon_to_rx_power(value
);
1055 case hwmon_power_lcrit_alarm
:
1056 err
= sfp_read(sfp
, true, SFP_ALARM1
, &status
, sizeof(status
));
1060 *value
= !!(status
& SFP_ALARM1_RXPWR_LOW
);
1063 case hwmon_power_min_alarm
:
1064 err
= sfp_read(sfp
, true, SFP_WARN1
, &status
, sizeof(status
));
1068 *value
= !!(status
& SFP_WARN1_RXPWR_LOW
);
1071 case hwmon_power_max_alarm
:
1072 err
= sfp_read(sfp
, true, SFP_WARN1
, &status
, sizeof(status
));
1076 *value
= !!(status
& SFP_WARN1_RXPWR_HIGH
);
1079 case hwmon_power_crit_alarm
:
1080 err
= sfp_read(sfp
, true, SFP_ALARM1
, &status
, sizeof(status
));
1084 *value
= !!(status
& SFP_ALARM1_RXPWR_HIGH
);
1093 static int sfp_hwmon_read(struct device
*dev
, enum hwmon_sensor_types type
,
1094 u32 attr
, int channel
, long *value
)
1096 struct sfp
*sfp
= dev_get_drvdata(dev
);
1100 return sfp_hwmon_temp(sfp
, attr
, value
);
1102 return sfp_hwmon_vcc(sfp
, attr
, value
);
1104 return sfp_hwmon_bias(sfp
, attr
, value
);
1108 return sfp_hwmon_tx_power(sfp
, attr
, value
);
1110 return sfp_hwmon_rx_power(sfp
, attr
, value
);
1119 static const char *const sfp_hwmon_power_labels
[] = {
1124 static int sfp_hwmon_read_string(struct device
*dev
,
1125 enum hwmon_sensor_types type
,
1126 u32 attr
, int channel
, const char **str
)
1131 case hwmon_curr_label
:
1140 case hwmon_temp_label
:
1141 *str
= "temperature";
1149 case hwmon_in_label
:
1158 case hwmon_power_label
:
1159 *str
= sfp_hwmon_power_labels
[channel
];
1172 static const struct hwmon_ops sfp_hwmon_ops
= {
1173 .is_visible
= sfp_hwmon_is_visible
,
1174 .read
= sfp_hwmon_read
,
1175 .read_string
= sfp_hwmon_read_string
,
1178 static u32 sfp_hwmon_chip_config
[] = {
1179 HWMON_C_REGISTER_TZ
,
1183 static const struct hwmon_channel_info sfp_hwmon_chip
= {
1185 .config
= sfp_hwmon_chip_config
,
1188 static u32 sfp_hwmon_temp_config
[] = {
1190 HWMON_T_MAX
| HWMON_T_MIN
|
1191 HWMON_T_MAX_ALARM
| HWMON_T_MIN_ALARM
|
1192 HWMON_T_CRIT
| HWMON_T_LCRIT
|
1193 HWMON_T_CRIT_ALARM
| HWMON_T_LCRIT_ALARM
|
1198 static const struct hwmon_channel_info sfp_hwmon_temp_channel_info
= {
1200 .config
= sfp_hwmon_temp_config
,
1203 static u32 sfp_hwmon_vcc_config
[] = {
1205 HWMON_I_MAX
| HWMON_I_MIN
|
1206 HWMON_I_MAX_ALARM
| HWMON_I_MIN_ALARM
|
1207 HWMON_I_CRIT
| HWMON_I_LCRIT
|
1208 HWMON_I_CRIT_ALARM
| HWMON_I_LCRIT_ALARM
|
1213 static const struct hwmon_channel_info sfp_hwmon_vcc_channel_info
= {
1215 .config
= sfp_hwmon_vcc_config
,
1218 static u32 sfp_hwmon_bias_config
[] = {
1220 HWMON_C_MAX
| HWMON_C_MIN
|
1221 HWMON_C_MAX_ALARM
| HWMON_C_MIN_ALARM
|
1222 HWMON_C_CRIT
| HWMON_C_LCRIT
|
1223 HWMON_C_CRIT_ALARM
| HWMON_C_LCRIT_ALARM
|
1228 static const struct hwmon_channel_info sfp_hwmon_bias_channel_info
= {
1230 .config
= sfp_hwmon_bias_config
,
1233 static u32 sfp_hwmon_power_config
[] = {
1234 /* Transmit power */
1236 HWMON_P_MAX
| HWMON_P_MIN
|
1237 HWMON_P_MAX_ALARM
| HWMON_P_MIN_ALARM
|
1238 HWMON_P_CRIT
| HWMON_P_LCRIT
|
1239 HWMON_P_CRIT_ALARM
| HWMON_P_LCRIT_ALARM
|
1243 HWMON_P_MAX
| HWMON_P_MIN
|
1244 HWMON_P_MAX_ALARM
| HWMON_P_MIN_ALARM
|
1245 HWMON_P_CRIT
| HWMON_P_LCRIT
|
1246 HWMON_P_CRIT_ALARM
| HWMON_P_LCRIT_ALARM
|
1251 static const struct hwmon_channel_info sfp_hwmon_power_channel_info
= {
1252 .type
= hwmon_power
,
1253 .config
= sfp_hwmon_power_config
,
1256 static const struct hwmon_channel_info
*sfp_hwmon_info
[] = {
1258 &sfp_hwmon_vcc_channel_info
,
1259 &sfp_hwmon_temp_channel_info
,
1260 &sfp_hwmon_bias_channel_info
,
1261 &sfp_hwmon_power_channel_info
,
1265 static const struct hwmon_chip_info sfp_hwmon_chip_info
= {
1266 .ops
= &sfp_hwmon_ops
,
1267 .info
= sfp_hwmon_info
,
1270 static void sfp_hwmon_probe(struct work_struct
*work
)
1272 struct sfp
*sfp
= container_of(work
, struct sfp
, hwmon_probe
.work
);
1275 err
= sfp_read(sfp
, true, 0, &sfp
->diag
, sizeof(sfp
->diag
));
1277 if (sfp
->hwmon_tries
--) {
1278 mod_delayed_work(system_wq
, &sfp
->hwmon_probe
,
1279 T_PROBE_RETRY_SLOW
);
1281 dev_warn(sfp
->dev
, "hwmon probe failed: %d\n", err
);
1286 sfp
->hwmon_name
= kstrdup(dev_name(sfp
->dev
), GFP_KERNEL
);
1287 if (!sfp
->hwmon_name
) {
1288 dev_err(sfp
->dev
, "out of memory for hwmon name\n");
1292 for (i
= 0; sfp
->hwmon_name
[i
]; i
++)
1293 if (hwmon_is_bad_char(sfp
->hwmon_name
[i
]))
1294 sfp
->hwmon_name
[i
] = '_';
1296 sfp
->hwmon_dev
= hwmon_device_register_with_info(sfp
->dev
,
1297 sfp
->hwmon_name
, sfp
,
1298 &sfp_hwmon_chip_info
,
1300 if (IS_ERR(sfp
->hwmon_dev
))
1301 dev_err(sfp
->dev
, "failed to register hwmon device: %ld\n",
1302 PTR_ERR(sfp
->hwmon_dev
));
1305 static int sfp_hwmon_insert(struct sfp
*sfp
)
1307 if (sfp
->id
.ext
.sff8472_compliance
== SFP_SFF8472_COMPLIANCE_NONE
)
1310 if (!(sfp
->id
.ext
.diagmon
& SFP_DIAGMON_DDM
))
1313 if (sfp
->id
.ext
.diagmon
& SFP_DIAGMON_ADDRMODE
)
1314 /* This driver in general does not support address
1319 mod_delayed_work(system_wq
, &sfp
->hwmon_probe
, 1);
1320 sfp
->hwmon_tries
= R_PROBE_RETRY_SLOW
;
1325 static void sfp_hwmon_remove(struct sfp
*sfp
)
1327 cancel_delayed_work_sync(&sfp
->hwmon_probe
);
1328 if (!IS_ERR_OR_NULL(sfp
->hwmon_dev
)) {
1329 hwmon_device_unregister(sfp
->hwmon_dev
);
1330 sfp
->hwmon_dev
= NULL
;
1331 kfree(sfp
->hwmon_name
);
1335 static int sfp_hwmon_init(struct sfp
*sfp
)
1337 INIT_DELAYED_WORK(&sfp
->hwmon_probe
, sfp_hwmon_probe
);
1342 static void sfp_hwmon_exit(struct sfp
*sfp
)
1344 cancel_delayed_work_sync(&sfp
->hwmon_probe
);
1347 static int sfp_hwmon_insert(struct sfp
*sfp
)
1352 static void sfp_hwmon_remove(struct sfp
*sfp
)
1356 static int sfp_hwmon_init(struct sfp
*sfp
)
1361 static void sfp_hwmon_exit(struct sfp
*sfp
)
1367 static void sfp_module_tx_disable(struct sfp
*sfp
)
1369 dev_dbg(sfp
->dev
, "tx disable %u -> %u\n",
1370 sfp
->state
& SFP_F_TX_DISABLE
? 1 : 0, 1);
1371 sfp
->state
|= SFP_F_TX_DISABLE
;
1372 sfp_set_state(sfp
, sfp
->state
);
1375 static void sfp_module_tx_enable(struct sfp
*sfp
)
1377 dev_dbg(sfp
->dev
, "tx disable %u -> %u\n",
1378 sfp
->state
& SFP_F_TX_DISABLE
? 1 : 0, 0);
1379 sfp
->state
&= ~SFP_F_TX_DISABLE
;
1380 sfp_set_state(sfp
, sfp
->state
);
1383 static void sfp_module_tx_fault_reset(struct sfp
*sfp
)
1385 unsigned int state
= sfp
->state
;
1387 if (state
& SFP_F_TX_DISABLE
)
1390 sfp_set_state(sfp
, state
| SFP_F_TX_DISABLE
);
1394 sfp_set_state(sfp
, state
);
1397 /* SFP state machine */
1398 static void sfp_sm_set_timer(struct sfp
*sfp
, unsigned int timeout
)
1401 mod_delayed_work(system_power_efficient_wq
, &sfp
->timeout
,
1404 cancel_delayed_work(&sfp
->timeout
);
1407 static void sfp_sm_next(struct sfp
*sfp
, unsigned int state
,
1408 unsigned int timeout
)
1410 sfp
->sm_state
= state
;
1411 sfp_sm_set_timer(sfp
, timeout
);
1414 static void sfp_sm_mod_next(struct sfp
*sfp
, unsigned int state
,
1415 unsigned int timeout
)
1417 sfp
->sm_mod_state
= state
;
1418 sfp_sm_set_timer(sfp
, timeout
);
1421 static void sfp_sm_phy_detach(struct sfp
*sfp
)
1423 sfp_remove_phy(sfp
->sfp_bus
);
1424 phy_device_remove(sfp
->mod_phy
);
1425 phy_device_free(sfp
->mod_phy
);
1426 sfp
->mod_phy
= NULL
;
1429 static int sfp_sm_probe_phy(struct sfp
*sfp
, bool is_c45
)
1431 struct phy_device
*phy
;
1434 phy
= get_phy_device(sfp
->i2c_mii
, SFP_PHY_ADDR
, is_c45
);
1435 if (phy
== ERR_PTR(-ENODEV
))
1436 return PTR_ERR(phy
);
1438 dev_err(sfp
->dev
, "mdiobus scan returned %ld\n", PTR_ERR(phy
));
1439 return PTR_ERR(phy
);
1442 err
= phy_device_register(phy
);
1444 phy_device_free(phy
);
1445 dev_err(sfp
->dev
, "phy_device_register failed: %d\n", err
);
1449 err
= sfp_add_phy(sfp
->sfp_bus
, phy
);
1451 phy_device_remove(phy
);
1452 phy_device_free(phy
);
1453 dev_err(sfp
->dev
, "sfp_add_phy failed: %d\n", err
);
1462 static void sfp_sm_link_up(struct sfp
*sfp
)
1464 sfp_link_up(sfp
->sfp_bus
);
1465 sfp_sm_next(sfp
, SFP_S_LINK_UP
, 0);
1468 static void sfp_sm_link_down(struct sfp
*sfp
)
1470 sfp_link_down(sfp
->sfp_bus
);
1473 static void sfp_sm_link_check_los(struct sfp
*sfp
)
1475 unsigned int los
= sfp
->state
& SFP_F_LOS
;
1477 /* If neither SFP_OPTIONS_LOS_INVERTED nor SFP_OPTIONS_LOS_NORMAL
1478 * are set, we assume that no LOS signal is available.
1480 if (sfp
->id
.ext
.options
& cpu_to_be16(SFP_OPTIONS_LOS_INVERTED
))
1482 else if (!(sfp
->id
.ext
.options
& cpu_to_be16(SFP_OPTIONS_LOS_NORMAL
)))
1486 sfp_sm_next(sfp
, SFP_S_WAIT_LOS
, 0);
1488 sfp_sm_link_up(sfp
);
1491 static bool sfp_los_event_active(struct sfp
*sfp
, unsigned int event
)
1493 return (sfp
->id
.ext
.options
& cpu_to_be16(SFP_OPTIONS_LOS_INVERTED
) &&
1494 event
== SFP_E_LOS_LOW
) ||
1495 (sfp
->id
.ext
.options
& cpu_to_be16(SFP_OPTIONS_LOS_NORMAL
) &&
1496 event
== SFP_E_LOS_HIGH
);
1499 static bool sfp_los_event_inactive(struct sfp
*sfp
, unsigned int event
)
1501 return (sfp
->id
.ext
.options
& cpu_to_be16(SFP_OPTIONS_LOS_INVERTED
) &&
1502 event
== SFP_E_LOS_HIGH
) ||
1503 (sfp
->id
.ext
.options
& cpu_to_be16(SFP_OPTIONS_LOS_NORMAL
) &&
1504 event
== SFP_E_LOS_LOW
);
1507 static void sfp_sm_fault(struct sfp
*sfp
, unsigned int next_state
, bool warn
)
1509 if (sfp
->sm_fault_retries
&& !--sfp
->sm_fault_retries
) {
1511 "module persistently indicates fault, disabling\n");
1512 sfp_sm_next(sfp
, SFP_S_TX_DISABLE
, 0);
1515 dev_err(sfp
->dev
, "module transmit fault indicated\n");
1517 sfp_sm_next(sfp
, next_state
, T_FAULT_RECOVER
);
1521 /* Probe a SFP for a PHY device if the module supports copper - the PHY
1522 * normally sits at I2C bus address 0x56, and may either be a clause 22
1525 * Clause 22 copper SFP modules normally operate in Cisco SGMII mode with
1526 * negotiation enabled, but some may be in 1000base-X - which is for the
1527 * PHY driver to determine.
1529 * Clause 45 copper SFP+ modules (10G) appear to switch their interface
1530 * mode according to the negotiated line speed.
1532 static int sfp_sm_probe_for_phy(struct sfp
*sfp
)
1536 switch (sfp
->id
.base
.extended_cc
) {
1537 case SFF8024_ECC_10GBASE_T_SFI
:
1538 case SFF8024_ECC_10GBASE_T_SR
:
1539 case SFF8024_ECC_5GBASE_T
:
1540 case SFF8024_ECC_2_5GBASE_T
:
1541 err
= sfp_sm_probe_phy(sfp
, true);
1545 if (sfp
->id
.base
.e1000_base_t
)
1546 err
= sfp_sm_probe_phy(sfp
, false);
1552 static int sfp_module_parse_power(struct sfp
*sfp
)
1554 u32 power_mW
= 1000;
1556 if (sfp
->id
.ext
.options
& cpu_to_be16(SFP_OPTIONS_POWER_DECL
))
1558 if (sfp
->id
.ext
.options
& cpu_to_be16(SFP_OPTIONS_HIGH_POWER_LEVEL
))
1561 if (power_mW
> sfp
->max_power_mW
) {
1562 /* Module power specification exceeds the allowed maximum. */
1563 if (sfp
->id
.ext
.sff8472_compliance
==
1564 SFP_SFF8472_COMPLIANCE_NONE
&&
1565 !(sfp
->id
.ext
.diagmon
& SFP_DIAGMON_DDM
)) {
1566 /* The module appears not to implement bus address
1567 * 0xa2, so assume that the module powers up in the
1571 "Host does not support %u.%uW modules\n",
1572 power_mW
/ 1000, (power_mW
/ 100) % 10);
1576 "Host does not support %u.%uW modules, module left in power mode 1\n",
1577 power_mW
/ 1000, (power_mW
/ 100) % 10);
1582 /* If the module requires a higher power mode, but also requires
1583 * an address change sequence, warn the user that the module may
1584 * not be functional.
1586 if (sfp
->id
.ext
.diagmon
& SFP_DIAGMON_ADDRMODE
&& power_mW
> 1000) {
1588 "Address Change Sequence not supported but module requires %u.%uW, module may not be functional\n",
1589 power_mW
/ 1000, (power_mW
/ 100) % 10);
1593 sfp
->module_power_mW
= power_mW
;
1598 static int sfp_sm_mod_hpower(struct sfp
*sfp
, bool enable
)
1603 err
= sfp_read(sfp
, true, SFP_EXT_STATUS
, &val
, sizeof(val
));
1604 if (err
!= sizeof(val
)) {
1605 dev_err(sfp
->dev
, "Failed to read EEPROM: %d\n", err
);
1609 /* DM7052 reports as a high power module, responds to reads (with
1610 * all bytes 0xff) at 0x51 but does not accept writes. In any case,
1611 * if the bit is already set, we're already in high power mode.
1613 if (!!(val
& BIT(0)) == enable
)
1621 err
= sfp_write(sfp
, true, SFP_EXT_STATUS
, &val
, sizeof(val
));
1622 if (err
!= sizeof(val
)) {
1623 dev_err(sfp
->dev
, "Failed to write EEPROM: %d\n", err
);
1628 dev_info(sfp
->dev
, "Module switched to %u.%uW power level\n",
1629 sfp
->module_power_mW
/ 1000,
1630 (sfp
->module_power_mW
/ 100) % 10);
1635 static int sfp_sm_mod_probe(struct sfp
*sfp
, bool report
)
1637 /* SFP module inserted - read I2C data */
1638 struct sfp_eeprom_id id
;
1643 ret
= sfp_read(sfp
, false, 0, &id
, sizeof(id
));
1646 dev_err(sfp
->dev
, "failed to read EEPROM: %d\n", ret
);
1650 if (ret
!= sizeof(id
)) {
1651 dev_err(sfp
->dev
, "EEPROM short read: %d\n", ret
);
1655 /* Cotsworks do not seem to update the checksums when they
1656 * do the final programming with the final module part number,
1657 * serial number and date code.
1659 cotsworks
= !memcmp(id
.base
.vendor_name
, "COTSWORKS ", 16);
1661 /* Validate the checksum over the base structure */
1662 check
= sfp_check(&id
.base
, sizeof(id
.base
) - 1);
1663 if (check
!= id
.base
.cc_base
) {
1666 "EEPROM base structure checksum failure (0x%02x != 0x%02x)\n",
1667 check
, id
.base
.cc_base
);
1670 "EEPROM base structure checksum failure: 0x%02x != 0x%02x\n",
1671 check
, id
.base
.cc_base
);
1672 print_hex_dump(KERN_ERR
, "sfp EE: ", DUMP_PREFIX_OFFSET
,
1673 16, 1, &id
, sizeof(id
), true);
1678 check
= sfp_check(&id
.ext
, sizeof(id
.ext
) - 1);
1679 if (check
!= id
.ext
.cc_ext
) {
1682 "EEPROM extended structure checksum failure (0x%02x != 0x%02x)\n",
1683 check
, id
.ext
.cc_ext
);
1686 "EEPROM extended structure checksum failure: 0x%02x != 0x%02x\n",
1687 check
, id
.ext
.cc_ext
);
1688 print_hex_dump(KERN_ERR
, "sfp EE: ", DUMP_PREFIX_OFFSET
,
1689 16, 1, &id
, sizeof(id
), true);
1690 memset(&id
.ext
, 0, sizeof(id
.ext
));
1696 dev_info(sfp
->dev
, "module %.*s %.*s rev %.*s sn %.*s dc %.*s\n",
1697 (int)sizeof(id
.base
.vendor_name
), id
.base
.vendor_name
,
1698 (int)sizeof(id
.base
.vendor_pn
), id
.base
.vendor_pn
,
1699 (int)sizeof(id
.base
.vendor_rev
), id
.base
.vendor_rev
,
1700 (int)sizeof(id
.ext
.vendor_sn
), id
.ext
.vendor_sn
,
1701 (int)sizeof(id
.ext
.datecode
), id
.ext
.datecode
);
1703 /* Check whether we support this module */
1704 if (!sfp
->type
->module_supported(&id
)) {
1706 "module is not supported - phys id 0x%02x 0x%02x\n",
1707 sfp
->id
.base
.phys_id
, sfp
->id
.base
.phys_ext_id
);
1711 /* If the module requires address swap mode, warn about it */
1712 if (sfp
->id
.ext
.diagmon
& SFP_DIAGMON_ADDRMODE
)
1714 "module address swap to access page 0xA2 is not supported.\n");
1716 /* Parse the module power requirement */
1717 ret
= sfp_module_parse_power(sfp
);
1721 if (!memcmp(id
.base
.vendor_name
, "ALCATELLUCENT ", 16) &&
1722 !memcmp(id
.base
.vendor_pn
, "3FE46541AA ", 16))
1723 sfp
->module_t_start_up
= T_START_UP_BAD_GPON
;
1725 sfp
->module_t_start_up
= T_START_UP
;
1730 static void sfp_sm_mod_remove(struct sfp
*sfp
)
1732 if (sfp
->sm_mod_state
> SFP_MOD_WAITDEV
)
1733 sfp_module_remove(sfp
->sfp_bus
);
1735 sfp_hwmon_remove(sfp
);
1737 memset(&sfp
->id
, 0, sizeof(sfp
->id
));
1738 sfp
->module_power_mW
= 0;
1740 dev_info(sfp
->dev
, "module removed\n");
1743 /* This state machine tracks the upstream's state */
1744 static void sfp_sm_device(struct sfp
*sfp
, unsigned int event
)
1746 switch (sfp
->sm_dev_state
) {
1748 if (event
== SFP_E_DEV_ATTACH
)
1749 sfp
->sm_dev_state
= SFP_DEV_DOWN
;
1753 if (event
== SFP_E_DEV_DETACH
)
1754 sfp
->sm_dev_state
= SFP_DEV_DETACHED
;
1755 else if (event
== SFP_E_DEV_UP
)
1756 sfp
->sm_dev_state
= SFP_DEV_UP
;
1760 if (event
== SFP_E_DEV_DETACH
)
1761 sfp
->sm_dev_state
= SFP_DEV_DETACHED
;
1762 else if (event
== SFP_E_DEV_DOWN
)
1763 sfp
->sm_dev_state
= SFP_DEV_DOWN
;
1768 /* This state machine tracks the insert/remove state of the module, probes
1769 * the on-board EEPROM, and sets up the power level.
1771 static void sfp_sm_module(struct sfp
*sfp
, unsigned int event
)
1775 /* Handle remove event globally, it resets this state machine */
1776 if (event
== SFP_E_REMOVE
) {
1777 if (sfp
->sm_mod_state
> SFP_MOD_PROBE
)
1778 sfp_sm_mod_remove(sfp
);
1779 sfp_sm_mod_next(sfp
, SFP_MOD_EMPTY
, 0);
1783 /* Handle device detach globally */
1784 if (sfp
->sm_dev_state
< SFP_DEV_DOWN
&&
1785 sfp
->sm_mod_state
> SFP_MOD_WAITDEV
) {
1786 if (sfp
->module_power_mW
> 1000 &&
1787 sfp
->sm_mod_state
> SFP_MOD_HPOWER
)
1788 sfp_sm_mod_hpower(sfp
, false);
1789 sfp_sm_mod_next(sfp
, SFP_MOD_WAITDEV
, 0);
1793 switch (sfp
->sm_mod_state
) {
1795 if (event
== SFP_E_INSERT
) {
1796 sfp_sm_mod_next(sfp
, SFP_MOD_PROBE
, T_SERIAL
);
1797 sfp
->sm_mod_tries_init
= R_PROBE_RETRY_INIT
;
1798 sfp
->sm_mod_tries
= R_PROBE_RETRY_SLOW
;
1803 /* Wait for T_PROBE_INIT to time out */
1804 if (event
!= SFP_E_TIMEOUT
)
1807 err
= sfp_sm_mod_probe(sfp
, sfp
->sm_mod_tries
== 1);
1808 if (err
== -EAGAIN
) {
1809 if (sfp
->sm_mod_tries_init
&&
1810 --sfp
->sm_mod_tries_init
) {
1811 sfp_sm_set_timer(sfp
, T_PROBE_RETRY_INIT
);
1813 } else if (sfp
->sm_mod_tries
&& --sfp
->sm_mod_tries
) {
1814 if (sfp
->sm_mod_tries
== R_PROBE_RETRY_SLOW
- 1)
1816 "please wait, module slow to respond\n");
1817 sfp_sm_set_timer(sfp
, T_PROBE_RETRY_SLOW
);
1822 sfp_sm_mod_next(sfp
, SFP_MOD_ERROR
, 0);
1826 err
= sfp_hwmon_insert(sfp
);
1828 dev_warn(sfp
->dev
, "hwmon probe failed: %d\n", err
);
1830 sfp_sm_mod_next(sfp
, SFP_MOD_WAITDEV
, 0);
1832 case SFP_MOD_WAITDEV
:
1833 /* Ensure that the device is attached before proceeding */
1834 if (sfp
->sm_dev_state
< SFP_DEV_DOWN
)
1837 /* Report the module insertion to the upstream device */
1838 err
= sfp_module_insert(sfp
->sfp_bus
, &sfp
->id
);
1840 sfp_sm_mod_next(sfp
, SFP_MOD_ERROR
, 0);
1844 /* If this is a power level 1 module, we are done */
1845 if (sfp
->module_power_mW
<= 1000)
1848 sfp_sm_mod_next(sfp
, SFP_MOD_HPOWER
, 0);
1850 case SFP_MOD_HPOWER
:
1851 /* Enable high power mode */
1852 err
= sfp_sm_mod_hpower(sfp
, true);
1854 if (err
!= -EAGAIN
) {
1855 sfp_module_remove(sfp
->sfp_bus
);
1856 sfp_sm_mod_next(sfp
, SFP_MOD_ERROR
, 0);
1858 sfp_sm_set_timer(sfp
, T_PROBE_RETRY_INIT
);
1863 sfp_sm_mod_next(sfp
, SFP_MOD_WAITPWR
, T_HPOWER_LEVEL
);
1866 case SFP_MOD_WAITPWR
:
1867 /* Wait for T_HPOWER_LEVEL to time out */
1868 if (event
!= SFP_E_TIMEOUT
)
1872 sfp_sm_mod_next(sfp
, SFP_MOD_PRESENT
, 0);
1875 case SFP_MOD_PRESENT
:
1881 static void sfp_sm_main(struct sfp
*sfp
, unsigned int event
)
1883 unsigned long timeout
;
1886 /* Some events are global */
1887 if (sfp
->sm_state
!= SFP_S_DOWN
&&
1888 (sfp
->sm_mod_state
!= SFP_MOD_PRESENT
||
1889 sfp
->sm_dev_state
!= SFP_DEV_UP
)) {
1890 if (sfp
->sm_state
== SFP_S_LINK_UP
&&
1891 sfp
->sm_dev_state
== SFP_DEV_UP
)
1892 sfp_sm_link_down(sfp
);
1893 if (sfp
->sm_state
> SFP_S_INIT
)
1894 sfp_module_stop(sfp
->sfp_bus
);
1896 sfp_sm_phy_detach(sfp
);
1897 sfp_module_tx_disable(sfp
);
1898 sfp_soft_stop_poll(sfp
);
1899 sfp_sm_next(sfp
, SFP_S_DOWN
, 0);
1903 /* The main state machine */
1904 switch (sfp
->sm_state
) {
1906 if (sfp
->sm_mod_state
!= SFP_MOD_PRESENT
||
1907 sfp
->sm_dev_state
!= SFP_DEV_UP
)
1910 if (!(sfp
->id
.ext
.diagmon
& SFP_DIAGMON_ADDRMODE
))
1911 sfp_soft_start_poll(sfp
);
1913 sfp_module_tx_enable(sfp
);
1915 /* Initialise the fault clearance retries */
1916 sfp
->sm_fault_retries
= N_FAULT_INIT
;
1918 /* We need to check the TX_FAULT state, which is not defined
1919 * while TX_DISABLE is asserted. The earliest we want to do
1920 * anything (such as probe for a PHY) is 50ms.
1922 sfp_sm_next(sfp
, SFP_S_WAIT
, T_WAIT
);
1926 if (event
!= SFP_E_TIMEOUT
)
1929 if (sfp
->state
& SFP_F_TX_FAULT
) {
1930 /* Wait up to t_init (SFF-8472) or t_start_up (SFF-8431)
1931 * from the TX_DISABLE deassertion for the module to
1932 * initialise, which is indicated by TX_FAULT
1935 timeout
= sfp
->module_t_start_up
;
1936 if (timeout
> T_WAIT
)
1941 sfp_sm_next(sfp
, SFP_S_INIT
, timeout
);
1943 /* TX_FAULT is not asserted, assume the module has
1944 * finished initialising.
1951 if (event
== SFP_E_TIMEOUT
&& sfp
->state
& SFP_F_TX_FAULT
) {
1952 /* TX_FAULT is still asserted after t_init or
1953 * or t_start_up, so assume there is a fault.
1955 sfp_sm_fault(sfp
, SFP_S_INIT_TX_FAULT
,
1956 sfp
->sm_fault_retries
== N_FAULT_INIT
);
1957 } else if (event
== SFP_E_TIMEOUT
|| event
== SFP_E_TX_CLEAR
) {
1959 sfp
->sm_phy_retries
= R_PHY_RETRY
;
1964 case SFP_S_INIT_PHY
:
1965 if (event
!= SFP_E_TIMEOUT
)
1968 /* TX_FAULT deasserted or we timed out with TX_FAULT
1969 * clear. Probe for the PHY and check the LOS state.
1971 ret
= sfp_sm_probe_for_phy(sfp
);
1972 if (ret
== -ENODEV
) {
1973 if (--sfp
->sm_phy_retries
) {
1974 sfp_sm_next(sfp
, SFP_S_INIT_PHY
, T_PHY_RETRY
);
1977 dev_info(sfp
->dev
, "no PHY detected\n");
1980 sfp_sm_next(sfp
, SFP_S_FAIL
, 0);
1983 if (sfp_module_start(sfp
->sfp_bus
)) {
1984 sfp_sm_next(sfp
, SFP_S_FAIL
, 0);
1987 sfp_sm_link_check_los(sfp
);
1989 /* Reset the fault retry count */
1990 sfp
->sm_fault_retries
= N_FAULT
;
1993 case SFP_S_INIT_TX_FAULT
:
1994 if (event
== SFP_E_TIMEOUT
) {
1995 sfp_module_tx_fault_reset(sfp
);
1996 sfp_sm_next(sfp
, SFP_S_INIT
, sfp
->module_t_start_up
);
2000 case SFP_S_WAIT_LOS
:
2001 if (event
== SFP_E_TX_FAULT
)
2002 sfp_sm_fault(sfp
, SFP_S_TX_FAULT
, true);
2003 else if (sfp_los_event_inactive(sfp
, event
))
2004 sfp_sm_link_up(sfp
);
2008 if (event
== SFP_E_TX_FAULT
) {
2009 sfp_sm_link_down(sfp
);
2010 sfp_sm_fault(sfp
, SFP_S_TX_FAULT
, true);
2011 } else if (sfp_los_event_active(sfp
, event
)) {
2012 sfp_sm_link_down(sfp
);
2013 sfp_sm_next(sfp
, SFP_S_WAIT_LOS
, 0);
2017 case SFP_S_TX_FAULT
:
2018 if (event
== SFP_E_TIMEOUT
) {
2019 sfp_module_tx_fault_reset(sfp
);
2020 sfp_sm_next(sfp
, SFP_S_REINIT
, sfp
->module_t_start_up
);
2025 if (event
== SFP_E_TIMEOUT
&& sfp
->state
& SFP_F_TX_FAULT
) {
2026 sfp_sm_fault(sfp
, SFP_S_TX_FAULT
, false);
2027 } else if (event
== SFP_E_TIMEOUT
|| event
== SFP_E_TX_CLEAR
) {
2028 dev_info(sfp
->dev
, "module transmit fault recovered\n");
2029 sfp_sm_link_check_los(sfp
);
2033 case SFP_S_TX_DISABLE
:
2038 static void sfp_sm_event(struct sfp
*sfp
, unsigned int event
)
2040 mutex_lock(&sfp
->sm_mutex
);
2042 dev_dbg(sfp
->dev
, "SM: enter %s:%s:%s event %s\n",
2043 mod_state_to_str(sfp
->sm_mod_state
),
2044 dev_state_to_str(sfp
->sm_dev_state
),
2045 sm_state_to_str(sfp
->sm_state
),
2046 event_to_str(event
));
2048 sfp_sm_device(sfp
, event
);
2049 sfp_sm_module(sfp
, event
);
2050 sfp_sm_main(sfp
, event
);
2052 dev_dbg(sfp
->dev
, "SM: exit %s:%s:%s\n",
2053 mod_state_to_str(sfp
->sm_mod_state
),
2054 dev_state_to_str(sfp
->sm_dev_state
),
2055 sm_state_to_str(sfp
->sm_state
));
2057 mutex_unlock(&sfp
->sm_mutex
);
2060 static void sfp_attach(struct sfp
*sfp
)
2062 sfp_sm_event(sfp
, SFP_E_DEV_ATTACH
);
2065 static void sfp_detach(struct sfp
*sfp
)
2067 sfp_sm_event(sfp
, SFP_E_DEV_DETACH
);
2070 static void sfp_start(struct sfp
*sfp
)
2072 sfp_sm_event(sfp
, SFP_E_DEV_UP
);
2075 static void sfp_stop(struct sfp
*sfp
)
2077 sfp_sm_event(sfp
, SFP_E_DEV_DOWN
);
2080 static int sfp_module_info(struct sfp
*sfp
, struct ethtool_modinfo
*modinfo
)
2082 /* locking... and check module is present */
2084 if (sfp
->id
.ext
.sff8472_compliance
&&
2085 !(sfp
->id
.ext
.diagmon
& SFP_DIAGMON_ADDRMODE
)) {
2086 modinfo
->type
= ETH_MODULE_SFF_8472
;
2087 modinfo
->eeprom_len
= ETH_MODULE_SFF_8472_LEN
;
2089 modinfo
->type
= ETH_MODULE_SFF_8079
;
2090 modinfo
->eeprom_len
= ETH_MODULE_SFF_8079_LEN
;
2095 static int sfp_module_eeprom(struct sfp
*sfp
, struct ethtool_eeprom
*ee
,
2098 unsigned int first
, last
, len
;
2105 last
= ee
->offset
+ ee
->len
;
2106 if (first
< ETH_MODULE_SFF_8079_LEN
) {
2107 len
= min_t(unsigned int, last
, ETH_MODULE_SFF_8079_LEN
);
2110 ret
= sfp_read(sfp
, false, first
, data
, len
);
2117 if (first
< ETH_MODULE_SFF_8472_LEN
&& last
> ETH_MODULE_SFF_8079_LEN
) {
2118 len
= min_t(unsigned int, last
, ETH_MODULE_SFF_8472_LEN
);
2120 first
-= ETH_MODULE_SFF_8079_LEN
;
2122 ret
= sfp_read(sfp
, true, first
, data
, len
);
2129 static const struct sfp_socket_ops sfp_module_ops
= {
2130 .attach
= sfp_attach
,
2131 .detach
= sfp_detach
,
2134 .module_info
= sfp_module_info
,
2135 .module_eeprom
= sfp_module_eeprom
,
2138 static void sfp_timeout(struct work_struct
*work
)
2140 struct sfp
*sfp
= container_of(work
, struct sfp
, timeout
.work
);
2143 sfp_sm_event(sfp
, SFP_E_TIMEOUT
);
2147 static void sfp_check_state(struct sfp
*sfp
)
2149 unsigned int state
, i
, changed
;
2151 mutex_lock(&sfp
->st_mutex
);
2152 state
= sfp_get_state(sfp
);
2153 changed
= state
^ sfp
->state
;
2154 changed
&= SFP_F_PRESENT
| SFP_F_LOS
| SFP_F_TX_FAULT
;
2156 for (i
= 0; i
< GPIO_MAX
; i
++)
2157 if (changed
& BIT(i
))
2158 dev_dbg(sfp
->dev
, "%s %u -> %u\n", gpio_of_names
[i
],
2159 !!(sfp
->state
& BIT(i
)), !!(state
& BIT(i
)));
2161 state
|= sfp
->state
& (SFP_F_TX_DISABLE
| SFP_F_RATE_SELECT
);
2165 if (changed
& SFP_F_PRESENT
)
2166 sfp_sm_event(sfp
, state
& SFP_F_PRESENT
?
2167 SFP_E_INSERT
: SFP_E_REMOVE
);
2169 if (changed
& SFP_F_TX_FAULT
)
2170 sfp_sm_event(sfp
, state
& SFP_F_TX_FAULT
?
2171 SFP_E_TX_FAULT
: SFP_E_TX_CLEAR
);
2173 if (changed
& SFP_F_LOS
)
2174 sfp_sm_event(sfp
, state
& SFP_F_LOS
?
2175 SFP_E_LOS_HIGH
: SFP_E_LOS_LOW
);
2177 mutex_unlock(&sfp
->st_mutex
);
2180 static irqreturn_t
sfp_irq(int irq
, void *data
)
2182 struct sfp
*sfp
= data
;
2184 sfp_check_state(sfp
);
2189 static void sfp_poll(struct work_struct
*work
)
2191 struct sfp
*sfp
= container_of(work
, struct sfp
, poll
.work
);
2193 sfp_check_state(sfp
);
2195 if (sfp
->state_soft_mask
& (SFP_F_LOS
| SFP_F_TX_FAULT
) ||
2197 mod_delayed_work(system_wq
, &sfp
->poll
, poll_jiffies
);
2200 static struct sfp
*sfp_alloc(struct device
*dev
)
2204 sfp
= kzalloc(sizeof(*sfp
), GFP_KERNEL
);
2206 return ERR_PTR(-ENOMEM
);
2210 mutex_init(&sfp
->sm_mutex
);
2211 mutex_init(&sfp
->st_mutex
);
2212 INIT_DELAYED_WORK(&sfp
->poll
, sfp_poll
);
2213 INIT_DELAYED_WORK(&sfp
->timeout
, sfp_timeout
);
2215 sfp_hwmon_init(sfp
);
2220 static void sfp_cleanup(void *data
)
2222 struct sfp
*sfp
= data
;
2224 sfp_hwmon_exit(sfp
);
2226 cancel_delayed_work_sync(&sfp
->poll
);
2227 cancel_delayed_work_sync(&sfp
->timeout
);
2229 mdiobus_unregister(sfp
->i2c_mii
);
2230 mdiobus_free(sfp
->i2c_mii
);
2233 i2c_put_adapter(sfp
->i2c
);
2237 static int sfp_probe(struct platform_device
*pdev
)
2239 const struct sff_data
*sff
;
2240 struct i2c_adapter
*i2c
;
2244 sfp
= sfp_alloc(&pdev
->dev
);
2246 return PTR_ERR(sfp
);
2248 platform_set_drvdata(pdev
, sfp
);
2250 err
= devm_add_action(sfp
->dev
, sfp_cleanup
, sfp
);
2254 sff
= sfp
->type
= &sfp_data
;
2256 if (pdev
->dev
.of_node
) {
2257 struct device_node
*node
= pdev
->dev
.of_node
;
2258 const struct of_device_id
*id
;
2259 struct device_node
*np
;
2261 id
= of_match_node(sfp_of_match
, node
);
2265 sff
= sfp
->type
= id
->data
;
2267 np
= of_parse_phandle(node
, "i2c-bus", 0);
2269 dev_err(sfp
->dev
, "missing 'i2c-bus' property\n");
2273 i2c
= of_find_i2c_adapter_by_node(np
);
2275 } else if (has_acpi_companion(&pdev
->dev
)) {
2276 struct acpi_device
*adev
= ACPI_COMPANION(&pdev
->dev
);
2277 struct fwnode_handle
*fw
= acpi_fwnode_handle(adev
);
2278 struct fwnode_reference_args args
;
2279 struct acpi_handle
*acpi_handle
;
2282 ret
= acpi_node_get_property_reference(fw
, "i2c-bus", 0, &args
);
2283 if (ret
|| !is_acpi_device_node(args
.fwnode
)) {
2284 dev_err(&pdev
->dev
, "missing 'i2c-bus' property\n");
2288 acpi_handle
= ACPI_HANDLE_FWNODE(args
.fwnode
);
2289 i2c
= i2c_acpi_find_adapter_by_handle(acpi_handle
);
2295 return -EPROBE_DEFER
;
2297 err
= sfp_i2c_configure(sfp
, i2c
);
2299 i2c_put_adapter(i2c
);
2303 for (i
= 0; i
< GPIO_MAX
; i
++)
2304 if (sff
->gpios
& BIT(i
)) {
2305 sfp
->gpio
[i
] = devm_gpiod_get_optional(sfp
->dev
,
2306 gpio_of_names
[i
], gpio_flags
[i
]);
2307 if (IS_ERR(sfp
->gpio
[i
]))
2308 return PTR_ERR(sfp
->gpio
[i
]);
2311 sfp
->get_state
= sfp_gpio_get_state
;
2312 sfp
->set_state
= sfp_gpio_set_state
;
2314 /* Modules that have no detect signal are always present */
2315 if (!(sfp
->gpio
[GPIO_MODDEF0
]))
2316 sfp
->get_state
= sff_gpio_get_state
;
2318 device_property_read_u32(&pdev
->dev
, "maximum-power-milliwatt",
2319 &sfp
->max_power_mW
);
2320 if (!sfp
->max_power_mW
)
2321 sfp
->max_power_mW
= 1000;
2323 dev_info(sfp
->dev
, "Host maximum power %u.%uW\n",
2324 sfp
->max_power_mW
/ 1000, (sfp
->max_power_mW
/ 100) % 10);
2326 /* Get the initial state, and always signal TX disable,
2327 * since the network interface will not be up.
2329 sfp
->state
= sfp_get_state(sfp
) | SFP_F_TX_DISABLE
;
2331 if (sfp
->gpio
[GPIO_RATE_SELECT
] &&
2332 gpiod_get_value_cansleep(sfp
->gpio
[GPIO_RATE_SELECT
]))
2333 sfp
->state
|= SFP_F_RATE_SELECT
;
2334 sfp_set_state(sfp
, sfp
->state
);
2335 sfp_module_tx_disable(sfp
);
2336 if (sfp
->state
& SFP_F_PRESENT
) {
2338 sfp_sm_event(sfp
, SFP_E_INSERT
);
2342 for (i
= 0; i
< GPIO_MAX
; i
++) {
2343 if (gpio_flags
[i
] != GPIOD_IN
|| !sfp
->gpio
[i
])
2346 sfp
->gpio_irq
[i
] = gpiod_to_irq(sfp
->gpio
[i
]);
2347 if (!sfp
->gpio_irq
[i
]) {
2348 sfp
->need_poll
= true;
2352 err
= devm_request_threaded_irq(sfp
->dev
, sfp
->gpio_irq
[i
],
2355 IRQF_TRIGGER_RISING
|
2356 IRQF_TRIGGER_FALLING
,
2357 dev_name(sfp
->dev
), sfp
);
2359 sfp
->gpio_irq
[i
] = 0;
2360 sfp
->need_poll
= true;
2365 mod_delayed_work(system_wq
, &sfp
->poll
, poll_jiffies
);
2367 /* We could have an issue in cases no Tx disable pin is available or
2368 * wired as modules using a laser as their light source will continue to
2369 * be active when the fiber is removed. This could be a safety issue and
2370 * we should at least warn the user about that.
2372 if (!sfp
->gpio
[GPIO_TX_DISABLE
])
2374 "No tx_disable pin: SFP modules will always be emitting.\n");
2376 sfp
->sfp_bus
= sfp_register_socket(sfp
->dev
, sfp
, &sfp_module_ops
);
2383 static int sfp_remove(struct platform_device
*pdev
)
2385 struct sfp
*sfp
= platform_get_drvdata(pdev
);
2387 sfp_unregister_socket(sfp
->sfp_bus
);
2390 sfp_sm_event(sfp
, SFP_E_REMOVE
);
2396 static void sfp_shutdown(struct platform_device
*pdev
)
2398 struct sfp
*sfp
= platform_get_drvdata(pdev
);
2401 for (i
= 0; i
< GPIO_MAX
; i
++) {
2402 if (!sfp
->gpio_irq
[i
])
2405 devm_free_irq(sfp
->dev
, sfp
->gpio_irq
[i
], sfp
);
2408 cancel_delayed_work_sync(&sfp
->poll
);
2409 cancel_delayed_work_sync(&sfp
->timeout
);
2412 static struct platform_driver sfp_driver
= {
2414 .remove
= sfp_remove
,
2415 .shutdown
= sfp_shutdown
,
2418 .of_match_table
= sfp_of_match
,
2422 static int sfp_init(void)
2424 poll_jiffies
= msecs_to_jiffies(100);
2426 return platform_driver_register(&sfp_driver
);
2428 module_init(sfp_init
);
2430 static void sfp_exit(void)
2432 platform_driver_unregister(&sfp_driver
);
2434 module_exit(sfp_exit
);
2436 MODULE_ALIAS("platform:sfp");
2437 MODULE_AUTHOR("Russell King");
2438 MODULE_LICENSE("GPL v2");