All of lore.kernel.org
 help / color / mirror / Atom feed
From: Lee Jones <lee.jones@linaro.org>
To: Guenter Roeck <linux@roeck-us.net>
Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org,
	Samuel Ortiz <sameo@linux.intel.com>
Subject: Re: [PATCH v3 13/47] mfd: max8907: Register with kernel power-off handler
Date: Mon, 3 Nov 2014 17:56:02 +0000	[thread overview]
Message-ID: <20141103175602.GQ12011@x1> (raw)
In-Reply-To: <1414425354-10359-14-git-send-email-linux@roeck-us.net>

On Mon, 27 Oct 2014, Guenter Roeck wrote:

> Register with kernel power-off handler instead of setting pm_power_off
> directly. Register with low priority to reflect that the original code
> only sets pm_power_off if it was not already set.
> 
> Note that this patch fixes a problem on driver unload as side effect:
> The old code did not restore or clean up pm_power_off on remove,
> meaning the pointer was left in an undefined state.
> 
> Cc: Lee Jones <lee.jones@linaro.org>
> Cc: Samuel Ortiz <sameo@linux.intel.com>
> Signed-off-by: Guenter Roeck <linux@roeck-us.net>
> ---
> v3:
> - Replace poweroff in all newly introduced variables and in text
>   with power_off or power-off as appropriate
> - Replace POWEROFF_PRIORITY_xxx with POWER_OFF_PRIORITY_xxx
> v2:
> - Use define to specify poweroff handler priority
> - Use dev_warn instead of dev_err
> 
>  drivers/mfd/max8907.c       | 24 ++++++++++++++++++------
>  include/linux/mfd/max8907.h |  2 ++
>  2 files changed, 20 insertions(+), 6 deletions(-)

Acked-by: Lee Jones <lee.jones@linaro.org>

