This is what the vendor bootloader does on KD20.
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@43509
3c298f89-4303-0410-b956-
a3cf2f4a3e73
obj-$(CONFIG_PHY_MICREL) += micrel.o
--- /dev/null
+++ b/drivers/net/phy/icplus.c
obj-$(CONFIG_PHY_MICREL) += micrel.o
--- /dev/null
+++ b/drivers/net/phy/icplus.c
+/*
+ * ICPlus PHY drivers
+ *
+/*
+ * ICPlus PHY drivers
+ *
+#define IP101A_G_IRQ_CONF_STATUS 0x11 /* Conf Info IRQ & Status Reg */
+#define IP101A_G_IRQ_PIN_USED (1<<15) /* INTR pin used */
+#define IP101A_G_IRQ_DEFAULT IP101A_G_IRQ_PIN_USED
+#define IP101A_G_IRQ_CONF_STATUS 0x11 /* Conf Info IRQ & Status Reg */
+#define IP101A_G_IRQ_PIN_USED (1<<15) /* INTR pin used */
+#define IP101A_G_IRQ_DEFAULT IP101A_G_IRQ_PIN_USED
++#define IP1001LF_DRIVE_MASK (15 << 5)
++#define IP1001LF_RXCLKDRIVE_HI (2 << 5)
++#define IP1001LF_RXDDRIVE_HI (2 << 7)
++#define IP1001LF_RXCLKDRIVE_M (1 << 5)
++#define IP1001LF_RXDDRIVE_M (1 << 7)
++#define IP1001LF_RXCLKDRIVE_L (0 << 5)
++#define IP1001LF_RXDDRIVE_L (0 << 7)
++#define IP1001LF_RXCLKDRIVE_VL (3 << 5)
++#define IP1001LF_RXDDRIVE_VL (3 << 7)
+
+static int ip1001_config(struct phy_device *phydev)
+{
+
+static int ip1001_config(struct phy_device *phydev)
+{
+ return c;
+
+ c |= IP1001_PHASE_SEL_MASK;
+ return c;
+
+ c |= IP1001_PHASE_SEL_MASK;
++ /* adjust digtial drive strength */
++ c &= ~IP1001LF_DRIVE_MASK;
++ c |= IP1001LF_RXCLKDRIVE_M;
++ c |= IP1001LF_RXDDRIVE_M;
+ c = phy_write(phydev, MDIO_DEVAD_NONE, IP10XX_SPEC_CTRL_STATUS,
+ c);
+ if (c < 0)
+ c = phy_write(phydev, MDIO_DEVAD_NONE, IP10XX_SPEC_CTRL_STATUS,
+ c);
+ if (c < 0)