linux-iio.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/15] make more driver use devm_of_platform_populate()
@ 2017-05-29 15:45 Benjamin Gaignard
  2017-05-29 15:45 ` [PATCH 01/15] iio: adc: stm32: " Benjamin Gaignard
  2017-05-29 15:45 ` [PATCH 02/15] iio: dac: " Benjamin Gaignard
  0 siblings, 2 replies; 6+ messages in thread
From: Benjamin Gaignard @ 2017-05-29 15:45 UTC (permalink / raw)
  Cc: Benjamin Gaignard, Alexandre Torgue, David Airlie,
	Fabrice Gasnier, Hartmut Knaack, Jaroslav Kysela,
	Javier Martinez Canillas, Jonathan Cameron, Krzysztof Kozlowski,
	Kukjin Kim, Kyungmin Park, Lars-Peter Clausen, Lee Jones,
	Liam Girdwood, Mark Brown, Mauro Carvalho Chehab, Olivier Moysan,
	Rob Clark, Shawn Guo, Sylwester Nawrocki, Takashi Iwai,
	Tony Lindgren, linux-iio, linux-arm-kernel, linux-kernel,
	dri-devel, linux-arm-msm, freedreno, linux-samsung-soc,
	alsa-devel, linux-media

Number of calls to of_platform_populate() aren't unbalanced by a call to
of_platform_depopulate() that could generate issue will loading/unloading
the drivers. Make those drivers use devm_of_platform_populate() fix the problem
without need to add remove function.

In some case replacing of_platform_populate() by devm_of_platform_populate()
allow to delete driver remove function and save some lines of code.

This series of patches based on v4.12-rc3 tag.

CC: Alexandre Torgue <alexandre.torgue@st.com>
CC: David Airlie <airlied@linux.ie>
CC: Fabrice Gasnier <fabrice.gasnier@st.com>
CC: Hartmut Knaack <knaack.h@gmx.de>
CC: Jaroslav Kysela <perex@perex.cz>
CC: Javier Martinez Canillas <javier@osg.samsung.com>
CC: Jonathan Cameron <jic23@kernel.org>
CC: Krzysztof Kozlowski <krzk@kernel.org>
CC: Kukjin Kim <kgene@kernel.org>
CC: Kyungmin Park <kyungmin.park@samsung.com>
CC: Lars-Peter Clausen <lars@metafoo.de>
CC: Lee Jones <lee.jones@linaro.org>
CC: Liam Girdwood <lgirdwood@gmail.com>
CC: Mark Brown <broonie@kernel.org>
CC: Mauro Carvalho Chehab <mchehab@kernel.org>
CC: Olivier Moysan <olivier.moysan@st.com>
CC: Rob Clark <robdclark@gmail.com>
CC: Shawn Guo <shawnguo@kernel.org>
CC: Sylwester Nawrocki <s.nawrocki@samsung.com>
CC: Takashi Iwai <tiwai@suse.com>
CC: Tony Lindgren <tony@atomide.com>

CC: linux-iio@vger.kernel.org
CC: linux-arm-kernel@lists.infradead.org
CC: linux-kernel@vger.kernel.org
CC: dri-devel@lists.freedesktop.org
CC: linux-arm-msm@vger.kernel.org
CC: freedreno@lists.freedesktop.org
CC: linux-samsung-soc@vger.kernel.org
CC: alsa-devel@alsa-project.org
CC: linux-media@vger.kernel.org

