|
@@ -29,6 +29,7 @@
|
|
#include <linux/of_device.h>
|
|
#include <linux/of_device.h>
|
|
#include <linux/pwm.h>
|
|
#include <linux/pwm.h>
|
|
#include <linux/platform_device.h>
|
|
#include <linux/platform_device.h>
|
|
|
|
+#include <linux/pinctrl/consumer.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/slab.h>
|
|
#include <linux/reset.h>
|
|
#include <linux/reset.h>
|
|
|
|
|
|
@@ -255,6 +256,18 @@ static int tegra_pwm_remove(struct platform_device *pdev)
|
|
return pwmchip_remove(&pc->chip);
|
|
return pwmchip_remove(&pc->chip);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+#ifdef CONFIG_PM_SLEEP
|
|
|
|
+static int tegra_pwm_suspend(struct device *dev)
|
|
|
|
+{
|
|
|
|
+ return pinctrl_pm_select_sleep_state(dev);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int tegra_pwm_resume(struct device *dev)
|
|
|
|
+{
|
|
|
|
+ return pinctrl_pm_select_default_state(dev);
|
|
|
|
+}
|
|
|
|
+#endif
|
|
|
|
+
|
|
static const struct tegra_pwm_soc tegra20_pwm_soc = {
|
|
static const struct tegra_pwm_soc tegra20_pwm_soc = {
|
|
.num_channels = 4,
|
|
.num_channels = 4,
|
|
};
|
|
};
|
|
@@ -271,10 +284,15 @@ static const struct of_device_id tegra_pwm_of_match[] = {
|
|
|
|
|
|
MODULE_DEVICE_TABLE(of, tegra_pwm_of_match);
|
|
MODULE_DEVICE_TABLE(of, tegra_pwm_of_match);
|
|
|
|
|
|
|
|
+static const struct dev_pm_ops tegra_pwm_pm_ops = {
|
|
|
|
+ SET_SYSTEM_SLEEP_PM_OPS(tegra_pwm_suspend, tegra_pwm_resume)
|
|
|
|
+};
|
|
|
|
+
|
|
static struct platform_driver tegra_pwm_driver = {
|
|
static struct platform_driver tegra_pwm_driver = {
|
|
.driver = {
|
|
.driver = {
|
|
.name = "tegra-pwm",
|
|
.name = "tegra-pwm",
|
|
.of_match_table = tegra_pwm_of_match,
|
|
.of_match_table = tegra_pwm_of_match,
|
|
|
|
+ .pm = &tegra_pwm_pm_ops,
|
|
},
|
|
},
|
|
.probe = tegra_pwm_probe,
|
|
.probe = tegra_pwm_probe,
|
|
.remove = tegra_pwm_remove,
|
|
.remove = tegra_pwm_remove,
|