aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00/rt2500usb.c
diff options
context:
space:
mode:
authorIvo van Doorn <IvDoorn@gmail.com>2008-06-03 12:58:56 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-06-14 12:17:55 -0400
commit2b08da3fb595432f87b5206c1c77dcb72300cacf (patch)
treeb165baf29c47a5e58ac7f9d755942aca5d519614 /drivers/net/wireless/rt2x00/rt2500usb.c
parent9dad92b9ba49eaab72513d821ae43298bcf93b90 (diff)
rt2x00: Cleanup/optimize set_state() function callback function
* Reduce goto usage * Mark if-statements which are true on hardware error unlikely() * Cleanup debug messages This makes the code look nicer and be better optimized since the chance of hardware errors should be very small. Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2500usb.c')
-rw-r--r--drivers/net/wireless/rt2x00/rt2500usb.c44
1 files changed, 26 insertions, 18 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2500usb.c b/drivers/net/wireless/rt2x00/rt2500usb.c
index cca1504550dc..a46e4a6eba96 100644
--- a/drivers/net/wireless/rt2x00/rt2500usb.c
+++ b/drivers/net/wireless/rt2x00/rt2500usb.c
@@ -847,25 +847,32 @@ static int rt2500usb_init_registers(struct rt2x00_dev *rt2x00dev)
847 return 0; 847 return 0;
848} 848}
849 849
850static int rt2500usb_init_bbp(struct rt2x00_dev *rt2x00dev) 850static int rt2500usb_wait_bbp_ready(struct rt2x00_dev *rt2x00dev)
851{ 851{
852 unsigned int i; 852 unsigned int i;
853 u16 eeprom;
854 u8 value; 853 u8 value;
855 u8 reg_id;
856 854
857 for (i = 0; i < REGISTER_BUSY_COUNT; i++) { 855 for (i = 0; i < REGISTER_BUSY_COUNT; i++) {
858 rt2500usb_bbp_read(rt2x00dev, 0, &value); 856 rt2500usb_bbp_read(rt2x00dev, 0, &value);
859 if ((value != 0xff) && (value != 0x00)) 857 if ((value != 0xff) && (value != 0x00))
860 goto continue_csr_init; 858 return 0;
861 NOTICE(rt2x00dev, "Waiting for BBP register.\n");
862 udelay(REGISTER_BUSY_DELAY); 859 udelay(REGISTER_BUSY_DELAY);
863 } 860 }
864 861
865 ERROR(rt2x00dev, "BBP register access failed, aborting.\n"); 862 ERROR(rt2x00dev, "BBP register access failed, aborting.\n");
866 return -EACCES; 863 return -EACCES;
864}
865
866static int rt2500usb_init_bbp(struct rt2x00_dev *rt2x00dev)
867{
868 unsigned int i;
869 u16 eeprom;
870 u8 value;
871 u8 reg_id;
872
873 if (unlikely(rt2500usb_wait_bbp_ready(rt2x00dev)))
874 return -EACCES;
867 875
868continue_csr_init:
869 rt2500usb_bbp_write(rt2x00dev, 3, 0x02); 876 rt2500usb_bbp_write(rt2x00dev, 3, 0x02);
870 rt2500usb_bbp_write(rt2x00dev, 4, 0x19); 877 rt2500usb_bbp_write(rt2x00dev, 4, 0x19);
871 rt2500usb_bbp_write(rt2x00dev, 14, 0x1c); 878 rt2500usb_bbp_write(rt2x00dev, 14, 0x1c);
@@ -921,7 +928,8 @@ static void rt2500usb_toggle_rx(struct rt2x00_dev *rt2x00dev,
921 928
922 rt2500usb_register_read(rt2x00dev, TXRX_CSR2, &reg); 929 rt2500usb_register_read(rt2x00dev, TXRX_CSR2, &reg);
923 rt2x00_set_field16(&reg, TXRX_CSR2_DISABLE_RX, 930 rt2x00_set_field16(&reg, TXRX_CSR2_DISABLE_RX,
924 state == STATE_RADIO_RX_OFF); 931 (state == STATE_RADIO_RX_OFF) ||
932 (state == STATE_RADIO_RX_OFF_LINK));
925 rt2500usb_register_write(rt2x00dev, TXRX_CSR2, reg); 933 rt2500usb_register_write(rt2x00dev, TXRX_CSR2, reg);
926} 934}
927 935
@@ -930,11 +938,9 @@ static int rt2500usb_enable_radio(struct rt2x00_dev *rt2x00dev)
930 /* 938 /*
931 * Initialize all registers. 939 * Initialize all registers.
932 */ 940 */
933 if (rt2500usb_init_registers(rt2x00dev) || 941 if (unlikely(rt2500usb_init_registers(rt2x00dev) ||
934 rt2500usb_init_bbp(rt2x00dev)) { 942 rt2500usb_init_bbp(rt2x00dev)))
935 ERROR(rt2x00dev, "Register initialization failed.\n");
936 return -EIO; 943 return -EIO;
937 }
938 944
939 return 0; 945 return 0;
940} 946}
@@ -987,10 +993,6 @@ static int rt2500usb_set_state(struct rt2x00_dev *rt2x00dev,
987 msleep(30); 993 msleep(30);
988 } 994 }
989 995
990 NOTICE(rt2x00dev, "Device failed to enter state %d, "
991 "current device state: bbp %d and rf %d.\n",
992 state, bbp_state, rf_state);
993
994 return -EBUSY; 996 return -EBUSY;
995} 997}
996 998
@@ -1008,11 +1010,13 @@ static int rt2500usb_set_device_state(struct rt2x00_dev *rt2x00dev,
1008 break; 1010 break;
1009 case STATE_RADIO_RX_ON: 1011 case STATE_RADIO_RX_ON:
1010 case STATE_RADIO_RX_ON_LINK: 1012 case STATE_RADIO_RX_ON_LINK:
1011 rt2500usb_toggle_rx(rt2x00dev, STATE_RADIO_RX_ON);
1012 break;
1013 case STATE_RADIO_RX_OFF: 1013 case STATE_RADIO_RX_OFF:
1014 case STATE_RADIO_RX_OFF_LINK: 1014 case STATE_RADIO_RX_OFF_LINK:
1015 rt2500usb_toggle_rx(rt2x00dev, STATE_RADIO_RX_OFF); 1015 rt2500usb_toggle_rx(rt2x00dev, state);
1016 break;
1017 case STATE_RADIO_IRQ_ON:
1018 case STATE_RADIO_IRQ_OFF:
1019 /* No support, but no error either */
1016 break; 1020 break;
1017 case STATE_DEEP_SLEEP: 1021 case STATE_DEEP_SLEEP:
1018 case STATE_SLEEP: 1022 case STATE_SLEEP:
@@ -1025,6 +1029,10 @@ static int rt2500usb_set_device_state(struct rt2x00_dev *rt2x00dev,
1025 break; 1029 break;
1026 } 1030 }
1027 1031
1032 if (unlikely(retval))
1033 ERROR(rt2x00dev, "Device failed to enter state %d (%d).\n",
1034 state, retval);
1035
1028 return retval; 1036 return retval;
1029} 1037}
1030 1038