Lines Matching refs:gpio_charger

25 struct gpio_charger {
51 static inline struct gpio_charger *psy_to_gpio_charger(struct power_supply *psy)
56 static int set_charge_current_limit(struct gpio_charger *gpio_charger, int val)
59 int ndescs = gpio_charger->current_limit_gpios->ndescs;
60 struct gpio_desc **gpios = gpio_charger->current_limit_gpios->desc;
63 if (!gpio_charger->current_limit_map_size)
66 for (i = 0; i < gpio_charger->current_limit_map_size; i++) {
67 if (gpio_charger->current_limit_map[i].limit_ua <= val)
70 mapping = gpio_charger->current_limit_map[i];
77 gpio_charger->charge_current_limit = mapping.limit_ua;
79 dev_dbg(gpio_charger->dev, "set charge current limit to %d (requested: %d)\n",
80 gpio_charger->charge_current_limit, val);
88 struct gpio_charger *gpio_charger = psy_to_gpio_charger(psy);
92 val->intval = gpiod_get_value_cansleep(gpio_charger->gpiod);
95 if (gpiod_get_value_cansleep(gpio_charger->charge_status))
101 val->intval = gpio_charger->charge_current_limit;
113 struct gpio_charger *gpio_charger = psy_to_gpio_charger(psy);
117 return set_charge_current_limit(gpio_charger, val->intval);
186 struct gpio_charger *gpio_charger)
191 gpio_charger->current_limit_gpios = devm_gpiod_get_array_optional(dev,
193 if (IS_ERR(gpio_charger->current_limit_gpios)) {
195 return PTR_ERR(gpio_charger->current_limit_gpios);
198 if (!gpio_charger->current_limit_gpios)
211 gpio_charger->current_limit_map = devm_kmalloc_array(dev,
212 len / 2, sizeof(*gpio_charger->current_limit_map), GFP_KERNEL);
213 if (!gpio_charger->current_limit_map)
216 gpio_charger->current_limit_map_size = len / 2;
219 (u32*) gpio_charger->current_limit_map, len);
223 for (i=0; i < gpio_charger->current_limit_map_size; i++) {
224 if (gpio_charger->current_limit_map[i].limit_ua > cur_limit) {
229 cur_limit = gpio_charger->current_limit_map[i].limit_ua;
233 len = gpio_charger->current_limit_map_size - 1;
234 set_charge_current_limit(gpio_charger,
235 gpio_charger->current_limit_map[len].limit_ua);
256 struct gpio_charger *gpio_charger;
268 gpio_charger = devm_kzalloc(dev, sizeof(*gpio_charger), GFP_KERNEL);
269 if (!gpio_charger)
271 gpio_charger->dev = dev;
277 gpio_charger->gpiod = devm_gpiod_get_optional(dev, NULL, GPIOD_IN);
278 if (IS_ERR(gpio_charger->gpiod)) {
280 return dev_err_probe(dev, PTR_ERR(gpio_charger->gpiod),
284 if (gpio_charger->gpiod) {
293 gpio_charger->charge_status = charge_status;
298 ret = init_charge_current_limit(dev, gpio_charger);
301 if (gpio_charger->current_limit_map) {
307 charger_desc = &gpio_charger->charger_desc;
316 psy_cfg.drv_data = gpio_charger;
331 gpio_charger->charger = devm_power_supply_register(dev, charger_desc,
333 if (IS_ERR(gpio_charger->charger)) {
334 ret = PTR_ERR(gpio_charger->charger);
339 gpio_charger->irq = gpio_charger_get_irq(dev, gpio_charger->charger,
340 gpio_charger->gpiod);
342 charge_status_irq = gpio_charger_get_irq(dev, gpio_charger->charger,
343 gpio_charger->charge_status);
344 gpio_charger->charge_status_irq = charge_status_irq;
346 platform_set_drvdata(pdev, gpio_charger);
356 struct gpio_charger *gpio_charger = dev_get_drvdata(dev);
359 gpio_charger->wakeup_enabled =
360 !enable_irq_wake(gpio_charger->irq);
367 struct gpio_charger *gpio_charger = dev_get_drvdata(dev);
369 if (device_may_wakeup(dev) && gpio_charger->wakeup_enabled)
370 disable_irq_wake(gpio_charger->irq);
371 power_supply_changed(gpio_charger->charger);