summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/drivers/net/lan78xx.c8
-rw-r--r--src/drivers/net/lan78xx.h6
2 files changed, 14 insertions, 0 deletions
diff --git a/src/drivers/net/lan78xx.c b/src/drivers/net/lan78xx.c
index a8cf5740..3f4f21b6 100644
--- a/src/drivers/net/lan78xx.c
+++ b/src/drivers/net/lan78xx.c
@@ -198,6 +198,13 @@ static int lan78xx_open ( struct net_device *netdev ) {
LAN78XX_BULK_IN_DLY_SET ( 0 ) ) ) != 0 )
goto err_bulk_in_dly;
+ /* Enable automatic speed and duplex detection */
+ if ( ( rc = smscusb_writel ( smscusb, LAN78XX_MAC_CR,
+ ( LAN78XX_MAC_CR_ADP |
+ LAN78XX_MAC_CR_ADD |
+ LAN78XX_MAC_CR_ASD ) ) ) != 0 )
+ goto err_mac_cr;
+
/* Configure receive filters */
if ( ( rc = smscusb_writel ( smscusb, LAN78XX_RFE_CTL,
( LAN78XX_RFE_CTL_AB |
@@ -256,6 +263,7 @@ static int lan78xx_open ( struct net_device *netdev ) {
err_fct_tx_ctl:
err_fct_rx_ctl:
err_rfe_ctl:
+ err_mac_cr:
err_bulk_in_dly:
err_int_ep_ctl:
usbnet_close ( &smscusb->usbnet );
diff --git a/src/drivers/net/lan78xx.h b/src/drivers/net/lan78xx.h
index 6ae17238..39422aec 100644
--- a/src/drivers/net/lan78xx.h
+++ b/src/drivers/net/lan78xx.h
@@ -49,6 +49,12 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#define LAN78XX_FCT_TX_CTL 0x00c4
#define LAN78XX_FCT_TX_CTL_EN 0x80000000UL /**< FCT TX enable */
+/** MAC control register */
+#define LAN78XX_MAC_CR 0x0100
+#define LAN78XX_MAC_CR_ADP 0x00002000UL /**< Duplex polarity */
+#define LAN78XX_MAC_CR_ADD 0x00001000UL /**< Auto duplex */
+#define LAN78XX_MAC_CR_ASD 0x00000800UL /**< Auto speed */
+
/** MAC receive register */
#define LAN78XX_MAC_RX 0x0104
#define LAN78XX_MAC_RX_MAX_SIZE(mtu) ( (mtu) << 16 ) /**< Max frame size */