From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Hans de Goede <hdegoede@redhat.com>,
Thierry Reding <thierry.reding@gmail.com>
Cc: linux-pwm@vger.kernel.org
Subject: Re: [PATCH 3/3] pwm: lpss: Add get_state callback
Date: Tue, 21 Feb 2017 12:33:16 +0200 [thread overview]
Message-ID: <1487673196.20145.7.camel@linux.intel.com> (raw)
In-Reply-To: <20170220201657.24801-4-hdegoede@redhat.com>
On Mon, 2017-02-20 at 21:16 +0100, Hans de Goede wrote:
> Add a get_state callback so that the initial state correctly reflects
> the actual hardware state.
>
> Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> Acked-by: Jani Nikula <jani.nikula@intel.com>
> +static void pwm_lpss_get_state(struct pwm_chip *chip, struct
> pwm_device *pwm,
> + struct pwm_state *state)
> +{
> + struct pwm_lpss_chip *lpwm = to_lpwm(chip);
> + unsigned long base_unit_range, freq;
> + unsigned long long base_unit, on_time_div;
Something with types.
on_time_div is 8-bit only.
OTOH freq (due to multiplication below) might need bigger type.
Have you tried 32-bit compilation, btw? No warnings for division?
> + u32 ctrl;
> +
> + base_unit_range = BIT(lpwm->info->base_unit_bits);
> +
> + ctrl = pwm_lpss_read(pwm);
> + on_time_div = ctrl & PWM_ON_TIME_DIV_MASK;
> + base_unit = (ctrl >> PWM_BASE_UNIT_SHIFT) & (base_unit_range
> - 1);
> +
> + freq = base_unit * lpwm->info->clk_rate / base_unit_range;
> + if (freq == 0)
> + freq = 1;
Why?
I'm not sure it will give correct value.
> +
> + state->period = NSEC_PER_SEC / freq;
> + state->duty_cycle = state->period * on_time_div / 255ULL;
> + state->polarity = PWM_POLARITY_NORMAL;
> + state->enabled = (ctrl & PWM_ENABLE) ? true : false;
!!(ctrl & PWM_ENABLE)
> +
> + if (state->enabled)
> + pm_runtime_get_sync(chip->dev);
How is this supposed to work in balance with ->apply() ?
> +}
> +
> static const struct pwm_ops pwm_lpss_ops = {
> .apply = pwm_lpss_apply,
> + .get_state = pwm_lpss_get_state,
> .owner = THIS_MODULE,
> };
>
--
Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Intel Finland Oy
next prev parent reply other threads:[~2017-02-21 10:33 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-20 20:16 [PATCH 1/3] pwm: lpss: Bug-fix + 2 improvements Hans de Goede
2017-02-20 20:16 ` [PATCH 1/3] pwm: lpss: Do not set / wait_for update_bit when not enabled Hans de Goede
2017-02-23 8:06 ` Ilkka Koskinen
2017-02-28 9:46 ` Andy Shevchenko
2017-03-13 15:29 ` Hans de Goede
2017-02-20 20:16 ` [PATCH 2/3] pwm: lpss: Simplify update check in pwm_lpss_apply Hans de Goede
2017-02-20 20:16 ` [PATCH 3/3] pwm: lpss: Add get_state callback Hans de Goede
2017-02-21 10:33 ` Andy Shevchenko [this message]
2017-02-27 14:09 ` Hans de Goede
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1487673196.20145.7.camel@linux.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=hdegoede@redhat.com \
--cc=linux-pwm@vger.kernel.org \
--cc=thierry.reding@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.