All of lore.kernel.org
 help / color / mirror / Atom feed
From: Robin Gong <yibin.gong@nxp.com>
To: Oleksij Rempel <o.rempel@pengutronix.de>,
	Shawn Guo <shawnguo@kernel.org>, Mark Brown <broonie@kernel.org>,
	"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
Cc: "kernel@pengutronix.de" <kernel@pengutronix.de>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	"linux-clk@vger.kernel.org" <linux-clk@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Liam Girdwood <lgirdwood@gmail.com>,
	Leonard Crestez <leonard.crestez@nxp.com>,
	Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Michael Turquette <mturquette@baylibre.com>,
	Stephen Boyd <sboyd@codeaurora.org>,
	Fabio Estevam <fabio.estevam@nxp.com>,
	Russell King <linux@armlinux.org.uk>,
	dl-linux-imx <linux-imx@nxp.com>,
	"A.s. Dong" <aisheng.dong@nxp.com>
Subject: RE: [PATCH v8 5/6] regulator: pfuze100-regulator: provide pm_power_off_prepare handler
Date: Fri, 27 Jul 2018 09:32:02 +0000	[thread overview]
Message-ID: <DB6PR04MB32233832762D02F1023861A1892A0@DB6PR04MB3223.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <20180726092220.17250-6-o.rempel@pengutronix.de>



> -----Original Message-----
> From: Oleksij Rempel [mailto:o.rempel@pengutronix.de]
> Sent: 2018年7月26日 17:22
> To: Shawn Guo <shawnguo@kernel.org>; Mark Brown <broonie@kernel.org>;
> Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> Cc: Oleksij Rempel <o.rempel@pengutronix.de>; kernel@pengutronix.de;
> devicetree@vger.kernel.org; linux-arm-kernel@lists.infradead.org;
> linux-clk@vger.kernel.org; linux-kernel@vger.kernel.org; Andrew Morton
> <akpm@linux-foundation.org>; Liam Girdwood <lgirdwood@gmail.com>;
> Leonard Crestez <leonard.crestez@nxp.com>; Rob Herring
> <robh+dt@kernel.org>; Mark Rutland <mark.rutland@arm.com>; Michael
> Turquette <mturquette@baylibre.com>; Stephen Boyd
> <sboyd@codeaurora.org>; Fabio Estevam <fabio.estevam@nxp.com>; Russell
> King <linux@armlinux.org.uk>; dl-linux-imx <linux-imx@nxp.com>; Robin Gong
> <yibin.gong@nxp.com>; A.s. Dong <aisheng.dong@nxp.com>
> Subject: [PATCH v8 5/6] regulator: pfuze100-regulator: provide
> pm_power_off_prepare handler
> 
> On some boards the SoC can use one pin "PMIC_STBY_REQ" to notify th PMIC
> about state changes. In this case internal state of PMIC must be preconfigured
> for upcomming state change.
> It works fine with the current regulator framework, except with the power-off
> case.
> 
> This patch is providing an optional pm_power_off_prepare handler which will
> configure standby state of the PMIC to disable all power lines.
> 
> In my power consumption test on RIoTBoard, I got the following results:
> power off without this patch:	320 mA
> power off with this patch:	2   mA
> suspend to ram:			40  mA
> 
> Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
> ---
>  drivers/regulator/pfuze100-regulator.c | 92 ++++++++++++++++++++++++++
>  1 file changed, 92 insertions(+)
> 
> diff --git a/drivers/regulator/pfuze100-regulator.c
> b/drivers/regulator/pfuze100-regulator.c
> index 8d9dbcc775ea..e386e9acb3f7 100644
> --- a/drivers/regulator/pfuze100-regulator.c
> +++ b/drivers/regulator/pfuze100-regulator.c
> @@ -15,6 +15,7 @@
>  #include <linux/regulator/pfuze100.h>
>  #include <linux/i2c.h>
>  #include <linux/slab.h>
> +#include <linux/kallsyms.h>
Is it necessary?
>  #include <linux/regmap.h>
> 
>  #define PFUZE_NUMREGS		128
> @@ -29,11 +30,17 @@
> 
>  #define PFUZE100_COINVOL	0x1a
>  #define PFUZE100_SW1ABVOL	0x20
> +#define PFUZE100_SW1ABMODE	0x23
>  #define PFUZE100_SW1CVOL	0x2e
> +#define PFUZE100_SW1CMODE	0x31
>  #define PFUZE100_SW2VOL		0x35
> +#define PFUZE100_SW2MODE	0x38
>  #define PFUZE100_SW3AVOL	0x3c
> +#define PFUZE100_SW3AMODE	0x3f
>  #define PFUZE100_SW3BVOL	0x43
> +#define PFUZE100_SW3BMODE	0x46
>  #define PFUZE100_SW4VOL		0x4a
> +#define PFUZE100_SW4MODE	0x4d
>  #define PFUZE100_SWBSTCON1	0x66
>  #define PFUZE100_VREFDDRCON	0x6a
>  #define PFUZE100_VSNVSVOL	0x6b
> @@ -44,6 +51,13 @@
>  #define PFUZE100_VGEN5VOL	0x70
>  #define PFUZE100_VGEN6VOL	0x71
> 
> +#define PFUZE100_SWxMODE_MASK	0xf
> +#define PFUZE100_SWxMODE_APS_APS	0x8
> +#define PFUZE100_SWxMODE_APS_OFF	0x4
> +
> +#define PFUZE100_VGENxLPWR	BIT(6)
> +#define PFUZE100_VGENxSTBY	BIT(5)
> +
>  enum chips { PFUZE100, PFUZE200, PFUZE3000 = 3 };
> 
>  struct pfuze_regulator {
> @@ -492,6 +506,69 @@ static inline struct device_node *match_of_node(int
> index)  }  #endif
> 
> +static struct pfuze_chip *syspm_pfuze_chip;
> +
> +static void pfuze_power_off_prepare(void) 
> +	dev_info(syspm_pfuze_chip->dev, "Configure standy mode for power
> +off");
Add 'if (syspm_pfuze_chip ->chip_id == PFUZE100))' here is easy for extend 
Support on pfuze200/3000.. in the feature.
> +
> +	/* Switch from default mode: APS/APS to APS/Off */
> +	regmap_update_bits(syspm_pfuze_chip->regmap,
> PFUZE100_SW1ABMODE,
> +			   PFUZE100_SWxMODE_MASK,
> PFUZE100_SWxMODE_APS_OFF);
> +	regmap_update_bits(syspm_pfuze_chip->regmap,
> PFUZE100_SW1CMODE,
> +			   PFUZE100_SWxMODE_MASK,
> PFUZE100_SWxMODE_APS_OFF);
> +	regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_SW2MODE,
> +			   PFUZE100_SWxMODE_MASK,
> PFUZE100_SWxMODE_APS_OFF);
> +	regmap_update_bits(syspm_pfuze_chip->regmap,
> PFUZE100_SW3AMODE,
> +			   PFUZE100_SWxMODE_MASK,
> PFUZE100_SWxMODE_APS_OFF);
> +	regmap_update_bits(syspm_pfuze_chip->regmap,
> PFUZE100_SW3BMODE,
> +			   PFUZE100_SWxMODE_MASK,
> PFUZE100_SWxMODE_APS_OFF);
> +	regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_SW4MODE,
> +			   PFUZE100_SWxMODE_MASK,
> PFUZE100_SWxMODE_APS_OFF);
> +
> +	regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN1VOL,
> +			   PFUZE100_VGENxLPWR | PFUZE100_VGENxSTBY,
> +			   PFUZE100_VGENxSTBY);
> +	regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN2VOL,
> +			   PFUZE100_VGENxLPWR | PFUZE100_VGENxSTBY,
> +			   PFUZE100_VGENxSTBY);
> +	regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN3VOL,
> +			   PFUZE100_VGENxLPWR | PFUZE100_VGENxSTBY,
> +			   PFUZE100_VGENxSTBY);
> +	regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN4VOL,
> +			   PFUZE100_VGENxLPWR | PFUZE100_VGENxSTBY,
> +			   PFUZE100_VGENxSTBY);
> +	regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN5VOL,
> +			   PFUZE100_VGENxLPWR | PFUZE100_VGENxSTBY,
> +			   PFUZE100_VGENxSTBY);
> +	regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN6VOL,
> +			   PFUZE100_VGENxLPWR | PFUZE100_VGENxSTBY,
> +			   PFUZE100_VGENxSTBY);
> +}
> +
> +static int pfuze_power_off_prepare_init(struct pfuze_chip *pfuze_chip)
> +{
> +	if (pfuze_chip->chip_id != PFUZE100) {
> +		dev_warn(pfuze_chip->dev, "Requested pm_power_off_prepare
> handler for not supported chip\n");
> +		return -ENODEV;
> +	}
> +
> +	if (pm_power_off_prepare) {
> +		dev_warn(pfuze_chip->dev, "pm_power_off_prepare is already
> registered.\n");
> +		return -EBUSY;
> +	}
> +
> +	if (syspm_pfuze_chip) {
> +		dev_warn(pfuze_chip->dev, "syspm_pfuze_chip is already set.\n");
> +		return -EBUSY;
> +	}
> +
> +	syspm_pfuze_chip = pfuze_chip;
> +	pm_power_off_prepare = pfuze_power_off_prepare;
> +
> +	return 0;
> +}
> +
>  static int pfuze_identify(struct pfuze_chip *pfuze_chip)  {
>  	unsigned int value;
> @@ -661,6 +738,20 @@ static int pfuze100_regulator_probe(struct i2c_client
> *client,
>  		}
>  	}
> 
> +	if (of_property_read_bool(client->dev.of_node,
> +				  "fsl,pmic-stby-poweroff"))
> +		return pfuze_power_off_prepare_init(pfuze_chip);
> +
> +	return 0;
> +}
> +
> +static int pfuze100_regulator_remove(struct i2c_client *client) {
> +	if (syspm_pfuze_chip) {
> +		syspm_pfuze_chip = NULL;
> +		pm_power_off_prepare = NULL;
> +	}
> +
>  	return 0;
>  }
> 
> @@ -671,6 +762,7 @@ static struct i2c_driver pfuze_driver = {
>  		.of_match_table = pfuze_dt_ids,
>  	},
>  	.probe = pfuze100_regulator_probe,
> +	.remove = pfuze100_regulator_remove,
>  };
>  module_i2c_driver(pfuze_driver);
> 
> --
> 2.18.0


