[PATCH] ARM: pcm043 micrell ksz8041nl phy support

Tim Sander tstone at iss.tu-darmstadt.de
Wed Oct 20 11:57:34 EDT 2010


Hi

This patch add the missing support for the phy used on the phytec pcm043 boards. 
Please consider for mainline. Tested on pcm043 hardware.

Best regards
Tim

Signed-off-by: Tim Sander <tim.sander at hbm.com>

---
 drivers/net/fec.c |   39 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/drivers/net/fec.c b/drivers/net/fec.c
index 16a1d58..00d79bb 100644
--- a/drivers/net/fec.c
+++ b/drivers/net/fec.c
@@ -1128,6 +1128,44 @@ static phy_info_t phy_info_dp83848= {
        },
 };
 
+
+/* ------------------------------------------------------------------------- */
+/* support for the micrell ksz8041nl */
+#define MII_KSZ8041NL_ICSR 0x1b
+#define MII_KSZ8041NL_CTL1 0x1e
+static phy_cmd_t const phy_cmd_ksz8041nl_config[] = {
+               { mk_mii_read(MII_REG_CR), mii_parse_cr },
+               { mk_mii_read(MII_REG_ANAR), mii_parse_anar },
+               { mk_mii_end, }
+};
+static phy_cmd_t const phy_cmd_ksz8041nl_startup[] = {
+               { mk_mii_write(MII_KSZ8041NL_ICSR, 0xff00), NULL},
+               { mk_mii_write(MII_KSZ8041NL_CTL1, 0x4000), NULL},
+               { mk_mii_write(MII_REG_CR, 0x1200), NULL }, /* autonegotiate */
+               { mk_mii_read(MII_REG_SR), mii_parse_sr },
+               { mk_mii_end, }
+};
+static phy_cmd_t const phy_cmd_ksz8041nl_ack_int[] = {
+               /* find out the current status */
+               { mk_mii_read(MII_REG_SR), mii_parse_sr },
+               /* we only need to read ISR to acknowledge */
+               { mk_mii_read(MII_KSZ8041NL_ICSR), NULL },
+               { mk_mii_end, }
+};
+static phy_cmd_t const phy_cmd_ksz8041nl_shutdown[] = { /* disable interrupts */
+               { mk_mii_write(MII_KSZ8041NL_ICSR, 0x0000), NULL},
+               { mk_mii_end, }
+};
+
+static phy_info_t phy_info_ksz8041nl = {
+       0x0022151,
+       "KSZ8041NL",
+       .config = phy_cmd_ksz8041nl_config,
+       .startup = phy_cmd_ksz8041nl_startup,
+       .ack_int = phy_cmd_ksz8041nl_ack_int,
+       .shutdown = phy_cmd_ksz8041nl_shutdown,
+};
+
 /* ------------------------------------------------------------------------- */
 
 static phy_info_t const * const phy_info[] = {
@@ -1137,6 +1175,7 @@ static phy_info_t const * const phy_info[] = {
        &phy_info_am79c874,
        &phy_info_ks8721bl,
        &phy_info_dp83848,
+       &phy_info_ksz8041nl,
        NULL
 };
 
-- 
1.7.0.4



More information about the linux-arm-kernel mailing list