Lines Matching refs:psy

63 	struct power_supply *psy = data;  in __power_supply_changed_work()  local
66 if (__power_supply_is_supplied_by(psy, pst)) { in __power_supply_changed_work()
77 struct power_supply *psy = container_of(work, struct power_supply, in power_supply_changed_work() local
80 dev_dbg(&psy->dev, "%s\n", __func__); in power_supply_changed_work()
82 spin_lock_irqsave(&psy->changed_lock, flags); in power_supply_changed_work()
90 if (likely(psy->changed)) { in power_supply_changed_work()
91 psy->changed = false; in power_supply_changed_work()
92 spin_unlock_irqrestore(&psy->changed_lock, flags); in power_supply_changed_work()
93 class_for_each_device(power_supply_class, NULL, psy, in power_supply_changed_work()
95 power_supply_update_leds(psy); in power_supply_changed_work()
97 PSY_EVENT_PROP_CHANGED, psy); in power_supply_changed_work()
98 kobject_uevent(&psy->dev.kobj, KOBJ_CHANGE); in power_supply_changed_work()
99 spin_lock_irqsave(&psy->changed_lock, flags); in power_supply_changed_work()
107 if (likely(!psy->changed)) in power_supply_changed_work()
108 pm_relax(&psy->dev); in power_supply_changed_work()
109 spin_unlock_irqrestore(&psy->changed_lock, flags); in power_supply_changed_work()
112 void power_supply_changed(struct power_supply *psy) in power_supply_changed() argument
116 dev_dbg(&psy->dev, "%s\n", __func__); in power_supply_changed()
118 spin_lock_irqsave(&psy->changed_lock, flags); in power_supply_changed()
119 psy->changed = true; in power_supply_changed()
120 pm_stay_awake(&psy->dev); in power_supply_changed()
121 spin_unlock_irqrestore(&psy->changed_lock, flags); in power_supply_changed()
122 schedule_work(&psy->changed_work); in power_supply_changed()
138 struct power_supply *psy = container_of(work, struct power_supply, in power_supply_deferred_register_work() local
141 if (psy->dev.parent) in power_supply_deferred_register_work()
142 mutex_lock(&psy->dev.parent->mutex); in power_supply_deferred_register_work()
144 power_supply_changed(psy); in power_supply_deferred_register_work()
146 if (psy->dev.parent) in power_supply_deferred_register_work()
147 mutex_unlock(&psy->dev.parent->mutex); in power_supply_deferred_register_work()
156 struct power_supply *psy = data; in __power_supply_populate_supplied_from() local
162 np = of_parse_phandle(psy->of_node, "power-supplies", i++); in __power_supply_populate_supplied_from()
167 dev_info(&psy->dev, "%s: Found supply : %s\n", in __power_supply_populate_supplied_from()
168 psy->desc->name, epsy->desc->name); in __power_supply_populate_supplied_from()
169 psy->supplied_from[i-1] = (char *)epsy->desc->name; in __power_supply_populate_supplied_from()
170 psy->num_supplies++; in __power_supply_populate_supplied_from()
180 static int power_supply_populate_supplied_from(struct power_supply *psy) in power_supply_populate_supplied_from() argument
184 error = class_for_each_device(power_supply_class, NULL, psy, in power_supply_populate_supplied_from()
187 dev_dbg(&psy->dev, "%s %d\n", __func__, error); in power_supply_populate_supplied_from()
225 static int power_supply_check_supplies(struct power_supply *psy) in power_supply_check_supplies() argument
231 if (psy->supplied_from && psy->num_supplies > 0) in power_supply_check_supplies()
235 if (!psy->of_node) in power_supply_check_supplies()
241 np = of_parse_phandle(psy->of_node, "power-supplies", cnt++); in power_supply_check_supplies()
249 dev_dbg(&psy->dev, "Failed to find supply!\n"); in power_supply_check_supplies()
259 psy->supplied_from = devm_kzalloc(&psy->dev, sizeof(psy->supplied_from), in power_supply_check_supplies()
261 if (!psy->supplied_from) { in power_supply_check_supplies()
262 dev_err(&psy->dev, "Couldn't allocate memory for supply list\n"); in power_supply_check_supplies()
266 *psy->supplied_from = devm_kzalloc(&psy->dev, in power_supply_check_supplies()
269 if (!*psy->supplied_from) { in power_supply_check_supplies()
270 dev_err(&psy->dev, "Couldn't allocate memory for supply list\n"); in power_supply_check_supplies()
274 return power_supply_populate_supplied_from(psy); in power_supply_check_supplies()
277 static inline int power_supply_check_supplies(struct power_supply *psy) in power_supply_check_supplies() argument
286 struct power_supply *psy = data; in __power_supply_am_i_supplied() local
289 if (__power_supply_is_supplied_by(epsy, psy)) in __power_supply_am_i_supplied()
297 int power_supply_am_i_supplied(struct power_supply *psy) in power_supply_am_i_supplied() argument
301 error = class_for_each_device(power_supply_class, NULL, psy, in power_supply_am_i_supplied()
304 dev_dbg(&psy->dev, "%s %d\n", __func__, error); in power_supply_am_i_supplied()
313 struct power_supply *psy = dev_get_drvdata(dev); in __power_supply_is_system_supplied() local
317 if (psy->desc->type != POWER_SUPPLY_TYPE_BATTERY) in __power_supply_is_system_supplied()
318 if (!psy->desc->get_property(psy, POWER_SUPPLY_PROP_ONLINE, in __power_supply_is_system_supplied()
344 int power_supply_set_battery_charged(struct power_supply *psy) in power_supply_set_battery_charged() argument
346 if (atomic_read(&psy->use_cnt) >= 0 && in power_supply_set_battery_charged()
347 psy->desc->type == POWER_SUPPLY_TYPE_BATTERY && in power_supply_set_battery_charged()
348 psy->desc->set_charged) { in power_supply_set_battery_charged()
349 psy->desc->set_charged(psy); in power_supply_set_battery_charged()
360 struct power_supply *psy = dev_get_drvdata(dev); in power_supply_match_device_by_name() local
362 return strcmp(psy->desc->name, name) == 0; in power_supply_match_device_by_name()
378 struct power_supply *psy = NULL; in power_supply_get_by_name() local
383 psy = dev_get_drvdata(dev); in power_supply_get_by_name()
384 atomic_inc(&psy->use_cnt); in power_supply_get_by_name()
387 return psy; in power_supply_get_by_name()
398 void power_supply_put(struct power_supply *psy) in power_supply_put() argument
402 atomic_dec(&psy->use_cnt); in power_supply_put()
403 put_device(&psy->dev); in power_supply_put()
429 struct power_supply *psy = NULL; in power_supply_get_by_phandle() local
442 psy = dev_get_drvdata(dev); in power_supply_get_by_phandle()
443 atomic_inc(&psy->use_cnt); in power_supply_get_by_phandle()
446 return psy; in power_supply_get_by_phandle()
451 int power_supply_get_property(struct power_supply *psy, in power_supply_get_property() argument
455 if (atomic_read(&psy->use_cnt) <= 0) in power_supply_get_property()
458 return psy->desc->get_property(psy, psp, val); in power_supply_get_property()
462 int power_supply_set_property(struct power_supply *psy, in power_supply_set_property() argument
466 if (atomic_read(&psy->use_cnt) <= 0 || !psy->desc->set_property) in power_supply_set_property()
469 return psy->desc->set_property(psy, psp, val); in power_supply_set_property()
473 int power_supply_property_is_writeable(struct power_supply *psy, in power_supply_property_is_writeable() argument
476 if (atomic_read(&psy->use_cnt) <= 0 || in power_supply_property_is_writeable()
477 !psy->desc->property_is_writeable) in power_supply_property_is_writeable()
480 return psy->desc->property_is_writeable(psy, psp); in power_supply_property_is_writeable()
484 void power_supply_external_power_changed(struct power_supply *psy) in power_supply_external_power_changed() argument
486 if (atomic_read(&psy->use_cnt) <= 0 || in power_supply_external_power_changed()
487 !psy->desc->external_power_changed) in power_supply_external_power_changed()
490 psy->desc->external_power_changed(psy); in power_supply_external_power_changed()
494 int power_supply_powers(struct power_supply *psy, struct device *dev) in power_supply_powers() argument
496 return sysfs_create_link(&psy->dev.kobj, &dev->kobj, "powers"); in power_supply_powers()
502 struct power_supply *psy = container_of(dev, struct power_supply, dev); in power_supply_dev_release() local
504 kfree(psy); in power_supply_dev_release()
523 struct power_supply *psy; in power_supply_read_temp() local
528 psy = tzd->devdata; in power_supply_read_temp()
529 ret = psy->desc->get_property(psy, POWER_SUPPLY_PROP_TEMP, &val); in power_supply_read_temp()
542 static int psy_register_thermal(struct power_supply *psy) in psy_register_thermal() argument
546 if (psy->desc->no_thermal) in psy_register_thermal()
550 for (i = 0; i < psy->desc->num_properties; i++) { in psy_register_thermal()
551 if (psy->desc->properties[i] == POWER_SUPPLY_PROP_TEMP) { in psy_register_thermal()
552 psy->tzd = thermal_zone_device_register(psy->desc->name, in psy_register_thermal()
553 0, 0, psy, &psy_tzd_ops, NULL, 0, 0); in psy_register_thermal()
554 return PTR_ERR_OR_ZERO(psy->tzd); in psy_register_thermal()
560 static void psy_unregister_thermal(struct power_supply *psy) in psy_unregister_thermal() argument
562 if (IS_ERR_OR_NULL(psy->tzd)) in psy_unregister_thermal()
564 thermal_zone_device_unregister(psy->tzd); in psy_unregister_thermal()
571 struct power_supply *psy; in ps_get_max_charge_cntl_limit() local
575 psy = tcd->devdata; in ps_get_max_charge_cntl_limit()
576 ret = psy->desc->get_property(psy, in ps_get_max_charge_cntl_limit()
587 struct power_supply *psy; in ps_get_cur_chrage_cntl_limit() local
591 psy = tcd->devdata; in ps_get_cur_chrage_cntl_limit()
592 ret = psy->desc->get_property(psy, in ps_get_cur_chrage_cntl_limit()
603 struct power_supply *psy; in ps_set_cur_charge_cntl_limit() local
607 psy = tcd->devdata; in ps_set_cur_charge_cntl_limit()
609 ret = psy->desc->set_property(psy, in ps_set_cur_charge_cntl_limit()
621 static int psy_register_cooler(struct power_supply *psy) in psy_register_cooler() argument
626 for (i = 0; i < psy->desc->num_properties; i++) { in psy_register_cooler()
627 if (psy->desc->properties[i] == in psy_register_cooler()
629 psy->tcd = thermal_cooling_device_register( in psy_register_cooler()
630 (char *)psy->desc->name, in psy_register_cooler()
631 psy, &psy_tcd_ops); in psy_register_cooler()
632 return PTR_ERR_OR_ZERO(psy->tcd); in psy_register_cooler()
638 static void psy_unregister_cooler(struct power_supply *psy) in psy_unregister_cooler() argument
640 if (IS_ERR_OR_NULL(psy->tcd)) in psy_unregister_cooler()
642 thermal_cooling_device_unregister(psy->tcd); in psy_unregister_cooler()
645 static int psy_register_thermal(struct power_supply *psy) in psy_register_thermal() argument
650 static void psy_unregister_thermal(struct power_supply *psy) in psy_unregister_thermal() argument
654 static int psy_register_cooler(struct power_supply *psy) in psy_register_cooler() argument
659 static void psy_unregister_cooler(struct power_supply *psy) in psy_unregister_cooler() argument
671 struct power_supply *psy; in __power_supply_register() local
678 psy = kzalloc(sizeof(*psy), GFP_KERNEL); in __power_supply_register()
679 if (!psy) in __power_supply_register()
682 dev = &psy->dev; in __power_supply_register()
690 dev_set_drvdata(dev, psy); in __power_supply_register()
691 psy->desc = desc; in __power_supply_register()
693 psy->drv_data = cfg->drv_data; in __power_supply_register()
694 psy->of_node = cfg->of_node; in __power_supply_register()
695 psy->supplied_to = cfg->supplied_to; in __power_supply_register()
696 psy->num_supplicants = cfg->num_supplicants; in __power_supply_register()
703 INIT_WORK(&psy->changed_work, power_supply_changed_work); in __power_supply_register()
704 INIT_DELAYED_WORK(&psy->deferred_register_work, in __power_supply_register()
707 rc = power_supply_check_supplies(psy); in __power_supply_register()
713 spin_lock_init(&psy->changed_lock); in __power_supply_register()
722 rc = psy_register_thermal(psy); in __power_supply_register()
726 rc = psy_register_cooler(psy); in __power_supply_register()
730 rc = power_supply_create_triggers(psy); in __power_supply_register()
743 atomic_inc(&psy->use_cnt); in __power_supply_register()
746 &psy->deferred_register_work, in __power_supply_register()
749 return psy; in __power_supply_register()
752 psy_unregister_cooler(psy); in __power_supply_register()
754 psy_unregister_thermal(psy); in __power_supply_register()
812 struct power_supply **psy = res; in devm_power_supply_release() local
814 power_supply_unregister(*psy); in devm_power_supply_release()
836 struct power_supply **ptr, *psy; in devm_power_supply_register() local
842 psy = __power_supply_register(parent, desc, cfg, true); in devm_power_supply_register()
843 if (IS_ERR(psy)) { in devm_power_supply_register()
846 *ptr = psy; in devm_power_supply_register()
849 return psy; in devm_power_supply_register()
872 struct power_supply **ptr, *psy; in devm_power_supply_register_no_ws() local
878 psy = __power_supply_register(parent, desc, cfg, false); in devm_power_supply_register_no_ws()
879 if (IS_ERR(psy)) { in devm_power_supply_register_no_ws()
882 *ptr = psy; in devm_power_supply_register_no_ws()
885 return psy; in devm_power_supply_register_no_ws()
896 void power_supply_unregister(struct power_supply *psy) in power_supply_unregister() argument
898 WARN_ON(atomic_dec_return(&psy->use_cnt)); in power_supply_unregister()
899 cancel_work_sync(&psy->changed_work); in power_supply_unregister()
900 cancel_delayed_work_sync(&psy->deferred_register_work); in power_supply_unregister()
901 sysfs_remove_link(&psy->dev.kobj, "powers"); in power_supply_unregister()
902 power_supply_remove_triggers(psy); in power_supply_unregister()
903 psy_unregister_cooler(psy); in power_supply_unregister()
904 psy_unregister_thermal(psy); in power_supply_unregister()
905 device_init_wakeup(&psy->dev, false); in power_supply_unregister()
906 device_unregister(&psy->dev); in power_supply_unregister()
910 void *power_supply_get_drvdata(struct power_supply *psy) in power_supply_get_drvdata() argument
912 return psy->drv_data; in power_supply_get_drvdata()