diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c index f0a92bcd7..c3fde0dd1 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.c @@ -24,11 +24,10 @@ #include "rtl8366_smi.h" #define RTL8366_SMI_ACK_RETRY_COUNT 5 -#define RTL8366_SMI_CLK_DELAY 10 /* nsec */ static inline void rtl8366_smi_clk_delay(struct rtl8366_smi *smi) { - ndelay(RTL8366_SMI_CLK_DELAY); + ndelay(smi->clk_delay); } static void rtl8366_smi_start(struct rtl8366_smi *smi) @@ -198,7 +197,7 @@ int rtl8366_smi_read_reg(struct rtl8366_smi *smi, u32 addr, u32 *data) rtl8366_smi_start(smi); /* send READ command */ - ret = rtl8366_smi_write_byte(smi, 0x0a << 4 | 0x04 << 1 | 0x01); + ret = rtl8366_smi_write_byte(smi, smi->cmd_read); if (ret) goto out; @@ -239,7 +238,7 @@ int rtl8366_smi_write_reg(struct rtl8366_smi *smi, u32 addr, u32 data) rtl8366_smi_start(smi); /* send WRITE command */ - ret = rtl8366_smi_write_byte(smi, 0x0a << 4 | 0x04 << 1 | 0x00); + ret = rtl8366_smi_write_byte(smi, smi->cmd_write); if (ret) goto out; diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h index 2e84a8d91..9db2576c8 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h +++ b/target/linux/generic/files/drivers/net/phy/rtl8366_smi.h @@ -32,6 +32,9 @@ struct rtl8366_smi { struct device *parent; unsigned int gpio_sda; unsigned int gpio_sck; + unsigned int clk_delay; /* ns */ + u8 cmd_read; + u8 cmd_write; spinlock_t lock; struct mii_bus *mii_bus; int mii_irq[PHY_MAX_ADDR]; @@ -58,16 +61,16 @@ struct rtl8366_smi { struct rtl8366_vlan_mc { u16 vid; - u8 priority; - u8 untag; - u8 member; + u16 untag; + u16 member; u8 fid; + u8 priority; }; struct rtl8366_vlan_4k { u16 vid; - u8 untag; - u8 member; + u16 untag; + u16 member; u8 fid; }; diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366rb.c b/target/linux/generic/files/drivers/net/phy/rtl8366rb.c index b337408b5..49dd03e27 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366rb.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8366rb.c @@ -1247,6 +1247,9 @@ static int __devinit rtl8366rb_probe(struct platform_device *pdev) smi->gpio_sda = pdata->gpio_sda; smi->gpio_sck = pdata->gpio_sck; + smi->clk_delay = 10; + smi->cmd_read = 0xa9; + smi->cmd_write = 0xa8; smi->ops = &rtl8366rb_smi_ops; smi->cpu_port = RTL8366RB_PORT_NUM_CPU; smi->num_ports = RTL8366RB_NUM_PORTS; diff --git a/target/linux/generic/files/drivers/net/phy/rtl8366s.c b/target/linux/generic/files/drivers/net/phy/rtl8366s.c index 30916589b..27e9aa45e 100644 --- a/target/linux/generic/files/drivers/net/phy/rtl8366s.c +++ b/target/linux/generic/files/drivers/net/phy/rtl8366s.c @@ -1127,6 +1127,9 @@ static int __devinit rtl8366s_probe(struct platform_device *pdev) smi->gpio_sda = pdata->gpio_sda; smi->gpio_sck = pdata->gpio_sck; + smi->clk_delay = 10; + smi->cmd_read = 0xa9; + smi->cmd_write = 0xa8; smi->ops = &rtl8366s_smi_ops; smi->cpu_port = RTL8366S_PORT_NUM_CPU; smi->num_ports = RTL8366S_NUM_PORTS;