Skip to content

Commit c485d51

Browse files
committed
Implement EXI speed negotiation for W6X00
1 parent b1fbd5b commit c485d51

1 file changed

Lines changed: 12 additions & 7 deletions

File tree

lwip/netif/w6x00if.c

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
w6x00if.c -- W6X00 device driver
44
5-
Copyright (C) 2024 - 2025 Extrems' Corner.org
5+
Copyright (C) 2024 - 2026 Extrems' Corner.org
66
77
This software is provided 'as-is', without any express or implied
88
warranty. In no event will the authors be held liable for any
@@ -961,7 +961,7 @@ static bool W6X00_Init(s32 chan, s32 dev, struct w6x00if *w6x00if)
961961

962962
EXI_LockEx(chan, dev);
963963
Dev[chan] = dev;
964-
Freq[chan] = dev == EXI_DEVICE_0 ? EXI_SPEED32MHZ : EXI_SPEED16MHZ;
964+
Freq[chan] = EXI_SPEEDMAX - 1;
965965

966966
switch (id) {
967967
case W6100_CID:
@@ -974,13 +974,18 @@ static bool W6X00_Init(s32 chan, s32 dev, struct w6x00if *w6x00if)
974974
break;
975975
}
976976

977-
if (!W6X00_ReadReg16(chan, W6X00_CIDR, &cidr) || cidr != 0x6100 ||
977+
while (!W6X00_ReadReg16(chan, W6X00_CIDR, &cidr) || cidr != 0x6100 ||
978978
!W6X00_ReadReg16(chan, W6X00_VER, &ver) || ver != 0x4661 ||
979979
!W6X00_ReadReg(chan, W6X00_CIDR2, &cidr2) || cidr2 < 0x10 || cidr2 > 0x11) {
980-
EXI_Unlock(chan);
981-
if (chan < EXI_CHANNEL_2 && dev == EXI_DEVICE_0)
982-
EXI_Detach(chan);
983-
return false;
980+
if (Freq[chan] > EXI_SPEED16MHZ) {
981+
Freq[chan]--;
982+
continue;
983+
} else {
984+
EXI_Unlock(chan);
985+
if (chan < EXI_CHANNEL_2 && dev == EXI_DEVICE_0)
986+
EXI_Detach(chan);
987+
return false;
988+
}
984989
}
985990

986991
w6x00if->chan = chan;

0 commit comments

Comments
 (0)