Benjamin Gaignard (15):
  iio: adc: stm32: use devm_of_platform_populate()
  iio: dac: stm32: use devm_of_platform_populate()
  drm: zte: use devm_of_platform_populate()
  drm: msm: use devm_of_platform_populate()
  mfd: stm32-timers: use devm_of_platform_populate
  mfd: atmel: use devm_of_platform_populate()
  mfd: cros_ec: use devm_of_platform_populate()
  mfd: exynos: use devm_of_platform_populate()
  mfd: fsl-imx25: use devm_of_platform_populate()
  mfd: motorola-cpcap: use devm_of_platform_populate()
  mfd: palmas: use devm_of_platform_populate()
  mfd: qcom-spmi-pmic: use devm_of_platform_populate()
  mfd: smsc-ece: use devm_of_platform_populate()
  sound: stm32: use devm_of_platform_populate()
  media: exynos4-is: use devm_of_platform_populate()

 drivers/gpu/drm/msm/msm_drv.c               | 10 ++--------
 drivers/gpu/drm/zte/zx_drm_drv.c            |  2 +-
 drivers/iio/adc/stm32-adc-core.c            |  4 +---
 drivers/iio/dac/stm32-dac-core.c            |  3 +--
 drivers/media/platform/exynos4-is/fimc-is.c |  7 ++-----
 drivers/mfd/atmel-flexcom.c                 |  2 +-
 drivers/mfd/cros_ec.c                       |  2 +-
 drivers/mfd/exynos-lpass.c                  |  2 +-
 drivers/mfd/fsl-imx25-tsadc.c               |  5 +----
 drivers/mfd/motorola-cpcap.c                | 13 +------------
 drivers/mfd/palmas.c                        |  2 +-
 drivers/mfd/qcom-spmi-pmic.c                |  9 +--------
 drivers/mfd/smsc-ece1099.c                  |  3 +--
 drivers/mfd/stm32-timers.c                  | 10 +---------
 sound/soc/stm/stm32_sai.c                   | 11 +----------
 15 files changed, 17 insertions(+), 68 deletions(-)

-- 
1.9.1

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 01/15] iio: adc: stm32: use devm_of_platform_populate()
  2017-05-29 15:45 [PATCH 00/15] make more driver use devm_of_platform_populate() Benjamin Gaignard
@ 2017-05-29 15:45 ` Benjamin Gaignard
  2017-05-29 16:00   ` Jonathan Cameron
  2017-05-29 16:03   ` Fabrice Gasnier
  2017-05-29 15:45 ` [PATCH 02/15] iio: dac: " Benjamin Gaignard
  1 sibling, 2 replies; 6+ messages in thread
From: Benjamin Gaignard @ 2017-05-29 15:45 UTC (permalink / raw)
  Cc: Benjamin Gaignard, Jonathan Cameron, Hartmut Knaack,
	Lars-Peter Clausen, Alexandre Torgue, Fabrice Gasnier, linux-iio,
	linux-arm-kernel, linux-kernel

Use devm_of_platform_populate() instead of of_platform_populate and
of_platform_depopulate to simplify driver code

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>

CC: Jonathan Cameron <jic23@kernel.org>
CC: Hartmut Knaack <knaack.h@gmx.de>
CC: Lars-Peter Clausen <lars@metafoo.de>
CC: Alexandre Torgue <alexandre.torgue@st.com>
CC: Fabrice Gasnier <fabrice.gasnier@st.com>
CC: linux-iio@vger.kernel.org
CC: linux-arm-kernel@lists.infradead.org
CC: linux-kernel@vger.kernel.org
---
 drivers/iio/adc/stm32-adc-core.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/iio/adc/stm32-adc-core.c b/drivers/iio/adc/stm32-adc-core.c