> diff --git a/drivers/mfd/max8907.c b/drivers/mfd/max8907.c
> index 232749c..a159230 100644
> --- a/drivers/mfd/max8907.c
> +++ b/drivers/mfd/max8907.c
> @@ -19,6 +19,7 @@
>  #include <linux/module.h>
>  #include <linux/of.h>
>  #include <linux/of_device.h>
> +#include <linux/pm.h>
>  #include <linux/regmap.h>
>  #include <linux/slab.h>
>  
> @@ -177,11 +178,16 @@ static const struct regmap_irq_chip max8907_rtc_irq_chip = {
>  	.num_irqs = ARRAY_SIZE(max8907_rtc_irqs),
>  };
>  
> -static struct max8907 *max8907_pm_off;
> -static void max8907_power_off(void)
> +static int max8907_power_off(struct notifier_block *this, unsigned long unused1,
> +			     void *unused2)
>  {
> -	regmap_update_bits(max8907_pm_off->regmap_gen, MAX8907_REG_RESET_CNFG,
> +	struct max8907 *max8907 = container_of(this, struct max8907,
> +					       power_off_nb);
> +
> +	regmap_update_bits(max8907->regmap_gen, MAX8907_REG_RESET_CNFG,
>  			MAX8907_MASK_POWER_OFF, MAX8907_MASK_POWER_OFF);
> +
> +	return NOTIFY_DONE;
>  }
>  
>  static int max8907_i2c_probe(struct i2c_client *i2c,
> @@ -267,9 +273,13 @@ static int max8907_i2c_probe(struct i2c_client *i2c,
>  		goto err_add_devices;
>  	}
>  
> -	if (pm_off && !pm_power_off) {
> -		max8907_pm_off = max8907;
> -		pm_power_off = max8907_power_off;
> +	if (pm_off) {
> +		max8907->power_off_nb.notifier_call = max8907_power_off;
> +		max8907->power_off_nb.priority = POWER_OFF_PRIORITY_LOW;
> +		ret = register_power_off_handler(&max8907->power_off_nb);
> +		if (ret)
> +			dev_warn(&i2c->dev,
> +				 "Failed to register power-off handler");
>  	}
>  
>  	return 0;
> @@ -293,6 +303,8 @@ static int max8907_i2c_remove(struct i2c_client *i2c)
>  {
>  	struct max8907 *max8907 = i2c_get_clientdata(i2c);
>  
> +	unregister_power_off_handler(&max8907->power_off_nb);
> +
>  	mfd_remove_devices(max8907->dev);
>  
>  	regmap_del_irq_chip(max8907->i2c_gen->irq, max8907->irqc_rtc);
> diff --git a/include/linux/mfd/max8907.h b/include/linux/mfd/max8907.h
> index b06f7a6..d8a341d 100644
> --- a/include/linux/mfd/max8907.h
> +++ b/include/linux/mfd/max8907.h
> @@ -13,6 +13,7 @@
>  #define __LINUX_MFD_MAX8907_H
>  
>  #include <linux/mutex.h>
> +#include <linux/notifier.h>
>  #include <linux/pm.h>
>  
>  #define MAX8907_GEN_I2C_ADDR		(0x78 >> 1)
> @@ -247,6 +248,7 @@ struct max8907 {
>  	struct regmap_irq_chip_data	*irqc_chg;
>  	struct regmap_irq_chip_data	*irqc_on_off;
>  	struct regmap_irq_chip_data	*irqc_rtc;
> +	struct notifier_block		power_off_nb;
>  };
>  
>  #endif

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

  reply	other threads:[~2014-11-03 17:56 UTC|newest]

Thread overview: 130+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-27 15:55 [PATCH v3 00/47] kernel: Add support for power-off handler call chain Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 01/47] " Guenter Roeck
2014-10-28 17:49   ` Pavel Machek
2014-10-27 15:55 ` [PATCH v3 02/47] memory: emif: Use API function to determine power-off capability Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 03/47] hibernate: Call have_kernel_power_off instead of checking pm_power_off Guenter Roeck
2014-10-28 17:50   ` Pavel Machek
2014-10-27 15:55 ` [PATCH v3 04/47] m68k: Replace mach_power_off with pm_power_off Guenter Roeck
2014-10-27 15:55   ` Guenter Roeck
2014-10-27 15:55 ` Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 06/47] gpio-poweroff: Drop reference to pm_power_off from devicetree bindings Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 08/47] kernel: Move pm_power_off to common code Guenter Roeck
2014-10-27 15:55 ` Guenter Roeck
2014-10-27 15:55 ` Guenter Roeck
2014-10-27 15:55   ` Guenter Roeck
2014-10-27 15:55   ` Guenter Roeck
2014-10-27 15:55   ` Guenter Roeck
2014-10-27 15:55   ` Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 09/47] mfd: palmas: Register with kernel power-off handler Guenter Roeck
2014-11-03 17:56   ` Lee Jones
2014-11-03 17:59     ` Felipe Balbi
2014-11-03 17:59       ` Felipe Balbi
2014-11-03 17:59       ` Felipe Balbi
2014-11-03 18:36       ` Guenter Roeck
2014-11-03 18:36         ` Guenter Roeck
2014-11-03 18:43         ` Felipe Balbi
2014-11-03 18:43           ` Felipe Balbi
2014-11-03 18:43           ` Felipe Balbi
2014-11-03 18:58           ` Guenter Roeck
2014-11-03 18:58             ` Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 10/47] mfd: axp20x: " Guenter Roeck
2014-11-03 17:56   ` Lee Jones
2014-10-27 15:55 ` [PATCH v3 11/47] mfd: retu: " Guenter Roeck
2014-11-03 17:56   ` Lee Jones
2014-10-27 15:55 ` [PATCH v3 12/47] mfd: ab8500-sysctrl: " Guenter Roeck
2014-10-27 15:55   ` Guenter Roeck
2014-10-27 15:55   ` Guenter Roeck
2014-11-03 17:55   ` Lee Jones
2014-11-03 17:55     ` Lee Jones
2014-10-27 15:55 ` [PATCH v3 13/47] mfd: max8907: " Guenter Roeck
2014-11-03 17:56   ` Lee Jones [this message]
2014-10-27 15:55 ` [PATCH v3 14/47] mfd: tps80031: " Guenter Roeck
2014-11-03 17:55   ` Lee Jones
2014-10-27 15:55 ` [PATCH v3 15/47] mfd: dm355evm_msp: " Guenter Roeck
2014-11-03 17:55   ` Lee Jones
2014-10-27 15:55 ` [PATCH v3 16/47] mfd: tps6586x: " Guenter Roeck
2014-11-03 17:54   ` Lee Jones
2014-11-03 17:57   ` Felipe Balbi
2014-11-03 17:57     ` Felipe Balbi
2014-11-03 17:57     ` Felipe Balbi
2014-10-27 15:55 ` [PATCH v3 17/47] mfd: tps65910: " Guenter Roeck
2014-11-03 17:54   ` Lee Jones
2014-11-03 17:57   ` Felipe Balbi
2014-11-03 17:57     ` Felipe Balbi
2014-11-03 17:57     ` Felipe Balbi
2014-10-27 15:55 ` [PATCH v3 18/47] mfd: twl4030-power: " Guenter Roeck
2014-11-03 17:54   ` Lee Jones
2014-11-03 17:56     ` Felipe Balbi
2014-11-03 17:56       ` Felipe Balbi
2014-10-27 15:55 ` [PATCH v3 19/47] mfd: rk808: Register power-off handler " Guenter Roeck
2014-11-03 17:53   ` Lee Jones
2014-11-03 19:06     ` Guenter Roeck
2014-11-03 22:42       ` Lee Jones
2014-11-03 22:52         ` Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 20/47] mfd: rn5t618: " Guenter Roeck
2014-11-03 17:54   ` Lee Jones
2014-10-27 15:55 ` [PATCH v3 21/47] ipmi: Register " Guenter Roeck
2014-10-27 15:55   ` Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 22/47] power/reset: restart-poweroff: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 23/47] power/reset: gpio-poweroff: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 24/47] power/reset: as3722-poweroff: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 25/47] power/reset: qnap-poweroff: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 26/47] power/reset: msm-poweroff: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 27/47] power/reset: vexpress-poweroff: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 28/47] power/reset: at91-poweroff: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 29/47] power/reset: ltc2952-poweroff: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 30/47] x86: iris: " Guenter Roeck
2014-11-01 19:41   ` Thomas Gleixner
2014-11-01 21:15     ` Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 31/47] x86: apm: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 32/47] x86: olpc: Register xo1 power-off handler " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 33/47] staging: nvec: Register " Guenter Roeck
2014-10-27 15:55   ` Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 34/47] acpi: Register power-off handler " Guenter Roeck
2014-10-28  0:26   ` Rafael J. Wysocki
2014-10-28  2:10     ` Guenter Roeck
2014-10-28 23:10       ` Rafael J. Wysocki
2014-10-29  2:05         ` Guenter Roeck
2014-10-29 15:13           ` Rafael J. Wysocki
2014-10-27 15:55 ` [PATCH v3 35/47] arm: Register " Guenter Roeck
2014-10-27 15:55 ` Guenter Roeck
2014-10-27 15:55   ` Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 36/47] arm64: psci: " Guenter Roeck
2014-10-27 15:55   ` Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 37/47] avr32: atngw100: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 38/47] ia64: " Guenter Roeck
2014-10-27 15:55   ` Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 39/47] m68k: " Guenter Roeck
2014-10-27 15:55 ` Guenter Roeck
2014-10-27 15:55   ` Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 40/47] mips: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 41/47] sh: " Guenter Roeck
2014-10-27 15:55   ` Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 42/47] x86: lguest: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 43/47] x86: ce4100: " Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 44/47] x86: intel-mid: Drop registration of dummy power-off handlers Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 45/47] x86: pmc_atom: Register power-off handler with kernel power-off handler Guenter Roeck
     [not found] ` <1414425354-10359-1-git-send-email-linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>
