Loading drivers/pwm/pwm-rcar.c +42 −0 Original line number Diff line number Diff line Loading @@ -258,11 +258,53 @@ static const struct of_device_id rcar_pwm_of_table[] = { }; MODULE_DEVICE_TABLE(of, rcar_pwm_of_table); #ifdef CONFIG_PM_SLEEP static struct pwm_device *rcar_pwm_dev_to_pwm_dev(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct rcar_pwm_chip *rcar_pwm = platform_get_drvdata(pdev); struct pwm_chip *chip = &rcar_pwm->chip; return &chip->pwms[0]; } static int rcar_pwm_suspend(struct device *dev) { struct pwm_device *pwm = rcar_pwm_dev_to_pwm_dev(dev); if (!test_bit(PWMF_REQUESTED, &pwm->flags)) return 0; pm_runtime_put(dev); return 0; } static int rcar_pwm_resume(struct device *dev) { struct pwm_device *pwm = rcar_pwm_dev_to_pwm_dev(dev); if (!test_bit(PWMF_REQUESTED, &pwm->flags)) return 0; pm_runtime_get_sync(dev); rcar_pwm_config(pwm->chip, pwm, pwm->state.duty_cycle, pwm->state.period); if (pwm_is_enabled(pwm)) rcar_pwm_enable(pwm->chip, pwm); return 0; } #endif /* CONFIG_PM_SLEEP */ static SIMPLE_DEV_PM_OPS(rcar_pwm_pm_ops, rcar_pwm_suspend, rcar_pwm_resume); static struct platform_driver rcar_pwm_driver = { .probe = rcar_pwm_probe, .remove = rcar_pwm_remove, .driver = { .name = "pwm-rcar", .pm = &rcar_pwm_pm_ops, .of_match_table = of_match_ptr(rcar_pwm_of_table), } }; Loading Loading
drivers/pwm/pwm-rcar.c +42 −0 Original line number Diff line number Diff line Loading @@ -258,11 +258,53 @@ static const struct of_device_id rcar_pwm_of_table[] = { }; MODULE_DEVICE_TABLE(of, rcar_pwm_of_table); #ifdef CONFIG_PM_SLEEP static struct pwm_device *rcar_pwm_dev_to_pwm_dev(struct device *dev) { struct platform_device *pdev = to_platform_device(dev); struct rcar_pwm_chip *rcar_pwm = platform_get_drvdata(pdev); struct pwm_chip *chip = &rcar_pwm->chip; return &chip->pwms[0]; } static int rcar_pwm_suspend(struct device *dev) { struct pwm_device *pwm = rcar_pwm_dev_to_pwm_dev(dev); if (!test_bit(PWMF_REQUESTED, &pwm->flags)) return 0; pm_runtime_put(dev); return 0; } static int rcar_pwm_resume(struct device *dev) { struct pwm_device *pwm = rcar_pwm_dev_to_pwm_dev(dev); if (!test_bit(PWMF_REQUESTED, &pwm->flags)) return 0; pm_runtime_get_sync(dev); rcar_pwm_config(pwm->chip, pwm, pwm->state.duty_cycle, pwm->state.period); if (pwm_is_enabled(pwm)) rcar_pwm_enable(pwm->chip, pwm); return 0; } #endif /* CONFIG_PM_SLEEP */ static SIMPLE_DEV_PM_OPS(rcar_pwm_pm_ops, rcar_pwm_suspend, rcar_pwm_resume); static struct platform_driver rcar_pwm_driver = { .probe = rcar_pwm_probe, .remove = rcar_pwm_remove, .driver = { .name = "pwm-rcar", .pm = &rcar_pwm_pm_ops, .of_match_table = of_match_ptr(rcar_pwm_of_table), } }; Loading