Skip to content

Commit

Permalink
pwm: meson: Move pwm_set_chip_data() to meson_pwm_request()
Browse files Browse the repository at this point in the history
All existing PWM drivers (except pwm-meson and two other ones) call
pwm_set_chip_data() from their pwm_ops.request() callback. Now that we
can access the struct meson_pwm_channel from struct meson_pwm we can do
the same.

Move the call to pwm_set_chip_data() to meson_pwm_request() and drop the
custom meson_pwm_add_channels(). This makes the implementation
consistent with other drivers and makes it slightly more obvious
thatpwm_get_chip_data() cannot be used from pwm_ops.get_state() (because
that's called by the PWM core before pwm_ops.request()).

No functional changes intended.

Reviewed-by: Neil Armstrong <narmstrong@baylibre.com>
Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
  • Loading branch information
Martin Blumenstingl authored and Thierry Reding committed Jun 26, 2019
1 parent 8bbf316 commit 1064c6b
Showing 1 changed file with 8 additions and 14 deletions.
22 changes: 8 additions & 14 deletions drivers/pwm/pwm-meson.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,12 +98,16 @@ static inline struct meson_pwm *to_meson_pwm(struct pwm_chip *chip)

static int meson_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)
{
struct meson_pwm_channel *channel = pwm_get_chip_data(pwm);
struct meson_pwm *meson = to_meson_pwm(chip);
struct meson_pwm_channel *channel;
struct device *dev = chip->dev;
int err;

if (!channel)
return -ENODEV;
channel = pwm_get_chip_data(pwm);
if (channel)
return 0;

channel = &meson->channels[pwm->hwpwm];

if (channel->clk_parent) {
err = clk_set_parent(channel->clk, channel->clk_parent);
Expand All @@ -124,7 +128,7 @@ static int meson_pwm_request(struct pwm_chip *chip, struct pwm_device *pwm)

chip->ops->get_state(chip, pwm, &channel->state);

return 0;
return pwm_set_chip_data(pwm, channel);
}

static void meson_pwm_free(struct pwm_chip *chip, struct pwm_device *pwm)
Expand Down Expand Up @@ -469,14 +473,6 @@ static int meson_pwm_init_channels(struct meson_pwm *meson)
return 0;
}

static void meson_pwm_add_channels(struct meson_pwm *meson)
{
unsigned int i;

for (i = 0; i < meson->chip.npwm; i++)
pwm_set_chip_data(&meson->chip.pwms[i], &meson->channels[i]);
}

static int meson_pwm_probe(struct platform_device *pdev)
{
struct meson_pwm *meson;
Expand Down Expand Up @@ -512,8 +508,6 @@ static int meson_pwm_probe(struct platform_device *pdev)
return err;
}

meson_pwm_add_channels(meson);

platform_set_drvdata(pdev, meson);

return 0;
Expand Down

0 comments on commit 1064c6b

Please sign in to comment.