netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* config_aneg for phy not supporting autonegotiation
@ 2007-12-05 10:11 Uwe Kleine-König
  0 siblings, 0 replies; only message in thread
From: Uwe Kleine-König @ 2007-12-05 10:11 UTC (permalink / raw)
  To: netdev; +Cc: Andy Fleming, Jeff Garzik

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 <Uwe.Kleine-Koenig@digi.com>

add Hirschmann RS422 phy

Signed-off-by: Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
---
 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

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2007-12-05 10:11 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-12-05 10:11 config_aneg for phy not supporting autonegotiation Uwe Kleine-König

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).