aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/da8xx-fb.c
diff options
context:
space:
mode:
authorDarren Etheridge <detheridge@ti.com>2013-08-05 18:02:33 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2013-08-09 07:02:42 -0400
commitc45757f0f2c7655ae838e0f500c99794bdd6f33a (patch)
tree697902d0fd90d55039ac178b7f34ec6f9a45c961 /drivers/video/da8xx-fb.c
parente4008e2240605a64d595f3b9e070bfaf5a6950ff (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.c41
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
135static void __iomem *da8xx_fb_reg_base; 135static void __iomem *da8xx_fb_reg_base;
136static struct resource *lcdc_regs;
137static unsigned int lcd_revision; 136static unsigned int lcd_revision;
138static irq_handler_t lcdc_irq_handler; 137static irq_handler_t lcdc_irq_handler;
139static wait_queue_head_t frame_done_wq; 138static 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
1492err_ioremap:
1493 iounmap(da8xx_fb_reg_base);
1494
1495err_request_mem:
1496 release_mem_region(lcdc_regs->start, len);
1497
1498 return ret; 1473 return ret;
1499} 1474}
1500 1475