Skip to contentSkip to conversation

Add missing request_mem_region in probe()

PATCH In review Darius Augulis 2 participants 4 messages Mar 31, 2009 – Apr 1, 2009 2 messages not in the archive

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Add missing request_mem_region in probe()

---

 drivers/i2c/busses/i2c-imx.c |   20 +++++++++++++-------
 1 files changed, 13 insertions(+), 7 deletions(-)
drivers/i2c/busses/i2c-imx.c +13 -7
index 3296380..515bbed 100644
@@ -483,6 +483,11 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 		goto fail1;
 	}
 
+	if (!request_mem_region(res->start, res_size, DRIVER_NAME)) {
+		ret = -EBUSY;
+		goto fail2;
+	}
+
 	/* Setup i2c_imx driver structure */
 	strcpy(i2c_imx->adapter.name, pdev->name);
 	i2c_imx->adapter.owner		= THIS_MODULE;
@@ -498,7 +503,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 	if (IS_ERR(i2c_imx->clk)) {
 		ret = PTR_ERR(i2c_imx->clk);
 		dev_err(&pdev->dev, "can't get I2C clock\n");
-		goto fail2;
+		goto fail3;
 	}
 	clk_enable(i2c_imx->clk);
 
@@ -506,7 +511,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 	ret = request_irq(i2c_imx->irq, i2c_imx_isr, 0, pdev->name, i2c_imx);
 	if (ret) {
 		dev_err(&pdev->dev, "can't claim irq %d\n", i2c_imx->irq);
-		goto fail3;
+		goto fail4;
 	}
 
 	/* Init queue */
@@ -529,7 +534,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 	ret = i2c_add_numbered_adapter(&i2c_imx->adapter);
 	if (ret < 0) {
 		dev_err(&pdev->dev, "registration failed\n");
-		goto fail4;
+		goto fail5;
 	}
 
 	/* Set up platform driver data */
@@ -546,11 +551,13 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 
 	return 0;   /* Return OK */
 
-fail4:
+fail5:
 	free_irq(i2c_imx->irq, i2c_imx);
-fail3:
+fail4:
 	clk_disable(i2c_imx->clk);
 	clk_put(i2c_imx->clk);
+fail3:
+	release_mem_region(i2c_imx->res->start, resource_size(res));
 fail2:
 	kfree(i2c_imx);
 fail1:
@@ -589,8 +596,7 @@ static int __exit i2c_imx_remove(struct platform_device *pdev)
 	clk_put(i2c_imx->clk);
 
 	/* Release memory */
-	release_mem_region(i2c_imx->res->start,
-		i2c_imx->res->end - i2c_imx->res->start + 1);
+	release_mem_region(i2c_imx->res->start, resource_size(i2c_imx->res));
 	iounmap(i2c_imx->base);
 	kfree(i2c_imx);
 	return 0;

A message that is not in the archive (sent off-list or not yet received): 20090331115253.16399.53728.stgit-bi+AKbBUZKY6gyzm1THtWbp2dZbC/[email protected]

#2 lore raw

Ben,

please merge this one too, if possible.

Darius.

Quoted 77 lines · Darius Augulis

---

 drivers/i2c/busses/i2c-imx.c |   20 +++++++++++++-------
 1 files changed, 13 insertions(+), 7 deletions(-)
drivers/i2c/busses/i2c-imx.c +13 -7
index 3296380..515bbed 100644
@@ -483,6 +483,11 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 		goto fail1;
 	}
 
+	if (!request_mem_region(res->start, res_size, DRIVER_NAME)) {
+		ret = -EBUSY;
+		goto fail2;
+	}
+
 	/* Setup i2c_imx driver structure */
 	strcpy(i2c_imx->adapter.name, pdev->name);
 	i2c_imx->adapter.owner		= THIS_MODULE;
