diff options
Diffstat (limited to 'drivers/pwm/pwm-pxa.c')
| -rw-r--r-- | drivers/pwm/pwm-pxa.c | 25 | 
1 files changed, 12 insertions, 13 deletions
diff --git a/drivers/pwm/pwm-pxa.c b/drivers/pwm/pwm-pxa.c index 76685f926c75..bb7bb48b2e6d 100644 --- a/drivers/pwm/pwm-pxa.c +++ b/drivers/pwm/pwm-pxa.c @@ -49,7 +49,6 @@ MODULE_DEVICE_TABLE(platform, pwm_id_table);  #define PWMDCR_FD	(1 << 10)  struct pxa_pwm_chip { -	struct pwm_chip	chip;  	struct device	*dev;  	struct clk	*clk; @@ -58,7 +57,7 @@ struct pxa_pwm_chip {  static inline struct pxa_pwm_chip *to_pxa_pwm_chip(struct pwm_chip *chip)  { -	return container_of(chip, struct pxa_pwm_chip, chip); +	return pwmchip_get_drvdata(chip);  }  /* @@ -159,6 +158,7 @@ MODULE_DEVICE_TABLE(of, pwm_of_match);  static int pwm_probe(struct platform_device *pdev)  {  	const struct platform_device_id *id = platform_get_device_id(pdev); +	struct pwm_chip *chip;  	struct pxa_pwm_chip *pc;  	int ret = 0; @@ -168,28 +168,27 @@ static int pwm_probe(struct platform_device *pdev)  	if (id == NULL)  		return -EINVAL; -	pc = devm_kzalloc(&pdev->dev, sizeof(*pc), GFP_KERNEL); -	if (pc == NULL) -		return -ENOMEM; +	chip = devm_pwmchip_alloc(&pdev->dev, +				  (id->driver_data & HAS_SECONDARY_PWM) ? 2 : 1, +				  sizeof(*pc)); +	if (IS_ERR(chip)) +		return PTR_ERR(chip); +	pc = to_pxa_pwm_chip(chip);  	pc->clk = devm_clk_get(&pdev->dev, NULL);  	if (IS_ERR(pc->clk))  		return PTR_ERR(pc->clk); -	pc->chip.dev = &pdev->dev; -	pc->chip.ops = &pxa_pwm_ops; -	pc->chip.npwm = (id->driver_data & HAS_SECONDARY_PWM) ? 2 : 1; +	chip->ops = &pxa_pwm_ops; -	if (IS_ENABLED(CONFIG_OF)) { -		pc->chip.of_xlate = of_pwm_single_xlate; -		pc->chip.of_pwm_n_cells = 1; -	} +	if (IS_ENABLED(CONFIG_OF)) +		chip->of_xlate = of_pwm_single_xlate;  	pc->mmio_base = devm_platform_ioremap_resource(pdev, 0);  	if (IS_ERR(pc->mmio_base))  		return PTR_ERR(pc->mmio_base); -	ret = devm_pwmchip_add(&pdev->dev, &pc->chip); +	ret = devm_pwmchip_add(&pdev->dev, chip);  	if (ret < 0) {  		dev_err(&pdev->dev, "pwmchip_add() failed: %d\n", ret);  		return ret;  | 
