[Desire Q&A, Help & Troubleshooting] TVTV:
First of all, go back to stock 2.2 (clean install from RUU, not a nandroid) and keep runnin' it for a few days while monitoring WiFi. If the WiFi's stable with stock, then it must be a software fault, in which case i'd advise you to upgrade to the latest radio from the official GB ROM when using GB/ICS ROMs. If the WiFi's not stable even with stock 2.2 + stock 2.2 radio, then you have a hardware problem on your hands and my bet is that nobody but an HTC service can help you with that.

Here's my logcat for enabling the WiFi connection + connecting to my router (i have replaced the MAC strings with ADDR).

D/WifiStatusBarPreference( 188): set wifi enable: true
D/WifiService( 122): setWifiEnabled =truemAirplaneModeOverwridden =false
D/WifiService( 122): setWifiEnabledBlocking:Enable Wifi
I/WifiHW ( 122): wifi_load_driver enter
I/WifiHW ( 122): check_driver_loaded
I/WifiHW ( 122): insmod
D/NetSharing_NSReceiver( 4957): onReceive : android.net.wifi.WIFI_STATE_CHANGED
D/NetSharing( 4957): wifi enabled change, state = false
D/NetSharing( 4957): wifi enabled change, state = false
I/WifiHW ( 122): wifi_load_driver end right 3
I/WifiHW ( 122): wifi_start_supplicant enter
D/WifiHW ( 122): create dhcp dir ok!
I/WifiHW ( 122): ensure_config_file_exists
I/WifiHW ( 122): wifi_start_supplicant end right 2
D/WifiService( 122): [smart wifi] mSmartWiFiStatus: 0 mBatteryLevel: 83 mWifiConnected: false
D/WifiService( 122): [smart wifi] ACTION_BATTERY_CHANGED pluggedType: 0
I/WifiHW ( 122): can't access IFACE_DIR OK
D/WifiService( 122): acquireWifiLockLocked: WifiLock{NetworkLocationProvider type=2 binder=android.os.BinderProxy@40b6da10} Mode: 2
D/NetSharing_NSReceiver( 4957): onReceive : android.net.wifi.WIFI_STATE_CHANGED
D/NetSharing( 4957): wifi enabled change, state = false
D/NetSharing( 4957): wifi enabled change, state = false
D/WifiService( 122): releaseWifiLockLocked: WifiLock{NetworkLocationProvider type=2 binder=android.os.BinderProxy@40b6da10} Mode: 2
I/WifiHW ( 122): Connect to Supplicant done
D/WifiService( 122): enable and start wifi due to updateWifiState
D/WifiService( 122): enable and start wifi due to updateWifiState
D/WifiStateTracker( 122): Not get IP address yet, shall not do WiFi offload
V/WifiMonitor( 122): Event [CTRL-EVENT-STATE-CHANGE id=-1 state=2 BSSID=00:00:00:00:00:00]
I/wpa_supplicant( 5325): Check WiFi offload status: wpa_s->vh_wifi_to_mobile:-1 ,wpa_s->vh_user_connect:-1
V/WifiMonitor( 122): Event [Trying to associate with ADDR (SSID='TV' freq=2412 MHz)]
V/WifiMonitor( 122): Event [CTRL-EVENT-STATE-CHANGE id=-1 state=3 BSSID=ADDR]
V/WifiStateTracker( 122): Connection to supplicant established, state=DISCONNECTED
V/WifiStateTracker( 122): KeyStore.LOCKED
V/WifiStateTracker( 122): Changing supplicant state: DISCONNECTED ==> SCANNING
V/WifiStateTracker( 122): Changing supplicant state: SCANNING ==> ASSOCIATING
V/WifiStateTracker( 122): KeyStore.LOCKED
D/ConnectivityService( 122): ConnectivityChange for WIFI: CONNECTING/CONNECTING
D/ConnectivityService( 122): Dropping ConnectivityChange for WIFI: CONNECTING/CONNECTING
V/WifiMonitor( 122): Event [CTRL-EVENT-STATE-CHANGE id=5 state=4 BSSID=ADDR]
V/WifiStateTracker( 122): Changing supplicant state: ASSOCIATING ==> ASSOCIATED
V/WifiMonitor( 122): Event [Associated with ADDR]
V/WifiMonitor( 122): Event [CTRL-EVENT-STATE-CHANGE id=5 state=5 BSSID=00:00:00:00:00:00]
V/WifiStateTracker( 122): Changing supplicant state: ASSOCIATED ==> FOUR_WAY_HANDSHAKE
D/ConnectivityService( 122): Dropping ConnectivityChange for WIFI: CONNECTING/AUTHENTICATING
V/WifiMonitor( 122): Event [CTRL-EVENT-STATE-CHANGE id=5 state=5 BSSID=00:00:00:00:00:00]
V/WifiStateTracker( 122): Changing supplicant state: FOUR_WAY_HANDSHAKE ==> FOUR_WAY_HANDSHAKE
V/WifiMonitor( 122): Event [CTRL-EVENT-STATE-CHANGE id=5 state=6 BSSID=00:00:00:00:00:00]
V/WifiStateTracker( 122): Changing supplicant state: FOUR_WAY_HANDSHAKE ==> GROUP_HANDSHAKE
V/WifiMonitor( 122): Event [WPA: Key negotiation completed with ADDR [PTK=CCMP GTK=TKIP]]
V/WifiMonitor( 122): Event [CTRL-EVENT-STATE-CHANGE id=5 state=7 BSSID=00:00:00:00:00:00]
V/WifiMonitor( 122): Event [CTRL-EVENT-CONNECTED - Connection to ADDR completed (auth) [id=5 id_str=]]
V/WifiStateTracker( 122): Changing supplicant state: GROUP_HANDSHAKE ==> COMPLETED
V/WifiStateTracker( 122): New network state is CONNECTED
D/WifiStateTracker( 122): DhcpHandler: acquire ddWakeLock
D/WifiStateTracker( 122): DhcpHandler: DHCP request started
D/ConnectivityService( 122): Dropping ConnectivityChange for WIFI: CONNECTING/OBTAINING_IPADDR
D/NetSharing_NSReceiver( 4957): onReceive : android.net.wifi.STATE_CHANGE
I/NetSharing_NSReceiver( 4957): wifienabled:false
V/WifiStateTracker( 122): DhcpHandler: DHCP request succeeded
D/WifiStateTracker( 122): DhcpHandler: release ddWakeLock
D/WifiStateTracker( 122): change state to connected for wifi supplicant state=COMPLETED
D/StatusBarService( 188): updateIcon slot=wifi index=16 viewIndex=10 old=StatusBarIcon(pkg=com.android.systemui id=0x7f0200d3 level=0 visible=false num=0 ) icon=StatusBarIcon(pkg=com.android.systemui id=0x7f0200d2 level=0 visible=true num=0 )
D/WifiWatchdogService( 122): (android.server.ServerThread) TV (ADDR) does not require the watchdog
D/NetSharing_NSReceiver( 4957): onReceive : android.net.wifi.STATE_CHANGE
I/NetSharing_NSReceiver( 4957): wifienabled:true
D/WifiStateTracker( 122): adding routing rule table=>wifi fromIp=all, toIp=all priority=3001
I/ipd ( 78): IP CMD: /system/bin/ip ro flush table wifi
V/WifiStateTracker( 122): IP configuration: ipaddr 192.168.100.5 gateway 192.168.100.1 netmask 255.255.255.0 dns1 192.168.100.1 dns2 0.0.0.0 DHCP server 192.168.100.1 lease 86400 seconds
I/wpa_supplicant( 5325): WiFi gateway: 0x 164a8c0
D/ConnectivityService( 122): ConnectivityChange for WIFI: CONNECTED/CONNECTED
V/NetworkStateTracker( 122): Setting TCP values: [4095,87380,110208,4096,16384,110208] which comes from [net.tcp.buffersize.wifi]
D/ConnectivityService( 122): adding dns 192.168.100.1 for WIFI
I/ipd ( 78): IP CMD: /system/bin/ip ro add 192.168.100.0/24 dev eth0 src 192.168.100.5 table wifi
D/WifiService( 122): type: WIFI, connected: true
D/StatusBarService( 188): updateIcon slot=wifi index=16 viewIndex=10 old=StatusBarIcon(pkg=com.android.systemui id=0x7f0200d2 level=0 visible=true num=0 ) icon=StatusBarIcon(pkg=com.android.systemui id=0x7f0200d9 level=0 visible=true num=0 )
I/ipd ( 78): IP CMD: /system/bin/ip ro add default via 192.168.100.1 dev eth0 table wifi
I/ipd ( 78): IP CMD: /system/bin/ip ru del from all to all table wifi prio 3001
I/ipd ( 78): IP CMD: /system/bin/ip ru add from all to all table wifi prio 3001
D/Tethering( 122): Tethering got CONNECTIVITY_ACTION type: WIFI, subtype: , status: CONNECTED
D/AutoSetting( 3674): receiver - NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true, if: eth0
D/AutoSetting( 3674): Util - wifi connected
D/AutoSetting( 3674): Util - wifi connected
D/GpsLocationProvider( 122): updateNetworkState available info: NetworkInfo: type: WIFI[], state: CONNECTED/CONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true, if: eth0
D/StatusBarService( 188): updateIcon slot=wifi index=16 viewIndex=10 old=StatusBarIcon(pkg=com.android.systemui id=0x7f0200d9 level=0 visible=true num=0 ) icon=StatusBarIcon(pkg=com.android.systemui id=0x7f0200d9 level=0 visible=true num=0 )

