aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLadislav Michl <ladis@linux-mips.org>2018-03-05 13:05:55 -0500
committerSebastian Reichel <sre@kernel.org>2018-03-09 10:50:28 -0500
commitd47c1e4b2f51e81683b087480401b9b42b2a58fd (patch)
tree63fecd49162f059fb2de36cc9075a0ac31d922d5
parentf5fec4cc2949421af74bdd005abd99fcbaf9d0d7 (diff)
power: supply: gpio-charger: Remove pdata from gpio_charger
Platform data are now used only during probe time, so remove them from gpio_charger structure and consolidate probing function accordingly. Signed-off-by: Ladislav Michl <ladis@linux-mips.org> [Replace of_property_read_string with dev_property_read_string] Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
-rw-r--r--drivers/power/supply/gpio-charger.c95
1 files changed, 41 insertions, 54 deletions
diff --git a/drivers/power/supply/gpio-charger.c b/drivers/power/supply/gpio-charger.c
index 768bbcad97cb..bd2468ca6b63 100644
--- a/drivers/power/supply/gpio-charger.c
+++ b/drivers/power/supply/gpio-charger.c
@@ -28,7 +28,6 @@
28#include <linux/power/gpio-charger.h> 28#include <linux/power/gpio-charger.h>
29 29
30struct gpio_charger { 30struct gpio_charger {
31 const struct gpio_charger_platform_data *pdata;
32 unsigned int irq; 31 unsigned int irq;
33 bool wakeup_enabled; 32 bool wakeup_enabled;
34 33
@@ -67,52 +66,37 @@ static int gpio_charger_get_property(struct power_supply *psy,
67 return 0; 66 return 0;
68} 67}
69 68
70static enum power_supply_property gpio_charger_properties[] = { 69static enum power_supply_type gpio_charger_get_type(struct device *dev)
71 POWER_SUPPLY_PROP_ONLINE,
72};
73
74static
75struct gpio_charger_platform_data *gpio_charger_parse_dt(struct device *dev)
76{ 70{
77 struct device_node *np = dev->of_node;
78 struct gpio_charger_platform_data *pdata;
79 const char *chargetype; 71 const char *chargetype;
80 int ret; 72
81 73 if (!device_property_read_string(dev, "charger-type", &chargetype)) {
82 if (!np) 74 if (!strcmp("unknown", chargetype))
83 return ERR_PTR(-ENOENT); 75 return POWER_SUPPLY_TYPE_UNKNOWN;
84 76 if (!strcmp("battery", chargetype))
85 pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); 77 return POWER_SUPPLY_TYPE_BATTERY;
86 if (!pdata) 78 if (!strcmp("ups", chargetype))
87 return ERR_PTR(-ENOMEM); 79 return POWER_SUPPLY_TYPE_UPS;
88 80 if (!strcmp("mains", chargetype))
89 pdata->name = np->name; 81 return POWER_SUPPLY_TYPE_MAINS;
90 pdata->type = POWER_SUPPLY_TYPE_UNKNOWN; 82 if (!strcmp("usb-sdp", chargetype))
91 ret = of_property_read_string(np, "charger-type", &chargetype); 83 return POWER_SUPPLY_TYPE_USB;
92 if (ret >= 0) { 84 if (!strcmp("usb-dcp", chargetype))
93 if (!strncmp("unknown", chargetype, 7)) 85 return POWER_SUPPLY_TYPE_USB_DCP;
94 pdata->type = POWER_SUPPLY_TYPE_UNKNOWN; 86 if (!strcmp("usb-cdp", chargetype))
95 else if (!strncmp("battery", chargetype, 7)) 87 return POWER_SUPPLY_TYPE_USB_CDP;
96 pdata->type = POWER_SUPPLY_TYPE_BATTERY; 88 if (!strcmp("usb-aca", chargetype))
97 else if (!strncmp("ups", chargetype, 3)) 89 return POWER_SUPPLY_TYPE_USB_ACA;
98 pdata->type = POWER_SUPPLY_TYPE_UPS;
99 else if (!strncmp("mains", chargetype, 5))
100 pdata->type = POWER_SUPPLY_TYPE_MAINS;
101 else if (!strncmp("usb-sdp", chargetype, 7))
102 pdata->type = POWER_SUPPLY_TYPE_USB;
103 else if (!strncmp("usb-dcp", chargetype, 7))
104 pdata->type = POWER_SUPPLY_TYPE_USB_DCP;
105 else if (!strncmp("usb-cdp", chargetype, 7))
106 pdata->type = POWER_SUPPLY_TYPE_USB_CDP;
107 else if (!strncmp("usb-aca", chargetype, 7))
108 pdata->type = POWER_SUPPLY_TYPE_USB_ACA;
109 else
110 dev_warn(dev, "unknown charger type %s\n", chargetype);
111 } 90 }
91 dev_warn(dev, "unknown charger type %s\n", chargetype);
112 92
113 return pdata; 93 return POWER_SUPPLY_TYPE_UNKNOWN;
114} 94}
115 95
96static enum power_supply_property gpio_charger_properties[] = {
97 POWER_SUPPLY_PROP_ONLINE,
98};
99
116static int gpio_charger_probe(struct platform_device *pdev) 100static int gpio_charger_probe(struct platform_device *pdev)
117{ 101{
118 struct device *dev = &pdev->dev; 102 struct device *dev = &pdev->dev;
@@ -123,14 +107,9 @@ static int gpio_charger_probe(struct platform_device *pdev)
123 unsigned long flags; 107 unsigned long flags;
124 int irq, ret; 108 int irq, ret;
125 109
126 if (!pdata) { 110 if (!pdata && !dev->of_node) {
127 pdata = gpio_charger_parse_dt(dev); 111 dev_err(dev, "No platform data\n");
128 if (IS_ERR(pdata)) { 112 return -ENOENT;
129 ret = PTR_ERR(pdata);
130 if (ret != -EPROBE_DEFER)
131 dev_err(dev, "No platform data\n");
132 return ret;
133 }
134 } 113 }
135 114
136 gpio_charger = devm_kzalloc(dev, sizeof(*gpio_charger), GFP_KERNEL); 115 gpio_charger = devm_kzalloc(dev, sizeof(*gpio_charger), GFP_KERNEL);
@@ -173,18 +152,26 @@ static int gpio_charger_probe(struct platform_device *pdev)
173 } 152 }
174 153
175 charger_desc = &gpio_charger->charger_desc; 154 charger_desc = &gpio_charger->charger_desc;
176
177 charger_desc->name = pdata->name ? pdata->name : "gpio-charger";
178 charger_desc->type = pdata->type;
179 charger_desc->properties = gpio_charger_properties; 155 charger_desc->properties = gpio_charger_properties;
180 charger_desc->num_properties = ARRAY_SIZE(gpio_charger_properties); 156 charger_desc->num_properties = ARRAY_SIZE(gpio_charger_properties);
181 charger_desc->get_property = gpio_charger_get_property; 157 charger_desc->get_property = gpio_charger_get_property;
182 158
183 psy_cfg.supplied_to = pdata->supplied_to;
184 psy_cfg.num_supplicants = pdata->num_supplicants;
185 psy_cfg.of_node = dev->of_node; 159 psy_cfg.of_node = dev->of_node;
186 psy_cfg.drv_data = gpio_charger; 160 psy_cfg.drv_data = gpio_charger;
187 161
162 if (pdata) {
163 charger_desc->name = pdata->name;
164 charger_desc->type = pdata->type;
165 psy_cfg.supplied_to = pdata->supplied_to;
166 psy_cfg.num_supplicants = pdata->num_supplicants;
167 } else {
168 charger_desc->name = dev->of_node->name;
169 charger_desc->type = gpio_charger_get_type(dev);
170 }
171
172 if (!charger_desc->name)
173 charger_desc->name = pdev->name;
174
188 gpio_charger->charger = devm_power_supply_register(dev, charger_desc, 175 gpio_charger->charger = devm_power_supply_register(dev, charger_desc,
189 &psy_cfg); 176 &psy_cfg);
190 if (IS_ERR(gpio_charger->charger)) { 177 if (IS_ERR(gpio_charger->charger)) {