Message ID | 1360052699-1985-1-git-send-email-manishv.b@ti.com |
---|---|
State | Superseded |
Headers | show |
On 2/5/2013 1:54 PM, Vishwanathrao Badarkhe, Manish wrote: > Update the code to use devm_* API so that driver > core will manage resources. > > Signed-off-by: Vishwanathrao Badarkhe, Manish <manishv.b@ti.com> You can use devm_clk_get() as well. We should also move to runtime PM but that can be a different patch. Thanks, Sekhar > --- > :100644 100644 6a0a553... f3dfffb... M drivers/i2c/busses/i2c-davinci.c > drivers/i2c/busses/i2c-davinci.c | 41 +++++++++++-------------------------- > 1 files changed, 12 insertions(+), 29 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c > index 6a0a553..f3dfffb 100644 > --- a/drivers/i2c/busses/i2c-davinci.c > +++ b/drivers/i2c/busses/i2c-davinci.c > @@ -643,7 +643,7 @@ static int davinci_i2c_probe(struct platform_device *pdev) > { > struct davinci_i2c_dev *dev; > struct i2c_adapter *adap; > - struct resource *mem, *irq, *ioarea; > + struct resource *mem, *irq; > int r; > > /* NOTE: driver uses the static register mapping */ > @@ -659,17 +659,11 @@ static int davinci_i2c_probe(struct platform_device *pdev) > return -ENODEV; > } > > - ioarea = request_mem_region(mem->start, resource_size(mem), > - pdev->name); > - if (!ioarea) { > - dev_err(&pdev->dev, "I2C region already claimed\n"); > - return -EBUSY; > - } > - > - dev = kzalloc(sizeof(struct davinci_i2c_dev), GFP_KERNEL); > + dev = devm_kzalloc(&pdev->dev, sizeof(struct davinci_i2c_dev), > + GFP_KERNEL); > if (!dev) { > - r = -ENOMEM; > - goto err_release_region; > + dev_err(&pdev->dev, "Memory allocation failed\n"); > + return -ENOMEM; > } > > init_completion(&dev->cmd_complete); > @@ -706,15 +700,17 @@ static int davinci_i2c_probe(struct platform_device *pdev) > } > clk_prepare_enable(dev->clk); > > - dev->base = ioremap(mem->start, resource_size(mem)); > + dev->base = devm_request_and_ioremap(&pdev->dev, mem); > if (!dev->base) { > r = -EBUSY; > - goto err_mem_ioremap; > + dev_err(&pdev->dev, "I2C region already claimed\n"); > + goto err_unuse_clocks; > } > > i2c_davinci_init(dev); > > - r = request_irq(dev->irq, i2c_davinci_isr, 0, pdev->name, dev); > + r = devm_request_irq(&pdev->dev, dev->irq, i2c_davinci_isr, 0, > + pdev->name, dev); > if (r) { > dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq); > goto err_unuse_clocks; > @@ -723,7 +719,7 @@ static int davinci_i2c_probe(struct platform_device *pdev) > r = i2c_davinci_cpufreq_register(dev); > if (r) { > dev_err(&pdev->dev, "failed to register cpufreq\n"); > - goto err_free_irq; > + goto err_unuse_clocks; > } > > adap = &dev->adapter; > @@ -740,26 +736,19 @@ static int davinci_i2c_probe(struct platform_device *pdev) > r = i2c_add_numbered_adapter(adap); > if (r) { > dev_err(&pdev->dev, "failure adding adapter\n"); > - goto err_free_irq; > + goto err_unuse_clocks; > } > of_i2c_register_devices(adap); > > return 0; > > -err_free_irq: > - free_irq(dev->irq, dev); > err_unuse_clocks: > - iounmap(dev->base); > -err_mem_ioremap: > clk_disable_unprepare(dev->clk); > clk_put(dev->clk); > dev->clk = NULL; > err_free_mem: > platform_set_drvdata(pdev, NULL); > put_device(&pdev->dev); > - kfree(dev); > -err_release_region: > - release_mem_region(mem->start, resource_size(mem)); > > return r; > } > @@ -767,7 +756,6 @@ err_release_region: > static int davinci_i2c_remove(struct platform_device *pdev) > { > struct davinci_i2c_dev *dev = platform_get_drvdata(pdev); > - struct resource *mem; > > i2c_davinci_cpufreq_deregister(dev); > > @@ -780,12 +768,7 @@ static int davinci_i2c_remove(struct platform_device *pdev) > dev->clk = NULL; > > davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, 0); > - free_irq(dev->irq, dev); > - iounmap(dev->base); > - kfree(dev); > > - mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); > - release_mem_region(mem->start, resource_size(mem)); > return 0; > } > > -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
SGkgU2VraGFyDQoNCk9uIFR1ZSwgRmViIDA1LCAyMDEzIGF0IDE3OjE3OjI1LCBOb3JpLCBTZWto YXIgd3JvdGU6DQo+IA0KPiANCj4gT24gMi81LzIwMTMgMTo1NCBQTSwgVmlzaHdhbmF0aHJhbyBC YWRhcmtoZSwgTWFuaXNoIHdyb3RlOg0KPiA+IFVwZGF0ZSB0aGUgY29kZSB0byB1c2UgZGV2bV8q IEFQSSBzbyB0aGF0IGRyaXZlciBjb3JlIHdpbGwgbWFuYWdlIA0KPiA+IHJlc291cmNlcy4NCj4g PiANCj4gPiBTaWduZWQtb2ZmLWJ5OiBWaXNod2FuYXRocmFvIEJhZGFya2hlLCBNYW5pc2ggPG1h bmlzaHYuYkB0aS5jb20+DQo+IA0KPiBZb3UgY2FuIHVzZSBkZXZtX2Nsa19nZXQoKSBhcyB3ZWxs LiBXZSBzaG91bGQgYWxzbyBtb3ZlIHRvIHJ1bnRpbWUgDQogIFBNIGJ1dCB0aGF0IGNhbiBiZSBh IGRpZmZlcmVudCBwYXRjaC4NCg0KU3VyZSwgSSB3aWxsIGFwcGx5IGRldm0gb3BlcmF0aW9uIGZv ciBjbGtfZ2V0IGFsc28gaW4gbmV4dCB2ZXJzaW9uLg0KT2ssIHdpbGwgbW92ZSB0byBydW50aW1l IFBNIGluIGEgZGlmZmVyZW50IHBhdGNoLg0KDQoNClRoYW5rcywgDQpNYW5pc2ggQmFkYXJraGUN Cj4gPiAtLS0NCj4gPiA6MTAwNjQ0IDEwMDY0NCA2YTBhNTUzLi4uIGYzZGZmZmIuLi4gTQlkcml2 ZXJzL2kyYy9idXNzZXMvaTJjLWRhdmluY2kuYw0KPiA+ICBkcml2ZXJzL2kyYy9idXNzZXMvaTJj LWRhdmluY2kuYyB8ICAgNDEgKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K PiA+ICAxIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQ0K PiA+IA0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRhdmluY2kuYyAN Cj4gPiBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGF2aW5jaS5jDQo+ID4gaW5kZXggNmEwYTU1 My4uZjNkZmZmYiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRhdmlu Y2kuYw0KPiA+ICsrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGF2aW5jaS5jDQo+ID4gQEAg LTY0Myw3ICs2NDMsNyBAQCBzdGF0aWMgaW50IGRhdmluY2lfaTJjX3Byb2JlKHN0cnVjdCANCj4g PiBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpICB7DQo+ID4gIAlzdHJ1Y3QgZGF2aW5jaV9pMmNfZGV2 ICpkZXY7DQo+ID4gIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXA7DQo+ID4gLQlzdHJ1Y3QgcmVz b3VyY2UgKm1lbSwgKmlycSwgKmlvYXJlYTsNCj4gPiArCXN0cnVjdCByZXNvdXJjZSAqbWVtLCAq aXJxOw0KPiA+ICAJaW50IHI7DQo+ID4gIA0KPiA+ICAJLyogTk9URTogZHJpdmVyIHVzZXMgdGhl IHN0YXRpYyByZWdpc3RlciBtYXBwaW5nICovIEBAIC02NTksMTcgDQo+ID4gKzY1OSwxMSBAQCBz dGF0aWMgaW50IGRhdmluY2lfaTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYp DQo+ID4gIAkJcmV0dXJuIC1FTk9ERVY7DQo+ID4gIAl9DQo+ID4gIA0KPiA+IC0JaW9hcmVhID0g cmVxdWVzdF9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSwNCj4gPiAt CQkJCSAgICBwZGV2LT5uYW1lKTsNCj4gPiAtCWlmICghaW9hcmVhKSB7DQo+ID4gLQkJZGV2X2Vy cigmcGRldi0+ZGV2LCAiSTJDIHJlZ2lvbiBhbHJlYWR5IGNsYWltZWRcbiIpOw0KPiA+IC0JCXJl dHVybiAtRUJVU1k7DQo+ID4gLQl9DQo+ID4gLQ0KPiA+IC0JZGV2ID0ga3phbGxvYyhzaXplb2Yo c3RydWN0IGRhdmluY2lfaTJjX2RldiksIEdGUF9LRVJORUwpOw0KPiA+ICsJZGV2ID0gZGV2bV9r emFsbG9jKCZwZGV2LT5kZXYsIHNpemVvZihzdHJ1Y3QgZGF2aW5jaV9pMmNfZGV2KSwNCj4gPiAr CQkJR0ZQX0tFUk5FTCk7DQo+ID4gIAlpZiAoIWRldikgew0KPiA+IC0JCXIgPSAtRU5PTUVNOw0K PiA+IC0JCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOw0KPiA+ICsJCWRldl9lcnIoJnBkZXYtPmRl diwgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7DQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07 DQo+ID4gIAl9DQo+ID4gIA0KPiA+ICAJaW5pdF9jb21wbGV0aW9uKCZkZXYtPmNtZF9jb21wbGV0 ZSk7DQo+ID4gQEAgLTcwNiwxNSArNzAwLDE3IEBAIHN0YXRpYyBpbnQgZGF2aW5jaV9pMmNfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiAgCX0NCj4gPiAgCWNsa19wcmVw YXJlX2VuYWJsZShkZXYtPmNsayk7DQo+ID4gIA0KPiA+IC0JZGV2LT5iYXNlID0gaW9yZW1hcCht ZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOw0KPiA+ICsJZGV2LT5iYXNlID0gZGV2bV9y ZXF1ZXN0X2FuZF9pb3JlbWFwKCZwZGV2LT5kZXYsIG1lbSk7DQo+ID4gIAlpZiAoIWRldi0+YmFz ZSkgew0KPiA+ICAJCXIgPSAtRUJVU1k7DQo+ID4gLQkJZ290byBlcnJfbWVtX2lvcmVtYXA7DQo+ ID4gKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSTJDIHJlZ2lvbiBhbHJlYWR5IGNsYWltZWRcbiIp Ow0KPiA+ICsJCWdvdG8gZXJyX3VudXNlX2Nsb2NrczsNCj4gPiAgCX0NCj4gPiAgDQo+ID4gIAlp MmNfZGF2aW5jaV9pbml0KGRldik7DQo+ID4gIA0KPiA+IC0JciA9IHJlcXVlc3RfaXJxKGRldi0+ aXJxLCBpMmNfZGF2aW5jaV9pc3IsIDAsIHBkZXYtPm5hbWUsIGRldik7DQo+ID4gKwlyID0gZGV2 bV9yZXF1ZXN0X2lycSgmcGRldi0+ZGV2LCBkZXYtPmlycSwgaTJjX2RhdmluY2lfaXNyLCAwLA0K PiA+ICsJCQlwZGV2LT5uYW1lLCBkZXYpOw0KPiA+ICAJaWYgKHIpIHsNCj4gPiAgCQlkZXZfZXJy KCZwZGV2LT5kZXYsICJmYWlsdXJlIHJlcXVlc3RpbmcgaXJxICVpXG4iLCBkZXYtPmlycSk7DQo+ ID4gIAkJZ290byBlcnJfdW51c2VfY2xvY2tzOw0KPiA+IEBAIC03MjMsNyArNzE5LDcgQEAgc3Rh dGljIGludCBkYXZpbmNpX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0K PiA+ICAJciA9IGkyY19kYXZpbmNpX2NwdWZyZXFfcmVnaXN0ZXIoZGV2KTsNCj4gPiAgCWlmIChy KSB7DQo+ID4gIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNwdWZy ZXFcbiIpOw0KPiA+IC0JCWdvdG8gZXJyX2ZyZWVfaXJxOw0KPiA+ICsJCWdvdG8gZXJyX3VudXNl X2Nsb2NrczsNCj4gPiAgCX0NCj4gPiAgDQo+ID4gIAlhZGFwID0gJmRldi0+YWRhcHRlcjsNCj4g PiBAQCAtNzQwLDI2ICs3MzYsMTkgQEAgc3RhdGljIGludCBkYXZpbmNpX2kyY19wcm9iZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICAJciA9IGkyY19hZGRfbnVtYmVyZWRfYWRh cHRlcihhZGFwKTsNCj4gPiAgCWlmIChyKSB7DQo+ID4gIAkJZGV2X2VycigmcGRldi0+ZGV2LCAi ZmFpbHVyZSBhZGRpbmcgYWRhcHRlclxuIik7DQo+ID4gLQkJZ290byBlcnJfZnJlZV9pcnE7DQo+ ID4gKwkJZ290byBlcnJfdW51c2VfY2xvY2tzOw0KPiA+ICAJfQ0KPiA+ICAJb2ZfaTJjX3JlZ2lz dGVyX2RldmljZXMoYWRhcCk7DQo+ID4gIA0KPiA+ICAJcmV0dXJuIDA7DQo+ID4gIA0KPiA+IC1l cnJfZnJlZV9pcnE6DQo+ID4gLQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsNCj4gPiAgZXJyX3Vu dXNlX2Nsb2NrczoNCj4gPiAtCWlvdW5tYXAoZGV2LT5iYXNlKTsNCj4gPiAtZXJyX21lbV9pb3Jl bWFwOg0KPiA+ICAJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGRldi0+Y2xrKTsNCj4gPiAgCWNsa19w dXQoZGV2LT5jbGspOw0KPiA+ICAJZGV2LT5jbGsgPSBOVUxMOw0KPiA+ICBlcnJfZnJlZV9tZW06 DQo+ID4gIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsNCj4gPiAgCXB1dF9kZXZp Y2UoJnBkZXYtPmRldik7DQo+ID4gLQlrZnJlZShkZXYpOw0KPiA+IC1lcnJfcmVsZWFzZV9yZWdp b246DQo+ID4gLQlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZSht ZW0pKTsNCj4gPiAgDQo+ID4gIAlyZXR1cm4gcjsNCj4gPiAgfQ0KPiA+IEBAIC03NjcsNyArNzU2 LDYgQEAgZXJyX3JlbGVhc2VfcmVnaW9uOg0KPiA+ICBzdGF0aWMgaW50IGRhdmluY2lfaTJjX3Jl bW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KSAgew0KPiA+ICAJc3RydWN0IGRhdmlu Y2lfaTJjX2RldiAqZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQo+ID4gLQlzdHJ1 Y3QgcmVzb3VyY2UgKm1lbTsNCj4gPiAgDQo+ID4gIAlpMmNfZGF2aW5jaV9jcHVmcmVxX2RlcmVn aXN0ZXIoZGV2KTsNCj4gPiAgDQo+ID4gQEAgLTc4MCwxMiArNzY4LDcgQEAgc3RhdGljIGludCBk YXZpbmNpX2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiAgCWRl di0+Y2xrID0gTlVMTDsNCj4gPiAgDQo+ID4gIAlkYXZpbmNpX2kyY193cml0ZV9yZWcoZGV2LCBE QVZJTkNJX0kyQ19NRFJfUkVHLCAwKTsNCj4gPiAtCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOw0K PiA+IC0JaW91bm1hcChkZXYtPmJhc2UpOw0KPiA+IC0Ja2ZyZWUoZGV2KTsNCj4gPiAgDQo+ID4g LQltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOw0K PiA+IC0JcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7 DQo+ID4gIAlyZXR1cm4gMDsNCj4gPiAgfQ0KPiA+ICANCj4gPiANCj4gDQoNCg0K -- To unsubscribe from this list: send the line "unsubscribe linux-i2c" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/i2c/busses/i2c-davinci.c b/drivers/i2c/busses/i2c-davinci.c index 6a0a553..f3dfffb 100644 --- a/drivers/i2c/busses/i2c-davinci.c +++ b/drivers/i2c/busses/i2c-davinci.c @@ -643,7 +643,7 @@ static int davinci_i2c_probe(struct platform_device *pdev) { struct davinci_i2c_dev *dev; struct i2c_adapter *adap; - struct resource *mem, *irq, *ioarea; + struct resource *mem, *irq; int r; /* NOTE: driver uses the static register mapping */ @@ -659,17 +659,11 @@ static int davinci_i2c_probe(struct platform_device *pdev) return -ENODEV; } - ioarea = request_mem_region(mem->start, resource_size(mem), - pdev->name); - if (!ioarea) { - dev_err(&pdev->dev, "I2C region already claimed\n"); - return -EBUSY; - } - - dev = kzalloc(sizeof(struct davinci_i2c_dev), GFP_KERNEL); + dev = devm_kzalloc(&pdev->dev, sizeof(struct davinci_i2c_dev), + GFP_KERNEL); if (!dev) { - r = -ENOMEM; - goto err_release_region; + dev_err(&pdev->dev, "Memory allocation failed\n"); + return -ENOMEM; } init_completion(&dev->cmd_complete); @@ -706,15 +700,17 @@ static int davinci_i2c_probe(struct platform_device *pdev) } clk_prepare_enable(dev->clk); - dev->base = ioremap(mem->start, resource_size(mem)); + dev->base = devm_request_and_ioremap(&pdev->dev, mem); if (!dev->base) { r = -EBUSY; - goto err_mem_ioremap; + dev_err(&pdev->dev, "I2C region already claimed\n"); + goto err_unuse_clocks; } i2c_davinci_init(dev); - r = request_irq(dev->irq, i2c_davinci_isr, 0, pdev->name, dev); + r = devm_request_irq(&pdev->dev, dev->irq, i2c_davinci_isr, 0, + pdev->name, dev); if (r) { dev_err(&pdev->dev, "failure requesting irq %i\n", dev->irq); goto err_unuse_clocks; @@ -723,7 +719,7 @@ static int davinci_i2c_probe(struct platform_device *pdev) r = i2c_davinci_cpufreq_register(dev); if (r) { dev_err(&pdev->dev, "failed to register cpufreq\n"); - goto err_free_irq; + goto err_unuse_clocks; } adap = &dev->adapter; @@ -740,26 +736,19 @@ static int davinci_i2c_probe(struct platform_device *pdev) r = i2c_add_numbered_adapter(adap); if (r) { dev_err(&pdev->dev, "failure adding adapter\n"); - goto err_free_irq; + goto err_unuse_clocks; } of_i2c_register_devices(adap); return 0; -err_free_irq: - free_irq(dev->irq, dev); err_unuse_clocks: - iounmap(dev->base); -err_mem_ioremap: clk_disable_unprepare(dev->clk); clk_put(dev->clk); dev->clk = NULL; err_free_mem: platform_set_drvdata(pdev, NULL); put_device(&pdev->dev); - kfree(dev); -err_release_region: - release_mem_region(mem->start, resource_size(mem)); return r; } @@ -767,7 +756,6 @@ err_release_region: static int davinci_i2c_remove(struct platform_device *pdev) { struct davinci_i2c_dev *dev = platform_get_drvdata(pdev); - struct resource *mem; i2c_davinci_cpufreq_deregister(dev); @@ -780,12 +768,7 @@ static int davinci_i2c_remove(struct platform_device *pdev) dev->clk = NULL; davinci_i2c_write_reg(dev, DAVINCI_I2C_MDR_REG, 0); - free_irq(dev->irq, dev); - iounmap(dev->base); - kfree(dev); - mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); - release_mem_region(mem->start, resource_size(mem)); return 0; }
Update the code to use devm_* API so that driver core will manage resources. Signed-off-by: Vishwanathrao Badarkhe, Manish <manishv.b@ti.com> --- :100644 100644 6a0a553... f3dfffb... M drivers/i2c/busses/i2c-davinci.c drivers/i2c/busses/i2c-davinci.c | 41 +++++++++++-------------------------- 1 files changed, 12 insertions(+), 29 deletions(-)