hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/drivers/power/supply/goldfish_battery.c
....@@ -1,3 +1,4 @@
1
+// SPDX-License-Identifier: GPL-2.0
12 /*
23 * Power supply driver for the goldfish emulator
34 *
....@@ -5,15 +6,6 @@
56 * Copyright (C) 2012 Intel, Inc.
67 * Copyright (C) 2013 Intel, Inc.
78 * Author: Mike Lockwood <lockwood@android.com>
8
- *
9
- * This software is licensed under the terms of the GNU General Public
10
- * License version 2, as published by the Free Software Foundation, and
11
- * may be copied, distributed, and modified under those terms.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
- * GNU General Public License for more details.
179 */
1810
1911 #include <linux/module.h>
....@@ -40,27 +32,30 @@
4032 #define GOLDFISH_BATTERY_WRITE(data, addr, x) \
4133 (writel(x, data->reg_base + addr))
4234
43
-/*
44
- * Temporary variable used between goldfish_battery_probe() and
45
- * goldfish_battery_open().
46
- */
47
-static struct goldfish_battery_data *battery_data;
48
-
4935 enum {
5036 /* status register */
51
- BATTERY_INT_STATUS = 0x00,
37
+ BATTERY_INT_STATUS = 0x00,
5238 /* set this to enable IRQ */
53
- BATTERY_INT_ENABLE = 0x04,
39
+ BATTERY_INT_ENABLE = 0x04,
5440
55
- BATTERY_AC_ONLINE = 0x08,
56
- BATTERY_STATUS = 0x0C,
57
- BATTERY_HEALTH = 0x10,
58
- BATTERY_PRESENT = 0x14,
59
- BATTERY_CAPACITY = 0x18,
41
+ BATTERY_AC_ONLINE = 0x08,
42
+ BATTERY_STATUS = 0x0C,
43
+ BATTERY_HEALTH = 0x10,
44
+ BATTERY_PRESENT = 0x14,
45
+ BATTERY_CAPACITY = 0x18,
46
+ BATTERY_VOLTAGE = 0x1C,
47
+ BATTERY_TEMP = 0x20,
48
+ BATTERY_CHARGE_COUNTER = 0x24,
49
+ BATTERY_VOLTAGE_MAX = 0x28,
50
+ BATTERY_CURRENT_MAX = 0x2C,
51
+ BATTERY_CURRENT_NOW = 0x30,
52
+ BATTERY_CURRENT_AVG = 0x34,
53
+ BATTERY_CHARGE_FULL_UAH = 0x38,
54
+ BATTERY_CYCLE_COUNT = 0x40,
6055
6156 BATTERY_STATUS_CHANGED = 1U << 0,
6257 AC_STATUS_CHANGED = 1U << 1,
63
- BATTERY_INT_MASK = BATTERY_STATUS_CHANGED | AC_STATUS_CHANGED,
58
+ BATTERY_INT_MASK = BATTERY_STATUS_CHANGED | AC_STATUS_CHANGED,
6459 };
6560
6661
....@@ -74,6 +69,12 @@
7469 switch (psp) {
7570 case POWER_SUPPLY_PROP_ONLINE:
7671 val->intval = GOLDFISH_BATTERY_READ(data, BATTERY_AC_ONLINE);
72
+ break;
73
+ case POWER_SUPPLY_PROP_VOLTAGE_MAX:
74
+ val->intval = GOLDFISH_BATTERY_READ(data, BATTERY_VOLTAGE_MAX);
75
+ break;
76
+ case POWER_SUPPLY_PROP_CURRENT_MAX:
77
+ val->intval = GOLDFISH_BATTERY_READ(data, BATTERY_CURRENT_MAX);
7778 break;
7879 default:
7980 ret = -EINVAL;
....@@ -105,6 +106,29 @@
105106 case POWER_SUPPLY_PROP_CAPACITY:
106107 val->intval = GOLDFISH_BATTERY_READ(data, BATTERY_CAPACITY);
107108 break;
109
+ case POWER_SUPPLY_PROP_VOLTAGE_NOW:
110
+ val->intval = GOLDFISH_BATTERY_READ(data, BATTERY_VOLTAGE);
111
+ break;
112
+ case POWER_SUPPLY_PROP_TEMP:
113
+ val->intval = GOLDFISH_BATTERY_READ(data, BATTERY_TEMP);
114
+ break;
115
+ case POWER_SUPPLY_PROP_CHARGE_COUNTER:
116
+ val->intval = GOLDFISH_BATTERY_READ(data,
117
+ BATTERY_CHARGE_COUNTER);
118
+ break;
119
+ case POWER_SUPPLY_PROP_CURRENT_NOW:
120
+ val->intval = GOLDFISH_BATTERY_READ(data, BATTERY_CURRENT_NOW);
121
+ break;
122
+ case POWER_SUPPLY_PROP_CURRENT_AVG:
123
+ val->intval = GOLDFISH_BATTERY_READ(data, BATTERY_CURRENT_AVG);
124
+ break;
125
+ case POWER_SUPPLY_PROP_CHARGE_FULL:
126
+ val->intval = GOLDFISH_BATTERY_READ(data,
127
+ BATTERY_CHARGE_FULL_UAH);
128
+ break;
129
+ case POWER_SUPPLY_PROP_CYCLE_COUNT:
130
+ val->intval = GOLDFISH_BATTERY_READ(data, BATTERY_CYCLE_COUNT);
131
+ break;
108132 default:
109133 ret = -EINVAL;
110134 break;
....@@ -119,10 +143,19 @@
119143 POWER_SUPPLY_PROP_PRESENT,
120144 POWER_SUPPLY_PROP_TECHNOLOGY,
121145 POWER_SUPPLY_PROP_CAPACITY,
146
+ POWER_SUPPLY_PROP_VOLTAGE_NOW,
147
+ POWER_SUPPLY_PROP_TEMP,
148
+ POWER_SUPPLY_PROP_CHARGE_COUNTER,
149
+ POWER_SUPPLY_PROP_CURRENT_NOW,
150
+ POWER_SUPPLY_PROP_CURRENT_AVG,
151
+ POWER_SUPPLY_PROP_CHARGE_FULL,
152
+ POWER_SUPPLY_PROP_CYCLE_COUNT,
122153 };
123154
124155 static enum power_supply_property goldfish_ac_props[] = {
125156 POWER_SUPPLY_PROP_ONLINE,
157
+ POWER_SUPPLY_PROP_VOLTAGE_MAX,
158
+ POWER_SUPPLY_PROP_CURRENT_MAX,
126159 };
127160
128161 static irqreturn_t goldfish_battery_interrupt(int irq, void *dev_id)
....@@ -193,8 +226,9 @@
193226 return -ENODEV;
194227 }
195228
196
- ret = devm_request_irq(&pdev->dev, data->irq, goldfish_battery_interrupt,
197
- IRQF_SHARED, pdev->name, data);
229
+ ret = devm_request_irq(&pdev->dev, data->irq,
230
+ goldfish_battery_interrupt,
231
+ IRQF_SHARED, pdev->name, data);
198232 if (ret)
199233 return ret;
200234
....@@ -212,7 +246,6 @@
212246 }
213247
214248 platform_set_drvdata(pdev, data);
215
- battery_data = data;
216249
217250 GOLDFISH_BATTERY_WRITE(data, BATTERY_INT_ENABLE, BATTERY_INT_MASK);
218251 return 0;
....@@ -224,7 +257,6 @@
224257
225258 power_supply_unregister(data->battery);
226259 power_supply_unregister(data->ac);
227
- battery_data = NULL;
228260 return 0;
229261 }
230262
....@@ -234,11 +266,13 @@
234266 };
235267 MODULE_DEVICE_TABLE(of, goldfish_battery_of_match);
236268
269
+#ifdef CONFIG_ACPI
237270 static const struct acpi_device_id goldfish_battery_acpi_match[] = {
238271 { "GFSH0001", 0 },
239272 { },
240273 };
241274 MODULE_DEVICE_TABLE(acpi, goldfish_battery_acpi_match);
275
+#endif
242276
243277 static struct platform_driver goldfish_battery_device = {
244278 .probe = goldfish_battery_probe,