Skip to contentSkip to conversation

ASoC: dwc: Allocate resources with devm_ioremap_resource

PATCH Superseded Andrew Jackson 3 participants 6 messages Dec 3, 2014 – Dec 4, 2014

Subsystems (2)

v1 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/5 ASoC: dwc: Allocate resources with devm_ioremap_resource

Prepare for the introduction of device-tree support by re-ordering some of the allocations and using devm_iomap_resource to simplify IO mapping.

---
 sound/soc/dwc/designware_i2s.c |   46 ++++++++++++++++-----------------------
 1 files changed, 19 insertions(+), 27 deletions(-)
sound/soc/dwc/designware_i2s.c +19 -27
index e961388..08f0229 100644
@@ -338,31 +338,34 @@ static int dw_i2s_probe(struct platform_device *pdev)
 		return -EINVAL;
 	}
 
-	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	if (!res) {
-		dev_err(&pdev->dev, "no i2s resource defined\n");
-		return -ENODEV;
-	}
-
-	if (!devm_request_mem_region(&pdev->dev, res->start,
-				resource_size(res), pdev->name)) {
-		dev_err(&pdev->dev, "i2s region already claimed\n");
-		return -EBUSY;
-	}
-
 	dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
 	if (!dev) {
 		dev_warn(&pdev->dev, "kzalloc fail\n");
 		return -ENOMEM;
 	}
 
