generic: rtl8366: make rtl8366_{g,s}et_pvid static
[openwrt.git] / target / linux / generic / files / drivers / net / phy / rtl8366_smi.c
index d0b3680..a596c31 100644 (file)
@@ -349,45 +349,7 @@ int rtl8366_set_vlan(struct rtl8366_smi *smi, int vid, u32 member, u32 untag,
 }
 EXPORT_SYMBOL_GPL(rtl8366_set_vlan);
 
-int rtl8366_reset_vlan(struct rtl8366_smi *smi)
-{
-       struct rtl8366_vlan_mc vlanmc;
-       int err;
-       int i;
-
-       /* clear VLAN member configurations */
-       vlanmc.vid = 0;
-       vlanmc.priority = 0;
-       vlanmc.member = 0;
-       vlanmc.untag = 0;
-       vlanmc.fid = 0;
-       for (i = 0; i < smi->num_vlan_mc; i++) {
-               err = smi->ops->set_vlan_mc(smi, i, &vlanmc);
-               if (err)
-                       return err;
-       }
-
-       for (i = 0; i < smi->num_ports; i++) {
-               if (i == smi->cpu_port)
-                       continue;
-
-               err = rtl8366_set_vlan(smi, (i + 1),
-                                       (1 << i) | (1 << smi->cpu_port),
-                                       (1 << i) | (1 << smi->cpu_port),
-                                       0);
-               if (err)
-                       return err;
-
-               err = rtl8366_set_pvid(smi, i, (i + 1));
-               if (err)
-                       return err;
-       }
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(rtl8366_reset_vlan);
-
-int rtl8366_get_pvid(struct rtl8366_smi *smi, int port, int *val)
+static int rtl8366_get_pvid(struct rtl8366_smi *smi, int port, int *val)
 {
        struct rtl8366_vlan_mc vlanmc;
        int err;
@@ -404,9 +366,9 @@ int rtl8366_get_pvid(struct rtl8366_smi *smi, int port, int *val)
        *val = vlanmc.vid;
        return 0;
 }
-EXPORT_SYMBOL_GPL(rtl8366_get_pvid);
 
-int rtl8366_set_pvid(struct rtl8366_smi *smi, unsigned port, unsigned vid)
+static int rtl8366_set_pvid(struct rtl8366_smi *smi, unsigned port,
+                           unsigned vid)
 {
        struct rtl8366_vlan_mc vlanmc;
        struct rtl8366_vlan_4k vlan4k;
@@ -486,7 +448,44 @@ int rtl8366_set_pvid(struct rtl8366_smi *smi, unsigned port, unsigned vid)
 
        return -ENOSPC;
 }
-EXPORT_SYMBOL_GPL(rtl8366_set_pvid);
+
+int rtl8366_reset_vlan(struct rtl8366_smi *smi)
+{
+       struct rtl8366_vlan_mc vlanmc;
+       int err;
+       int i;
+
+       /* clear VLAN member configurations */
+       vlanmc.vid = 0;
+       vlanmc.priority = 0;
+       vlanmc.member = 0;
+       vlanmc.untag = 0;
+       vlanmc.fid = 0;
+       for (i = 0; i < smi->num_vlan_mc; i++) {
+               err = smi->ops->set_vlan_mc(smi, i, &vlanmc);
+               if (err)
+                       return err;
+       }
+
+       for (i = 0; i < smi->num_ports; i++) {
+               if (i == smi->cpu_port)
+                       continue;
+
+               err = rtl8366_set_vlan(smi, (i + 1),
+                                       (1 << i) | (1 << smi->cpu_port),
+                                       (1 << i) | (1 << smi->cpu_port),
+                                       0);
+               if (err)
+                       return err;
+
+               err = rtl8366_set_pvid(smi, i, (i + 1));
+               if (err)
+                       return err;
+       }
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(rtl8366_reset_vlan);
 
 #ifdef CONFIG_RTL8366S_PHY_DEBUG_FS
 int rtl8366_debugfs_open(struct inode *inode, struct file *file)
@@ -741,13 +740,41 @@ static void rtl8366_smi_mii_cleanup(struct rtl8366_smi *smi)
        mdiobus_free(smi->mii_bus);
 }
 
+int rtl8366_sw_get_port_pvid(struct switch_dev *dev, int port, int *val)
+{
+       struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev);
+       return rtl8366_get_pvid(smi, port, val);
+}
+EXPORT_SYMBOL_GPL(rtl8366_sw_get_port_pvid);
+
+int rtl8366_sw_set_port_pvid(struct switch_dev *dev, int port, int val)
+{
+       struct rtl8366_smi *smi = sw_to_rtl8366_smi(dev);
+       return rtl8366_set_pvid(smi, port, val);
+}
+EXPORT_SYMBOL_GPL(rtl8366_sw_set_port_pvid);
+
+struct rtl8366_smi *rtl8366_smi_alloc(struct device *parent)
+{
+       struct rtl8366_smi *smi;
+
+       BUG_ON(!parent);
+
+       smi = kzalloc(sizeof(*smi), GFP_KERNEL);
+       if (!smi) {
+               dev_err(parent, "no memory for private data\n");
+               return NULL;
+       }
+
+       smi->parent = parent;
+       return smi;
+}
+EXPORT_SYMBOL_GPL(rtl8366_smi_alloc);
+
 int rtl8366_smi_init(struct rtl8366_smi *smi)
 {
        int err;
 
-       if (!smi->parent)
-               return -EINVAL;
-
        if (!smi->ops)
                return -EINVAL;
 
@@ -776,6 +803,12 @@ int rtl8366_smi_init(struct rtl8366_smi *smi)
                goto err_free_sck;
        }
 
+       err = smi->ops->setup(smi);
+       if (err) {
+               dev_err(smi->parent, "chip setup failed, err=%d\n", err);
+               goto err_free_sck;
+       }
+
        err = rtl8366_smi_mii_init(smi);
        if (err)
                goto err_free_sck;
This page took 0.030152 seconds and 4 git commands to generate.