diff options
author | Ulf Hansson <ulf.hansson@linaro.org> | 2014-02-18 17:35:44 -0500 |
---|---|---|
committer | Wolfram Sang <wsa@the-dreams.de> | 2014-03-05 11:10:30 -0500 |
commit | 9b2b98a3b4de464e871fa3a2da1e358d4001a3d2 (patch) | |
tree | 6ea8598b170886d78eb7b89b623e263b0fbc0597 /drivers/i2c/busses/i2c-nomadik.c | |
parent | c33a004c9568cbd4b944a1ab293289822e6d562d (diff) |
i2c: nomadik: Convert to devm functions
Use devm_* functions to simplify code and error handling.
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Diffstat (limited to 'drivers/i2c/busses/i2c-nomadik.c')
-rw-r--r-- | drivers/i2c/busses/i2c-nomadik.c | 31 |
1 files changed, 10 insertions, 21 deletions
diff --git a/drivers/i2c/busses/i2c-nomadik.c b/drivers/i2c/busses/i2c-nomadik.c index e2a890d84fb7..abd94a25a01b 100644 --- a/drivers/i2c/busses/i2c-nomadik.c +++ b/drivers/i2c/busses/i2c-nomadik.c | |||
@@ -976,7 +976,7 @@ static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id) | |||
976 | struct i2c_vendor_data *vendor = id->data; | 976 | struct i2c_vendor_data *vendor = id->data; |
977 | u32 max_fifo_threshold = (vendor->fifodepth / 2) - 1; | 977 | u32 max_fifo_threshold = (vendor->fifodepth / 2) - 1; |
978 | 978 | ||
979 | dev = kzalloc(sizeof(struct nmk_i2c_dev), GFP_KERNEL); | 979 | dev = devm_kzalloc(&adev->dev, sizeof(struct nmk_i2c_dev), GFP_KERNEL); |
980 | if (!dev) { | 980 | if (!dev) { |
981 | dev_err(&adev->dev, "cannot allocate memory\n"); | 981 | dev_err(&adev->dev, "cannot allocate memory\n"); |
982 | ret = -ENOMEM; | 982 | ret = -ENOMEM; |
@@ -1006,27 +1006,28 @@ static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id) | |||
1006 | /* If possible, let's go to idle until the first transfer */ | 1006 | /* If possible, let's go to idle until the first transfer */ |
1007 | pinctrl_pm_select_idle_state(&adev->dev); | 1007 | pinctrl_pm_select_idle_state(&adev->dev); |
1008 | 1008 | ||
1009 | dev->virtbase = ioremap(adev->res.start, resource_size(&adev->res)); | 1009 | dev->virtbase = devm_ioremap(&adev->dev, adev->res.start, |
1010 | if (!dev->virtbase) { | 1010 | resource_size(&adev->res)); |
1011 | if (IS_ERR(dev->virtbase)) { | ||
1011 | ret = -ENOMEM; | 1012 | ret = -ENOMEM; |
1012 | goto err_no_ioremap; | 1013 | goto err_no_mem; |
1013 | } | 1014 | } |
1014 | 1015 | ||
1015 | dev->irq = adev->irq[0]; | 1016 | dev->irq = adev->irq[0]; |
1016 | ret = request_irq(dev->irq, i2c_irq_handler, 0, | 1017 | ret = devm_request_irq(&adev->dev, dev->irq, i2c_irq_handler, 0, |
1017 | DRIVER_NAME, dev); | 1018 | DRIVER_NAME, dev); |
1018 | if (ret) { | 1019 | if (ret) { |
1019 | dev_err(&adev->dev, "cannot claim the irq %d\n", dev->irq); | 1020 | dev_err(&adev->dev, "cannot claim the irq %d\n", dev->irq); |
1020 | goto err_irq; | 1021 | goto err_no_mem; |
1021 | } | 1022 | } |
1022 | 1023 | ||
1023 | pm_suspend_ignore_children(&adev->dev, true); | 1024 | pm_suspend_ignore_children(&adev->dev, true); |
1024 | 1025 | ||
1025 | dev->clk = clk_get(&adev->dev, NULL); | 1026 | dev->clk = devm_clk_get(&adev->dev, NULL); |
1026 | if (IS_ERR(dev->clk)) { | 1027 | if (IS_ERR(dev->clk)) { |
1027 | dev_err(&adev->dev, "could not get i2c clock\n"); | 1028 | dev_err(&adev->dev, "could not get i2c clock\n"); |
1028 | ret = PTR_ERR(dev->clk); | 1029 | ret = PTR_ERR(dev->clk); |
1029 | goto err_no_clk; | 1030 | goto err_no_mem; |
1030 | } | 1031 | } |
1031 | 1032 | ||
1032 | adap = &dev->adap; | 1033 | adap = &dev->adap; |
@@ -1048,21 +1049,13 @@ static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id) | |||
1048 | ret = i2c_add_adapter(adap); | 1049 | ret = i2c_add_adapter(adap); |
1049 | if (ret) { | 1050 | if (ret) { |
1050 | dev_err(&adev->dev, "failed to add adapter\n"); | 1051 | dev_err(&adev->dev, "failed to add adapter\n"); |
1051 | goto err_add_adap; | 1052 | goto err_no_mem; |
1052 | } | 1053 | } |
1053 | 1054 | ||
1054 | pm_runtime_put(&adev->dev); | 1055 | pm_runtime_put(&adev->dev); |
1055 | 1056 | ||
1056 | return 0; | 1057 | return 0; |
1057 | 1058 | ||
1058 | err_add_adap: | ||
1059 | clk_put(dev->clk); | ||
1060 | err_no_clk: | ||
1061 | free_irq(dev->irq, dev); | ||
1062 | err_irq: | ||
1063 | iounmap(dev->virtbase); | ||
1064 | err_no_ioremap: | ||
1065 | kfree(dev); | ||
1066 | err_no_mem: | 1059 | err_no_mem: |
1067 | 1060 | ||
1068 | return ret; | 1061 | return ret; |
@@ -1079,13 +1072,9 @@ static int nmk_i2c_remove(struct amba_device *adev) | |||
1079 | clear_all_interrupts(dev); | 1072 | clear_all_interrupts(dev); |
1080 | /* disable the controller */ | 1073 | /* disable the controller */ |
1081 | i2c_clr_bit(dev->virtbase + I2C_CR, I2C_CR_PE); | 1074 | i2c_clr_bit(dev->virtbase + I2C_CR, I2C_CR_PE); |
1082 | free_irq(dev->irq, dev); | ||
1083 | iounmap(dev->virtbase); | ||
1084 | if (res) | 1075 | if (res) |
1085 | release_mem_region(res->start, resource_size(res)); | 1076 | release_mem_region(res->start, resource_size(res)); |
1086 | clk_put(dev->clk); | ||
1087 | pm_runtime_disable(&adev->dev); | 1077 | pm_runtime_disable(&adev->dev); |
1088 | kfree(dev); | ||
1089 | 1078 | ||
1090 | return 0; | 1079 | return 0; |
1091 | } | 1080 | } |