lkml.org 
[lkml]   [2021]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 38/45] mfd: max77620: Use devm_register_simple_power_off_handler()
    Date
    Use devm_register_simple_power_off_handler() that replaces global
    pm_power_off variable and allows to register multiple power-off handlers.

    Nexus 7 Android tablet can be powered off using MAX77663 PMIC and using
    a special bootloader command. At first the bootloader option should be
    tried, it will have a higher priority than of PMIC that uses default
    priority.

    Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
    ---
    drivers/mfd/max77620.c | 21 ++++++++++++---------
    1 file changed, 12 insertions(+), 9 deletions(-)

    diff --git a/drivers/mfd/max77620.c b/drivers/mfd/max77620.c
    index fec2096474ad..29487ccc191a 100644
    --- a/drivers/mfd/max77620.c
    +++ b/drivers/mfd/max77620.c
    @@ -31,11 +31,10 @@
    #include <linux/init.h>
    #include <linux/of.h>
    #include <linux/of_device.h>
    +#include <linux/reboot.h>
    #include <linux/regmap.h>
    #include <linux/slab.h>

    -static struct max77620_chip *max77620_scratch;
    -
    static const struct resource gpio_resources[] = {
    DEFINE_RES_IRQ(MAX77620_IRQ_TOP_GPIO),
    };
    @@ -483,13 +482,13 @@ static int max77620_read_es_version(struct max77620_chip *chip)
    return ret;
    }

    -static void max77620_pm_power_off(void)
    +static void max77620_pm_power_off(void *data)
    {
    - struct max77620_chip *chip = max77620_scratch;
    + struct max77620_chip *chip = data;

    regmap_update_bits(chip->rmap, MAX77620_REG_ONOFFCNFG1,
    - MAX77620_ONOFFCNFG1_SFT_RST,
    - MAX77620_ONOFFCNFG1_SFT_RST);
    + MAX77620_ONOFFCNFG1_SFT_RST,
    + MAX77620_ONOFFCNFG1_SFT_RST);
    }

    static int max77620_probe(struct i2c_client *client,
    @@ -566,9 +565,13 @@ static int max77620_probe(struct i2c_client *client,
    }

    pm_off = of_device_is_system_power_controller(client->dev.of_node);
    - if (pm_off && !pm_power_off) {
    - max77620_scratch = chip;
    - pm_power_off = max77620_pm_power_off;
    + if (pm_off) {
    + ret = devm_register_simple_power_off_handler(chip->dev,
    + max77620_pm_power_off,
    + chip);
    + if (ret < 0)
    + dev_err(chip->dev,
    + "Failed to register power-off handler: %d\n", ret);
    }

    return 0;
    --
    2.33.1
    \
     
     \ /
      Last update: 2021-10-27 23:25    [W:2.595 / U:0.284 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site