* Returns -EINVAL if the interface mode/autoneg mode is not supported. * Returns non-zero positive if the link state can be supported. Also, really, the MAC layer should ensure that the PCS isn't used for interface modes that it doesn't support. I might introduce a bitmap of interface modes for PCS later if there's a benefit to doing so. > + } > + > + return 0; > +} > + > +static const struct phylink_pcs_ops miic_phylink_ops = { > + .pcs_config = miic_config, > + .pcs_link_up = miic_link_up, > + .pcs_validate = miic_validate, I'd prefer to have them in the order that they are in the structure. > +}; > + > +struct phylink_pcs *miic_create(struct device_node *np) > +{ > + struct platform_device *pdev; > + struct miic_port *miic_port; > + struct device_node *pcs_np; > + u32 port; > + > + if (of_property_read_u32(np, "reg", &port)) > + return ERR_PTR(-EINVAL); > + > + if (port >= MIIC_MAX_NR_PORTS) > + return ERR_PTR(-EINVAL); > + > + /* The PCS pdev is attached to the parent node */ > + pcs_np = of_get_parent(np); > + if (!pcs_np) > + return ERR_PTR(-EINVAL); > + > + pdev = of_find_device_by_node(pcs_np); > + if (!pdev || !platform_get_drvdata(pdev)) > + return ERR_PTR(-EPROBE_DEFER); It would be a good idea to have a comment in the probe function to say that this relies on platform_set_drvdata() being the very last thing after a point where initialisation is complete and we won't fail. Thanks! -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!