merge of '0b604857bbf871639fdb43ee8380222e8ef64bb7'
[vuplus_openembedded] / packages / linux / linux-rp-2.6.24 / tosa / 0063-patch-tosa-bat-jacket-detect.patch
1 From 4ef7289137132959e3db5a1e77580ff9db185d90 Mon Sep 17 00:00:00 2001
2 From: Dmitry Baryshkov <dbaryshkov@gmail.com>
3 Date: Fri, 8 Feb 2008 01:13:54 +0300
4 Subject: [PATCH 63/64] patch tosa-bat-jacket-detect
5
6 ---
7  drivers/power/tosa_battery.c |   21 +++++++++++++++------
8  1 files changed, 15 insertions(+), 6 deletions(-)
9
10 diff --git a/drivers/power/tosa_battery.c b/drivers/power/tosa_battery.c
11 index 2db9116..70beed2 100644
12 --- a/drivers/power/tosa_battery.c
13 +++ b/drivers/power/tosa_battery.c
14 @@ -137,8 +137,7 @@ static int tosa_bat_get_property(struct power_supply *psy,
15  }
16  
17  static bool tosa_jacket_bat_is_present(struct tosa_bat *bat) {
18 -       // FIXME
19 -       return 1;
20 +       return gpio_get_value(TOSA_GPIO_JACKET_DETECT) == 0;
21  }
22  
23  static void tosa_bat_external_power_changed(struct power_supply *psy)
24 @@ -146,9 +145,9 @@ static void tosa_bat_external_power_changed(struct power_supply *psy)
25         schedule_work(&bat_work);
26  }
27  
28 -static irqreturn_t tosa_bat_full_isr(int irq, void *data)
29 +static irqreturn_t tosa_bat_gpio_isr(int irq, void *data)
30  {
31 -       printk(KERN_ERR "bat_full irq: %d\n", gpio_get_value(irq_to_gpio(irq)));
32 +       printk(KERN_ERR "bat_gpio irq: %d\n", gpio_get_value(irq_to_gpio(irq)));
33         schedule_work(&bat_work);
34         return IRQ_HANDLED;
35  }
36 @@ -334,6 +333,7 @@ static struct {
37         { TOSA_GPIO_BAT1_CRG,           "jacket battery full",  0, 0 },
38         { TOSA_GPIO_BAT0_LOW,           "main battery low",     0, 0 },
39         { TOSA_GPIO_BAT1_LOW,           "jacket battery low",   0, 0 },
40 +       { TOSA_GPIO_JACKET_DETECT,      "jacket detect",        0, 0 },
41  };
42  
43  #ifdef CONFIG_PM
44 @@ -395,19 +395,27 @@ static int __devinit tosa_bat_probe(struct platform_device *dev)
45                 goto err_psy_reg_bu;
46  
47         ret = request_irq(gpio_to_irq(TOSA_GPIO_BAT0_CRG),
48 -                               tosa_bat_full_isr, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
49 +                               tosa_bat_gpio_isr, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
50                                 "main full", &tosa_bat_main);
51         if (ret)
52                 goto err_req_main;
53  
54         ret = request_irq(gpio_to_irq(TOSA_GPIO_BAT1_CRG),
55 -                               tosa_bat_full_isr, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
56 +                               tosa_bat_gpio_isr, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
57                                 "jacket full", &tosa_bat_jacket);
58 +       if (ret)
59 +               goto err_req_jacket;
60 +
61 +       ret = request_irq(gpio_to_irq(TOSA_GPIO_JACKET_DETECT),
62 +                               tosa_bat_gpio_isr, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
63 +                               "jacket detect", &tosa_bat_jacket);
64         if (!ret) {
65                 schedule_work(&bat_work);
66                 return 0;
67         }
68  
69 +       free_irq(gpio_to_irq(TOSA_GPIO_BAT1_CRG), &tosa_bat_jacket);
70 +err_req_jacket:
71         free_irq(gpio_to_irq(TOSA_GPIO_BAT0_CRG), &tosa_bat_main);
72  err_req_main:
73         power_supply_unregister(&tosa_bat_bu.psy);
74 @@ -429,6 +437,7 @@ static int __devexit tosa_bat_remove(struct platform_device *dev)
75  {
76         int i;
77  
78 +       free_irq(gpio_to_irq(TOSA_GPIO_JACKET_DETECT), &tosa_bat_jacket);
79         free_irq(gpio_to_irq(TOSA_GPIO_BAT1_CRG), &tosa_bat_jacket);
80         free_irq(gpio_to_irq(TOSA_GPIO_BAT0_CRG), &tosa_bat_main);
81  
82 -- 
83 1.5.3.8
84