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