pda_power: only register available psu

Currently pda-power adds both ac and usb power supply units.
This patch fixes it so that psu are added only if they are enabled.

Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
Signed-off-by: Anton Vorontsov <cbou@mail.ru>

authored by Dmitry Baryshkov and committed by Anton Vorontsov 9ef45106 839dc9f1

+45 -37
+45 -37
drivers/power/pda_power.c
··· 168 168 pda_power_supplies[1].num_supplicants = pdata->num_supplicants; 169 169 } 170 170 171 - ret = power_supply_register(&pdev->dev, &pda_power_supplies[0]); 172 - if (ret) { 173 - dev_err(dev, "failed to register %s power supply\n", 174 - pda_power_supplies[0].name); 175 - goto supply0_failed; 176 - } 177 - 178 - ret = power_supply_register(&pdev->dev, &pda_power_supplies[1]); 179 - if (ret) { 180 - dev_err(dev, "failed to register %s power supply\n", 181 - pda_power_supplies[1].name); 182 - goto supply1_failed; 183 - } 184 - 185 - if (ac_irq) { 186 - ret = request_irq(ac_irq->start, power_changed_isr, 187 - get_irq_flags(ac_irq), ac_irq->name, 188 - &pda_power_supplies[0]); 171 + if (pdata->is_ac_online) { 172 + ret = power_supply_register(&pdev->dev, &pda_power_supplies[0]); 189 173 if (ret) { 190 - dev_err(dev, "request ac irq failed\n"); 191 - goto ac_irq_failed; 174 + dev_err(dev, "failed to register %s power supply\n", 175 + pda_power_supplies[0].name); 176 + goto ac_supply_failed; 177 + } 178 + 179 + if (ac_irq) { 180 + ret = request_irq(ac_irq->start, power_changed_isr, 181 + get_irq_flags(ac_irq), ac_irq->name, 182 + &pda_power_supplies[0]); 183 + if (ret) { 184 + dev_err(dev, "request ac irq failed\n"); 185 + goto ac_irq_failed; 186 + } 192 187 } 193 188 } 194 189 195 - if (usb_irq) { 196 - ret = request_irq(usb_irq->start, power_changed_isr, 197 - get_irq_flags(usb_irq), usb_irq->name, 198 - &pda_power_supplies[1]); 190 + if (pdata->is_usb_online) { 191 + ret = power_supply_register(&pdev->dev, &pda_power_supplies[1]); 199 192 if (ret) { 200 - dev_err(dev, "request usb irq failed\n"); 201 - goto usb_irq_failed; 193 + dev_err(dev, "failed to register %s power supply\n", 194 + pda_power_supplies[1].name); 195 + goto usb_supply_failed; 196 + } 197 + 198 + if (usb_irq) { 199 + ret = request_irq(usb_irq->start, power_changed_isr, 200 + get_irq_flags(usb_irq), 201 + usb_irq->name, 202 + &pda_power_supplies[1]); 203 + if (ret) { 204 + dev_err(dev, "request usb irq failed\n"); 205 + goto usb_irq_failed; 206 + } 202 207 } 203 208 } 204 209 205 - goto success; 210 + return 0; 206 211 207 212 usb_irq_failed: 208 - if (ac_irq) 213 + if (pdata->is_usb_online) 214 + power_supply_unregister(&pda_power_supplies[1]); 215 + usb_supply_failed: 216 + if (pdata->is_ac_online && ac_irq) 209 217 free_irq(ac_irq->start, &pda_power_supplies[0]); 210 218 ac_irq_failed: 211 - power_supply_unregister(&pda_power_supplies[1]); 212 - supply1_failed: 213 - power_supply_unregister(&pda_power_supplies[0]); 214 - supply0_failed: 219 + if (pdata->is_ac_online) 220 + power_supply_unregister(&pda_power_supplies[0]); 221 + ac_supply_failed: 215 222 noirqs: 216 223 wrongid: 217 - success: 218 224 return ret; 219 225 } 220 226 221 227 static int pda_power_remove(struct platform_device *pdev) 222 228 { 223 - if (usb_irq) 229 + if (pdata->is_usb_online && usb_irq) 224 230 free_irq(usb_irq->start, &pda_power_supplies[1]); 225 - if (ac_irq) 231 + if (pdata->is_ac_online && ac_irq) 226 232 free_irq(ac_irq->start, &pda_power_supplies[0]); 227 233 del_timer_sync(&charger_timer); 228 234 del_timer_sync(&supply_timer); 229 - power_supply_unregister(&pda_power_supplies[1]); 230 - power_supply_unregister(&pda_power_supplies[0]); 235 + if (pdata->is_usb_online) 236 + power_supply_unregister(&pda_power_supplies[1]); 237 + if (pdata->is_ac_online) 238 + power_supply_unregister(&pda_power_supplies[0]); 231 239 return 0; 232 240 } 233 241