From 00e2e05dd08bc15b09514f5ce35f0b9a3534e9ba Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Wed, 8 Apr 2009 11:13:59 +0300 Subject: [PATCH] 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 Signed-off-by: Pekka Enberg Signed-off-by: Greg Kroah-Hartman --- drivers/staging/winbond/wbusb.c | 66 ++++++++++++++++++++++------------------- 1 file changed, 35 insertions(+), 31 deletions(-) diff --git a/drivers/staging/winbond/wbusb.c b/drivers/staging/winbond/wbusb.c index 897ac94..4ce2e5a 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; } -- 2.7.4