WARNING: multiple messages have this Message-ID (diff)
From: Robin Gong <yibin.gong@nxp.com>
To: Oleksij Rempel <o.rempel@pengutronix.de>,
	Shawn Guo <shawnguo@kernel.org>, Mark Brown <broonie@kernel.org>,
	"Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
Cc: "kernel@pengutronix.de" <kernel@pengutronix.de>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	"linux-clk@vger.kernel.org" <linux-clk@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Andrew Morton <akpm@linux-foundation.org>,
	Liam Girdwood <lgirdwood@gmail.com>,
	Leonard Crestez <leonard.crestez@nxp.com>,
	Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Michael Turquette <mturquette@baylibre.com>,
	Stephen Boyd <sboyd@codeaurora.org>,
	Fabio Estevam <fabio.estevam@nxp.com>,
	Russell King <linux@armlinux.org.uk>,
	dl-linux-imx <linux-imx@nxp.com>,
	"A.s. Dong" <aisheng.dong@nxp.com>
Subject: RE: [PATCH v8 5/6] regulator: pfuze100-regulator: provide pm_power_off_prepare handler
Date: Fri, 27 Jul 2018 09:32:02 +0000	[thread overview]
Message-ID: <DB6PR04MB32233832762D02F1023861A1892A0@DB6PR04MB3223.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <20180726092220.17250-6-o.rempel@pengutronix.de>

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogT2xla3NpaiBSZW1wZWwg
W21haWx0bzpvLnJlbXBlbEBwZW5ndXRyb25peC5kZV0NCj4gU2VudDogMjAxOMTqN9TCMjbI1SAx
NzoyMg0KPiBUbzogU2hhd24gR3VvIDxzaGF3bmd1b0BrZXJuZWwub3JnPjsgTWFyayBCcm93biA8
YnJvb25pZUBrZXJuZWwub3JnPjsNCj4gUmFmYWVsIEouIFd5c29ja2kgPHJhZmFlbC5qLnd5c29j
a2lAaW50ZWwuY29tPg0KPiBDYzogT2xla3NpaiBSZW1wZWwgPG8ucmVtcGVsQHBlbmd1dHJvbml4
LmRlPjsga2VybmVsQHBlbmd1dHJvbml4LmRlOw0KPiBkZXZpY2V0cmVlQHZnZXIua2VybmVsLm9y
ZzsgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOw0KPiBsaW51eC1jbGtAdmdl
ci5rZXJuZWwub3JnOyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBBbmRyZXcgTW9ydG9u
DQo+IDxha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnPjsgTGlhbSBHaXJkd29vZCA8bGdpcmR3b29k
QGdtYWlsLmNvbT47DQo+IExlb25hcmQgQ3Jlc3RleiA8bGVvbmFyZC5jcmVzdGV6QG54cC5jb20+
OyBSb2IgSGVycmluZw0KPiA8cm9iaCtkdEBrZXJuZWwub3JnPjsgTWFyayBSdXRsYW5kIDxtYXJr
LnJ1dGxhbmRAYXJtLmNvbT47IE1pY2hhZWwNCj4gVHVycXVldHRlIDxtdHVycXVldHRlQGJheWxp
YnJlLmNvbT47IFN0ZXBoZW4gQm95ZA0KPiA8c2JveWRAY29kZWF1cm9yYS5vcmc+OyBGYWJpbyBF
c3RldmFtIDxmYWJpby5lc3RldmFtQG54cC5jb20+OyBSdXNzZWxsDQo+IEtpbmcgPGxpbnV4QGFy
bWxpbnV4Lm9yZy51az47IGRsLWxpbnV4LWlteCA8bGludXgtaW14QG54cC5jb20+OyBSb2JpbiBH
b25nDQo+IDx5aWJpbi5nb25nQG54cC5jb20+OyBBLnMuIERvbmcgPGFpc2hlbmcuZG9uZ0BueHAu
Y29tPg0KPiBTdWJqZWN0OiBbUEFUQ0ggdjggNS82XSByZWd1bGF0b3I6IHBmdXplMTAwLXJlZ3Vs
YXRvcjogcHJvdmlkZQ0KPiBwbV9wb3dlcl9vZmZfcHJlcGFyZSBoYW5kbGVyDQo+IA0KPiBPbiBz
b21lIGJvYXJkcyB0aGUgU29DIGNhbiB1c2Ugb25lIHBpbiAiUE1JQ19TVEJZX1JFUSIgdG8gbm90
aWZ5IHRoIFBNSUMNCj4gYWJvdXQgc3RhdGUgY2hhbmdlcy4gSW4gdGhpcyBjYXNlIGludGVybmFs
IHN0YXRlIG9mIFBNSUMgbXVzdCBiZSBwcmVjb25maWd1cmVkDQo+IGZvciB1cGNvbW1pbmcgc3Rh
dGUgY2hhbmdlLg0KPiBJdCB3b3JrcyBmaW5lIHdpdGggdGhlIGN1cnJlbnQgcmVndWxhdG9yIGZy
YW1ld29yaywgZXhjZXB0IHdpdGggdGhlIHBvd2VyLW9mZg0KPiBjYXNlLg0KPiANCj4gVGhpcyBw
YXRjaCBpcyBwcm92aWRpbmcgYW4gb3B0aW9uYWwgcG1fcG93ZXJfb2ZmX3ByZXBhcmUgaGFuZGxl
ciB3aGljaCB3aWxsDQo+IGNvbmZpZ3VyZSBzdGFuZGJ5IHN0YXRlIG9mIHRoZSBQTUlDIHRvIGRp
c2FibGUgYWxsIHBvd2VyIGxpbmVzLg0KPiANCj4gSW4gbXkgcG93ZXIgY29uc3VtcHRpb24gdGVz
dCBvbiBSSW9UQm9hcmQsIEkgZ290IHRoZSBmb2xsb3dpbmcgcmVzdWx0czoNCj4gcG93ZXIgb2Zm
IHdpdGhvdXQgdGhpcyBwYXRjaDoJMzIwIG1BDQo+IHBvd2VyIG9mZiB3aXRoIHRoaXMgcGF0Y2g6
CTIgICBtQQ0KPiBzdXNwZW5kIHRvIHJhbToJCQk0MCAgbUENCj4gDQo+IFNpZ25lZC1vZmYtYnk6
IE9sZWtzaWogUmVtcGVsIDxvLnJlbXBlbEBwZW5ndXRyb25peC5kZT4NCj4gLS0tDQo+ICBkcml2
ZXJzL3JlZ3VsYXRvci9wZnV6ZTEwMC1yZWd1bGF0b3IuYyB8IDkyICsrKysrKysrKysrKysrKysr
KysrKysrKysrDQo+ICAxIGZpbGUgY2hhbmdlZCwgOTIgaW5zZXJ0aW9ucygrKQ0KPiANCj4gZGlm
ZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3BmdXplMTAwLXJlZ3VsYXRvci5jDQo+IGIvZHJp
dmVycy9yZWd1bGF0b3IvcGZ1emUxMDAtcmVndWxhdG9yLmMNCj4gaW5kZXggOGQ5ZGJjYzc3NWVh
Li5lMzg2ZTlhY2IzZjcgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3BmdXplMTAw
LXJlZ3VsYXRvci5jDQo+ICsrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3BmdXplMTAwLXJlZ3VsYXRv
ci5jDQo+IEBAIC0xNSw2ICsxNSw3IEBADQo+ICAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL3Bm
dXplMTAwLmg+DQo+ICAjaW5jbHVkZSA8bGludXgvaTJjLmg+DQo+ICAjaW5jbHVkZSA8bGludXgv
c2xhYi5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+DQpJcyBpdCBuZWNlc3Nhcnk/
DQo+ICAjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+DQo+IA0KPiAgI2RlZmluZSBQRlVaRV9OVU1S
RUdTCQkxMjgNCj4gQEAgLTI5LDExICszMCwxNyBAQA0KPiANCj4gICNkZWZpbmUgUEZVWkUxMDBf
Q09JTlZPTAkweDFhDQo+ICAjZGVmaW5lIFBGVVpFMTAwX1NXMUFCVk9MCTB4MjANCj4gKyNkZWZp
bmUgUEZVWkUxMDBfU1cxQUJNT0RFCTB4MjMNCj4gICNkZWZpbmUgUEZVWkUxMDBfU1cxQ1ZPTAkw
eDJlDQo+ICsjZGVmaW5lIFBGVVpFMTAwX1NXMUNNT0RFCTB4MzENCj4gICNkZWZpbmUgUEZVWkUx
MDBfU1cyVk9MCQkweDM1DQo+ICsjZGVmaW5lIFBGVVpFMTAwX1NXMk1PREUJMHgzOA0KPiAgI2Rl
ZmluZSBQRlVaRTEwMF9TVzNBVk9MCTB4M2MNCj4gKyNkZWZpbmUgUEZVWkUxMDBfU1czQU1PREUJ
MHgzZg0KPiAgI2RlZmluZSBQRlVaRTEwMF9TVzNCVk9MCTB4NDMNCj4gKyNkZWZpbmUgUEZVWkUx
MDBfU1czQk1PREUJMHg0Ng0KPiAgI2RlZmluZSBQRlVaRTEwMF9TVzRWT0wJCTB4NGENCj4gKyNk
ZWZpbmUgUEZVWkUxMDBfU1c0TU9ERQkweDRkDQo+ICAjZGVmaW5lIFBGVVpFMTAwX1NXQlNUQ09O
MQkweDY2DQo+ICAjZGVmaW5lIFBGVVpFMTAwX1ZSRUZERFJDT04JMHg2YQ0KPiAgI2RlZmluZSBQ
RlVaRTEwMF9WU05WU1ZPTAkweDZiDQo+IEBAIC00NCw2ICs1MSwxMyBAQA0KPiAgI2RlZmluZSBQ
RlVaRTEwMF9WR0VONVZPTAkweDcwDQo+ICAjZGVmaW5lIFBGVVpFMTAwX1ZHRU42Vk9MCTB4NzEN
Cj4gDQo+ICsjZGVmaW5lIFBGVVpFMTAwX1NXeE1PREVfTUFTSwkweGYNCj4gKyNkZWZpbmUgUEZV
WkUxMDBfU1d4TU9ERV9BUFNfQVBTCTB4OA0KPiArI2RlZmluZSBQRlVaRTEwMF9TV3hNT0RFX0FQ
U19PRkYJMHg0DQo+ICsNCj4gKyNkZWZpbmUgUEZVWkUxMDBfVkdFTnhMUFdSCUJJVCg2KQ0KPiAr
I2RlZmluZSBQRlVaRTEwMF9WR0VOeFNUQlkJQklUKDUpDQo+ICsNCj4gIGVudW0gY2hpcHMgeyBQ
RlVaRTEwMCwgUEZVWkUyMDAsIFBGVVpFMzAwMCA9IDMgfTsNCj4gDQo+ICBzdHJ1Y3QgcGZ1emVf
cmVndWxhdG9yIHsNCj4gQEAgLTQ5Miw2ICs1MDYsNjkgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qg
ZGV2aWNlX25vZGUgKm1hdGNoX29mX25vZGUoaW50DQo+IGluZGV4KSAgfSAgI2VuZGlmDQo+IA0K
PiArc3RhdGljIHN0cnVjdCBwZnV6ZV9jaGlwICpzeXNwbV9wZnV6ZV9jaGlwOw0KPiArDQo+ICtz
dGF0aWMgdm9pZCBwZnV6ZV9wb3dlcl9vZmZfcHJlcGFyZSh2b2lkKSANCj4gKwlkZXZfaW5mbyhz
eXNwbV9wZnV6ZV9jaGlwLT5kZXYsICJDb25maWd1cmUgc3RhbmR5IG1vZGUgZm9yIHBvd2VyDQo+
ICtvZmYiKTsNCkFkZCAnaWYgKHN5c3BtX3BmdXplX2NoaXAgLT5jaGlwX2lkID09IFBGVVpFMTAw
KSknIGhlcmUgaXMgZWFzeSBmb3IgZXh0ZW5kIA0KU3VwcG9ydCBvbiBwZnV6ZTIwMC8zMDAwLi4g
aW4gdGhlIGZlYXR1cmUuDQo+ICsNCj4gKwkvKiBTd2l0Y2ggZnJvbSBkZWZhdWx0IG1vZGU6IEFQ
Uy9BUFMgdG8gQVBTL09mZiAqLw0KPiArCXJlZ21hcF91cGRhdGVfYml0cyhzeXNwbV9wZnV6ZV9j
aGlwLT5yZWdtYXAsDQo+IFBGVVpFMTAwX1NXMUFCTU9ERSwNCj4gKwkJCSAgIFBGVVpFMTAwX1NX
eE1PREVfTUFTSywNCj4gUEZVWkUxMDBfU1d4TU9ERV9BUFNfT0ZGKTsNCj4gKwlyZWdtYXBfdXBk
YXRlX2JpdHMoc3lzcG1fcGZ1emVfY2hpcC0+cmVnbWFwLA0KPiBQRlVaRTEwMF9TVzFDTU9ERSwN
Cj4gKwkJCSAgIFBGVVpFMTAwX1NXeE1PREVfTUFTSywNCj4gUEZVWkUxMDBfU1d4TU9ERV9BUFNf
T0ZGKTsNCj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMoc3lzcG1fcGZ1emVfY2hpcC0+cmVnbWFwLCBQ
RlVaRTEwMF9TVzJNT0RFLA0KPiArCQkJICAgUEZVWkUxMDBfU1d4TU9ERV9NQVNLLA0KPiBQRlVa
RTEwMF9TV3hNT0RFX0FQU19PRkYpOw0KPiArCXJlZ21hcF91cGRhdGVfYml0cyhzeXNwbV9wZnV6
ZV9jaGlwLT5yZWdtYXAsDQo+IFBGVVpFMTAwX1NXM0FNT0RFLA0KPiArCQkJICAgUEZVWkUxMDBf
U1d4TU9ERV9NQVNLLA0KPiBQRlVaRTEwMF9TV3hNT0RFX0FQU19PRkYpOw0KPiArCXJlZ21hcF91
cGRhdGVfYml0cyhzeXNwbV9wZnV6ZV9jaGlwLT5yZWdtYXAsDQo+IFBGVVpFMTAwX1NXM0JNT0RF
LA0KPiArCQkJICAgUEZVWkUxMDBfU1d4TU9ERV9NQVNLLA0KPiBQRlVaRTEwMF9TV3hNT0RFX0FQ
U19PRkYpOw0KPiArCXJlZ21hcF91cGRhdGVfYml0cyhzeXNwbV9wZnV6ZV9jaGlwLT5yZWdtYXAs
IFBGVVpFMTAwX1NXNE1PREUsDQo+ICsJCQkgICBQRlVaRTEwMF9TV3hNT0RFX01BU0ssDQo+IFBG
VVpFMTAwX1NXeE1PREVfQVBTX09GRik7DQo+ICsNCj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMoc3lz
cG1fcGZ1emVfY2hpcC0+cmVnbWFwLCBQRlVaRTEwMF9WR0VOMVZPTCwNCj4gKwkJCSAgIFBGVVpF
MTAwX1ZHRU54TFBXUiB8IFBGVVpFMTAwX1ZHRU54U1RCWSwNCj4gKwkJCSAgIFBGVVpFMTAwX1ZH
RU54U1RCWSk7DQo+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKHN5c3BtX3BmdXplX2NoaXAtPnJlZ21h
cCwgUEZVWkUxMDBfVkdFTjJWT0wsDQo+ICsJCQkgICBQRlVaRTEwMF9WR0VOeExQV1IgfCBQRlVa
RTEwMF9WR0VOeFNUQlksDQo+ICsJCQkgICBQRlVaRTEwMF9WR0VOeFNUQlkpOw0KPiArCXJlZ21h
cF91cGRhdGVfYml0cyhzeXNwbV9wZnV6ZV9jaGlwLT5yZWdtYXAsIFBGVVpFMTAwX1ZHRU4zVk9M
LA0KPiArCQkJICAgUEZVWkUxMDBfVkdFTnhMUFdSIHwgUEZVWkUxMDBfVkdFTnhTVEJZLA0KPiAr
CQkJICAgUEZVWkUxMDBfVkdFTnhTVEJZKTsNCj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMoc3lzcG1f
cGZ1emVfY2hpcC0+cmVnbWFwLCBQRlVaRTEwMF9WR0VONFZPTCwNCj4gKwkJCSAgIFBGVVpFMTAw
X1ZHRU54TFBXUiB8IFBGVVpFMTAwX1ZHRU54U1RCWSwNCj4gKwkJCSAgIFBGVVpFMTAwX1ZHRU54
U1RCWSk7DQo+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKHN5c3BtX3BmdXplX2NoaXAtPnJlZ21hcCwg
UEZVWkUxMDBfVkdFTjVWT0wsDQo+ICsJCQkgICBQRlVaRTEwMF9WR0VOeExQV1IgfCBQRlVaRTEw
MF9WR0VOeFNUQlksDQo+ICsJCQkgICBQRlVaRTEwMF9WR0VOeFNUQlkpOw0KPiArCXJlZ21hcF91
cGRhdGVfYml0cyhzeXNwbV9wZnV6ZV9jaGlwLT5yZWdtYXAsIFBGVVpFMTAwX1ZHRU42Vk9MLA0K
PiArCQkJICAgUEZVWkUxMDBfVkdFTnhMUFdSIHwgUEZVWkUxMDBfVkdFTnhTVEJZLA0KPiArCQkJ
ICAgUEZVWkUxMDBfVkdFTnhTVEJZKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBwZnV6ZV9w
b3dlcl9vZmZfcHJlcGFyZV9pbml0KHN0cnVjdCBwZnV6ZV9jaGlwICpwZnV6ZV9jaGlwKQ0KPiAr
ew0KPiArCWlmIChwZnV6ZV9jaGlwLT5jaGlwX2lkICE9IFBGVVpFMTAwKSB7DQo+ICsJCWRldl93
YXJuKHBmdXplX2NoaXAtPmRldiwgIlJlcXVlc3RlZCBwbV9wb3dlcl9vZmZfcHJlcGFyZQ0KPiBo
YW5kbGVyIGZvciBub3Qgc3VwcG9ydGVkIGNoaXBcbiIpOw0KPiArCQlyZXR1cm4gLUVOT0RFVjsN
Cj4gKwl9DQo+ICsNCj4gKwlpZiAocG1fcG93ZXJfb2ZmX3ByZXBhcmUpIHsNCj4gKwkJZGV2X3dh
cm4ocGZ1emVfY2hpcC0+ZGV2LCAicG1fcG93ZXJfb2ZmX3ByZXBhcmUgaXMgYWxyZWFkeQ0KPiBy
ZWdpc3RlcmVkLlxuIik7DQo+ICsJCXJldHVybiAtRUJVU1k7DQo+ICsJfQ0KPiArDQo+ICsJaWYg
KHN5c3BtX3BmdXplX2NoaXApIHsNCj4gKwkJZGV2X3dhcm4ocGZ1emVfY2hpcC0+ZGV2LCAic3lz
cG1fcGZ1emVfY2hpcCBpcyBhbHJlYWR5IHNldC5cbiIpOw0KPiArCQlyZXR1cm4gLUVCVVNZOw0K
PiArCX0NCj4gKw0KPiArCXN5c3BtX3BmdXplX2NoaXAgPSBwZnV6ZV9jaGlwOw0KPiArCXBtX3Bv
d2VyX29mZl9wcmVwYXJlID0gcGZ1emVfcG93ZXJfb2ZmX3ByZXBhcmU7DQo+ICsNCj4gKwlyZXR1
cm4gMDsNCj4gK30NCj4gKw0KPiAgc3RhdGljIGludCBwZnV6ZV9pZGVudGlmeShzdHJ1Y3QgcGZ1
emVfY2hpcCAqcGZ1emVfY2hpcCkgIHsNCj4gIAl1bnNpZ25lZCBpbnQgdmFsdWU7DQo+IEBAIC02
NjEsNiArNzM4LDIwIEBAIHN0YXRpYyBpbnQgcGZ1emUxMDBfcmVndWxhdG9yX3Byb2JlKHN0cnVj
dCBpMmNfY2xpZW50DQo+ICpjbGllbnQsDQo+ICAJCX0NCj4gIAl9DQo+IA0KPiArCWlmIChvZl9w
cm9wZXJ0eV9yZWFkX2Jvb2woY2xpZW50LT5kZXYub2Zfbm9kZSwNCj4gKwkJCQkgICJmc2wscG1p
Yy1zdGJ5LXBvd2Vyb2ZmIikpDQo+ICsJCXJldHVybiBwZnV6ZV9wb3dlcl9vZmZfcHJlcGFyZV9p
bml0KHBmdXplX2NoaXApOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRp
YyBpbnQgcGZ1emUxMDBfcmVndWxhdG9yX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50
KSB7DQo+ICsJaWYgKHN5c3BtX3BmdXplX2NoaXApIHsNCj4gKwkJc3lzcG1fcGZ1emVfY2hpcCA9
IE5VTEw7DQo+ICsJCXBtX3Bvd2VyX29mZl9wcmVwYXJlID0gTlVMTDsNCj4gKwl9DQo+ICsNCj4g
IAlyZXR1cm4gMDsNCj4gIH0NCj4gDQo+IEBAIC02NzEsNiArNzYyLDcgQEAgc3RhdGljIHN0cnVj
dCBpMmNfZHJpdmVyIHBmdXplX2RyaXZlciA9IHsNCj4gIAkJLm9mX21hdGNoX3RhYmxlID0gcGZ1
emVfZHRfaWRzLA0KPiAgCX0sDQo+ICAJLnByb2JlID0gcGZ1emUxMDBfcmVndWxhdG9yX3Byb2Jl
LA0KPiArCS5yZW1vdmUgPSBwZnV6ZTEwMF9yZWd1bGF0b3JfcmVtb3ZlLA0KPiAgfTsNCj4gIG1v
ZHVsZV9pMmNfZHJpdmVyKHBmdXplX2RyaXZlcik7DQo+IA0KPiAtLQ0KPiAyLjE4LjANCg0K