2014-10-27 15:55   ` [PATCH v3 05/47] mfd: as3722: Drop reference to pm_power_off from devicetree bindings Guenter Roeck
2014-10-27 15:55     ` Guenter Roeck
2014-10-27 15:55   ` [PATCH v3 07/47] qnap-poweroff: " Guenter Roeck
2014-10-27 15:55     ` Guenter Roeck
2014-10-27 15:55   ` [PATCH v3 46/47] efi: Register power-off handler with kernel power-off handler Guenter Roeck
2014-10-27 15:55     ` Guenter Roeck
2014-10-27 15:55 ` [PATCH v3 47/47] kernel: Remove pm_power_off Guenter Roeck
2014-10-28 17:50   ` Pavel Machek
2014-10-27 16:03 ` [PATCH v3 00/47] kernel: Add support for power-off handler call chain Felipe Balbi
2014-10-27 16:03   ` Felipe Balbi
2014-10-27 17:16   ` Guenter Roeck
2014-10-27 17:33     ` Felipe Balbi
2014-10-27 17:33       ` Felipe Balbi
2014-10-27 17:43       ` Johan Hovold
2014-11-03 17:59 ` Felipe Balbi
2014-11-03 17:59   ` Felipe Balbi
2014-11-03 17:59   ` Felipe Balbi
2014-11-03 18:22   ` Guenter Roeck
2014-11-03 18:22     ` Guenter Roeck
2014-11-03 18:28     ` Felipe Balbi
2014-11-03 18:28       ` Felipe Balbi
2014-11-03 18:28       ` Felipe Balbi
2014-11-03 18:49       ` Guenter Roeck
2014-11-03 18:49         ` Guenter Roeck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20141103175602.GQ12011@x1 \
    --to=lee.jones@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=sameo@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.