DMESG:

<6>[29199.683929] [WLAN] wifi_set_power = 1
<6>[29199.683929] bravo_wifi_power: 1
<6>[29199.959381] [WLAN] wifi_set_carddetect = 1
<6>[29199.959503] bravo_wifi_set_carddetect: 1
<7>[29199.959686] mmc0: card_present 1
<6>[29199.959808] mmc0: Slot status change detected (0 -> 1)
<6>[29199.962219] [WLAN] Dongle Host Driver, version 4.218.204.2
<7>[29202.517456] mmc0: queuing CIS tuple 0x91 length 3
<6>[29202.517944] mmc0: new high speed SDIO card at address 0001
<6>[29202.538635] [WLAN] DHD: dongle ram size is set to 294912(orig 294912)
<6>[29202.783966] [WLAN] irq: 239
<6>[29202.784729] [WLAN] firmware version: wl0: Aug 2 2010 16:45:25 version 4.218.207.0
<6>[29202.786743] [WLAN] wifi: Disable 802.11n
<6>[29202.929382] [WLAN] dhd_preinit_ioctls:str=0x6e756c6c207061636b657400
<6>[29202.937347] [WLAN] eth0: Broadcom Dongle Host Driver mac=xx:xx:xx:xx:xx:xx
<6>[29202.942016] [WLAN] enter dhd_set_multicast_list
<6>[29202.943939] [WLAN] enter dhd_set_multicast_list
<6>[29202.948150] [WLAN] enter dhd_set_multicast_list
<6>[29202.953033] [ATS][press_widget][launch]
<6>[29203.873687] [WLAN] Send Event ISCAN complete
<6>[29204.597991] [WLAN] disassoc client!
<6>[29204.621032] [LS][CM3602] ALS value: 0x0, level: 1 #
<6>[29204.703704] [WLAN] wl_iw_iscan_get_scan return to WE 852 bytes APs=4
<6>[29204.713378] [WLAN] pfn: set ssid = TV
<6>[29204.713500] [WLAN] lightest is 0, weightest is 0, samessid = 65535
<6>[29204.728271] [WLAN] Enter set packet filter
<6>[29204.729187] [WLAN] start to add pkt filter 100
<6>[29204.730865] [WLAN] RXFILTER-ADD MULTICAST filter
<6>[29204.730987] [WLAN] Enter set packet filter
<6>[29204.731933] [WLAN] start to add pkt filter 104
<6>[29204.733917] [WLAN] Enter set packet filter
<6>[29204.734893] [WLAN] start to add pkt filter 102
<6>[29205.651885] [LS][CM3602] ALS value: 0x0, level: 1 #
<6>[29205.842590] [WLAN] wake lock 15 secs!
<6>[29205.843170] [WLAN] Link UP
<6>[29205.881042] [WLAN] STA connect received 1
<6>[29205.946594] [WLAN] getpower: and_pm = 0, dhd_pm: 2, ctrl_mask: 0x0, usb_act: 1
<6>[29205.947204] [WLAN] power active. ctrl_mask: 0x1
<6>[29205.948211] [WLAN] btcoex_dhcp_timer_start: sco time=0
<6>[29207.952178] [WLAN] update pm: PM_FAST, wifiLock: 0
<6>[29207.970855] [WLAN] Enter set packet filter
<6>[29207.973663] [WLAN] start to add pkt filter 101
<6>[29207.975738] [WLAN] ip: c0a86405
<6>[29208.118255] [WLAN] Driver GET GATEWAY-ADD CMD!!!
<6>[29208.118499] [WLAN] gatewaybuf: c0a86401