@@ -498,7 +503,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 	if (IS_ERR(i2c_imx->clk)) {
 		ret = PTR_ERR(i2c_imx->clk);
 		dev_err(&pdev->dev, "can't get I2C clock\n");
-		goto fail2;
+		goto fail3;
 	}
 	clk_enable(i2c_imx->clk);
 
@@ -506,7 +511,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 	ret = request_irq(i2c_imx->irq, i2c_imx_isr, 0, pdev->name, i2c_imx);
 	if (ret) {
 		dev_err(&pdev->dev, "can't claim irq %d\n", i2c_imx->irq);
-		goto fail3;
+		goto fail4;
 	}
 
 	/* Init queue */
@@ -529,7 +534,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 	ret = i2c_add_numbered_adapter(&i2c_imx->adapter);
 	if (ret < 0) {
 		dev_err(&pdev->dev, "registration failed\n");
-		goto fail4;
+		goto fail5;
 	}
 
 	/* Set up platform driver data */
@@ -546,11 +551,13 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 
 	return 0;   /* Return OK */
 
-fail4:
+fail5:
 	free_irq(i2c_imx->irq, i2c_imx);
-fail3:
+fail4:
 	clk_disable(i2c_imx->clk);
 	clk_put(i2c_imx->clk);
+fail3:
+	release_mem_region(i2c_imx->res->start, resource_size(res));
 fail2:
 	kfree(i2c_imx);
 fail1:
@@ -589,8 +596,7 @@ static int __exit i2c_imx_remove(struct platform_device *pdev)
 	clk_put(i2c_imx->clk);
 
 	/* Release memory */
-	release_mem_region(i2c_imx->res->start,
-		i2c_imx->res->end - i2c_imx->res->start + 1);
+	release_mem_region(i2c_imx->res->start, resource_size(i2c_imx->res));
 	iounmap(i2c_imx->base);
 	kfree(i2c_imx);
 	return 0;
#3 lore raw
In reply to a message not in the archive
Quoted 1 line · Darius Augulis

had a bit of problem applying, fixed the error in the remove chunk and applied.

Next time, let's have something in the patch body saying what is going on.

Quoted 80 lines

---

 drivers/i2c/busses/i2c-imx.c |   20 +++++++++++++-------
 1 files changed, 13 insertions(+), 7 deletions(-)
drivers/i2c/busses/i2c-imx.c +13 -8
index 3296380..515bbed 100644
@@ -483,6 +483,11 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 		goto fail1;
 	}
 
+	if (!request_mem_region(res->start, res_size, DRIVER_NAME)) {
+		ret = -EBUSY;
+		goto fail2;
+	}
+
 	/* Setup i2c_imx driver structure */
 	strcpy(i2c_imx->adapter.name, pdev->name);
 	i2c_imx->adapter.owner		= THIS_MODULE;
@@ -498,7 +503,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 	if (IS_ERR(i2c_imx->clk)) {
 		ret = PTR_ERR(i2c_imx->clk);
 		dev_err(&pdev->dev, "can't get I2C clock\n");
-		goto fail2;
+		goto fail3;
 	}
 	clk_enable(i2c_imx->clk);
 
@@ -506,7 +511,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 	ret = request_irq(i2c_imx->irq, i2c_imx_isr, 0, pdev->name, i2c_imx);
 	if (ret) {
 		dev_err(&pdev->dev, "can't claim irq %d\n", i2c_imx->irq);
-		goto fail3;
+		goto fail4;
 	}
 
 	/* Init queue */
@@ -529,7 +534,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 	ret = i2c_add_numbered_adapter(&i2c_imx->adapter);
 	if (ret < 0) {
 		dev_err(&pdev->dev, "registration failed\n");
-		goto fail4;
+		goto fail5;
 	}
 
 	/* Set up platform driver data */
@@ -546,11 +551,13 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 
 	return 0;   /* Return OK */
 
-fail4:
+fail5:
 	free_irq(i2c_imx->irq, i2c_imx);