WARNING: multiple messages have this Message-ID (diff)
From: yibin.gong@nxp.com (Robin Gong)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v8 5/6] regulator: pfuze100-regulator: provide pm_power_off_prepare handler
Date: Fri, 27 Jul 2018 09:32:02 +0000	[thread overview]
Message-ID: <DB6PR04MB32233832762D02F1023861A1892A0@DB6PR04MB3223.eurprd04.prod.outlook.com> (raw)
In-Reply-To: <20180726092220.17250-6-o.rempel@pengutronix.de>



> -----Original Message-----
> From: Oleksij Rempel [mailto:o.rempel at pengutronix.de]
> Sent: 2018?7?26? 17:22
> To: Shawn Guo <shawnguo@kernel.org>; Mark Brown <broonie@kernel.org>;
> Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> Cc: Oleksij Rempel <o.rempel@pengutronix.de>; kernel at pengutronix.de;
> devicetree at vger.kernel.org; linux-arm-kernel at lists.infradead.org;
> linux-clk at vger.kernel.org; linux-kernel at vger.kernel.org; Andrew Morton
> <akpm@linux-foundation.org>; Liam Girdwood <lgirdwood@gmail.com>;
> Leonard Crestez <leonard.crestez@nxp.com>; Rob Herring
> <robh+dt@kernel.org>; Mark Rutland <mark.rutland@arm.com>; Michael
> Turquette <mturquette@baylibre.com>; Stephen Boyd
> <sboyd@codeaurora.org>; Fabio Estevam <fabio.estevam@nxp.com>; Russell
> King <linux@armlinux.org.uk>; dl-linux-imx <linux-imx@nxp.com>; Robin Gong
> <yibin.gong@nxp.com>; A.s. Dong <aisheng.dong@nxp.com>
> Subject: [PATCH v8 5/6] regulator: pfuze100-regulator: provide
> pm_power_off_prepare handler
> 
> On some boards the SoC can use one pin "PMIC_STBY_REQ" to notify th PMIC
> about state changes. In this case internal state of PMIC must be preconfigured
> for upcomming state change.
> It works fine with the current regulator framework, except with the power-off
> case.
> 
> This patch is providing an optional pm_power_off_prepare handler which will
> configure standby state of the PMIC to disable all power lines.
> 
> In my power consumption test on RIoTBoard, I got the following results:
> power off without this patch:	320 mA
> power off with this patch:	2   mA
> suspend to ram:			40  mA
> 
> Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
> ---
>  drivers/regulator/pfuze100-regulator.c | 92 ++++++++++++++++++++++++++
>  1 file changed, 92 insertions(+)
> 
> diff --git a/drivers/regulator/pfuze100-regulator.c
> b/drivers/regulator/pfuze100-regulator.c
> index 8d9dbcc775ea..e386e9acb3f7 100644
> --- a/drivers/regulator/pfuze100-regulator.c
> +++ b/drivers/regulator/pfuze100-regulator.c
> @@ -15,6 +15,7 @@
>  #include <linux/regulator/pfuze100.h>
>  #include <linux/i2c.h>
>  #include <linux/slab.h>
> +#include <linux/kallsyms.h>
Is it necessary?
>  #include <linux/regmap.h>
> 
>  #define PFUZE_NUMREGS		128
> @@ -29,11 +30,17 @@
> 
>  #define PFUZE100_COINVOL	0x1a
>  #define PFUZE100_SW1ABVOL	0x20
> +#define PFUZE100_SW1ABMODE	0x23
>  #define PFUZE100_SW1CVOL	0x2e
> +#define PFUZE100_SW1CMODE	0x31
>  #define PFUZE100_SW2VOL		0x35
> +#define PFUZE100_SW2MODE	0x38
>  #define PFUZE100_SW3AVOL	0x3c
> +#define PFUZE100_SW3AMODE	0x3f
>  #define PFUZE100_SW3BVOL	0x43
> +#define PFUZE100_SW3BMODE	0x46
>  #define PFUZE100_SW4VOL		0x4a
> +#define PFUZE100_SW4MODE	0x4d
>  #define PFUZE100_SWBSTCON1	0x66
>  #define PFUZE100_VREFDDRCON	0x6a
>  #define PFUZE100_VSNVSVOL	0x6b
> @@ -44,6 +51,13 @@
>  #define PFUZE100_VGEN5VOL	0x70
>  #define PFUZE100_VGEN6VOL	0x71
> 
> +#define PFUZE100_SWxMODE_MASK	0xf
> +#define PFUZE100_SWxMODE_APS_APS	0x8
> +#define PFUZE100_SWxMODE_APS_OFF	0x4
> +
> +#define PFUZE100_VGENxLPWR	BIT(6)
> +#define PFUZE100_VGENxSTBY	BIT(5)
> +
>  enum chips { PFUZE100, PFUZE200, PFUZE3000 = 3 };
> 
>  struct pfuze_regulator {
> @@ -492,6 +506,69 @@ static inline struct device_node *match_of_node(int
> index)  }  #endif
> 
> +static struct pfuze_chip *syspm_pfuze_chip;
> +
> +static void pfuze_power_off_prepare(void) 
> +	dev_info(syspm_pfuze_chip->dev, "Configure standy mode for power
> +off");
Add 'if (syspm_pfuze_chip ->chip_id == PFUZE100))' here is easy for extend 
Support on pfuze200/3000.. in the feature.
> +
> +	/* Switch from default mode: APS/APS to APS/Off */
> +	regmap_update_bits(syspm_pfuze_chip->regmap,
> PFUZE100_SW1ABMODE,
> +			   PFUZE100_SWxMODE_MASK,
> PFUZE100_SWxMODE_APS_OFF);
> +	regmap_update_bits(syspm_pfuze_chip->regmap,
> PFUZE100_SW1CMODE,
> +			   PFUZE100_SWxMODE_MASK,
> PFUZE100_SWxMODE_APS_OFF);
> +	regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_SW2MODE,
> +			   PFUZE100_SWxMODE_MASK,
> PFUZE100_SWxMODE_APS_OFF);
> +	regmap_update_bits(syspm_pfuze_chip->regmap,
> PFUZE100_SW3AMODE,
> +			   PFUZE100_SWxMODE_MASK,
> PFUZE100_SWxMODE_APS_OFF);
> +	regmap_update_bits(syspm_pfuze_chip->regmap,
> PFUZE100_SW3BMODE,
> +			   PFUZE100_SWxMODE_MASK,
> PFUZE100_SWxMODE_APS_OFF);
> +	regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_SW4MODE,
> +			   PFUZE100_SWxMODE_MASK,
> PFUZE100_SWxMODE_APS_OFF);
> +
> +	regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN1VOL,
> +			   PFUZE100_VGENxLPWR | PFUZE100_VGENxSTBY,
> +			   PFUZE100_VGENxSTBY);
> +	regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN2VOL,
> +			   PFUZE100_VGENxLPWR | PFUZE100_VGENxSTBY,
> +			   PFUZE100_VGENxSTBY);
> +	regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN3VOL,
> +			   PFUZE100_VGENxLPWR | PFUZE100_VGENxSTBY,
> +			   PFUZE100_VGENxSTBY);
> +	regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN4VOL,
> +			   PFUZE100_VGENxLPWR | PFUZE100_VGENxSTBY,
> +			   PFUZE100_VGENxSTBY);
> +	regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN5VOL,
> +			   PFUZE100_VGENxLPWR | PFUZE100_VGENxSTBY,
> +			   PFUZE100_VGENxSTBY);
> +	regmap_update_bits(syspm_pfuze_chip->regmap, PFUZE100_VGEN6VOL,
> +			   PFUZE100_VGENxLPWR | PFUZE100_VGENxSTBY,
> +			   PFUZE100_VGENxSTBY);
> +}
> +
> +static int pfuze_power_off_prepare_init(struct pfuze_chip *pfuze_chip)
> +{
> +	if (pfuze_chip->chip_id != PFUZE100) {
> +		dev_warn(pfuze_chip->dev, "Requested pm_power_off_prepare
> handler for not supported chip\n");
> +		return -ENODEV;
> +	}
> +
> +	if (pm_power_off_prepare) {
> +		dev_warn(pfuze_chip->dev, "pm_power_off_prepare is already
> registered.\n");
> +		return -EBUSY;
> +	}
> +
> +	if (syspm_pfuze_chip) {
> +		dev_warn(pfuze_chip->dev, "syspm_pfuze_chip is already set.\n");
> +		return -EBUSY;
> +	}
> +
> +	syspm_pfuze_chip = pfuze_chip;
> +	pm_power_off_prepare = pfuze_power_off_prepare;
> +
> +	return 0;
> +}
> +
>  static int pfuze_identify(struct pfuze_chip *pfuze_chip)  {
>  	unsigned int value;
> @@ -661,6 +738,20 @@ static int pfuze100_regulator_probe(struct i2c_client
> *client,
>  		}
>  	}
> 
> +	if (of_property_read_bool(client->dev.of_node,
> +				  "fsl,pmic-stby-poweroff"))
> +		return pfuze_power_off_prepare_init(pfuze_chip);
> +
> +	return 0;
> +}
> +
> +static int pfuze100_regulator_remove(struct i2c_client *client) {
> +	if (syspm_pfuze_chip) {
> +		syspm_pfuze_chip = NULL;
> +		pm_power_off_prepare = NULL;
> +	}
> +
>  	return 0;
>  }
> 
> @@ -671,6 +762,7 @@ static struct i2c_driver pfuze_driver = {
>  		.of_match_table = pfuze_dt_ids,
>  	},
>  	.probe = pfuze100_regulator_probe,
> +	.remove = pfuze100_regulator_remove,
>  };
>  module_i2c_driver(pfuze_driver);
> 
> --
> 2.18.0

  reply	other threads:[~2018-07-27  9:32 UTC|newest]

