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()
452 struct power_supply **psy = res; in devm_power_supply_put() local
454 power_supply_put(*psy); in devm_power_supply_put()
469 struct power_supply **ptr, *psy; in devm_power_supply_get_by_phandle() local
478 psy = power_supply_get_by_phandle(dev->of_node, property); in devm_power_supply_get_by_phandle()
479 if (IS_ERR_OR_NULL(psy)) { in devm_power_supply_get_by_phandle()
482 *ptr = psy; in devm_power_supply_get_by_phandle()
485 return psy; in devm_power_supply_get_by_phandle()
490 int power_supply_get_property(struct power_supply *psy, in power_supply_get_property() argument
494 if (atomic_read(&psy->use_cnt) <= 0) in power_supply_get_property()
497 return psy->desc->get_property(psy, psp, val); in power_supply_get_property()
501 int power_supply_set_property(struct power_supply *psy, in power_supply_set_property() argument
505 if (atomic_read(&psy->use_cnt) <= 0 || !psy->desc->set_property) in power_supply_set_property()
508 return psy->desc->set_property(psy, psp, val); in power_supply_set_property()
512 int power_supply_property_is_writeable(struct power_supply *psy, in power_supply_property_is_writeable() argument
515 if (atomic_read(&psy->use_cnt) <= 0 || in power_supply_property_is_writeable()
516 !psy->desc->property_is_writeable) in power_supply_property_is_writeable()
519 return psy->desc->property_is_writeable(psy, psp); in power_supply_property_is_writeable()
523 void power_supply_external_power_changed(struct power_supply *psy) in power_supply_external_power_changed() argument
525 if (atomic_read(&psy->use_cnt) <= 0 || in power_supply_external_power_changed()
526 !psy->desc->external_power_changed) in power_supply_external_power_changed()
529 psy->desc->external_power_changed(psy); in power_supply_external_power_changed()
533 int power_supply_powers(struct power_supply *psy, struct device *dev) in power_supply_powers() argument
535 return sysfs_create_link(&psy->dev.kobj, &dev->kobj, "powers"); in power_supply_powers()
541 struct power_supply *psy = container_of(dev, struct power_supply, dev); in power_supply_dev_release() local
543 kfree(psy); in power_supply_dev_release()
562 struct power_supply *psy; in power_supply_read_temp() local
567 psy = tzd->devdata; in power_supply_read_temp()
568 ret = psy->desc->get_property(psy, POWER_SUPPLY_PROP_TEMP, &val); in power_supply_read_temp()
581 static int psy_register_thermal(struct power_supply *psy) in psy_register_thermal() argument
585 if (psy->desc->no_thermal) in psy_register_thermal()
589 for (i = 0; i < psy->desc->num_properties; i++) { in psy_register_thermal()
590 if (psy->desc->properties[i] == POWER_SUPPLY_PROP_TEMP) { in psy_register_thermal()
591 psy->tzd = thermal_zone_device_register(psy->desc->name, in psy_register_thermal()
592 0, 0, psy, &psy_tzd_ops, NULL, 0, 0); in psy_register_thermal()
593 return PTR_ERR_OR_ZERO(psy->tzd); in psy_register_thermal()
599 static void psy_unregister_thermal(struct power_supply *psy) in psy_unregister_thermal() argument
601 if (IS_ERR_OR_NULL(psy->tzd)) in psy_unregister_thermal()
603 thermal_zone_device_unregister(psy->tzd); in psy_unregister_thermal()
610 struct power_supply *psy; in ps_get_max_charge_cntl_limit() local
614 psy = tcd->devdata; in ps_get_max_charge_cntl_limit()
615 ret = psy->desc->get_property(psy, in ps_get_max_charge_cntl_limit()
626 struct power_supply *psy; in ps_get_cur_chrage_cntl_limit() local
630 psy = tcd->devdata; in ps_get_cur_chrage_cntl_limit()
631 ret = psy->desc->get_property(psy, in ps_get_cur_chrage_cntl_limit()
642 struct power_supply *psy; in ps_set_cur_charge_cntl_limit() local
646 psy = tcd->devdata; in ps_set_cur_charge_cntl_limit()
648 ret = psy->desc->set_property(psy, in ps_set_cur_charge_cntl_limit()
660 static int psy_register_cooler(struct power_supply *psy) in psy_register_cooler() argument
665 for (i = 0; i < psy->desc->num_properties; i++) { in psy_register_cooler()
666 if (psy->desc->properties[i] == in psy_register_cooler()
668 psy->tcd = thermal_cooling_device_register( in psy_register_cooler()
669 (char *)psy->desc->name, in psy_register_cooler()
670 psy, &psy_tcd_ops); in psy_register_cooler()
671 return PTR_ERR_OR_ZERO(psy->tcd); in psy_register_cooler()
677 static void psy_unregister_cooler(struct power_supply *psy) in psy_unregister_cooler() argument
679 if (IS_ERR_OR_NULL(psy->tcd)) in psy_unregister_cooler()
681 thermal_cooling_device_unregister(psy->tcd); in psy_unregister_cooler()
684 static int psy_register_thermal(struct power_supply *psy) in psy_register_thermal() argument
689 static void psy_unregister_thermal(struct power_supply *psy) in psy_unregister_thermal() argument
693 static int psy_register_cooler(struct power_supply *psy) in psy_register_cooler() argument
698 static void psy_unregister_cooler(struct power_supply *psy) in psy_unregister_cooler() argument
710 struct power_supply *psy; in __power_supply_register() local
717 psy = kzalloc(sizeof(*psy), GFP_KERNEL); in __power_supply_register()
718 if (!psy) in __power_supply_register()
721 dev = &psy->dev; in __power_supply_register()
729 dev_set_drvdata(dev, psy); in __power_supply_register()
730 psy->desc = desc; in __power_supply_register()
732 psy->drv_data = cfg->drv_data; in __power_supply_register()
733 psy->of_node = cfg->of_node; in __power_supply_register()
734 psy->supplied_to = cfg->supplied_to; in __power_supply_register()
735 psy->num_supplicants = cfg->num_supplicants; in __power_supply_register()
742 INIT_WORK(&psy->changed_work, power_supply_changed_work); in __power_supply_register()
743 INIT_DELAYED_WORK(&psy->deferred_register_work, in __power_supply_register()
746 rc = power_supply_check_supplies(psy); in __power_supply_register()
752 spin_lock_init(&psy->changed_lock); in __power_supply_register()
761 rc = psy_register_thermal(psy); in __power_supply_register()
765 rc = psy_register_cooler(psy); in __power_supply_register()
769 rc = power_supply_create_triggers(psy); in __power_supply_register()
782 atomic_inc(&psy->use_cnt); in __power_supply_register()
785 &psy->deferred_register_work, in __power_supply_register()
788 return psy; in __power_supply_register()
791 psy_unregister_cooler(psy); in __power_supply_register()
793 psy_unregister_thermal(psy); in __power_supply_register()
851 struct power_supply **psy = res; in devm_power_supply_release() local
853 power_supply_unregister(*psy); in devm_power_supply_release()
875 struct power_supply **ptr, *psy; in devm_power_supply_register() local
881 psy = __power_supply_register(parent, desc, cfg, true); in devm_power_supply_register()
882 if (IS_ERR(psy)) { in devm_power_supply_register()
885 *ptr = psy; in devm_power_supply_register()
888 return psy; in devm_power_supply_register()
911 struct power_supply **ptr, *psy; in devm_power_supply_register_no_ws() local
917 psy = __power_supply_register(parent, desc, cfg, false); in devm_power_supply_register_no_ws()
918 if (IS_ERR(psy)) { in devm_power_supply_register_no_ws()
921 *ptr = psy; in devm_power_supply_register_no_ws()
924 return psy; in devm_power_supply_register_no_ws()
935 void power_supply_unregister(struct power_supply *psy) in power_supply_unregister() argument
937 WARN_ON(atomic_dec_return(&psy->use_cnt)); in power_supply_unregister()
938 cancel_work_sync(&psy->changed_work); in power_supply_unregister()
939 cancel_delayed_work_sync(&psy->deferred_register_work); in power_supply_unregister()
940 sysfs_remove_link(&psy->dev.kobj, "powers"); in power_supply_unregister()
941 power_supply_remove_triggers(psy); in power_supply_unregister()
942 psy_unregister_cooler(psy); in power_supply_unregister()
943 psy_unregister_thermal(psy); in power_supply_unregister()
944 device_init_wakeup(&psy->dev, false); in power_supply_unregister()
945 device_unregister(&psy->dev); in power_supply_unregister()
949 void *power_supply_get_drvdata(struct power_supply *psy) in power_supply_get_drvdata() argument
951 return psy->drv_data; in power_supply_get_drvdata()