-fail3:
+fail4:
 	clk_disable(i2c_imx->clk);
 	clk_put(i2c_imx->clk);
+fail3:
+	release_mem_region(i2c_imx->res->start, resource_size(res));
 fail2:
 	kfree(i2c_imx);
 fail1:
@@ -589,8 +596,7 @@ static int __exit i2c_imx_remove(struct platform_device *pdev)
 	clk_put(i2c_imx->clk);
 
 	/* Release memory */
-	release_mem_region(i2c_imx->res->start,
-		i2c_imx->res->end - i2c_imx->res->start + 1);
+	release_mem_region(i2c_imx->res->start, resource_size(i2c_imx->res));
 	iounmap(i2c_imx->base);
 	kfree(i2c_imx);
 	return 0;
 
--

To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html

Signature · 3 lines
Ben ([email protected], http://www.fluff.org/)

  'a smiley only costs 4 bytes'

A message that is not in the archive (sent off-list or not yet received): [email protected]

#5 lore raw
Quoted 8 lines · Ben Dooks
Quoted 1 line · Darius Augulis

had a bit of problem applying, fixed the error in the remove chunk and applied.

Next time, let's have something in the patch body saying what is going on.

ok. thank you!

Quoted 82 lines
Quoted 81 lines

---

 drivers/i2c/busses/i2c-imx.c |   20 +++++++++++++-------
 1 files changed, 13 insertions(+), 7 deletions(-)
drivers/i2c/busses/i2c-imx.c +13 -8
index 3296380..515bbed 100644
@@ -483,6 +483,11 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 		goto fail1;
 	}
 
+	if (!request_mem_region(res->start, res_size, DRIVER_NAME)) {
+		ret = -EBUSY;
+		goto fail2;
+	}
+
 	/* Setup i2c_imx driver structure */
 	strcpy(i2c_imx->adapter.name, pdev->name);
 	i2c_imx->adapter.owner		= THIS_MODULE;
@@ -498,7 +503,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 	if (IS_ERR(i2c_imx->clk)) {
 		ret = PTR_ERR(i2c_imx->clk);
 		dev_err(&pdev->dev, "can't get I2C clock\n");
-		goto fail2;
+		goto fail3;
 	}
 	clk_enable(i2c_imx->clk);
 
@@ -506,7 +511,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 	ret = request_irq(i2c_imx->irq, i2c_imx_isr, 0, pdev->name, i2c_imx);
 	if (ret) {
 		dev_err(&pdev->dev, "can't claim irq %d\n", i2c_imx->irq);
-		goto fail3;
+		goto fail4;
 	}
 
 	/* Init queue */
@@ -529,7 +534,7 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 	ret = i2c_add_numbered_adapter(&i2c_imx->adapter);
 	if (ret < 0) {
 		dev_err(&pdev->dev, "registration failed\n");
-		goto fail4;
+		goto fail5;
 	}
 
 	/* Set up platform driver data */
@@ -546,11 +551,13 @@ static int __init i2c_imx_probe(struct platform_device *pdev)
 
 	return 0;   /* Return OK */
 
-fail4:
+fail5:
 	free_irq(i2c_imx->irq, i2c_imx);
-fail3:
+fail4:
 	clk_disable(i2c_imx->clk);
 	clk_put(i2c_imx->clk);
+fail3:
+	release_mem_region(i2c_imx->res->start, resource_size(res));
 fail2:
 	kfree(i2c_imx);
 fail1:
@@ -589,8 +596,7 @@ static int __exit i2c_imx_remove(struct platform_device *pdev)
 	clk_put(i2c_imx->clk);
 
 	/* Release memory */
-	release_mem_region(i2c_imx->res->start,
-		i2c_imx->res->end - i2c_imx->res->start + 1);
+	release_mem_region(i2c_imx->res->start, resource_size(i2c_imx->res));
 	iounmap(i2c_imx->base);
 	kfree(i2c_imx);
 	return 0;
 
--

To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html