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:
parent
82b4d99725
commit
fc401cb98a
1 changed files with 34 additions and 0 deletions
|
@ -497,6 +497,37 @@ static int mcp16502_probe(struct i2c_client *client,
|
||||||
return 0;
|
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[] = {
|
static const struct i2c_device_id mcp16502_i2c_id[] = {
|
||||||
{ "mcp16502", 0 },
|
{ "mcp16502", 0 },
|
||||||
{ }
|
{ }
|
||||||
|
@ -508,6 +539,9 @@ static struct i2c_driver mcp16502_drv = {
|
||||||
.driver = {
|
.driver = {
|
||||||
.name = "mcp16502-regulator",
|
.name = "mcp16502-regulator",
|
||||||
.of_match_table = of_match_ptr(mcp16502_ids),
|
.of_match_table = of_match_ptr(mcp16502_ids),
|
||||||
|
#ifdef CONFIG_PM
|
||||||
|
.pm = &mcp16502_pm_ops,
|
||||||
|
#endif
|
||||||
},
|
},
|
||||||
.id_table = mcp16502_i2c_id,
|
.id_table = mcp16502_i2c_id,
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Reference in a new issue