Commit 45b301d2b188af6db332cbb14c36e20b5204223e
Committed by
Thierry Reding
1 parent
261995dd30
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
pwm: Convert pwm-pxa to use devm_* APIs
Signed-off-by: Axel Lin <axel.lin@gmail.com> Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de>
Showing 1 changed file with 10 additions and 39 deletions Side-by-side Diff
drivers/pwm/pwm-pxa.c
1 | 1 | /* |
2 | - * linux/arch/arm/mach-pxa/pwm.c | |
2 | + * drivers/pwm/pwm-pxa.c | |
3 | 3 | * |
4 | 4 | * simple driver for PWM (Pulse Width Modulator) controller |
5 | 5 | * |
6 | 6 | |
... | ... | @@ -145,17 +145,16 @@ |
145 | 145 | struct resource *r; |
146 | 146 | int ret = 0; |
147 | 147 | |
148 | - pwm = kzalloc(sizeof(*pwm), GFP_KERNEL); | |
148 | + pwm = devm_kzalloc(&pdev->dev, sizeof(*pwm), GFP_KERNEL); | |
149 | 149 | if (pwm == NULL) { |
150 | 150 | dev_err(&pdev->dev, "failed to allocate memory\n"); |
151 | 151 | return -ENOMEM; |
152 | 152 | } |
153 | 153 | |
154 | - pwm->clk = clk_get(&pdev->dev, NULL); | |
155 | - if (IS_ERR(pwm->clk)) { | |
156 | - ret = PTR_ERR(pwm->clk); | |
157 | - goto err_free; | |
158 | - } | |
154 | + pwm->clk = devm_clk_get(&pdev->dev, NULL); | |
155 | + if (IS_ERR(pwm->clk)) | |
156 | + return PTR_ERR(pwm->clk); | |
157 | + | |
159 | 158 | pwm->clk_enabled = 0; |
160 | 159 | |
161 | 160 | pwm->chip.dev = &pdev->dev; |
162 | 161 | |
163 | 162 | |
... | ... | @@ -166,24 +165,13 @@ |
166 | 165 | r = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
167 | 166 | if (r == NULL) { |
168 | 167 | dev_err(&pdev->dev, "no memory resource defined\n"); |
169 | - ret = -ENODEV; | |
170 | - goto err_free_clk; | |
168 | + return -ENODEV; | |
171 | 169 | } |
172 | 170 | |
173 | - r = request_mem_region(r->start, resource_size(r), pdev->name); | |
174 | - if (r == NULL) { | |
175 | - dev_err(&pdev->dev, "failed to request memory resource\n"); | |
176 | - ret = -EBUSY; | |
177 | - goto err_free_clk; | |
178 | - } | |
171 | + pwm->mmio_base = devm_request_and_ioremap(&pdev->dev, r); | |
172 | + if (pwm->mmio_base == NULL) | |
173 | + return -EADDRNOTAVAIL; | |
179 | 174 | |
180 | - pwm->mmio_base = ioremap(r->start, resource_size(r)); | |
181 | - if (pwm->mmio_base == NULL) { | |
182 | - dev_err(&pdev->dev, "failed to ioremap() registers\n"); | |
183 | - ret = -ENODEV; | |
184 | - goto err_free_mem; | |
185 | - } | |
186 | - | |
187 | 175 | ret = pwmchip_add(&pwm->chip); |
188 | 176 | if (ret < 0) { |
189 | 177 | dev_err(&pdev->dev, "pwmchip_add() failed: %d\n", ret); |
190 | 178 | |
191 | 179 | |
... | ... | @@ -192,34 +180,17 @@ |
192 | 180 | |
193 | 181 | platform_set_drvdata(pdev, pwm); |
194 | 182 | return 0; |
195 | - | |
196 | -err_free_mem: | |
197 | - release_mem_region(r->start, resource_size(r)); | |
198 | -err_free_clk: | |
199 | - clk_put(pwm->clk); | |
200 | -err_free: | |
201 | - kfree(pwm); | |
202 | - return ret; | |
203 | 183 | } |
204 | 184 | |
205 | 185 | static int __devexit pwm_remove(struct platform_device *pdev) |
206 | 186 | { |
207 | 187 | struct pxa_pwm_chip *chip; |
208 | - struct resource *r; | |
209 | 188 | |
210 | 189 | chip = platform_get_drvdata(pdev); |
211 | 190 | if (chip == NULL) |
212 | 191 | return -ENODEV; |
213 | 192 | |
214 | 193 | pwmchip_remove(&chip->chip); |
215 | - | |
216 | - iounmap(chip->mmio_base); | |
217 | - | |
218 | - r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | |
219 | - release_mem_region(r->start, resource_size(r)); | |
220 | - | |
221 | - clk_put(chip->clk); | |
222 | - kfree(chip); | |
223 | 194 | return 0; |
224 | 195 | } |
225 | 196 |