Dear Morimoto-san,

Thank for your feedback!

On 2019/05/23 11:02, Kuninori Morimoto wrote:
Hi

+static int tpu_pwm_suspend(struct device *dev)
+{
+       struct tpu_device *tpu = dev_get_drvdata(dev);
+       struct pwm_chip *chip = &tpu->chip;
+       struct pwm_device *pwm;
+       int i;
+
+       for (i = 0; i <= 3; i++) {
+               if ((pwm_get_chip_data(&chip->pwms[i])) != NULL) {
+                       pwm = &chip->pwms[i];
+                       if (!test_bit(PWMF_REQUESTED, &pwm->flags))
+                               return 0;
+               }
+       }
why 3 ?
According to Hardware manual, 16-Bit Timer Pulse Unit (TPU)
supports four 16-bit timers for both R-car GEN2 and GEN3.
About code, how about this ?

                pwm = &chip->pwms[i];
                if (pwm_get_chip_data(pwm)) {
                        ...

Can we use chip->pwms at driver ? I'm not sure but pwm.h say

        struct pwm_chip {
                ...
=>           /* only used internally by the PWM framework */
                struct list_head list;
                struct pwm_device *pwms;
        };
As described in the header: "@pwms: array of PWM devices allocated by the framework" Therefore, we can not use chip->pwms and must specify the device that will be used.
Otherwise the compilation will fail.
+
+       pm_runtime_put(dev);
+
+       return 0;
+}
Do we need to call pm_runtime_xxx here ?

"pm_runtime_put(dev);" function is called for runtime idle operations.

+static int tpu_pwm_resume(struct device *dev)
+{
+       struct tpu_device *tpu = dev_get_drvdata(dev);
+       struct pwm_chip *chip = &tpu->chip;
+       struct pwm_device *pwm;
+       int i;
+
+       pm_runtime_get_sync(dev);
+
+       for (i = 0; i <= 3; i++) {
+               if ((pwm_get_chip_data(&chip->pwms[i])) != NULL) {
+                       pwm = &chip->pwms[i];
+                       tpu_pwm_restart_timer(pwm);
+               }
+       }
ditto

Thank you,

Dong

Reply via email to