-	dev->i2s_base = devm_ioremap(&pdev->dev, res->start,
-			resource_size(res));
-	if (!dev->i2s_base) {
-		dev_err(&pdev->dev, "ioremap fail for i2s_region\n");
+	dw_i2s_dai = devm_kzalloc(&pdev->dev, sizeof(*dw_i2s_dai), GFP_KERNEL);
+	if (!dw_i2s_dai) {
+		dev_err(&pdev->dev, "mem allocation failed for dai driver\n");
 		return -ENOMEM;
 	}
 
+	dw_i2s_dai->ops = &dw_i2s_dai_ops;
+	dw_i2s_dai->suspend = dw_i2s_suspend;
+	dw_i2s_dai->resume = dw_i2s_resume;
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	if (!res) {
+		dev_err(&pdev->dev, "no i2s resource defined\n");
+		return -ENODEV;
+	}
+
+	dev->i2s_base = devm_ioremap_resource(&pdev->dev, res);
+	if (IS_ERR(dev->i2s_base)) {
+		dev_err(&pdev->dev, "ioremap fail for i2s_region\n");
+		return PTR_ERR(dev->i2s_base);
+	}
+
 	cap = pdata->cap;
 	dev->capability = cap;
 	dev->i2s_clk_cfg = pdata->i2s_clk_cfg;
@@ -388,13 +391,6 @@ static int dw_i2s_probe(struct platform_device *pdev)
 	if (ret < 0)
 		goto err_clk_put;
 
-	dw_i2s_dai = devm_kzalloc(&pdev->dev, sizeof(*dw_i2s_dai), GFP_KERNEL);
-	if (!dw_i2s_dai) {
-		dev_err(&pdev->dev, "mem allocation failed for dai driver\n");
-		ret = -ENOMEM;
-		goto err_clk_disable;
-	}
-
 	if (cap & DWC_I2S_PLAY) {
 		dev_dbg(&pdev->dev, " designware: play supported\n");
 		dw_i2s_dai->playback.channels_min = MIN_CHANNEL_NUM;
@@ -411,10 +407,6 @@ static int dw_i2s_probe(struct platform_device *pdev)
 		dw_i2s_dai->capture.rates = pdata->snd_rates;
 	}
 
-	dw_i2s_dai->ops = &dw_i2s_dai_ops;
-	dw_i2s_dai->suspend = dw_i2s_suspend;
-	dw_i2s_dai->resume = dw_i2s_resume;
-
 	dev->dev = &pdev->dev;
 	dev_set_drvdata(&pdev->dev, dev);
 	ret = snd_soc_register_component(&pdev->dev, &dw_i2s_component,
Signature · 1 line
1.7.1
#1 lore raw

On 12/03/2014 05:38 PM, Andrew Jackson wrote:
[,,,[

sound/soc/dwc/designware_i2s.c static int dw_i2s_probe(struct platform_device *pdev) · line 349

Quoted 3 lines
sound/soc/dwc/designware_i2s.c +3 -0
+	dw_i2s_dai = devm_kzalloc(&pdev->dev, sizeof(*dw_i2s_dai), GFP_KERNEL);
+	if (!dw_i2s_dai) {
+		dev_err(&pdev->dev, "mem allocation failed for dai driver\n");

All the memory alloc functions already print a error message.

sound/soc/dwc/designware_i2s.c static int dw_i2s_probe(struct platform_device *pdev) · line 355

Quoted 6 lines
  		return -ENOMEM;
  	}
sound/soc/dwc/designware_i2s.c +3 -0
+	dw_i2s_dai->ops = &dw_i2s_dai_ops;
+	dw_i2s_dai->suspend = dw_i2s_suspend;
+	dw_i2s_dai->resume = dw_i2s_resume;

This seems to be separate from the devm_ioremap_resource() change.

sound/soc/dwc/designware_i2s.c static int dw_i2s_probe(struct platform_device *pdev) · line 358

Quoted 3 lines
sound/soc/dwc/designware_i2s.c +3 -0
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	if (!res) {

You don't actually have to check it devm_ioremap_resource does this for you.

sound/soc/dwc/designware_i2s.c static int dw_i2s_probe(struct platform_device *pdev) · line 365

Quoted 7 lines
sound/soc/dwc/designware_i2s.c +7 -0
+		dev_err(&pdev->dev, "no i2s resource defined\n");
+		return -ENODEV;
+	}
+
+	dev->i2s_base = devm_ioremap_resource(&pdev->dev, res);
+	if (IS_ERR(dev->i2s_base)) {
+		dev_err(&pdev->dev, "ioremap fail for i2s_region\n");

Same here devm_ioremap_resource() will already print a appropriate error message.

Quoted 2 lines
sound/soc/dwc/designware_i2s.c +2 -0
+		return PTR_ERR(dev->i2s_base);
+	}
#2 lore raw
Quoted 7 lines · Lars-Peter Clausen

On 12/03/2014 05:38 PM, Andrew Jackson wrote:
[,,,[

sound/soc/dwc/designware_i2s.c static int dw_i2s_probe(struct platform_device *pdev) · line 349

Quoted 3 lines
sound/soc/dwc/designware_i2s.c +3 -0
+	dw_i2s_dai = devm_kzalloc(&pdev->dev, sizeof(*dw_i2s_dai), GFP_KERNEL);
+	if (!dw_i2s_dai) {
+		dev_err(&pdev->dev, "mem allocation failed for dai driver\n");

All the memory alloc functions already print a error message.

I will remove the error message(s).

Quoted 8 lines

sound/soc/dwc/designware_i2s.c static int dw_i2s_probe(struct platform_device *pdev) · line 355

Quoted 6 lines
  		return -ENOMEM;
  	}
sound/soc/dwc/designware_i2s.c +3 -0
+	dw_i2s_dai->ops = &dw_i2s_dai_ops;
+	dw_i2s_dai->suspend = dw_i2s_suspend;
+	dw_i2s_dai->resume = dw_i2s_resume;

This seems to be separate from the devm_ioremap_resource() change.

It seemed reasonable to assign these known values to the dw_i2s_dai as soon as it had been allocated. Would you prefer this in a separate patch?

Quoted 5 lines

sound/soc/dwc/designware_i2s.c static int dw_i2s_probe(struct platform_device *pdev) · line 358

Quoted 3 lines
sound/soc/dwc/designware_i2s.c +3 -0
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	if (!res) {

You don't actually have to check it devm_ioremap_resource does this for you.

Oh, thanks, paranoia was taking over.

Quoted 15 lines

sound/soc/dwc/designware_i2s.c static int dw_i2s_probe(struct platform_device *pdev) · line 365

Quoted 7 lines
sound/soc/dwc/designware_i2s.c +7 -0
+		dev_err(&pdev->dev, "no i2s resource defined\n");
+		return -ENODEV;
+	}
+
+	dev->i2s_base = devm_ioremap_resource(&pdev->dev, res);
+	if (IS_ERR(dev->i2s_base)) {
+		dev_err(&pdev->dev, "ioremap fail for i2s_region\n");

Same here devm_ioremap_resource() will already print a appropriate error message.

Quoted 2 lines
sound/soc/dwc/designware_i2s.c +2 -0
+		return PTR_ERR(dev->i2s_base);
+	}
maintainer
#3 lore raw
In reply to Andrew Jackson
Quoted 2 lines · Andrew Jackson

Prepare for the introduction of device-tree support by re-ordering some of the allocations and using devm_iomap_resource to simplify IO mapping.

Applied, thanks.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: Digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20141203/88212cec/attachment.sig>

#4 lore raw
Quoted 6 lines · Mark Brown
Quoted 2 lines · Andrew Jackson

Prepare for the introduction of device-tree support by re-ordering some of the allocations and using devm_iomap_resource to simplify IO mapping.

Applied, thanks.

Lars-Peter Clausen had some comments on this patch so I was intending to resubmit it. Would you prefer that I submit a patch to my original?

Andrew

maintainer
#5 lore raw
Quoted 3 lines · Andrew Jackson

Lars-Peter Clausen had some comments on this patch so I was intending to resubmit it. Would you prefer that I submit a patch to my original?

Incremental patches, same as is standard for upstream. Please also fix your mail client to word wrap within paragraphs so your mails are readable.