diff options
| author | florian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-08-23 15:48:46 +0000 | 
|---|---|---|
| committer | florian <florian@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2007-08-23 15:48:46 +0000 | 
| commit | 15064b00d64b02707538f80097002e80b0bcf02a (patch) | |
| tree | cd9382564aa581cff7a81d9d77265da5fddd8050 | |
| parent | 393c8350bee2d7a335d141ae70ddf51980fa2cbd (diff) | |
Add the icplus phy patch, will be required for the r6040 driver later, thanks to Daniel Gimpelevich
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@8470 3c298f89-4303-0410-b956-a3cf2f4a3e73
| -rw-r--r-- | target/linux/generic-2.6/config-2.6.22 | 1 | ||||
| -rw-r--r-- | target/linux/generic-2.6/patches-2.6.22/999-icplus.patch | 182 | 
2 files changed, 183 insertions, 0 deletions
| diff --git a/target/linux/generic-2.6/config-2.6.22 b/target/linux/generic-2.6/config-2.6.22 index cb257fcfb..a4da4ee5b 100644 --- a/target/linux/generic-2.6/config-2.6.22 +++ b/target/linux/generic-2.6/config-2.6.22 @@ -406,6 +406,7 @@ CONFIG_HZ_100=y  # CONFIG_I2C_VOODOO3 is not set  # CONFIG_I2O is not set  # CONFIG_I82092 is not set +# CONFIG_ICPLUS_PHY is not set  CONFIG_IDE_MAX_HWIFS=4  # CONFIG_IDEDISK_MULTI_MODE is not set  # CONFIG_IDE_TASK_IOCTL is not set 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 new file mode 100644 index 000000000..2437e7ba9 --- /dev/null +++ b/target/linux/generic-2.6/patches-2.6.22/999-icplus.patch @@ -0,0 +1,182 @@ +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> +--- + +diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig +index 09b6f25..dd09011 100644 +--- a/drivers/net/phy/Kconfig ++++ b/drivers/net/phy/Kconfig +@@ -55,6 +55,11 @@ config BROADCOM_PHY + 	---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--- +diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile +index bcd1efb..8885650 100644 +--- a/drivers/net/phy/Makefile ++++ b/drivers/net/phy/Makefile +@@ -11,4 +11,5 @@ obj-$(CONFIG_QSEMI_PHY)		+= qsemi.o + 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 +diff --git a/drivers/net/phy/icplus.c b/drivers/net/phy/icplus.c +new file mode 100644 +index 0000000..af3f1f2 +--- /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); | 
