Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

net: Fix sungem_phy sharing.

Since sungem_phy is used by multiple, unrelated, drivers make it
build as a real module under drivers/net.

depmod will pick up the symbol dependency and make sure sungem_phy.ko
gets loaded any time sungem.ko or spider_net.ko is loaded.

Tested-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>

+12 -9
+3
drivers/net/Kconfig
··· 186 186 187 187 source "drivers/net/phy/Kconfig" 188 188 189 + config SUNGEM_PHY 190 + tristate 191 + 189 192 # 190 193 # Ethernet 191 194 #
+2
drivers/net/Makefile
··· 75 75 76 76 obj-$(CONFIG_WIMAX) += wimax/ 77 77 obj-$(CONFIG_CAIF) += caif/ 78 + 79 + obj-$(CONFIG_SUNGEM_PHY) += sungem_phy.o
-1
drivers/net/ethernet/sun/Makefile
··· 6 6 obj-$(CONFIG_SUNQE) += sunqe.o 7 7 obj-$(CONFIG_SUNBMAC) += sunbmac.o 8 8 obj-$(CONFIG_SUNGEM) += sungem.o 9 - obj-$(CONFIG_SUNGEM_PHY) += sungem_phy.o 10 9 obj-$(CONFIG_CASSINI) += cassini.o 11 10 obj-$(CONFIG_SUNVNET) += sunvnet.o 12 11 obj-$(CONFIG_NIU) += niu.o
+1 -1
drivers/net/ethernet/sun/sungem.c
··· 1721 1721 if (gp->phy_type == phy_mii_mdio0 || 1722 1722 gp->phy_type == phy_mii_mdio1) { 1723 1723 /* Reset and detect MII PHY */ 1724 - mii_phy_probe(&gp->phy_mii, gp->mii_phy_addr); 1724 + sungem_phy_probe(&gp->phy_mii, gp->mii_phy_addr); 1725 1725 1726 1726 /* Init PHY */ 1727 1727 if (gp->phy_mii.def && gp->phy_mii.def->ops->init)
+2 -3
drivers/net/ethernet/sun/sungem_phy.c drivers/net/sungem_phy.c
··· 1156 1156 NULL 1157 1157 }; 1158 1158 1159 - int mii_phy_probe(struct mii_phy *phy, int mii_id) 1159 + int sungem_phy_probe(struct mii_phy *phy, int mii_id) 1160 1160 { 1161 1161 int rc; 1162 1162 u32 id; ··· 1195 1195 return -ENODEV; 1196 1196 } 1197 1197 1198 - EXPORT_SYMBOL(mii_phy_probe); 1198 + EXPORT_SYMBOL(sungem_phy_probe); 1199 1199 MODULE_LICENSE("GPL"); 1200 -
+1 -1
drivers/net/ethernet/toshiba/Makefile
··· 6 6 gelic_wireless-$(CONFIG_GELIC_WIRELESS) += ps3_gelic_wireless.o 7 7 ps3_gelic-objs += ps3_gelic_net.o $(gelic_wireless-y) 8 8 spidernet-y += spider_net.o spider_net_ethtool.o 9 - obj-$(CONFIG_SPIDER_NET) += spidernet.o ethernet/sun/sungem_phy.o 9 + obj-$(CONFIG_SPIDER_NET) += spidernet.o 10 10 obj-$(CONFIG_TC35815) += tc35815.o
+2 -2
drivers/net/ethernet/toshiba/spider_net.c
··· 196 196 if ((bmsr & BMSR_ESTATEN) && (estat & ESTATUS_1000_THALF)) 197 197 advertise |= SUPPORTED_1000baseT_Half; 198 198 199 - mii_phy_probe(phy, phy->mii_id); 199 + sungem_phy_probe(phy, phy->mii_id); 200 200 phy->def->ops->setup_aneg(phy, advertise); 201 201 202 202 } ··· 2120 2120 unsigned short id; 2121 2121 id = spider_net_read_phy(card->netdev, phy->mii_id, MII_BMSR); 2122 2122 if (id != 0x0000 && id != 0xffff) { 2123 - if (!mii_phy_probe(phy, phy->mii_id)) { 2123 + if (!sungem_phy_probe(phy, phy->mii_id)) { 2124 2124 pr_info("Found %s.\n", phy->def->name); 2125 2125 break; 2126 2126 }
+1 -1
include/linux/sungem_phy.h
··· 61 61 /* Pass in a struct mii_phy with dev, mdio_read and mdio_write 62 62 * filled, the remaining fields will be filled on return 63 63 */ 64 - extern int mii_phy_probe(struct mii_phy *phy, int mii_id); 64 + extern int sungem_phy_probe(struct mii_phy *phy, int mii_id); 65 65 66 66 67 67 /* MII definitions missing from mii.h */