mirror of https://gitee.com/openkylin/linux.git
pwm: ab8500: Implement .apply instead of .config, .enable and .disable
To eventually get rid of all legacy drivers convert this driver to the modern world implementing .apply(). Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
This commit is contained in:
parent
ca0d2fb790
commit
acf3402d83
|
@ -24,23 +24,37 @@ struct ab8500_pwm_chip {
|
|||
struct pwm_chip chip;
|
||||
};
|
||||
|
||||
static int ab8500_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
|
||||
int duty_ns, int period_ns)
|
||||
static int ab8500_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
|
||||
const struct pwm_state *state)
|
||||
{
|
||||
int ret = 0;
|
||||
unsigned int higher_val, lower_val;
|
||||
int ret;
|
||||
u8 reg;
|
||||
unsigned int higher_val, lower_val;
|
||||
|
||||
if (state->polarity != PWM_POLARITY_NORMAL)
|
||||
return -EINVAL;
|
||||
|
||||
if (!state->enabled) {
|
||||
ret = abx500_mask_and_set_register_interruptible(chip->dev,
|
||||
AB8500_MISC, AB8500_PWM_OUT_CTRL7_REG,
|
||||
1 << (chip->base - 1), 0);
|
||||
|
||||
if (ret < 0)
|
||||
dev_err(chip->dev, "%s: Failed to disable PWM, Error %d\n",
|
||||
pwm->label, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* get the first 8 bits that are be written to
|
||||
* AB8500_PWM_OUT_CTRL1_REG[0:7]
|
||||
*/
|
||||
lower_val = duty_ns & 0x00FF;
|
||||
lower_val = state->duty_cycle & 0x00FF;
|
||||
/*
|
||||
* get bits [9:10] that are to be written to
|
||||
* AB8500_PWM_OUT_CTRL2_REG[0:1]
|
||||
*/
|
||||
higher_val = ((duty_ns & 0x0300) >> 8);
|
||||
higher_val = ((state->duty_cycle & 0x0300) >> 8);
|
||||
|
||||
reg = AB8500_PWM_OUT_CTRL1_REG + ((chip->base - 1) * 2);
|
||||
|
||||
|
@ -48,15 +62,11 @@ static int ab8500_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,
|
|||
reg, (u8)lower_val);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = abx500_set_register_interruptible(chip->dev, AB8500_MISC,
|
||||
(reg + 1), (u8)higher_val);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int ab8500_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
|
||||
{
|
||||
int ret;
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = abx500_mask_and_set_register_interruptible(chip->dev,
|
||||
AB8500_MISC, AB8500_PWM_OUT_CTRL7_REG,
|
||||
|
@ -64,25 +74,12 @@ static int ab8500_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
|
|||
if (ret < 0)
|
||||
dev_err(chip->dev, "%s: Failed to enable PWM, Error %d\n",
|
||||
pwm->label, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void ab8500_pwm_disable(struct pwm_chip *chip, struct pwm_device *pwm)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = abx500_mask_and_set_register_interruptible(chip->dev,
|
||||
AB8500_MISC, AB8500_PWM_OUT_CTRL7_REG,
|
||||
1 << (chip->base - 1), 0);
|
||||
if (ret < 0)
|
||||
dev_err(chip->dev, "%s: Failed to disable PWM, Error %d\n",
|
||||
pwm->label, ret);
|
||||
}
|
||||
|
||||
static const struct pwm_ops ab8500_pwm_ops = {
|
||||
.config = ab8500_pwm_config,
|
||||
.enable = ab8500_pwm_enable,
|
||||
.disable = ab8500_pwm_disable,
|
||||
.apply = ab8500_pwm_apply,
|
||||
.owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue