diff options
| author | Ingo Molnar <mingo@kernel.org> | 2024-03-25 13:32:29 +0300 | 
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2024-03-25 13:32:29 +0300 | 
| commit | f4566a1e73957800df75a3dd2dccee8a4697f327 (patch) | |
| tree | b043b875228c0b25988af66c680d60cae69d761d /drivers/pwm/pwm-stmpe.c | |
| parent | b9e6e28663928cab836a19abbdec3d036a07db3b (diff) | |
| parent | 4cece764965020c22cff7665b18a012006359095 (diff) | |
| download | linux-f4566a1e73957800df75a3dd2dccee8a4697f327.tar.xz | |
Merge tag 'v6.9-rc1' into sched/core, to pick up fixes and to refresh the branch
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'drivers/pwm/pwm-stmpe.c')
| -rw-r--r-- | drivers/pwm/pwm-stmpe.c | 58 | 
1 files changed, 30 insertions, 28 deletions
diff --git a/drivers/pwm/pwm-stmpe.c b/drivers/pwm/pwm-stmpe.c index 19c0c0f39675..bb91062d5f1d 100644 --- a/drivers/pwm/pwm-stmpe.c +++ b/drivers/pwm/pwm-stmpe.c @@ -27,13 +27,12 @@  struct stmpe_pwm {  	struct stmpe *stmpe; -	struct pwm_chip chip;  	u8 last_duty;  };  static inline struct stmpe_pwm *to_stmpe_pwm(struct pwm_chip *chip)  { -	return container_of(chip, struct stmpe_pwm, chip); +	return pwmchip_get_drvdata(chip);  }  static int stmpe_24xx_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm) @@ -44,7 +43,7 @@ static int stmpe_24xx_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)  	ret = stmpe_reg_read(stmpe_pwm->stmpe, STMPE24XX_PWMCS);  	if (ret < 0) { -		dev_dbg(chip->dev, "error reading PWM#%u control\n", +		dev_dbg(pwmchip_parent(chip), "error reading PWM#%u control\n",  			pwm->hwpwm);  		return ret;  	} @@ -53,7 +52,7 @@ static int stmpe_24xx_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)  	ret = stmpe_reg_write(stmpe_pwm->stmpe, STMPE24XX_PWMCS, value);  	if (ret) { -		dev_dbg(chip->dev, "error writing PWM#%u control\n", +		dev_dbg(pwmchip_parent(chip), "error writing PWM#%u control\n",  			pwm->hwpwm);  		return ret;  	} @@ -70,7 +69,7 @@ static int stmpe_24xx_pwm_disable(struct pwm_chip *chip,  	ret = stmpe_reg_read(stmpe_pwm->stmpe, STMPE24XX_PWMCS);  	if (ret < 0) { -		dev_dbg(chip->dev, "error reading PWM#%u control\n", +		dev_dbg(pwmchip_parent(chip), "error reading PWM#%u control\n",  			pwm->hwpwm);  		return ret;  	} @@ -79,7 +78,7 @@ static int stmpe_24xx_pwm_disable(struct pwm_chip *chip,  	ret = stmpe_reg_write(stmpe_pwm->stmpe, STMPE24XX_PWMCS, value);  	if (ret) -		dev_dbg(chip->dev, "error writing PWM#%u control\n", +		dev_dbg(pwmchip_parent(chip), "error writing PWM#%u control\n",  			pwm->hwpwm);  	return ret;  } @@ -125,7 +124,7 @@ static int stmpe_24xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,  		ret = stmpe_set_altfunc(stmpe_pwm->stmpe, BIT(pin),  					STMPE_BLOCK_PWM);  		if (ret) { -			dev_err(chip->dev, "unable to connect PWM#%u to pin\n", +			dev_err(pwmchip_parent(chip), "unable to connect PWM#%u to pin\n",  				pwm->hwpwm);  			return ret;  		} @@ -150,7 +149,7 @@ static int stmpe_24xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,  		return -ENODEV;  	} -	dev_dbg(chip->dev, "PWM#%u: config duty %d ns, period %d ns\n", +	dev_dbg(pwmchip_parent(chip), "PWM#%u: config duty %d ns, period %d ns\n",  		pwm->hwpwm, duty_ns, period_ns);  	if (duty_ns == 0) { @@ -216,7 +215,7 @@ static int stmpe_24xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,  			program[1] = BRANCH;  		} -		dev_dbg(chip->dev, +		dev_dbg(pwmchip_parent(chip),  			"PWM#%u: value = %02x, last_duty = %02x, program=%04x,%04x,%04x\n",  			pwm->hwpwm, value, last, program[0], program[1],  			program[2]); @@ -233,7 +232,7 @@ static int stmpe_24xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,  		ret = stmpe_reg_write(stmpe_pwm->stmpe, offset, value);  		if (ret) { -			dev_dbg(chip->dev, "error writing register %02x: %d\n", +			dev_dbg(pwmchip_parent(chip), "error writing register %02x: %d\n",  				offset, ret);  			return ret;  		} @@ -242,7 +241,7 @@ static int stmpe_24xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,  		ret = stmpe_reg_write(stmpe_pwm->stmpe, offset, value);  		if (ret) { -			dev_dbg(chip->dev, "error writing register %02x: %d\n", +			dev_dbg(pwmchip_parent(chip), "error writing register %02x: %d\n",  				offset, ret);  			return ret;  		} @@ -255,7 +254,7 @@ static int stmpe_24xx_pwm_config(struct pwm_chip *chip, struct pwm_device *pwm,  	/* Sleep for 200ms so we're sure it will take effect */  	msleep(200); -	dev_dbg(chip->dev, "programmed PWM#%u, %u bytes\n", pwm->hwpwm, i); +	dev_dbg(pwmchip_parent(chip), "programmed PWM#%u, %u bytes\n", pwm->hwpwm, i);  	return 0;  } @@ -292,33 +291,36 @@ static const struct pwm_ops stmpe_24xx_pwm_ops = {  static int __init stmpe_pwm_probe(struct platform_device *pdev)  {  	struct stmpe *stmpe = dev_get_drvdata(pdev->dev.parent); +	struct pwm_chip *chip;  	struct stmpe_pwm *stmpe_pwm;  	int ret; -	stmpe_pwm = devm_kzalloc(&pdev->dev, sizeof(*stmpe_pwm), GFP_KERNEL); -	if (!stmpe_pwm) -		return -ENOMEM; +	switch (stmpe->partnum) { +	case STMPE2401: +	case STMPE2403: +		break; +	case STMPE1601: +		return dev_err_probe(&pdev->dev, -ENODEV, +				     "STMPE1601 not yet supported\n"); +	default: +		return dev_err_probe(&pdev->dev, -ENODEV, +				     "Unknown STMPE PWM\n"); +	} -	stmpe_pwm->stmpe = stmpe; -	stmpe_pwm->chip.dev = &pdev->dev; +	chip = devm_pwmchip_alloc(&pdev->dev, 3, sizeof(*stmpe_pwm)); +	if (IS_ERR(chip)) +		return PTR_ERR(chip); +	stmpe_pwm = to_stmpe_pwm(chip); -	if (stmpe->partnum == STMPE2401 || stmpe->partnum == STMPE2403) { -		stmpe_pwm->chip.ops = &stmpe_24xx_pwm_ops; -		stmpe_pwm->chip.npwm = 3; -	} else { -		if (stmpe->partnum == STMPE1601) -			dev_err(&pdev->dev, "STMPE1601 not yet supported\n"); -		else -			dev_err(&pdev->dev, "Unknown STMPE PWM\n"); +	stmpe_pwm->stmpe = stmpe; -		return -ENODEV; -	} +	chip->ops = &stmpe_24xx_pwm_ops;  	ret = stmpe_enable(stmpe, STMPE_BLOCK_PWM);  	if (ret)  		return ret; -	ret = pwmchip_add(&stmpe_pwm->chip); +	ret = pwmchip_add(chip);  	if (ret) {  		stmpe_disable(stmpe, STMPE_BLOCK_PWM);  		return ret;  | 
