power: reset: syscon-poweroff: Move device data into a struct
authorAndrew Davis <afd@ti.com>
Mon, 12 Feb 2024 16:28:30 +0000 (10:28 -0600)
committerSebastian Reichel <sebastian.reichel@collabora.com>
Tue, 13 Feb 2024 01:17:26 +0000 (02:17 +0100)
Currently all these device data elements are top level global variables.
Move these into a struct. This will be used in the next patch when
the global variable usage is removed. Doing this in two steps makes
the patches easier to read.

Signed-off-by: Andrew Davis <afd@ti.com>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Link: https://lore.kernel.org/r/20240212162831.67838-19-afd@ti.com
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/reset/syscon-poweroff.c

index 1b2ce7734260c7170803371449b94e9e53ce7677..19c8da997b4c87a06d7dc932e116d31e9dd39125 100644 (file)
 #include <linux/pm.h>
 #include <linux/regmap.h>
 
-static struct regmap *map;
-static u32 offset;
-static u32 value;
-static u32 mask;
+struct syscon_poweroff_data {
+       struct regmap *map;
+       u32 offset;
+       u32 value;
+       u32 mask;
+};
+
+static struct syscon_poweroff_data *data;
 
 static void syscon_poweroff(void)
 {
        /* Issue the poweroff */
-       regmap_update_bits(map, offset, mask, value);
+       regmap_update_bits(data->map, data->offset, data->mask, data->value);
 
        mdelay(1000);
 
@@ -35,22 +39,26 @@ static int syscon_poweroff_probe(struct platform_device *pdev)
        struct device *dev = &pdev->dev;
        int mask_err, value_err;
 
-       map = syscon_regmap_lookup_by_phandle(dev->of_node, "regmap");
-       if (IS_ERR(map)) {
-               map = syscon_node_to_regmap(dev->parent->of_node);
-               if (IS_ERR(map)) {
+       data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
+       if (!data)
+               return -ENOMEM;
+
+       data->map = syscon_regmap_lookup_by_phandle(dev->of_node, "regmap");
+       if (IS_ERR(data->map)) {
+               data->map = syscon_node_to_regmap(dev->parent->of_node);
+               if (IS_ERR(data->map)) {
                        dev_err(dev, "unable to get syscon");
-                       return PTR_ERR(map);
+                       return PTR_ERR(data->map);
                }
        }
 
-       if (of_property_read_u32(dev->of_node, "offset", &offset)) {
+       if (of_property_read_u32(dev->of_node, "offset", &data->offset)) {
                dev_err(dev, "unable to read 'offset'");
                return -EINVAL;
        }
 
-       value_err = of_property_read_u32(dev->of_node, "value", &value);
-       mask_err = of_property_read_u32(dev->of_node, "mask", &mask);
+       value_err = of_property_read_u32(dev->of_node, "value", &data->value);
+       mask_err = of_property_read_u32(dev->of_node, "mask", &data->mask);
        if (value_err && mask_err) {
                dev_err(dev, "unable to read 'value' and 'mask'");
                return -EINVAL;
@@ -58,11 +66,11 @@ static int syscon_poweroff_probe(struct platform_device *pdev)
 
        if (value_err) {
                /* support old binding */
-               value = mask;
-               mask = 0xFFFFFFFF;
+               data->value = data->mask;
+               data->mask = 0xFFFFFFFF;
        } else if (mask_err) {
                /* support value without mask*/
-               mask = 0xFFFFFFFF;
+               data->mask = 0xFFFFFFFF;
        }
 
        if (pm_power_off) {