Commit e89e59c0 authored by David S. Miller's avatar David S. Miller

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: default avatarDavid S. Miller <davem@davemloft.net>
parents 47de868b 3e484393
...@@ -7,11 +7,11 @@ Required properties: ...@@ -7,11 +7,11 @@ Required properties:
"sff,sfp" for SFP modules "sff,sfp" for SFP modules
"sff,sff" for soldered down SFF modules "sff,sff" for soldered down SFF modules
Optional Properties:
- i2c-bus : phandle of an I2C bus controller for the SFP two wire serial - i2c-bus : phandle of an I2C bus controller for the SFP two wire serial
interface interface
Optional Properties:
- mod-def0-gpios : GPIO phandle and a specifier of the MOD-DEF0 (AKA Mod_ABS) - 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 module presence input gpio signal, active (module absent) high. Must
not be present for SFF modules not be present for SFF modules
......
...@@ -976,6 +976,7 @@ static int sfp_probe(struct platform_device *pdev) ...@@ -976,6 +976,7 @@ static int sfp_probe(struct platform_device *pdev)
if (pdev->dev.of_node) { if (pdev->dev.of_node) {
struct device_node *node = pdev->dev.of_node; struct device_node *node = pdev->dev.of_node;
const struct of_device_id *id; const struct of_device_id *id;
struct i2c_adapter *i2c;
struct device_node *np; struct device_node *np;
id = of_match_node(sfp_of_match, node); id = of_match_node(sfp_of_match, node);
...@@ -985,8 +986,10 @@ static int sfp_probe(struct platform_device *pdev) ...@@ -985,8 +986,10 @@ static int sfp_probe(struct platform_device *pdev)
sff = sfp->type = id->data; sff = sfp->type = id->data;
np = of_parse_phandle(node, "i2c-bus", 0); np = of_parse_phandle(node, "i2c-bus", 0);
if (np) { if (!np) {
struct i2c_adapter *i2c; dev_err(sfp->dev, "missing 'i2c-bus' property\n");
return -ENODEV;
}
i2c = of_find_i2c_adapter_by_node(np); i2c = of_find_i2c_adapter_by_node(np);
of_node_put(np); of_node_put(np);
...@@ -999,7 +1002,6 @@ static int sfp_probe(struct platform_device *pdev) ...@@ -999,7 +1002,6 @@ static int sfp_probe(struct platform_device *pdev)
return err; return err;
} }
} }
}
for (i = 0; i < GPIO_MAX; i++) for (i = 0; i < GPIO_MAX; i++)
if (sff->gpios & BIT(i)) { if (sff->gpios & BIT(i)) {
...@@ -1065,6 +1067,15 @@ static int sfp_probe(struct platform_device *pdev) ...@@ -1065,6 +1067,15 @@ static int sfp_probe(struct platform_device *pdev)
if (poll) if (poll)
mod_delayed_work(system_wq, &sfp->poll, poll_jiffies); 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; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment