1 /*
2 * (C) Copyright 2017 Rockchip Electronics Co., Ltd
3 *
4 * SPDX-License-Identifier: GPL-2.0+
5 */
6
7 #include <errno.h>
8 #include <dm.h>
9 #include <power/fuel_gauge.h>
10
11 DECLARE_GLOBAL_DATA_PTR;
12
fuel_gauge_capability(struct udevice * dev)13 int fuel_gauge_capability(struct udevice *dev)
14 {
15 const struct dm_fuel_gauge_ops *ops = dev_get_driver_ops(dev);
16
17 if (!ops || !ops->capability)
18 return (FG_CAP_CHARGER | FG_CAP_FUEL_GAUGE);
19
20 return ops->capability(dev);
21 }
22
fuel_gauge_bat_is_exist(struct udevice * dev)23 int fuel_gauge_bat_is_exist(struct udevice *dev)
24 {
25 const struct dm_fuel_gauge_ops *ops = dev_get_driver_ops(dev);
26
27 if (!ops || !ops->bat_is_exist)
28 return -ENOSYS;
29
30 return ops->bat_is_exist(dev);
31 }
32
fuel_gauge_get_current(struct udevice * dev)33 int fuel_gauge_get_current(struct udevice *dev)
34 {
35 const struct dm_fuel_gauge_ops *ops = dev_get_driver_ops(dev);
36
37 if (!ops || !ops->get_current)
38 return -ENOSYS;
39
40 return ops->get_current(dev);
41 }
42
fuel_gauge_get_voltage(struct udevice * dev)43 int fuel_gauge_get_voltage(struct udevice *dev)
44 {
45 const struct dm_fuel_gauge_ops *ops = dev_get_driver_ops(dev);
46
47 if (!ops || !ops->get_voltage)
48 return -ENOSYS;
49
50 return ops->get_voltage(dev);
51 }
52
fuel_gauge_update_get_soc(struct udevice * dev)53 int fuel_gauge_update_get_soc(struct udevice *dev)
54 {
55 const struct dm_fuel_gauge_ops *ops = dev_get_driver_ops(dev);
56
57 if (!ops || !ops->get_soc)
58 return -ENOSYS;
59
60 return ops->get_soc(dev);
61 }
62
fuel_gauge_get_chrg_online(struct udevice * dev)63 bool fuel_gauge_get_chrg_online(struct udevice *dev)
64 {
65 const struct dm_fuel_gauge_ops *ops = dev_get_driver_ops(dev);
66
67 if (!ops || !ops->get_chrg_online)
68 return -ENOSYS;
69
70 return ops->get_chrg_online(dev);
71 }
72
fuel_gauge_get_temperature(struct udevice * dev,int * temp)73 int fuel_gauge_get_temperature(struct udevice *dev, int *temp)
74 {
75 const struct dm_fuel_gauge_ops *ops = dev_get_driver_ops(dev);
76
77 if (!ops || !ops->get_temperature)
78 return -ENOSYS;
79
80 return ops->get_temperature(dev, temp);
81 }
82
charger_set_charger_voltage(struct udevice * dev,int uV)83 int charger_set_charger_voltage(struct udevice *dev, int uV)
84 {
85 const struct dm_fuel_gauge_ops *ops = dev_get_driver_ops(dev);
86
87 if (!ops || !ops->set_charger_voltage)
88 return -ENOSYS;
89
90 return ops->set_charger_voltage(dev, uV);
91 }
92
charger_set_current(struct udevice * dev,int ichrg_uA)93 int charger_set_current(struct udevice *dev, int ichrg_uA)
94 {
95 const struct dm_fuel_gauge_ops *ops = dev_get_driver_ops(dev);
96
97 if (!ops || !ops->set_charger_current)
98 return -ENOSYS;
99
100 return ops->set_charger_current(dev, ichrg_uA);
101 }
102
charger_set_iprechg_current(struct udevice * dev,int iprechrg_uA)103 int charger_set_iprechg_current(struct udevice *dev, int iprechrg_uA)
104 {
105 const struct dm_fuel_gauge_ops *ops = dev_get_driver_ops(dev);
106
107 if (!ops || !ops->set_iprechg_current)
108 return -ENOSYS;
109
110 return ops->set_iprechg_current(dev, iprechrg_uA);
111 }
112
charger_set_enable(struct udevice * dev)113 int charger_set_enable(struct udevice *dev)
114 {
115 const struct dm_fuel_gauge_ops *ops = dev_get_driver_ops(dev);
116
117 if (!ops || !ops->set_charger_enable)
118 return -ENOSYS;
119
120 return ops->set_charger_enable(dev);
121 }
122
charger_set_disable(struct udevice * dev)123 int charger_set_disable(struct udevice *dev)
124 {
125 const struct dm_fuel_gauge_ops *ops = dev_get_driver_ops(dev);
126
127 if (!ops || !ops->set_charger_disable)
128 return -ENOSYS;
129
130 return ops->set_charger_disable(dev);
131 }
132
133 UCLASS_DRIVER(fuel_guage) = {
134 .id = UCLASS_FG,
135 .name = "fuel_gauge",
136 };
137