1 From cbe46408b666983284e8be290950d526dbc0f0a4 Mon Sep 17 00:00:00 2001
2 From: Dmitry Baryshkov <dbaryshkov@gmail.com>
3 Date: Wed, 9 Jan 2008 02:08:16 +0300
4 Subject: [PATCH 26/64] I don't think we should check for IRQs when determining which one
5 of power supplies to register. Better use is_{ac,usb}_online
6 callbacks, this will not produce an obstacle to implement polling --
7 when irqs aren't mandatory. I'll send my two pending patches to show
10 For this particular issue, I think something like that should work.
11 If it works for you, I'll commit that version, preserving your
12 authorship, of course.
14 drivers/power/pda_power.c | 80 ++++++++++++++++++++++++--------------------
15 1 files changed, 44 insertions(+), 36 deletions(-)
17 diff --git a/drivers/power/pda_power.c b/drivers/power/pda_power.c
18 index c058f28..d98622f 100644
19 --- a/drivers/power/pda_power.c
20 +++ b/drivers/power/pda_power.c
21 @@ -168,66 +168,74 @@ static int pda_power_probe(struct platform_device *pdev)
22 pda_power_supplies[1].num_supplicants = pdata->num_supplicants;
25 - ret = power_supply_register(&pdev->dev, &pda_power_supplies[0]);
27 - dev_err(dev, "failed to register %s power supply\n",
28 - pda_power_supplies[0].name);
29 - goto supply0_failed;
31 + if (pdata->is_ac_online) {
32 + ret = power_supply_register(&pdev->dev, &pda_power_supplies[0]);
34 + dev_err(dev, "failed to register %s power supply\n",
35 + pda_power_supplies[0].name);
36 + goto ac_supply_failed;
39 - ret = power_supply_register(&pdev->dev, &pda_power_supplies[1]);
41 - dev_err(dev, "failed to register %s power supply\n",
42 - pda_power_supplies[1].name);
43 - goto supply1_failed;
45 + ret = request_irq(ac_irq->start, power_changed_isr,
46 + get_irq_flags(ac_irq), ac_irq->name,
47 + &pda_power_supplies[0]);
49 + dev_err(dev, "request ac irq failed\n");
56 - ret = request_irq(ac_irq->start, power_changed_isr,
57 - get_irq_flags(ac_irq), ac_irq->name,
58 - &pda_power_supplies[0]);
59 + if (pdata->is_usb_online) {
60 + ret = power_supply_register(&pdev->dev, &pda_power_supplies[1]);
62 - dev_err(dev, "request ac irq failed\n");
64 + dev_err(dev, "failed to register %s power supply\n",
65 + pda_power_supplies[1].name);
66 + goto usb_supply_failed;
71 - ret = request_irq(usb_irq->start, power_changed_isr,
72 - get_irq_flags(usb_irq), usb_irq->name,
73 - &pda_power_supplies[1]);
75 - dev_err(dev, "request usb irq failed\n");
76 - goto usb_irq_failed;
78 + ret = request_irq(usb_irq->start, power_changed_isr,
79 + get_irq_flags(usb_irq),
81 + &pda_power_supplies[1]);
83 + dev_err(dev, "request usb irq failed\n");
84 + goto usb_irq_failed;
94 + if (pdata->is_usb_online)
95 + power_supply_unregister(&pda_power_supplies[1]);
97 + if (pdata->is_ac_online && ac_irq)
98 free_irq(ac_irq->start, &pda_power_supplies[0]);
100 - power_supply_unregister(&pda_power_supplies[1]);
102 - power_supply_unregister(&pda_power_supplies[0]);
104 + if (pdata->is_ac_online)
105 + power_supply_unregister(&pda_power_supplies[0]);
113 static int pda_power_remove(struct platform_device *pdev)
116 + if (pdata->is_usb_online && usb_irq)
117 free_irq(usb_irq->start, &pda_power_supplies[1]);
119 + if (pdata->is_ac_online && ac_irq)
120 free_irq(ac_irq->start, &pda_power_supplies[0]);
121 del_timer_sync(&charger_timer);
122 del_timer_sync(&supply_timer);
123 - power_supply_unregister(&pda_power_supplies[1]);
124 - power_supply_unregister(&pda_power_supplies[0]);
125 + if (pdata->is_usb_online)
126 + power_supply_unregister(&pda_power_supplies[1]);
127 + if (pdata->is_ac_online)
128 + power_supply_unregister(&pda_power_supplies[0]);