Commit 45b301d2b188af6db332cbb14c36e20b5204223e

Authored by Axel Lin
Committed by Thierry Reding
1 parent 261995dd30

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