diff options
author | Pekka Enberg <penberg@cs.helsinki.fi> | 2009-04-08 11:13:59 +0300 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-06-19 11:00:37 -0700 |
commit | 00e2e05dd08bc15b09514f5ce35f0b9a3534e9ba (patch) | |
tree | 229a08092258d9f4fafcc2f302543965406c854a | |
parent | cfe31f81e1ba7e0c590fc1f2fd688309b685654a (diff) |
Staging: w35und: simplify hal_init_hardware() error handling
Impact: cleanup
Use gotos to simplify the deep if-statement nesting in
hal_init_hardware().
Acked-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/staging/winbond/wbusb.c | 66 |
1 files changed, 35 insertions, 31 deletions
diff --git a/drivers/staging/winbond/wbusb.c b/drivers/staging/winbond/wbusb.c index 897ac94f63af..4ce2e5af9591 100644 --- a/drivers/staging/winbond/wbusb.c +++ b/drivers/staging/winbond/wbusb.c @@ -487,38 +487,42 @@ static int hal_init_hardware(struct ieee80211_hw *hw) pHwData->FragmentThreshold = DEFAULT_FRAGMENT_THRESHOLD; // Setting default fragment threshold pHwData->InitialResource = 1; - if( Wb35Reg_initial(pHwData)) { - pHwData->InitialResource = 2; - if (Wb35Tx_initial(pHwData)) { - pHwData->InitialResource = 3; - if (Wb35Rx_initial(pHwData)) { - pHwData->InitialResource = 4; - init_timer(&pHwData->LEDTimer); - pHwData->LEDTimer.function = hal_led_control; - pHwData->LEDTimer.data = (unsigned long) priv; - pHwData->LEDTimer.expires = jiffies + msecs_to_jiffies(1000); - add_timer(&pHwData->LEDTimer); - - // - // For restrict to vendor's hardware - // - SoftwareSet = hal_software_set( pHwData ); - - #ifdef Vendor2 - // Try to make sure the EEPROM contain - SoftwareSet >>= 8; - if( SoftwareSet != 0x82 ) - return false; - #endif - - Wb35Rx_start(hw); - Wb35Tx_EP2VM_start(priv); - - return 0; - } - } - } + if (!Wb35Reg_initial(pHwData)) + goto error; + + pHwData->InitialResource = 2; + if (!Wb35Tx_initial(pHwData)) + goto error; + + pHwData->InitialResource = 3; + if (!Wb35Rx_initial(pHwData)) + goto error; + + pHwData->InitialResource = 4; + init_timer(&pHwData->LEDTimer); + pHwData->LEDTimer.function = hal_led_control; + pHwData->LEDTimer.data = (unsigned long) priv; + pHwData->LEDTimer.expires = jiffies + msecs_to_jiffies(1000); + add_timer(&pHwData->LEDTimer); + + // + // For restrict to vendor's hardware + // + SoftwareSet = hal_software_set( pHwData ); + + #ifdef Vendor2 + // Try to make sure the EEPROM contain + SoftwareSet >>= 8; + if( SoftwareSet != 0x82 ) + return false; + #endif + Wb35Rx_start(hw); + Wb35Tx_EP2VM_start(priv); + + return 0; + +error: pHwData->SurpriseRemove = 1; return -EINVAL; } |