kernel: rtl8366_smi: explicitly set phy addr for switch
authorSerge Vasilugin <vasilugin@yandex.ru>
Thu, 15 Aug 2019 08:27:08 +0000 (15:27 +0700)
committerChuanhong Guo <gch981213@gmail.com>
Tue, 29 Sep 2020 06:32:01 +0000 (14:32 +0800)
By default rtl8366_smi use phy addr 0 at mii-bus to access switch registers.
This patch allow to set it explicitly in dts-file:

rtl8367 {
compatible = "realtek,rtl8367b";
phy-id = <29>; /* switch address at mii-bus */
realtek,extif2 = <1 0 1 1 1 1 1 1 2>;
mii-bus = <&mdio>;
cpu-port = <7>;
}

Use default 0 address if not set.
Backward compatibility tested on tplink archer c2 v1 (rtl8367rb switch)

Signed-off-by: Serge Vasilugin <vasilugin@yandex.ru>
[code style fixes, add explicit phy_id assignment in probe_plat, use
phy-id instead of phy_id for of property name]
Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
target/linux/generic/files/drivers/net/phy/rtl8366_smi.c
target/linux/generic/files/drivers/net/phy/rtl8366_smi.h

index e8375e514787e61302f34051b49a257539d220c4..0cd5c2542fdf7078e1b5269a1deb2d3d85b6fffa 100644 (file)
@@ -256,7 +256,7 @@ static int __rtl8366_smi_read_reg(struct rtl8366_smi *smi, u32 addr, u32 *data)
 
 int __rtl8366_mdio_read_reg(struct rtl8366_smi *smi, u32 addr, u32 *data)
 {
-       u32 phy_id = MDC_REALTEK_PHY_ADDR;
+       u32 phy_id = smi->phy_id;
        struct mii_bus *mbus = smi->ext_mbus;
 
        BUG_ON(in_interrupt());
@@ -293,7 +293,7 @@ int __rtl8366_mdio_read_reg(struct rtl8366_smi *smi, u32 addr, u32 *data)
 
 static int __rtl8366_mdio_write_reg(struct rtl8366_smi *smi, u32 addr, u32 data)
 {
-       u32 phy_id = MDC_REALTEK_PHY_ADDR;
+       u32 phy_id = smi->phy_id;
        struct mii_bus *mbus = smi->ext_mbus;
 
        BUG_ON(in_interrupt());
@@ -1550,6 +1550,9 @@ int rtl8366_smi_probe_of(struct platform_device *pdev, struct rtl8366_smi *smi)
                goto try_gpio;
        }
 
+       if (of_property_read_u32(np, "phy-id", &smi->phy_id))
+               smi->phy_id = MDC_REALTEK_PHY_ADDR;
+
        return 0;
 
 try_gpio:
@@ -1589,6 +1592,7 @@ int rtl8366_smi_probe_plat(struct platform_device *pdev, struct rtl8366_smi *smi
        smi->gpio_sda = pdata->gpio_sda;
        smi->gpio_sck = pdata->gpio_sck;
        smi->hw_reset = pdata->hw_reset;
+       smi->phy_id = MDC_REALTEK_PHY_ADDR;
 
        return 0;
 }
index d1d988a3727b7a6629bfea0d20f715e0346f2396..0b0f7e9948276f9df3e84ebea4bcd12ebb8d89b0 100644 (file)
@@ -64,6 +64,7 @@ struct rtl8366_smi {
        u8                      dbg_vlan_4k_page;
 #endif
        struct mii_bus          *ext_mbus;
+       int                     phy_id;
 };
 
 struct rtl8366_vlan_mc {