index 22b7c93..46e41dc5 100644
--- a/drivers/iio/adc/stm32-adc-core.c
+++ b/drivers/iio/adc/stm32-adc-core.c
@@ -186,7 +186,6 @@ static void stm32_adc_irq_remove(struct platform_device *pdev,
 static int stm32_adc_probe(struct platform_device *pdev)
 {
 	struct stm32_adc_priv *priv;
-	struct device_node *np = pdev->dev.of_node;
 	struct resource *res;
 	int ret;
 
@@ -249,7 +248,7 @@ static int stm32_adc_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, &priv->common);
 
-	ret = of_platform_populate(np, NULL, NULL, &pdev->dev);
+	ret = devm_of_platform_populate(&pdev->dev);
 	if (ret < 0) {
 		dev_err(&pdev->dev, "failed to populate DT children\n");
 		goto err_irq_remove;
@@ -274,7 +273,6 @@ static int stm32_adc_remove(struct platform_device *pdev)
 	struct stm32_adc_common *common = platform_get_drvdata(pdev);
 	struct stm32_adc_priv *priv = to_stm32_adc_priv(common);
 
-	of_platform_depopulate(&pdev->dev);
 	stm32_adc_irq_remove(pdev, priv);
 	clk_disable_unprepare(priv->aclk);
 	regulator_disable(priv->vref);
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 02/15] iio: dac: stm32: use devm_of_platform_populate()
  2017-05-29 15:45 [PATCH 00/15] make more driver use devm_of_platform_populate() Benjamin Gaignard
  2017-05-29 15:45 ` [PATCH 01/15] iio: adc: stm32: " Benjamin Gaignard
@ 2017-05-29 15:45 ` Benjamin Gaignard
  2017-05-29 16:10   ` Fabrice Gasnier
  1 sibling, 1 reply; 6+ messages in thread
From: Benjamin Gaignard @ 2017-05-29 15:45 UTC (permalink / raw)
  Cc: Benjamin Gaignard, Jonathan Cameron, Hartmut Knaack,
	Lars-Peter Clausen, Alexandre Torgue, Fabrice Gasnier, linux-iio,
	linux-arm-kernel, linux-kernel

Use devm_of_platform_populate() instead of of_platform_populate and
of_platform_depopulate to simplify driver code

Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>

CC: Jonathan Cameron <jic23@kernel.org>
CC: Hartmut Knaack <knaack.h@gmx.de>
CC: Lars-Peter Clausen <lars@metafoo.de>
CC: Alexandre Torgue <alexandre.torgue@st.com>
CC: Fabrice Gasnier <fabrice.gasnier@st.com>
CC: linux-iio@vger.kernel.org
CC: linux-arm-kernel@lists.infradead.org
CC: linux-kernel@vger.kernel.org
---
 drivers/iio/dac/stm32-dac-core.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/iio/dac/stm32-dac-core.c b/drivers/iio/dac/stm32-dac-core.c
index 75e4878..9c42537 100644
--- a/drivers/iio/dac/stm32-dac-core.c
+++ b/drivers/iio/dac/stm32-dac-core.c
@@ -130,7 +130,7 @@ static int stm32_dac_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, &priv->common);
 
-	ret = of_platform_populate(pdev->dev.of_node, NULL, NULL, dev);
+	ret = devm_of_platform_populate(&pdev->dev);
 	if (ret < 0) {
 		dev_err(dev, "failed to populate DT children\n");
 		goto err_pclk;
@@ -151,7 +151,6 @@ static int stm32_dac_remove(struct platform_device *pdev)
 	struct stm32_dac_common *common = platform_get_drvdata(pdev);
 	struct stm32_dac_priv *priv = to_stm32_dac_priv(common);
 
-	of_platform_depopulate(&pdev->dev);
 	clk_disable_unprepare(priv->pclk);
 	regulator_disable(priv->vref);
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 01/15] iio: adc: stm32: use devm_of_platform_populate()
  2017-05-29 15:45 ` [PATCH 01/15] iio: adc: stm32: " Benjamin Gaignard
@ 2017-05-29 16:00   ` Jonathan Cameron
  2017-05-29 16:03   ` Fabrice Gasnier
  1 sibling, 0 replies; 6+ messages in thread
From: Jonathan Cameron @ 2017-05-29 16:00 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Hartmut Knaack, Lars-Peter Clausen, Alexandre Torgue,
	Fabrice Gasnier, linux-iio, linux-arm-kernel, linux-kernel

On Mon, 29 May 2017 17:45:49 +0200
Benjamin Gaignard <benjamin.gaignard@linaro.org> wrote:

> Use devm_of_platform_populate() instead of of_platform_populate and
> of_platform_depopulate to simplify driver code
> 
> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
My gut feeling is to dislike this particular instance.

It's changing the order of removal of elements to not
be a reverse of the order of them being set up.  That
takes it from obviously correct to something where some thought
is required.  For the trivial saving in lines of code I'm
unconvinced it is a worthwhile change..

Mind you, this particular driver isn't balancing the
probe and remove order anyway (the regulator stuff)
so I guess it's not making it much worse...

Jonathan
> 
> CC: Jonathan Cameron <jic23@kernel.org>
> CC: Hartmut Knaack <knaack.h@gmx.de>
> CC: Lars-Peter Clausen <lars@metafoo.de>
> CC: Alexandre Torgue <alexandre.torgue@st.com>
> CC: Fabrice Gasnier <fabrice.gasnier@st.com>
> CC: linux-iio@vger.kernel.org
> CC: linux-arm-kernel@lists.infradead.org
> CC: linux-kernel@vger.kernel.org
> ---
>  drivers/iio/adc/stm32-adc-core.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/drivers/iio/adc/stm32-adc-core.c b/drivers/iio/adc/stm32-adc-core.c
> index 22b7c93..46e41dc5 100644
> --- a/drivers/iio/adc/stm32-adc-core.c
> +++ b/drivers/iio/adc/stm32-adc-core.c
> @@ -186,7 +186,6 @@ static void stm32_adc_irq_remove(struct platform_device *pdev,
>  static int stm32_adc_probe(struct platform_device *pdev)
>  {
>  	struct stm32_adc_priv *priv;
> -	struct device_node *np = pdev->dev.of_node;
>  	struct resource *res;
>  	int ret;
>  
> @@ -249,7 +248,7 @@ static int stm32_adc_probe(struct platform_device *pdev)
>  
>  	platform_set_drvdata(pdev, &priv->common);
>  
> -	ret = of_platform_populate(np, NULL, NULL, &pdev->dev);
> +	ret = devm_of_platform_populate(&pdev->dev);
>  	if (ret < 0) {
>  		dev_err(&pdev->dev, "failed to populate DT children\n");
>  		goto err_irq_remove;
> @@ -274,7 +273,6 @@ static int stm32_adc_remove(struct platform_device *pdev)
>  	struct stm32_adc_common *common = platform_get_drvdata(pdev);
>  	struct stm32_adc_priv *priv = to_stm32_adc_priv(common);
>  
> -	of_platform_depopulate(&pdev->dev);
>  	stm32_adc_irq_remove(pdev, priv);
>  	clk_disable_unprepare(priv->aclk);
>  	regulator_disable(priv->vref);


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 01/15] iio: adc: stm32: use devm_of_platform_populate()
  2017-05-29 15:45 ` [PATCH 01/15] iio: adc: stm32: " Benjamin Gaignard
  2017-05-29 16:00   ` Jonathan Cameron
@ 2017-05-29 16:03   ` Fabrice Gasnier
  1 sibling, 0 replies; 6+ messages in thread
From: Fabrice Gasnier @ 2017-05-29 16:03 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Jonathan Cameron, Hartmut Knaack, Lars-Peter Clausen,
	Alexandre Torgue, linux-iio, linux-arm-kernel, linux-kernel

On 05/29/2017 05:45 PM, Benjamin Gaignard wrote:
> Use devm_of_platform_populate() instead of of_platform_populate and
> of_platform_depopulate to simplify driver code
> 
> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
> 
> CC: Jonathan Cameron <jic23@kernel.org>
> CC: Hartmut Knaack <knaack.h@gmx.de>
> CC: Lars-Peter Clausen <lars@metafoo.de>
> CC: Alexandre Torgue <alexandre.torgue@st.com>
> CC: Fabrice Gasnier <fabrice.gasnier@st.com>
> CC: linux-iio@vger.kernel.org
> CC: linux-arm-kernel@lists.infradead.org
> CC: linux-kernel@vger.kernel.org
> ---
>  drivers/iio/adc/stm32-adc-core.c | 4 +---
>  1 file changed, 1 insertion(+), 3 deletions(-)
> 
> diff --git a/drivers/iio/adc/stm32-adc-core.c b/drivers/iio/adc/stm32-adc-core.c
> index 22b7c93..46e41dc5 100644
> --- a/drivers/iio/adc/stm32-adc-core.c
> +++ b/drivers/iio/adc/stm32-adc-core.c
> @@ -186,7 +186,6 @@ static void stm32_adc_irq_remove(struct platform_device *pdev,
>  static int stm32_adc_probe(struct platform_device *pdev)
>  {
>  	struct stm32_adc_priv *priv;
> -	struct device_node *np = pdev->dev.of_node;
>  	struct resource *res;
>  	int ret;
>  
> @@ -249,7 +248,7 @@ static int stm32_adc_probe(struct platform_device *pdev)
>  
>  	platform_set_drvdata(pdev, &priv->common);
>  
> -	ret = of_platform_populate(np, NULL, NULL, &pdev->dev);
> +	ret = devm_of_platform_populate(&pdev->dev);
>  	if (ret < 0) {
>  		dev_err(&pdev->dev, "failed to populate DT children\n");
>  		goto err_irq_remove;
> @@ -274,7 +273,6 @@ static int stm32_adc_remove(struct platform_device *pdev)
>  	struct stm32_adc_common *common = platform_get_drvdata(pdev);
>  	struct stm32_adc_priv *priv = to_stm32_adc_priv(common);
>  
> -	of_platform_depopulate(&pdev->dev);

Hi Benjamin,

This is going to change order of sub devices removal. It may end-up with
bellow resources being removed while sub-device still needs them.
Not sure this is a good candidate for such a change.

Best Regards,
Fabrice

>  	stm32_adc_irq_remove(pdev, priv);
>  	clk_disable_unprepare(priv->aclk);
>  	regulator_disable(priv->vref);
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 02/15] iio: dac: stm32: use devm_of_platform_populate()
  2017-05-29 15:45 ` [PATCH 02/15] iio: dac: " Benjamin Gaignard
@ 2017-05-29 16:10   ` Fabrice Gasnier
  0 siblings, 0 replies; 6+ messages in thread
From: Fabrice Gasnier @ 2017-05-29 16:10 UTC (permalink / raw)
  To: Benjamin Gaignard
  Cc: Jonathan Cameron, Hartmut Knaack, Lars-Peter Clausen,
	Alexandre Torgue, linux-iio, linux-arm-kernel, linux-kernel

On 05/29/2017 05:45 PM, Benjamin Gaignard wrote:
> Use devm_of_platform_populate() instead of of_platform_populate and
> of_platform_depopulate to simplify driver code
> 
> Signed-off-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
> 
> CC: Jonathan Cameron <jic23@kernel.org>
> CC: Hartmut Knaack <knaack.h@gmx.de>
> CC: Lars-Peter Clausen <lars@metafoo.de>
> CC: Alexandre Torgue <alexandre.torgue@st.com>
> CC: Fabrice Gasnier <fabrice.gasnier@st.com>
> CC: linux-iio@vger.kernel.org
> CC: linux-arm-kernel@lists.infradead.org
> CC: linux-kernel@vger.kernel.org
> ---
>  drivers/iio/dac/stm32-dac-core.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/drivers/iio/dac/stm32-dac-core.c b/drivers/iio/dac/stm32-dac-core.c
> index 75e4878..9c42537 100644
> --- a/drivers/iio/dac/stm32-dac-core.c
> +++ b/drivers/iio/dac/stm32-dac-core.c
> @@ -130,7 +130,7 @@ static int stm32_dac_probe(struct platform_device *pdev)
>  
>  	platform_set_drvdata(pdev, &priv->common);
>  
> -	ret = of_platform_populate(pdev->dev.of_node, NULL, NULL, dev);
> +	ret = devm_of_platform_populate(&pdev->dev);
>  	if (ret < 0) {
>  		dev_err(dev, "failed to populate DT children\n");
>  		goto err_pclk;
> @@ -151,7 +151,6 @@ static int stm32_dac_remove(struct platform_device *pdev)
>  	struct stm32_dac_common *common = platform_get_drvdata(pdev);
>  	struct stm32_dac_priv *priv = to_stm32_dac_priv(common);
>  
> -	of_platform_depopulate(&pdev->dev);
Hi Benjamin,

Same as patch 1, This is going to change order of sub devices removal.
It may end-up with bellow resources being removed while sub-device still
needs them.
Not sure this is a good candidate for such a change.

Best Regards,
Fabrice
>  	clk_disable_unprepare(priv->pclk);
>  	regulator_disable(priv->vref);
>  
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-05-29 16:10 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-05-29 15:45 [PATCH 00/15] make more driver use devm_of_platform_populate() Benjamin Gaignard
2017-05-29 15:45 ` [PATCH 01/15] iio: adc: stm32: " Benjamin Gaignard
2017-05-29 16:00   ` Jonathan Cameron
2017-05-29 16:03   ` Fabrice Gasnier
2017-05-29 15:45 ` [PATCH 02/15] iio: dac: " Benjamin Gaignard
2017-05-29 16:10   ` Fabrice Gasnier

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).