Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pwm: Convert pwm-imx to use devm_* APIs

Signed-off-by: Axel Lin <axel.lin@gmail.com>
Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de>

authored by

Axel Lin and committed by
Thierry Reding
a9970e3b eac7a92f

+10 -47
+10 -47
drivers/pwm/pwm-imx.c
··· 159 159 struct resource *r; 160 160 int ret = 0; 161 161 162 - imx = kzalloc(sizeof(*imx), GFP_KERNEL); 162 + imx = devm_kzalloc(&pdev->dev, sizeof(*imx), GFP_KERNEL); 163 163 if (imx == NULL) { 164 164 dev_err(&pdev->dev, "failed to allocate memory\n"); 165 165 return -ENOMEM; 166 166 } 167 167 168 - imx->clk = clk_get(&pdev->dev, "pwm"); 168 + imx->clk = devm_clk_get(&pdev->dev, "pwm"); 169 169 170 - if (IS_ERR(imx->clk)) { 171 - ret = PTR_ERR(imx->clk); 172 - goto err_free; 173 - } 170 + if (IS_ERR(imx->clk)) 171 + return PTR_ERR(imx->clk); 174 172 175 173 imx->chip.ops = &imx_pwm_ops; 176 174 imx->chip.dev = &pdev->dev; ··· 180 182 r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 181 183 if (r == NULL) { 182 184 dev_err(&pdev->dev, "no memory resource defined\n"); 183 - ret = -ENODEV; 184 - goto err_free_clk; 185 + return -ENODEV; 185 186 } 186 187 187 - r = request_mem_region(r->start, resource_size(r), pdev->name); 188 - if (r == NULL) { 189 - dev_err(&pdev->dev, "failed to request memory resource\n"); 190 - ret = -EBUSY; 191 - goto err_free_clk; 192 - } 193 - 194 - imx->mmio_base = ioremap(r->start, resource_size(r)); 195 - if (imx->mmio_base == NULL) { 196 - dev_err(&pdev->dev, "failed to ioremap() registers\n"); 197 - ret = -ENODEV; 198 - goto err_free_mem; 199 - } 188 + imx->mmio_base = devm_request_and_ioremap(&pdev->dev, r); 189 + if (imx->mmio_base == NULL) 190 + return -EADDRNOTAVAIL; 200 191 201 192 ret = pwmchip_add(&imx->chip); 202 193 if (ret < 0) 203 - goto err_iounmap; 194 + return ret; 204 195 205 196 platform_set_drvdata(pdev, imx); 206 197 return 0; 207 - 208 - err_iounmap: 209 - iounmap(imx->mmio_base); 210 - err_free_mem: 211 - release_mem_region(r->start, resource_size(r)); 212 - err_free_clk: 213 - clk_put(imx->clk); 214 - err_free: 215 - kfree(imx); 216 - return ret; 217 198 } 218 199 219 200 static int __devexit imx_pwm_remove(struct platform_device *pdev) 220 201 { 221 202 struct imx_chip *imx; 222 - struct resource *r; 223 - int ret; 224 203 225 204 imx = platform_get_drvdata(pdev); 226 205 if (imx == NULL) 227 206 return -ENODEV; 228 207 229 - ret = pwmchip_remove(&imx->chip); 230 - if (ret) 231 - return ret; 232 - 233 - iounmap(imx->mmio_base); 234 - 235 - r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 236 - release_mem_region(r->start, resource_size(r)); 237 - 238 - clk_put(imx->clk); 239 - 240 - kfree(imx); 241 - return 0; 208 + return pwmchip_remove(&imx->chip); 242 209 } 243 210 244 211 static struct platform_driver imx_pwm_driver = {