diff options
Diffstat (limited to 'drivers/pwm/pwm-imx-tpm.c')
| -rw-r--r-- | drivers/pwm/pwm-imx-tpm.c | 44 | 
1 files changed, 25 insertions, 19 deletions
diff --git a/drivers/pwm/pwm-imx-tpm.c b/drivers/pwm/pwm-imx-tpm.c index 9fc290e647e1..c50ddbac43c8 100644 --- a/drivers/pwm/pwm-imx-tpm.c +++ b/drivers/pwm/pwm-imx-tpm.c @@ -57,7 +57,6 @@  #define PWM_IMX_TPM_MOD_MOD	GENMASK(PWM_IMX_TPM_MOD_WIDTH - 1, 0)  struct imx_tpm_pwm_chip { -	struct pwm_chip chip;  	struct clk *clk;  	void __iomem *base;  	struct mutex lock; @@ -75,7 +74,7 @@ struct imx_tpm_pwm_param {  static inline struct imx_tpm_pwm_chip *  to_imx_tpm_pwm_chip(struct pwm_chip *chip)  { -	return container_of(chip, struct imx_tpm_pwm_chip, chip); +	return pwmchip_get_drvdata(chip);  }  /* @@ -336,35 +335,42 @@ static const struct pwm_ops imx_tpm_pwm_ops = {  static int pwm_imx_tpm_probe(struct platform_device *pdev)  { +	struct pwm_chip *chip;  	struct imx_tpm_pwm_chip *tpm; +	struct clk *clk; +	void __iomem *base;  	int ret; +	unsigned int npwm;  	u32 val; -	tpm = devm_kzalloc(&pdev->dev, sizeof(*tpm), GFP_KERNEL); -	if (!tpm) -		return -ENOMEM; +	base = devm_platform_ioremap_resource(pdev, 0); +	if (IS_ERR(base)) +		return PTR_ERR(base); -	platform_set_drvdata(pdev, tpm); +	clk = devm_clk_get_enabled(&pdev->dev, NULL); +	if (IS_ERR(clk)) +		return dev_err_probe(&pdev->dev, PTR_ERR(clk), +				     "failed to get PWM clock\n"); -	tpm->base = devm_platform_ioremap_resource(pdev, 0); -	if (IS_ERR(tpm->base)) -		return PTR_ERR(tpm->base); +	/* get number of channels */ +	val = readl(base + PWM_IMX_TPM_PARAM); +	npwm = FIELD_GET(PWM_IMX_TPM_PARAM_CHAN, val); -	tpm->clk = devm_clk_get_enabled(&pdev->dev, NULL); -	if (IS_ERR(tpm->clk)) -		return dev_err_probe(&pdev->dev, PTR_ERR(tpm->clk), -				     "failed to get PWM clock\n"); +	chip = devm_pwmchip_alloc(&pdev->dev, npwm, sizeof(*tpm)); +	if (IS_ERR(chip)) +		return PTR_ERR(chip); +	tpm = to_imx_tpm_pwm_chip(chip); + +	platform_set_drvdata(pdev, tpm); -	tpm->chip.dev = &pdev->dev; -	tpm->chip.ops = &imx_tpm_pwm_ops; +	tpm->base = base; +	tpm->clk = clk; -	/* get number of channels */ -	val = readl(tpm->base + PWM_IMX_TPM_PARAM); -	tpm->chip.npwm = FIELD_GET(PWM_IMX_TPM_PARAM_CHAN, val); +	chip->ops = &imx_tpm_pwm_ops;  	mutex_init(&tpm->lock); -	ret = devm_pwmchip_add(&pdev->dev, &tpm->chip); +	ret = devm_pwmchip_add(&pdev->dev, chip);  	if (ret)  		return dev_err_probe(&pdev->dev, ret, "failed to add PWM chip\n");  | 
