Merge branch 'net-sfp-small-improvements'
Antoine Tenart says: ==================== net: sfp: small improvements A small series of patches improving the SFP support by adding a warning when no Tx disable pin is available, and making the i2c-bus property mandatory. Thanks! Antoine Since v1: - Removed the patch fixing the sfp driver when no i2c bus was described. - Made two new patches to make the i2c-bus property mandatory for sfp modules. Since the phylink series: - s/-EOPNOTSUPP/-ENODEV/ in patch 1/2. - I added the acked-by tag in patch 2/2. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
e89e59c08d
|
@ -7,11 +7,11 @@ Required properties:
|
|||
"sff,sfp" for SFP modules
|
||||
"sff,sff" for soldered down SFF modules
|
||||
|
||||
Optional Properties:
|
||||
|
||||
- i2c-bus : phandle of an I2C bus controller for the SFP two wire serial
|
||||
interface
|
||||
|
||||
Optional Properties:
|
||||
|
||||
- mod-def0-gpios : GPIO phandle and a specifier of the MOD-DEF0 (AKA Mod_ABS)
|
||||
module presence input gpio signal, active (module absent) high. Must
|
||||
not be present for SFF modules
|
||||
|
|
|
@ -976,6 +976,7 @@ static int sfp_probe(struct platform_device *pdev)
|
|||
if (pdev->dev.of_node) {
|
||||
struct device_node *node = pdev->dev.of_node;
|
||||
const struct of_device_id *id;
|
||||
struct i2c_adapter *i2c;
|
||||
struct device_node *np;
|
||||
|
||||
id = of_match_node(sfp_of_match, node);
|
||||
|
@ -985,19 +986,20 @@ static int sfp_probe(struct platform_device *pdev)
|
|||
sff = sfp->type = id->data;
|
||||
|
||||
np = of_parse_phandle(node, "i2c-bus", 0);
|
||||
if (np) {
|
||||
struct i2c_adapter *i2c;
|
||||
if (!np) {
|
||||
dev_err(sfp->dev, "missing 'i2c-bus' property\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
i2c = of_find_i2c_adapter_by_node(np);
|
||||
of_node_put(np);
|
||||
if (!i2c)
|
||||
return -EPROBE_DEFER;
|
||||
i2c = of_find_i2c_adapter_by_node(np);
|
||||
of_node_put(np);
|
||||
if (!i2c)
|
||||
return -EPROBE_DEFER;
|
||||
|
||||
err = sfp_i2c_configure(sfp, i2c);
|
||||
if (err < 0) {
|
||||
i2c_put_adapter(i2c);
|
||||
return err;
|
||||
}
|
||||
err = sfp_i2c_configure(sfp, i2c);
|
||||
if (err < 0) {
|
||||
i2c_put_adapter(i2c);
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1065,6 +1067,15 @@ static int sfp_probe(struct platform_device *pdev)
|
|||
if (poll)
|
||||
mod_delayed_work(system_wq, &sfp->poll, poll_jiffies);
|
||||
|
||||
/* We could have an issue in cases no Tx disable pin is available or
|
||||
* wired as modules using a laser as their light source will continue to
|
||||
* be active when the fiber is removed. This could be a safety issue and
|
||||
* we should at least warn the user about that.
|
||||
*/
|
||||
if (!sfp->gpio[GPIO_TX_DISABLE])
|
||||
dev_warn(sfp->dev,
|
||||
"No tx_disable pin: SFP modules will always be emitting.\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue