On 04/03/2018 10:13 AM, Сергей Василюгин wrote:
> Current version of rtl8366-smi module support Realtek switch
> managment via two gpio lines only. This patch add Realtek switch
> management via mii_bus. For my board Tp-link Archer C2 v1 (Mediatek
> SoC mt7620a based) dts-file configuration looks like:
> 
>       rtl8367rb {
>               compatible = "realtek,rtl8367b", "rtl8367b";
>               realtek,extif1 = <1 0 1 1 1 1 1 1 2>;
>               mii-bus = <&mdio0>;

The switch node should be moved under the mdio controller node below,
parent/child relationships imply the control bus.

>       };
> 
> &ethernet {
>       status = "okay";
>       mtd-mac-address = <&rom 0xf100>;
>       pinctrl-names = "default";
>       pinctrl-0 = <&rgmii1_pins &rgmii2_pins &mdio_pins>;
> 
>       port@5 {
>               status = "okay";
>               mediatek,fixed-link = <1000 1 1 1>;
>               phy-mode = "rgmii";
>       };
> 
>       mdio0: mdio-bus {
>               status = "okay";
>       };
> };
> 
> Realtek rtl8367rb switch is ok.
> Other Realtek switches and archs are untested but must work too.
> 
> Version 2: add mii_bus mutex_lock
> 
> Signed-off-by: Serge Vasilugin <vasilu...@yandex.ru>
> --
> 

[snip]

> @@ -1416,7 +1520,24 @@ int rtl8366_smi_probe_of(struct platform_device *pdev, 
> struct rtl8366_smi *smi)
>  {
>       int sck = of_get_named_gpio(pdev->dev.of_node, "gpio-sck", 0);
>       int sda = of_get_named_gpio(pdev->dev.of_node, "gpio-sda", 0);
> +     struct device_node *np = pdev->dev.of_node;;
> +     struct device_node *mdio_node = NULL;
> +
> +     mdio_node = of_parse_phandle(np, "mii-bus", 0);
> +     if (!mdio_node) {
> +             dev_err(&pdev->dev, "cannot find mdio node phandle");
> +             goto try_gpio;
> +     }

You should have two entry points for your driver, and have shared code,
one entry point is a gpio/platform_driver and the other one is a
mdio_device/driver. They would both call into the same code that does
the register read/write code, but how they are probed should be different.

See drivers/net/dsa/b53/ for an example of a driver that can deal with
multiple control buses.
-- 
Florian

_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to