diff options
Diffstat (limited to 'target/linux/generic-2.6/patches-2.6.22/999-icplus.patch')
-rw-r--r-- | target/linux/generic-2.6/patches-2.6.22/999-icplus.patch | 175 |
1 files changed, 0 insertions, 175 deletions
diff --git a/target/linux/generic-2.6/patches-2.6.22/999-icplus.patch b/target/linux/generic-2.6/patches-2.6.22/999-icplus.patch deleted file mode 100644 index d38df05529..0000000000 --- a/target/linux/generic-2.6/patches-2.6.22/999-icplus.patch +++ /dev/null @@ -1,175 +0,0 @@ -From: Michael Barkowski <michael.barkowski@freescale.com> -Date: Fri, 11 May 2007 23:24:51 +0000 (-0500) -Subject: phylib: add the ICPlus IP175C PHY driver -X-Git-Tag: v2.6.23-rc1~1201^2~58 -X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=0cefeebaf3da39d768bffcf62460fe2088e824ef - -phylib: add the ICPlus IP175C PHY driver - -The ICPlus IP175C sports a 100Mbit/s 4-port switch in addition -to a dedicated 100Mbit/s WAN port. - -Signed-off-by: Michael Barkowski <michael.barkowski@freescale.com> -Signed-off-by: Kim Phillips <kim.phillips@freescale.com> -Signed-off-by: Jeff Garzik <jeff@garzik.org> ---- - ---- a/drivers/net/phy/Kconfig -+++ b/drivers/net/phy/Kconfig -@@ -55,6 +55,11 @@ - ---help--- - Currently supports the BCM5411, BCM5421 and BCM5461 PHYs. - -+config ICPLUS_PHY -+ tristate "Drivers for ICPlus PHYs" -+ ---help--- -+ Currently supports the IP175C PHY. -+ - config FIXED_PHY - tristate "Drivers for PHY emulation on fixed speed/link" - ---help--- ---- a/drivers/net/phy/Makefile -+++ b/drivers/net/phy/Makefile -@@ -11,4 +11,5 @@ - obj-$(CONFIG_SMSC_PHY) += smsc.o - obj-$(CONFIG_VITESSE_PHY) += vitesse.o - obj-$(CONFIG_BROADCOM_PHY) += broadcom.o -+obj-$(CONFIG_ICPLUS_PHY) += icplus.o - obj-$(CONFIG_FIXED_PHY) += fixed.o ---- /dev/null -+++ b/drivers/net/phy/icplus.c -@@ -0,0 +1,134 @@ -+/* -+ * Driver for ICPlus PHYs -+ * -+ * Copyright (c) 2007 Freescale Semiconductor, Inc. -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License as published by the -+ * Free Software Foundation; either version 2 of the License, or (at your -+ * option) any later version. -+ * -+ */ -+#include <linux/kernel.h> -+#include <linux/string.h> -+#include <linux/errno.h> -+#include <linux/unistd.h> -+#include <linux/slab.h> -+#include <linux/interrupt.h> -+#include <linux/init.h> -+#include <linux/delay.h> -+#include <linux/netdevice.h> -+#include <linux/etherdevice.h> -+#include <linux/skbuff.h> -+#include <linux/spinlock.h> -+#include <linux/mm.h> -+#include <linux/module.h> -+#include <linux/mii.h> -+#include <linux/ethtool.h> -+#include <linux/phy.h> -+ -+#include <asm/io.h> -+#include <asm/irq.h> -+#include <asm/uaccess.h> -+ -+MODULE_DESCRIPTION("ICPlus IP175C PHY driver"); -+MODULE_AUTHOR("Michael Barkowski"); -+MODULE_LICENSE("GPL"); -+ -+static int ip175c_config_init(struct phy_device *phydev) -+{ -+ int err, i; -+ static int full_reset_performed = 0; -+ -+ if (full_reset_performed == 0) { -+ -+ /* master reset */ -+ err = phydev->bus->write(phydev->bus, 30, 0, 0x175c); -+ if (err < 0) -+ return err; -+ -+ /* ensure no bus delays overlap reset period */ -+ err = phydev->bus->read(phydev->bus, 30, 0); -+ -+ /* data sheet specifies reset period is 2 msec */ -+ mdelay(2); -+ -+ /* enable IP175C mode */ -+ err = phydev->bus->write(phydev->bus, 29, 31, 0x175c); -+ if (err < 0) -+ return err; -+ -+ /* Set MII0 speed and duplex (in PHY mode) */ -+ err = phydev->bus->write(phydev->bus, 29, 22, 0x420); -+ if (err < 0) -+ return err; -+ -+ /* reset switch ports */ -+ for (i = 0; i < 5; i++) { -+ err = phydev->bus->write(phydev->bus, i, -+ MII_BMCR, BMCR_RESET); -+ if (err < 0) -+ return err; -+ } -+ -+ for (i = 0; i < 5; i++) -+ err = phydev->bus->read(phydev->bus, i, MII_BMCR); -+ -+ mdelay(2); -+ -+ full_reset_performed = 1; -+ } -+ -+ if (phydev->addr != 4) { -+ phydev->state = PHY_RUNNING; -+ phydev->speed = SPEED_100; -+ phydev->duplex = DUPLEX_FULL; -+ phydev->link = 1; -+ netif_carrier_on(phydev->attached_dev); -+ } -+ -+ return 0; -+} -+ -+static int ip175c_read_status(struct phy_device *phydev) -+{ -+ if (phydev->addr == 4) /* WAN port */ -+ genphy_read_status(phydev); -+ else -+ /* Don't need to read status for switch ports */ -+ phydev->irq = PHY_IGNORE_INTERRUPT; -+ -+ return 0; -+} -+ -+static int ip175c_config_aneg(struct phy_device *phydev) -+{ -+ if (phydev->addr == 4) /* WAN port */ -+ genphy_config_aneg(phydev); -+ -+ return 0; -+} -+ -+static struct phy_driver ip175c_driver = { -+ .phy_id = 0x02430d80, -+ .name = "ICPlus IP175C", -+ .phy_id_mask = 0x0ffffff0, -+ .features = PHY_BASIC_FEATURES, -+ .config_init = &ip175c_config_init, -+ .config_aneg = &ip175c_config_aneg, -+ .read_status = &ip175c_read_status, -+ .driver = { .owner = THIS_MODULE,}, -+}; -+ -+static int __init ip175c_init(void) -+{ -+ return phy_driver_register(&ip175c_driver); -+} -+ -+static void __exit ip175c_exit(void) -+{ -+ phy_driver_unregister(&ip175c_driver); -+} -+ -+module_init(ip175c_init); -+module_exit(ip175c_exit); |