diff options
Diffstat (limited to 'drivers/pwm')
| -rw-r--r-- | drivers/pwm/core.c | 38 | ||||
| -rw-r--r-- | drivers/pwm/pwm-imx.c | 6 | ||||
| -rw-r--r-- | drivers/pwm/pwm-lpc32xx.c | 6 | ||||
| -rw-r--r-- | drivers/pwm/pwm-mxs.c | 6 | ||||
| -rw-r--r-- | drivers/pwm/pwm-puv3.c | 6 | ||||
| -rw-r--r-- | drivers/pwm/pwm-pxa.c | 6 | ||||
| -rw-r--r-- | drivers/pwm/pwm-spear.c | 6 | ||||
| -rw-r--r-- | drivers/pwm/pwm-tegra.c | 6 | ||||
| -rw-r--r-- | drivers/pwm/pwm-tiecap.c | 6 | ||||
| -rw-r--r-- | drivers/pwm/pwm-tiehrpwm.c | 6 | ||||
| -rw-r--r-- | drivers/pwm/pwm-tipwmss.c | 6 | ||||
| -rw-r--r-- | drivers/pwm/pwm-vt8500.c | 6 | 
12 files changed, 67 insertions, 37 deletions
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c index 7d6081879c1..32221cb0cbe 100644 --- a/drivers/pwm/core.c +++ b/drivers/pwm/core.c @@ -473,7 +473,7 @@ static struct pwm_chip *of_node_to_pwmchip(struct device_node *np)  }  /** - * of_pwm_request() - request a PWM via the PWM framework + * of_pwm_get() - request a PWM via the PWM framework   * @np: device node to get the PWM from   * @con_id: consumer name   * @@ -488,8 +488,7 @@ static struct pwm_chip *of_node_to_pwmchip(struct device_node *np)   * becomes mandatory for devices that look up the PWM device via the con_id   * parameter.   */ -static struct pwm_device *of_pwm_request(struct device_node *np, -					 const char *con_id) +struct pwm_device *of_pwm_get(struct device_node *np, const char *con_id)  {  	struct pwm_device *pwm = NULL;  	struct of_phandle_args args; @@ -547,6 +546,7 @@ put:  	return pwm;  } +EXPORT_SYMBOL_GPL(of_pwm_get);  /**   * pwm_add_table() - register PWM device consumers @@ -589,7 +589,7 @@ struct pwm_device *pwm_get(struct device *dev, const char *con_id)  	/* look up via DT first */  	if (IS_ENABLED(CONFIG_OF) && dev && dev->of_node) -		return of_pwm_request(dev->of_node, con_id); +		return of_pwm_get(dev->of_node, con_id);  	/*  	 * We look up the provider in the static table typically provided by @@ -710,6 +710,36 @@ struct pwm_device *devm_pwm_get(struct device *dev, const char *con_id)  }  EXPORT_SYMBOL_GPL(devm_pwm_get); +/** + * devm_of_pwm_get() - resource managed of_pwm_get() + * @dev: device for PWM consumer + * @np: device node to get the PWM from + * @con_id: consumer name + * + * This function performs like of_pwm_get() but the acquired PWM device will + * automatically be released on driver detach. + */ +struct pwm_device *devm_of_pwm_get(struct device *dev, struct device_node *np, +				   const char *con_id) +{ +	struct pwm_device **ptr, *pwm; + +	ptr = devres_alloc(devm_pwm_release, sizeof(**ptr), GFP_KERNEL); +	if (!ptr) +		return ERR_PTR(-ENOMEM); + +	pwm = of_pwm_get(np, con_id); +	if (!IS_ERR(pwm)) { +		*ptr = pwm; +		devres_add(dev, ptr); +	} else { +		devres_free(ptr); +	} + +	return pwm; +} +EXPORT_SYMBOL_GPL(devm_of_pwm_get); +  static int devm_pwm_match(struct device *dev, void *res, void *data)  {  	struct pwm_device **p = res; diff --git a/drivers/pwm/pwm-imx.c b/drivers/pwm/pwm-imx.c index 65a86bdeabe..3f5677b7690 100644 --- a/drivers/pwm/pwm-imx.c +++ b/drivers/pwm/pwm-imx.c @@ -274,9 +274,9 @@ static int imx_pwm_probe(struct platform_device *pdev)  		return -ENODEV;  	} -	imx->mmio_base = devm_request_and_ioremap(&pdev->dev, r); -	if (imx->mmio_base == NULL) -		return -EADDRNOTAVAIL; +	imx->mmio_base = devm_ioremap_resource(&pdev->dev, r); +	if (IS_ERR(imx->mmio_base)) +		return PTR_ERR(imx->mmio_base);  	data = of_id->data;  	imx->config = data->config; diff --git a/drivers/pwm/pwm-lpc32xx.c b/drivers/pwm/pwm-lpc32xx.c index 14106440294..b3f0d0dfd74 100644 --- a/drivers/pwm/pwm-lpc32xx.c +++ b/drivers/pwm/pwm-lpc32xx.c @@ -110,9 +110,9 @@ static int lpc32xx_pwm_probe(struct platform_device *pdev)  	if (!res)  		return -EINVAL; -	lpc32xx->base = devm_request_and_ioremap(&pdev->dev, res); -	if (!lpc32xx->base) -		return -EADDRNOTAVAIL; +	lpc32xx->base = devm_ioremap_resource(&pdev->dev, res); +	if (IS_ERR(lpc32xx->base)) +		return PTR_ERR(lpc32xx->base);  	lpc32xx->clk = devm_clk_get(&pdev->dev, NULL);  	if (IS_ERR(lpc32xx->clk)) diff --git a/drivers/pwm/pwm-mxs.c b/drivers/pwm/pwm-mxs.c index 7ec345f0183..a53d3094b75 100644 --- a/drivers/pwm/pwm-mxs.c +++ b/drivers/pwm/pwm-mxs.c @@ -139,9 +139,9 @@ static int mxs_pwm_probe(struct platform_device *pdev)  		return -ENOMEM;  	res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -	mxs->base = devm_request_and_ioremap(&pdev->dev, res); -	if (!mxs->base) -		return -EADDRNOTAVAIL; +	mxs->base = devm_ioremap_resource(&pdev->dev, res); +	if (IS_ERR(mxs->base)) +		return PTR_ERR(mxs->base);  	pinctrl = devm_pinctrl_get_select_default(&pdev->dev);  	if (IS_ERR(pinctrl)) diff --git a/drivers/pwm/pwm-puv3.c b/drivers/pwm/pwm-puv3.c index b882f6032fe..db964e6ecf5 100644 --- a/drivers/pwm/pwm-puv3.c +++ b/drivers/pwm/pwm-puv3.c @@ -123,9 +123,9 @@ static int pwm_probe(struct platform_device *pdev)  		return -ENODEV;  	} -	puv3->base = devm_request_and_ioremap(&pdev->dev, r); -	if (puv3->base == NULL) -		return -EADDRNOTAVAIL; +	puv3->base = devm_ioremap_resource(&pdev->dev, r); +	if (IS_ERR(puv3->base)) +		return PTR_ERR(puv3->base);  	puv3->chip.dev = &pdev->dev;  	puv3->chip.ops = &puv3_pwm_ops; diff --git a/drivers/pwm/pwm-pxa.c b/drivers/pwm/pwm-pxa.c index f32fc4e66e0..20370e61de5 100644 --- a/drivers/pwm/pwm-pxa.c +++ b/drivers/pwm/pwm-pxa.c @@ -165,9 +165,9 @@ static int pwm_probe(struct platform_device *pdev)  		return -ENODEV;  	} -	pwm->mmio_base = devm_request_and_ioremap(&pdev->dev, r); -	if (pwm->mmio_base == NULL) -		return -EADDRNOTAVAIL; +	pwm->mmio_base = devm_ioremap_resource(&pdev->dev, r); +	if (IS_ERR(pwm->mmio_base)) +		return PTR_ERR(pwm->mmio_base);  	ret = pwmchip_add(&pwm->chip);  	if (ret < 0) { diff --git a/drivers/pwm/pwm-spear.c b/drivers/pwm/pwm-spear.c index 83b21d9d5cf..69a2d9eb34d 100644 --- a/drivers/pwm/pwm-spear.c +++ b/drivers/pwm/pwm-spear.c @@ -192,9 +192,9 @@ static int spear_pwm_probe(struct platform_device *pdev)  		return -ENOMEM;  	} -	pc->mmio_base = devm_request_and_ioremap(&pdev->dev, r); -	if (!pc->mmio_base) -		return -EADDRNOTAVAIL; +	pc->mmio_base = devm_ioremap_resource(&pdev->dev, r); +	if (IS_ERR(pc->mmio_base)) +		return PTR_ERR(pc->mmio_base);  	pc->clk = devm_clk_get(&pdev->dev, NULL);  	if (IS_ERR(pc->clk)) diff --git a/drivers/pwm/pwm-tegra.c b/drivers/pwm/pwm-tegra.c index f7770312c1a..af3ab48cb7e 100644 --- a/drivers/pwm/pwm-tegra.c +++ b/drivers/pwm/pwm-tegra.c @@ -186,9 +186,9 @@ static int tegra_pwm_probe(struct platform_device *pdev)  		return -ENODEV;  	} -	pwm->mmio_base = devm_request_and_ioremap(&pdev->dev, r); -	if (!pwm->mmio_base) -		return -EADDRNOTAVAIL; +	pwm->mmio_base = devm_ioremap_resource(&pdev->dev, r); +	if (IS_ERR(pwm->mmio_base)) +		return PTR_ERR(pwm->mmio_base);  	platform_set_drvdata(pdev, pwm); diff --git a/drivers/pwm/pwm-tiecap.c b/drivers/pwm/pwm-tiecap.c index 05b676db88e..22e96e2bffd 100644 --- a/drivers/pwm/pwm-tiecap.c +++ b/drivers/pwm/pwm-tiecap.c @@ -245,9 +245,9 @@ static int ecap_pwm_probe(struct platform_device *pdev)  		return -ENODEV;  	} -	pc->mmio_base = devm_request_and_ioremap(&pdev->dev, r); -	if (!pc->mmio_base) -		return -EADDRNOTAVAIL; +	pc->mmio_base = devm_ioremap_resource(&pdev->dev, r); +	if (IS_ERR(pc->mmio_base)) +		return PTR_ERR(pc->mmio_base);  	ret = pwmchip_add(&pc->chip);  	if (ret < 0) { diff --git a/drivers/pwm/pwm-tiehrpwm.c b/drivers/pwm/pwm-tiehrpwm.c index 33e15c4fba0..8b4c86fa99c 100644 --- a/drivers/pwm/pwm-tiehrpwm.c +++ b/drivers/pwm/pwm-tiehrpwm.c @@ -476,9 +476,9 @@ static int ehrpwm_pwm_probe(struct platform_device *pdev)  		return -ENODEV;  	} -	pc->mmio_base = devm_request_and_ioremap(&pdev->dev, r); -	if (!pc->mmio_base) -		return  -EADDRNOTAVAIL; +	pc->mmio_base = devm_ioremap_resource(&pdev->dev, r); +	if (IS_ERR(pc->mmio_base)) +		return PTR_ERR(pc->mmio_base);  	/* Acquire tbclk for Time Base EHRPWM submodule */  	pc->tbclk = devm_clk_get(&pdev->dev, "tbclk"); diff --git a/drivers/pwm/pwm-tipwmss.c b/drivers/pwm/pwm-tipwmss.c index 3448a1c8859..17cbc59660e 100644 --- a/drivers/pwm/pwm-tipwmss.c +++ b/drivers/pwm/pwm-tipwmss.c @@ -75,9 +75,9 @@ static int pwmss_probe(struct platform_device *pdev)  		return -ENODEV;  	} -	info->mmio_base = devm_request_and_ioremap(&pdev->dev, r); -	if (!info->mmio_base) -		return -EADDRNOTAVAIL; +	info->mmio_base = devm_ioremap_resource(&pdev->dev, r); +	if (IS_ERR(info->mmio_base)) +		return PTR_ERR(info->mmio_base);  	pm_runtime_enable(&pdev->dev);  	pm_runtime_get_sync(&pdev->dev); diff --git a/drivers/pwm/pwm-vt8500.c b/drivers/pwm/pwm-vt8500.c index 98d79e9f014..69effd19afc 100644 --- a/drivers/pwm/pwm-vt8500.c +++ b/drivers/pwm/pwm-vt8500.c @@ -235,9 +235,9 @@ static int vt8500_pwm_probe(struct platform_device *pdev)  		return -ENODEV;  	} -	chip->base = devm_request_and_ioremap(&pdev->dev, r); -	if (!chip->base) -		return -EADDRNOTAVAIL; +	chip->base = devm_ioremap_resource(&pdev->dev, r); +	if (IS_ERR(chip->base)) +		return PTR_ERR(chip->base);  	ret = clk_prepare(chip->clk);  	if (ret < 0) {  |