power: supply: core: make power_supply_class constant
Since commit 43a7206b09
("driver core: class: make class_register() take
a const *"), the driver core allows for struct class to be in read-only
memory, so move the power_supply_class structure to be declared at build
time placing it into read-only memory, instead of having to be dynamically
allocated at boot time.
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Ricardo B. Marliere <ricardo@marliere.net>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20240301-class_cleanup-power-v1-1-97e0b7bf9c94@marliere.net
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
This commit is contained in:
parent
9a451f1b02
commit
71c2cc5cbf
7 changed files with 27 additions and 24 deletions
|
@ -617,7 +617,7 @@ static int ab8500_btemp_get_ext_psy_data(struct device *dev, void *data)
|
||||||
*/
|
*/
|
||||||
static void ab8500_btemp_external_power_changed(struct power_supply *psy)
|
static void ab8500_btemp_external_power_changed(struct power_supply *psy)
|
||||||
{
|
{
|
||||||
class_for_each_device(power_supply_class, NULL, psy,
|
class_for_each_device(&power_supply_class, NULL, psy,
|
||||||
ab8500_btemp_get_ext_psy_data);
|
ab8500_btemp_get_ext_psy_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1231,7 +1231,7 @@ static void ab8500_chargalg_algorithm(struct ab8500_chargalg *di)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
/* Collect data from all power_supply class devices */
|
/* Collect data from all power_supply class devices */
|
||||||
class_for_each_device(power_supply_class, NULL,
|
class_for_each_device(&power_supply_class, NULL,
|
||||||
di->chargalg_psy, ab8500_chargalg_get_ext_psy_data);
|
di->chargalg_psy, ab8500_chargalg_get_ext_psy_data);
|
||||||
|
|
||||||
ab8500_chargalg_end_of_charge(di);
|
ab8500_chargalg_end_of_charge(di);
|
||||||
|
|
|
@ -1949,7 +1949,7 @@ static void ab8500_charger_check_vbat_work(struct work_struct *work)
|
||||||
struct ab8500_charger *di = container_of(work,
|
struct ab8500_charger *di = container_of(work,
|
||||||
struct ab8500_charger, check_vbat_work.work);
|
struct ab8500_charger, check_vbat_work.work);
|
||||||
|
|
||||||
class_for_each_device(power_supply_class, NULL,
|
class_for_each_device(&power_supply_class, NULL,
|
||||||
&di->usb_chg, ab8500_charger_get_ext_psy_data);
|
&di->usb_chg, ab8500_charger_get_ext_psy_data);
|
||||||
|
|
||||||
/* First run old_vbat is 0. */
|
/* First run old_vbat is 0. */
|
||||||
|
|
|
@ -2407,7 +2407,7 @@ out:
|
||||||
*/
|
*/
|
||||||
static void ab8500_fg_external_power_changed(struct power_supply *psy)
|
static void ab8500_fg_external_power_changed(struct power_supply *psy)
|
||||||
{
|
{
|
||||||
class_for_each_device(power_supply_class, NULL, psy,
|
class_for_each_device(&power_supply_class, NULL, psy,
|
||||||
ab8500_fg_get_ext_psy_data);
|
ab8500_fg_get_ext_psy_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -79,7 +79,7 @@ static void find_main_battery(void)
|
||||||
main_battery = NULL;
|
main_battery = NULL;
|
||||||
bp.main = main_battery;
|
bp.main = main_battery;
|
||||||
|
|
||||||
error = class_for_each_device(power_supply_class, NULL, &bp,
|
error = class_for_each_device(&power_supply_class, NULL, &bp,
|
||||||
__find_main_battery);
|
__find_main_battery);
|
||||||
if (error) {
|
if (error) {
|
||||||
main_battery = bp.main;
|
main_battery = bp.main;
|
||||||
|
|
|
@ -26,7 +26,10 @@
|
||||||
#include "samsung-sdi-battery.h"
|
#include "samsung-sdi-battery.h"
|
||||||
|
|
||||||
/* exported for the APM Power driver, APM emulation */
|
/* exported for the APM Power driver, APM emulation */
|
||||||
struct class *power_supply_class;
|
const struct class power_supply_class = {
|
||||||
|
.name = "power_supply",
|
||||||
|
.dev_uevent = power_supply_uevent,
|
||||||
|
};
|
||||||
EXPORT_SYMBOL_GPL(power_supply_class);
|
EXPORT_SYMBOL_GPL(power_supply_class);
|
||||||
|
|
||||||
static BLOCKING_NOTIFIER_HEAD(power_supply_notifier);
|
static BLOCKING_NOTIFIER_HEAD(power_supply_notifier);
|
||||||
|
@ -97,7 +100,7 @@ static void power_supply_changed_work(struct work_struct *work)
|
||||||
if (likely(psy->changed)) {
|
if (likely(psy->changed)) {
|
||||||
psy->changed = false;
|
psy->changed = false;
|
||||||
spin_unlock_irqrestore(&psy->changed_lock, flags);
|
spin_unlock_irqrestore(&psy->changed_lock, flags);
|
||||||
class_for_each_device(power_supply_class, NULL, psy,
|
class_for_each_device(&power_supply_class, NULL, psy,
|
||||||
__power_supply_changed_work);
|
__power_supply_changed_work);
|
||||||
power_supply_update_leds(psy);
|
power_supply_update_leds(psy);
|
||||||
blocking_notifier_call_chain(&power_supply_notifier,
|
blocking_notifier_call_chain(&power_supply_notifier,
|
||||||
|
@ -191,7 +194,7 @@ static int power_supply_populate_supplied_from(struct power_supply *psy)
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
error = class_for_each_device(power_supply_class, NULL, psy,
|
error = class_for_each_device(&power_supply_class, NULL, psy,
|
||||||
__power_supply_populate_supplied_from);
|
__power_supply_populate_supplied_from);
|
||||||
|
|
||||||
dev_dbg(&psy->dev, "%s %d\n", __func__, error);
|
dev_dbg(&psy->dev, "%s %d\n", __func__, error);
|
||||||
|
@ -226,8 +229,8 @@ static int power_supply_find_supply_from_node(struct device_node *supply_node)
|
||||||
* We return 0 if class_for_each_device() returned 1, -EPROBE_DEFER if
|
* We return 0 if class_for_each_device() returned 1, -EPROBE_DEFER if
|
||||||
* it returned 0, or error as returned by it.
|
* it returned 0, or error as returned by it.
|
||||||
*/
|
*/
|
||||||
error = class_for_each_device(power_supply_class, NULL, supply_node,
|
error = class_for_each_device(&power_supply_class, NULL, supply_node,
|
||||||
__power_supply_find_supply_from_node);
|
__power_supply_find_supply_from_node);
|
||||||
|
|
||||||
return error ? (error == 1 ? 0 : error) : -EPROBE_DEFER;
|
return error ? (error == 1 ? 0 : error) : -EPROBE_DEFER;
|
||||||
}
|
}
|
||||||
|
@ -333,7 +336,7 @@ int power_supply_am_i_supplied(struct power_supply *psy)
|
||||||
struct psy_am_i_supplied_data data = { psy, 0 };
|
struct psy_am_i_supplied_data data = { psy, 0 };
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
error = class_for_each_device(power_supply_class, NULL, &data,
|
error = class_for_each_device(&power_supply_class, NULL, &data,
|
||||||
__power_supply_am_i_supplied);
|
__power_supply_am_i_supplied);
|
||||||
|
|
||||||
dev_dbg(&psy->dev, "%s count %u err %d\n", __func__, data.count, error);
|
dev_dbg(&psy->dev, "%s count %u err %d\n", __func__, data.count, error);
|
||||||
|
@ -369,7 +372,7 @@ int power_supply_is_system_supplied(void)
|
||||||
int error;
|
int error;
|
||||||
unsigned int count = 0;
|
unsigned int count = 0;
|
||||||
|
|
||||||
error = class_for_each_device(power_supply_class, NULL, &count,
|
error = class_for_each_device(&power_supply_class, NULL, &count,
|
||||||
__power_supply_is_system_supplied);
|
__power_supply_is_system_supplied);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -416,7 +419,7 @@ int power_supply_get_property_from_supplier(struct power_supply *psy,
|
||||||
* This function is not intended for use with a supply with multiple
|
* This function is not intended for use with a supply with multiple
|
||||||
* suppliers, we simply pick the first supply to report the psp.
|
* suppliers, we simply pick the first supply to report the psp.
|
||||||
*/
|
*/
|
||||||
ret = class_for_each_device(power_supply_class, NULL, &data,
|
ret = class_for_each_device(&power_supply_class, NULL, &data,
|
||||||
__power_supply_get_supplier_property);
|
__power_supply_get_supplier_property);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -462,8 +465,8 @@ static int power_supply_match_device_by_name(struct device *dev, const void *dat
|
||||||
struct power_supply *power_supply_get_by_name(const char *name)
|
struct power_supply *power_supply_get_by_name(const char *name)
|
||||||
{
|
{
|
||||||
struct power_supply *psy = NULL;
|
struct power_supply *psy = NULL;
|
||||||
struct device *dev = class_find_device(power_supply_class, NULL, name,
|
struct device *dev = class_find_device(&power_supply_class, NULL, name,
|
||||||
power_supply_match_device_by_name);
|
power_supply_match_device_by_name);
|
||||||
|
|
||||||
if (dev) {
|
if (dev) {
|
||||||
psy = dev_get_drvdata(dev);
|
psy = dev_get_drvdata(dev);
|
||||||
|
@ -519,8 +522,8 @@ struct power_supply *power_supply_get_by_phandle(struct device_node *np,
|
||||||
if (!power_supply_np)
|
if (!power_supply_np)
|
||||||
return ERR_PTR(-ENODEV);
|
return ERR_PTR(-ENODEV);
|
||||||
|
|
||||||
dev = class_find_device(power_supply_class, NULL, power_supply_np,
|
dev = class_find_device(&power_supply_class, NULL, power_supply_np,
|
||||||
power_supply_match_device_node);
|
power_supply_match_device_node);
|
||||||
|
|
||||||
of_node_put(power_supply_np);
|
of_node_put(power_supply_np);
|
||||||
|
|
||||||
|
@ -1373,7 +1376,7 @@ __power_supply_register(struct device *parent,
|
||||||
|
|
||||||
device_initialize(dev);
|
device_initialize(dev);
|
||||||
|
|
||||||
dev->class = power_supply_class;
|
dev->class = &power_supply_class;
|
||||||
dev->type = &power_supply_dev_type;
|
dev->type = &power_supply_dev_type;
|
||||||
dev->parent = parent;
|
dev->parent = parent;
|
||||||
dev->release = power_supply_dev_release;
|
dev->release = power_supply_dev_release;
|
||||||
|
@ -1621,12 +1624,12 @@ EXPORT_SYMBOL_GPL(power_supply_get_drvdata);
|
||||||
|
|
||||||
static int __init power_supply_class_init(void)
|
static int __init power_supply_class_init(void)
|
||||||
{
|
{
|
||||||
power_supply_class = class_create("power_supply");
|
int err;
|
||||||
|
|
||||||
if (IS_ERR(power_supply_class))
|
err = class_register(&power_supply_class);
|
||||||
return PTR_ERR(power_supply_class);
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
power_supply_class->dev_uevent = power_supply_uevent;
|
|
||||||
power_supply_init_attrs();
|
power_supply_init_attrs();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1634,7 +1637,7 @@ static int __init power_supply_class_init(void)
|
||||||
|
|
||||||
static void __exit power_supply_class_exit(void)
|
static void __exit power_supply_class_exit(void)
|
||||||
{
|
{
|
||||||
class_destroy(power_supply_class);
|
class_unregister(&power_supply_class);
|
||||||
}
|
}
|
||||||
|
|
||||||
subsys_initcall(power_supply_class_init);
|
subsys_initcall(power_supply_class_init);
|
||||||
|
|
|
@ -895,7 +895,7 @@ extern int power_supply_powers(struct power_supply *psy, struct device *dev);
|
||||||
|
|
||||||
extern void *power_supply_get_drvdata(struct power_supply *psy);
|
extern void *power_supply_get_drvdata(struct power_supply *psy);
|
||||||
/* For APM emulation, think legacy userspace. */
|
/* For APM emulation, think legacy userspace. */
|
||||||
extern struct class *power_supply_class;
|
extern const struct class power_supply_class;
|
||||||
|
|
||||||
static inline bool power_supply_is_amp_property(enum power_supply_property psp)
|
static inline bool power_supply_is_amp_property(enum power_supply_property psp)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Reference in a new issue