diff options
author | Darren Etheridge <detheridge@ti.com> | 2013-08-05 18:02:33 -0400 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2013-08-09 07:02:42 -0400 |
commit | c45757f0f2c7655ae838e0f500c99794bdd6f33a (patch) | |
tree | 697902d0fd90d55039ac178b7f34ec6f9a45c961 /drivers/video/da8xx-fb.c | |
parent | e4008e2240605a64d595f3b9e070bfaf5a6950ff (diff) |
video: da8xx-fb: use devres
Replace existing resource handling in the driver with managed device
resource.
v2: implement some changes as recommended by
Prabhakar Lad <prabhakar.csengg@gmail.com>
Signed-off-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
Signed-off-by: Darren Etheridge <detheridge@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/video/da8xx-fb.c')
-rw-r--r-- | drivers/video/da8xx-fb.c | 41 |
1 files changed, 8 insertions, 33 deletions
diff --git a/drivers/video/da8xx-fb.c b/drivers/video/da8xx-fb.c index 8384455164d7..c620a32e5ac9 100644 --- a/drivers/video/da8xx-fb.c +++ b/drivers/video/da8xx-fb.c | |||
@@ -133,7 +133,6 @@ | |||
133 | #define PALETTE_SIZE 256 | 133 | #define PALETTE_SIZE 256 |
134 | 134 | ||
135 | static void __iomem *da8xx_fb_reg_base; | 135 | static void __iomem *da8xx_fb_reg_base; |
136 | static struct resource *lcdc_regs; | ||
137 | static unsigned int lcd_revision; | 136 | static unsigned int lcd_revision; |
138 | static irq_handler_t lcdc_irq_handler; | 137 | static irq_handler_t lcdc_irq_handler; |
139 | static wait_queue_head_t frame_done_wq; | 138 | static wait_queue_head_t frame_done_wq; |
@@ -1039,12 +1038,9 @@ static int fb_remove(struct platform_device *dev) | |||
1039 | par->p_palette_base); | 1038 | par->p_palette_base); |
1040 | dma_free_coherent(NULL, par->vram_size, par->vram_virt, | 1039 | dma_free_coherent(NULL, par->vram_size, par->vram_virt, |
1041 | par->vram_phys); | 1040 | par->vram_phys); |
1042 | free_irq(par->irq, par); | ||
1043 | pm_runtime_put_sync(&dev->dev); | 1041 | pm_runtime_put_sync(&dev->dev); |
1044 | pm_runtime_disable(&dev->dev); | 1042 | pm_runtime_disable(&dev->dev); |
1045 | framebuffer_release(info); | 1043 | framebuffer_release(info); |
1046 | iounmap(da8xx_fb_reg_base); | ||
1047 | release_mem_region(lcdc_regs->start, resource_size(lcdc_regs)); | ||
1048 | 1044 | ||
1049 | } | 1045 | } |
1050 | return 0; | 1046 | return 0; |
@@ -1261,12 +1257,12 @@ static int fb_probe(struct platform_device *device) | |||
1261 | { | 1257 | { |
1262 | struct da8xx_lcdc_platform_data *fb_pdata = | 1258 | struct da8xx_lcdc_platform_data *fb_pdata = |
1263 | device->dev.platform_data; | 1259 | device->dev.platform_data; |
1260 | static struct resource *lcdc_regs; | ||
1264 | struct lcd_ctrl_config *lcd_cfg; | 1261 | struct lcd_ctrl_config *lcd_cfg; |
1265 | struct fb_videomode *lcdc_info; | 1262 | struct fb_videomode *lcdc_info; |
1266 | struct fb_info *da8xx_fb_info; | 1263 | struct fb_info *da8xx_fb_info; |
1267 | struct clk *fb_clk = NULL; | 1264 | struct clk *fb_clk = NULL; |
1268 | struct da8xx_fb_par *par; | 1265 | struct da8xx_fb_par *par; |
1269 | resource_size_t len; | ||
1270 | int ret, i; | 1266 | int ret, i; |
1271 | unsigned long ulcm; | 1267 | unsigned long ulcm; |
1272 | 1268 | ||
@@ -1276,29 +1272,14 @@ static int fb_probe(struct platform_device *device) | |||
1276 | } | 1272 | } |
1277 | 1273 | ||
1278 | lcdc_regs = platform_get_resource(device, IORESOURCE_MEM, 0); | 1274 | lcdc_regs = platform_get_resource(device, IORESOURCE_MEM, 0); |
1279 | if (!lcdc_regs) { | 1275 | da8xx_fb_reg_base = devm_ioremap_resource(&device->dev, lcdc_regs); |
1280 | dev_err(&device->dev, | 1276 | if (IS_ERR(da8xx_fb_reg_base)) |
1281 | "Can not get memory resource for LCD controller\n"); | 1277 | return PTR_ERR(da8xx_fb_reg_base); |
1282 | return -ENOENT; | ||
1283 | } | ||
1284 | |||
1285 | len = resource_size(lcdc_regs); | ||
1286 | |||
1287 | lcdc_regs = request_mem_region(lcdc_regs->start, len, lcdc_regs->name); | ||
1288 | if (!lcdc_regs) | ||
1289 | return -EBUSY; | ||
1290 | 1278 | ||
1291 | da8xx_fb_reg_base = ioremap(lcdc_regs->start, len); | 1279 | fb_clk = devm_clk_get(&device->dev, "fck"); |
1292 | if (!da8xx_fb_reg_base) { | ||
1293 | ret = -EBUSY; | ||
1294 | goto err_request_mem; | ||
1295 | } | ||
1296 | |||
1297 | fb_clk = clk_get(&device->dev, "fck"); | ||
1298 | if (IS_ERR(fb_clk)) { | 1280 | if (IS_ERR(fb_clk)) { |
1299 | dev_err(&device->dev, "Can not get device clock\n"); | 1281 | dev_err(&device->dev, "Can not get device clock\n"); |
1300 | ret = -ENODEV; | 1282 | return PTR_ERR(fb_clk); |
1301 | goto err_ioremap; | ||
1302 | } | 1283 | } |
1303 | 1284 | ||
1304 | pm_runtime_enable(&device->dev); | 1285 | pm_runtime_enable(&device->dev); |
@@ -1459,8 +1440,8 @@ static int fb_probe(struct platform_device *device) | |||
1459 | lcdc_irq_handler = lcdc_irq_handler_rev02; | 1440 | lcdc_irq_handler = lcdc_irq_handler_rev02; |
1460 | } | 1441 | } |
1461 | 1442 | ||
1462 | ret = request_irq(par->irq, lcdc_irq_handler, 0, | 1443 | ret = devm_request_irq(&device->dev, par->irq, lcdc_irq_handler, 0, |
1463 | DRIVER_NAME, par); | 1444 | DRIVER_NAME, par); |
1464 | if (ret) | 1445 | if (ret) |
1465 | goto irq_freq; | 1446 | goto irq_freq; |
1466 | return 0; | 1447 | return 0; |
@@ -1489,12 +1470,6 @@ err_pm_runtime_disable: | |||
1489 | pm_runtime_put_sync(&device->dev); | 1470 | pm_runtime_put_sync(&device->dev); |
1490 | pm_runtime_disable(&device->dev); | 1471 | pm_runtime_disable(&device->dev); |
1491 | 1472 | ||
1492 | err_ioremap: | ||
1493 | iounmap(da8xx_fb_reg_base); | ||
1494 | |||
1495 | err_request_mem: | ||
1496 | release_mem_region(lcdc_regs->start, len); | ||
1497 | |||
1498 | return ret; | 1473 | return ret; |
1499 | } | 1474 | } |
1500 | 1475 | ||