Commit 5236bbc6 authored by Zhiyong Tao's avatar Zhiyong Tao Committed by Jonathan Cameron

iio: adc: mt7622: add support for suspend/resume.

This patch supports auxadc suspend/resume flow.
Disable auxadc clk and power in suspend function.
Enable axuadc clk and power in resume function.
Signed-off-by: default avatarZhiyong Tao <zhiyong.tao@mediatek.com>
Signed-off-by: default avatarJonathan Cameron <jic23@kernel.org>
parent a77c832c
...@@ -184,6 +184,37 @@ static const struct iio_info mt6577_auxadc_info = { ...@@ -184,6 +184,37 @@ static const struct iio_info mt6577_auxadc_info = {
.read_raw = &mt6577_auxadc_read_raw, .read_raw = &mt6577_auxadc_read_raw,
}; };
static int __maybe_unused mt6577_auxadc_resume(struct device *dev)
{
struct iio_dev *indio_dev = dev_get_drvdata(dev);
struct mt6577_auxadc_device *adc_dev = iio_priv(indio_dev);
int ret;
ret = clk_prepare_enable(adc_dev->adc_clk);
if (ret) {
pr_err("failed to enable auxadc clock\n");
return ret;
}
mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_MISC,
MT6577_AUXADC_PDN_EN, 0);
mdelay(MT6577_AUXADC_POWER_READY_MS);
return 0;
}
static int __maybe_unused mt6577_auxadc_suspend(struct device *dev)
{
struct iio_dev *indio_dev = dev_get_drvdata(dev);
struct mt6577_auxadc_device *adc_dev = iio_priv(indio_dev);
mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_MISC,
0, MT6577_AUXADC_PDN_EN);
clk_disable_unprepare(adc_dev->adc_clk);
return 0;
}
static int mt6577_auxadc_probe(struct platform_device *pdev) static int mt6577_auxadc_probe(struct platform_device *pdev)
{ {
struct mt6577_auxadc_device *adc_dev; struct mt6577_auxadc_device *adc_dev;
...@@ -269,6 +300,10 @@ static int mt6577_auxadc_remove(struct platform_device *pdev) ...@@ -269,6 +300,10 @@ static int mt6577_auxadc_remove(struct platform_device *pdev)
return 0; return 0;
} }
static SIMPLE_DEV_PM_OPS(mt6577_auxadc_pm_ops,
mt6577_auxadc_suspend,
mt6577_auxadc_resume);
static const struct of_device_id mt6577_auxadc_of_match[] = { static const struct of_device_id mt6577_auxadc_of_match[] = {
{ .compatible = "mediatek,mt2701-auxadc", }, { .compatible = "mediatek,mt2701-auxadc", },
{ .compatible = "mediatek,mt8173-auxadc", }, { .compatible = "mediatek,mt8173-auxadc", },
...@@ -280,6 +315,7 @@ static struct platform_driver mt6577_auxadc_driver = { ...@@ -280,6 +315,7 @@ static struct platform_driver mt6577_auxadc_driver = {
.driver = { .driver = {
.name = "mt6577-auxadc", .name = "mt6577-auxadc",
.of_match_table = mt6577_auxadc_of_match, .of_match_table = mt6577_auxadc_of_match,
.pm = &mt6577_auxadc_pm_ops,
}, },
.probe = mt6577_auxadc_probe, .probe = mt6577_auxadc_probe,
.remove = mt6577_auxadc_remove, .remove = mt6577_auxadc_remove,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment