Hello,

I added a driver for a phy that doesn't support autonegotiation (see
below).

I didn't add SUPPORTED_Autoneg to hirschmannrs422_driver.features.  I
expected that this results in hirschmannrs422_config_aneg never being
called, but that's wrong.  So I wonder what it should do.


Moreover that phy only supports 10MBit/Half but still it seems to use
something different first and short after bringing the device up I get a
printk saying:

        Trying 10/HALF

I didn't investigate that yet.

I couldn't find a place in the generic phy code that uses
driver.features, probably it's just that that needs fixing?

Best regards
Uwe

--->8---
From: Uwe Kleine-König <[EMAIL PROTECTED]>

add Hirschmann RS422 phy

Signed-off-by: Uwe Kleine-König <[EMAIL PROTECTED]>
---
 drivers/net/phy/Kconfig            |    3 ++
 drivers/net/phy/Makefile           |    1 +
 drivers/net/phy/hirschmann-rs422.c |   55 ++++++++++++++++++++++++++++++++++++
 3 files changed, 59 insertions(+), 0 deletions(-)
 create mode 100644 drivers/net/phy/hirschmann-rs422.c

diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
index 54b2ba9..39d4905 100644
--- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig
@@ -90,6 +90,9 @@ config FIXED_MII_AMNT
         This control will have specified number allocated for each fixed
         PHY type enabled.
 
+config HIRSCHMANNRS422_PHY
+       tristate "Driver for Hirschmann's RS422 PHY"
+
 config MDIO_BITBANG
        tristate "Support for bitbanged MDIO buses"
        help
diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
index 3d6cc7b..748d69f 100644
--- a/drivers/net/phy/Makefile
+++ b/drivers/net/phy/Makefile
@@ -13,4 +13,5 @@ obj-$(CONFIG_VITESSE_PHY)     += vitesse.o
 obj-$(CONFIG_BROADCOM_PHY)     += broadcom.o
 obj-$(CONFIG_ICPLUS_PHY)       += icplus.o
 obj-$(CONFIG_FIXED_PHY)                += fixed.o
+obj-$(CONFIG_HIRSCHMANNRS422_PHY) += hirschmann-rs422.o
 obj-$(CONFIG_MDIO_BITBANG)     += mdio-bitbang.o
diff --git a/drivers/net/phy/hirschmann-rs422.c 
b/drivers/net/phy/hirschmann-rs422.c
new file mode 100644
index 0000000..f9bc326
--- /dev/null
+++ b/drivers/net/phy/hirschmann-rs422.c
@@ -0,0 +1,55 @@
+/*
+ * drivers/net/phy/hirschmann-rs422.c
+ *
+ * Copyright (C) 2007 by Digi International Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published by
+ * the Free Software Foundation.
+ *
+ */
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/phy.h>
+
+int hirschmannrs422_config_aneg(struct phy_device *phydev)
+{
+       /* XXX */
+       dev_warn(&phydev->dev, "I cannot autonegotiate (called from %p)\n",
+                       __builtin_return_address(0));
+
+       dev_warn(&phydev->dev, "speed = %d, duplex = %d\n",
+                       phydev->speed, phydev->duplex);
+       /* XXX: should better return -Esomething? */
+       return genphy_config_aneg(phydev);
+}
+
+static struct phy_driver hirschmannrs422_driver = {
+       .phy_id         = 0x00071810,
+       .name           = "Hirschmann_rs422",
+       .phy_id_mask    = 0xfffffff0,
+       /* XXX: SUPPORTED_TP? */
+       .features       = SUPPORTED_10baseT_Half | SUPPORTED_MII,
+       .read_status    = genphy_read_status,
+       .config_aneg    = hirschmannrs422_config_aneg,
+       .driver         = { .owner = THIS_MODULE,},
+};
+
+static int __init hirschmannrs422_init(void)
+{
+       return phy_driver_register(&hirschmannrs422_driver);
+}
+
+static void __exit hirschmannrs422_exit(void)
+{
+       phy_driver_unregister(&hirschmannrs422_driver);
+}
+
+module_init(hirschmannrs422_init);
+module_exit(hirschmannrs422_exit);
+
+MODULE_AUTHOR("Uwe Kleine-Koenig");
+MODULE_DESCRIPTION("Hirschmann RS422 PHY driver");
+MODULE_LICENSE("GPL");
+
-- 
1.5.3.6


-- 
Uwe Kleine-König, Software Engineer
Digi International GmbH Branch Breisach, Küferstrasse 8, 79206 Breisach, Germany
Tax: 315/5781/0242 / VAT: DE153662976 / Reg. Amtsgericht Dortmund HRB 13962
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to