regulator: mcp16502: add support for suspend

This patch adds support for entering/resuming suspend states.
It does this by setting the LPM pin of the PMIC.

When suspending the PMIC will enter the Low-power mode
when the LPM pin will be set to high. If the suspend target state
is suspend-to-mem, the PMIC will transition to Hibernate mode,
otherwise, if it is standby, it will remain in Low-power mode.

Signed-off-by: Andrei Stefanescu <andrei.stefanescu@microchip.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Andrei.Stefanescu@microchip.com 2018-12-14 08:09:31 +00:00 committed by Mark Brown
parent 82b4d99725
commit fc401cb98a
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
1 changed files with 34 additions and 0 deletions

View File

@ -497,6 +497,37 @@ static int mcp16502_probe(struct i2c_client *client,
return 0;
}
#ifdef CONFIG_SUSPEND
static int mcp16502_suspend_noirq(struct device *dev)
{
struct i2c_client *client = to_i2c_client(dev);
struct mcp16502 *mcp = i2c_get_clientdata(client);
mcp16502_gpio_set_mode(mcp, MCP16502_OPMODE_LPM);
return 0;
}
static int mcp16502_resume_noirq(struct device *dev)
{
struct i2c_client *client = to_i2c_client(dev);
struct mcp16502 *mcp = i2c_get_clientdata(client);
mcp16502_gpio_set_mode(mcp, MCP16502_OPMODE_ACTIVE);
return 0;
}
#else /* !CONFIG_SUSPEND */
#define mcp16502_suspend NULL
#define mcp16502_resume NULL
#endif /* !CONFIG_SUSPEND */
#ifdef CONFIG_PM
static const struct dev_pm_ops mcp16502_pm_ops = {
SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(mcp16502_suspend_noirq,
mcp16502_resume_noirq)
};
#endif
static const struct i2c_device_id mcp16502_i2c_id[] = {
{ "mcp16502", 0 },
{ }
@ -508,6 +539,9 @@ static struct i2c_driver mcp16502_drv = {
.driver = {
.name = "mcp16502-regulator",
.of_match_table = of_match_ptr(mcp16502_ids),
#ifdef CONFIG_PM
.pm = &mcp16502_pm_ops,
#endif
},
.id_table = mcp16502_i2c_id,
};