aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c
diff options
context:
space:
mode:
authorFelipe Balbi <balbi@ti.com>2012-09-12 06:57:55 -0400
committerWolfram Sang <w.sang@pengutronix.de>2012-09-12 09:01:45 -0400
commitd9ebd04d3476634c29ce0feffbc982e1cb25ed80 (patch)
treedeb23d91d4c1b2dc89ae8227e209ecd8d9770d36 /drivers/i2c
parentfbc1871511ed201504d6e5b36f13ea77e4be2907 (diff)
i2c: omap: switch to devm_* API
that helps deleting some boiler plate code and lets driver-core manage our resources for us. Signed-off-by: Felipe Balbi <balbi@ti.com> Signed-off-by: Shubhrajyoti D <shubhrajyoti@ti.com> Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/busses/i2c-omap.c41
1 files changed, 12 insertions, 29 deletions
diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c
index 5d19a49803c1..2d9b03c94614 100644
--- a/drivers/i2c/busses/i2c-omap.c
+++ b/drivers/i2c/busses/i2c-omap.c
@@ -943,7 +943,7 @@ omap_i2c_probe(struct platform_device *pdev)
943{ 943{
944 struct omap_i2c_dev *dev; 944 struct omap_i2c_dev *dev;
945 struct i2c_adapter *adap; 945 struct i2c_adapter *adap;
946 struct resource *mem, *irq, *ioarea; 946 struct resource *mem, *irq;
947 struct omap_i2c_bus_platform_data *pdata = pdev->dev.platform_data; 947 struct omap_i2c_bus_platform_data *pdata = pdev->dev.platform_data;
948 struct device_node *node = pdev->dev.of_node; 948 struct device_node *node = pdev->dev.of_node;
949 const struct of_device_id *match; 949 const struct of_device_id *match;
@@ -962,17 +962,16 @@ omap_i2c_probe(struct platform_device *pdev)
962 return -ENODEV; 962 return -ENODEV;
963 } 963 }
964 964
965 ioarea = request_mem_region(mem->start, resource_size(mem), 965 dev = devm_kzalloc(&pdev->dev, sizeof(struct omap_i2c_dev), GFP_KERNEL);
966 pdev->name); 966 if (!dev) {
967 if (!ioarea) { 967 dev_err(&pdev->dev, "Menory allocation failed\n");
968 dev_err(&pdev->dev, "I2C region already claimed\n"); 968 return -ENOMEM;
969 return -EBUSY;
970 } 969 }
971 970
972 dev = kzalloc(sizeof(struct omap_i2c_dev), GFP_KERNEL); 971 dev->base = devm_request_and_ioremap(&pdev->dev, mem);
973 if (!dev) { 972 if (!dev->base) {
974 r = -ENOMEM; 973 dev_err(&pdev->dev, "I2C region already claimed\n");
975 goto err_release_region; 974 return -ENOMEM;
976 } 975 }
977 976
978 match = of_match_device(of_match_ptr(omap_i2c_of_match), &pdev->dev); 977 match = of_match_device(of_match_ptr(omap_i2c_of_match), &pdev->dev);
@@ -995,11 +994,6 @@ omap_i2c_probe(struct platform_device *pdev)
995 994
996 dev->dev = &pdev->dev; 995 dev->dev = &pdev->dev;
997 dev->irq = irq->start; 996 dev->irq = irq->start;
998 dev->base = ioremap(mem->start, resource_size(mem));
999 if (!dev->base) {
1000 r = -ENOMEM;
1001 goto err_free_mem;
1002 }
1003 997
1004 platform_set_drvdata(pdev, dev); 998 platform_set_drvdata(pdev, dev);
1005 init_completion(&dev->cmd_complete); 999 init_completion(&dev->cmd_complete);
@@ -1057,7 +1051,8 @@ omap_i2c_probe(struct platform_device *pdev)
1057 1051
1058 isr = (dev->rev < OMAP_I2C_OMAP1_REV_2) ? omap_i2c_omap1_isr : 1052 isr = (dev->rev < OMAP_I2C_OMAP1_REV_2) ? omap_i2c_omap1_isr :
1059 omap_i2c_isr; 1053 omap_i2c_isr;
1060 r = request_irq(dev->irq, isr, IRQF_NO_SUSPEND, pdev->name, dev); 1054 r = devm_request_irq(&pdev->dev, dev->irq, isr, IRQF_NO_SUSPEND,
1055 pdev->name, dev);
1061 1056
1062 if (r) { 1057 if (r) {
1063 dev_err(dev->dev, "failure requesting irq %i\n", dev->irq); 1058 dev_err(dev->dev, "failure requesting irq %i\n", dev->irq);
@@ -1081,7 +1076,7 @@ omap_i2c_probe(struct platform_device *pdev)
1081 r = i2c_add_numbered_adapter(adap); 1076 r = i2c_add_numbered_adapter(adap);
1082 if (r) { 1077 if (r) {
1083 dev_err(dev->dev, "failure adding adapter\n"); 1078 dev_err(dev->dev, "failure adding adapter\n");
1084 goto err_free_irq; 1079 goto err_unuse_clocks;
1085 } 1080 }
1086 1081
1087 of_i2c_register_devices(adap); 1082 of_i2c_register_devices(adap);
@@ -1090,18 +1085,12 @@ omap_i2c_probe(struct platform_device *pdev)
1090 1085
1091 return 0; 1086 return 0;
1092 1087
1093err_free_irq:
1094 free_irq(dev->irq, dev);
1095err_unuse_clocks: 1088err_unuse_clocks:
1096 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); 1089 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
1097 pm_runtime_put(dev->dev); 1090 pm_runtime_put(dev->dev);
1098 iounmap(dev->base);
1099 pm_runtime_disable(&pdev->dev); 1091 pm_runtime_disable(&pdev->dev);
1100err_free_mem: 1092err_free_mem:
1101 platform_set_drvdata(pdev, NULL); 1093 platform_set_drvdata(pdev, NULL);
1102 kfree(dev);
1103err_release_region:
1104 release_mem_region(mem->start, resource_size(mem));
1105 1094
1106 return r; 1095 return r;
1107} 1096}
@@ -1109,12 +1098,10 @@ err_release_region:
1109static int __devexit omap_i2c_remove(struct platform_device *pdev) 1098static int __devexit omap_i2c_remove(struct platform_device *pdev)
1110{ 1099{
1111 struct omap_i2c_dev *dev = platform_get_drvdata(pdev); 1100 struct omap_i2c_dev *dev = platform_get_drvdata(pdev);
1112 struct resource *mem;
1113 int ret; 1101 int ret;
1114 1102
1115 platform_set_drvdata(pdev, NULL); 1103 platform_set_drvdata(pdev, NULL);
1116 1104
1117 free_irq(dev->irq, dev);
1118 i2c_del_adapter(&dev->adapter); 1105 i2c_del_adapter(&dev->adapter);
1119 ret = pm_runtime_get_sync(&pdev->dev); 1106 ret = pm_runtime_get_sync(&pdev->dev);
1120 if (IS_ERR_VALUE(ret)) 1107 if (IS_ERR_VALUE(ret))
@@ -1123,10 +1110,6 @@ static int __devexit omap_i2c_remove(struct platform_device *pdev)
1123 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); 1110 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
1124 pm_runtime_put(&pdev->dev); 1111 pm_runtime_put(&pdev->dev);
1125 pm_runtime_disable(&pdev->dev); 1112 pm_runtime_disable(&pdev->dev);
1126 iounmap(dev->base);
1127 kfree(dev);
1128 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1129 release_mem_region(mem->start, resource_size(mem));
1130 return 0; 1113 return 0;
1131} 1114}
1132 1115