Thread overview: 95+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-26  9:22 [PATCH v8 0/6] provide power off support for iMX6 with external PMIC Oleksij Rempel
2018-07-26  9:22 ` Oleksij Rempel
2018-07-26  9:22 ` [PATCH v8 1/6] ARM: imx6q: provide documentation for new fsl,pmic-stby-poweroff property Oleksij Rempel
2018-07-26  9:22   ` [PATCH v8 1/6] ARM: imx6q: provide documentation for new fsl, pmic-stby-poweroff property Oleksij Rempel
2018-07-26  9:51   ` [PATCH v8 1/6] ARM: imx6q: provide documentation for new fsl,pmic-stby-poweroff property Robin Gong
2018-07-26  9:51     ` Robin Gong
2018-07-26  9:51     ` Robin Gong
2018-07-26  9:51     ` Robin Gong
2018-07-26 11:37     ` Oleksij Rempel
2018-07-26 11:37       ` Oleksij Rempel
2018-07-26 11:37       ` Oleksij Rempel
2018-07-27  1:51       ` Robin Gong
2018-07-27  1:51         ` Robin Gong
2018-07-27  1:51         ` Robin Gong
2018-07-27  1:51         ` Robin Gong
2018-07-27  8:30         ` Lucas Stach
2018-07-27  8:30           ` Lucas Stach
2018-07-27  8:30           ` Lucas Stach
2018-07-27  8:30           ` Lucas Stach
2018-07-27  8:58           ` Robin Gong
2018-07-27  8:58             ` Robin Gong
2018-07-27  8:58             ` Robin Gong
2018-07-27  8:58             ` Robin Gong
2018-07-27  9:06             ` Oleksij Rempel
2018-07-27  9:06               ` Oleksij Rempel
2018-07-27  9:06               ` Oleksij Rempel
2018-07-27  9:06               ` Oleksij Rempel
2018-07-30  8:03             ` Oleksij Rempel
2018-07-30  8:03               ` Oleksij Rempel
2018-07-30  8:03               ` Oleksij Rempel
2018-08-06  2:34               ` Robin Gong
2018-08-06  2:34                 ` Robin Gong
2018-08-06  2:34                 ` Robin Gong
2018-08-06  2:34                 ` Robin Gong
2018-08-06 16:49                 ` Lucas Stach
2018-08-06 16:49                   ` Lucas Stach
2018-08-06 16:49                   ` Lucas Stach
2018-08-06 16:49                   ` Lucas Stach
2018-07-27  8:41         ` Oleksij Rempel
2018-07-27  8:41           ` Oleksij Rempel
2018-07-27  8:41           ` Oleksij Rempel
2018-07-27  8:41           ` Oleksij Rempel
2018-07-26  9:22 ` [PATCH v8 2/6] ARM: imx6: register pm_power_off handler if "fsl,pmic-stby-poweroff" is set Oleksij Rempel
2018-07-26  9:22   ` [PATCH v8 2/6] ARM: imx6: register pm_power_off handler if "fsl, pmic-stby-poweroff" " Oleksij Rempel
2018-07-27  9:15   ` [PATCH v8 2/6] ARM: imx6: register pm_power_off handler if "fsl,pmic-stby-poweroff" " Robin Gong
2018-07-27  9:15     ` Robin Gong
2018-07-27  9:15     ` Robin Gong
2018-07-27  9:15     ` Robin Gong
2018-07-30  7:57     ` Oleksij Rempel
2018-07-30  7:57       ` Oleksij Rempel
2018-07-30  7:57       ` Oleksij Rempel
2018-07-26  9:22 ` [PATCH v8 3/6] kernel/reboot.c: export pm_power_off_prepare Oleksij Rempel
2018-07-26  9:22   ` Oleksij Rempel
2018-07-26  9:22 ` [PATCH v8 4/6] regulator: pfuze100: add fsl,pmic-stby-poweroff property Oleksij Rempel
2018-07-26  9:22   ` [PATCH v8 4/6] regulator: pfuze100: add fsl, pmic-stby-poweroff property Oleksij Rempel
2018-07-26  9:22   ` Oleksij Rempel
2018-07-26  9:22 ` [PATCH v8 5/6] regulator: pfuze100-regulator: provide pm_power_off_prepare handler Oleksij Rempel
2018-07-26  9:22   ` Oleksij Rempel
2018-07-27  9:32   ` Robin Gong [this message]
2018-07-27  9:32     ` Robin Gong
2018-07-27  9:32     ` Robin Gong
2018-07-27  9:32     ` Robin Gong
2018-07-30  7:50     ` Oleksij Rempel
2018-07-30  7:50       ` Oleksij Rempel
2018-07-30  7:50       ` Oleksij Rempel
2018-07-30 10:24       ` Mark Brown
2018-07-30 10:24         ` Mark Brown
2018-07-30 10:24         ` Mark Brown
2018-07-30 10:24         ` Mark Brown
2018-08-02  8:11         ` Oleksij Rempel
2018-08-02  8:11           ` Oleksij Rempel
2018-08-02  8:11           ` Oleksij Rempel
2018-08-02  8:11           ` Oleksij Rempel
2018-08-02  8:16     ` Oleksij Rempel
2018-08-02  8:16       ` Oleksij Rempel
2018-08-02  8:16       ` Oleksij Rempel
2018-08-06  2:51       ` Robin Gong
2018-08-06  2:51         ` Robin Gong
2018-08-06  2:51         ` Robin Gong
2018-08-06  2:51         ` Robin Gong
2018-07-26  9:22 ` [PATCH v8 6/6] ARM: dts: imx6: RIoTboard provide standby on power off option Oleksij Rempel
2018-07-26  9:22   ` Oleksij Rempel
2018-07-27  9:33   ` Robin Gong
2018-07-27  9:33     ` Robin Gong
2018-07-27  9:33     ` Robin Gong
2018-07-27  9:33     ` Robin Gong
2018-07-30  7:58     ` Oleksij Rempel
2018-07-30  7:58       ` Oleksij Rempel
2018-07-30  7:58       ` Oleksij Rempel
2018-08-02  8:37     ` Oleksij Rempel
2018-08-02  8:37       ` Oleksij Rempel
2018-08-02  8:37       ` Oleksij Rempel
2018-07-26  9:48 ` [PATCH v8 0/6] provide power off support for iMX6 with external PMIC Stefan Wahren
2018-07-26  9:48   ` Stefan Wahren
2018-07-26  9:48   ` Stefan Wahren

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=DB6PR04MB32233832762D02F1023861A1892A0@DB6PR04MB3223.eurprd04.prod.outlook.com \
    --to=yibin.gong@nxp.com \
    --cc=aisheng.dong@nxp.com \
    --cc=akpm@linux-foundation.org \
    --cc=broonie@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=fabio.estevam@nxp.com \
    --cc=kernel@pengutronix.de \
    --cc=leonard.crestez@nxp.com \
    --cc=lgirdwood@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-clk@vger.kernel.org \
    --cc=linux-imx@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=mark.rutland@arm.com \
    --cc=mturquette@baylibre.com \
    --cc=o.rempel@pengutronix.de \
    --cc=rafael.j.wysocki@intel.com \
    --cc=robh+dt@kernel.org \
    --cc=sboyd@codeaurora.org \
    --cc=shawnguo@kernel.org \
    /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.