@@ -186,7 +186,6 @@ struct s3c_fb_vsync {
186
186
* struct s3c_fb - overall hardware state of the hardware
187
187
* @slock: The spinlock protection for this data sturcture.
188
188
* @dev: The device that we bound to, for printing, etc.
189
- * @regs_res: The resource we claimed for the IO registers.
190
189
* @bus_clk: The clk (hclk) feeding our interface and possibly pixclk.
191
190
* @lcd_clk: The clk (sclk) feeding pixclk.
192
191
* @regs: The mapped hardware registers.
@@ -202,7 +201,6 @@ struct s3c_fb_vsync {
202
201
struct s3c_fb {
203
202
spinlock_t slock ;
204
203
struct device * dev ;
205
- struct resource * regs_res ;
206
204
struct clk * bus_clk ;
207
205
struct clk * lcd_clk ;
208
206
void __iomem * regs ;
@@ -1361,7 +1359,7 @@ static int __devinit s3c_fb_probe(struct platform_device *pdev)
1361
1359
return - EINVAL ;
1362
1360
}
1363
1361
1364
- sfb = kzalloc ( sizeof (struct s3c_fb ), GFP_KERNEL );
1362
+ sfb = devm_kzalloc ( dev , sizeof (struct s3c_fb ), GFP_KERNEL );
1365
1363
if (!sfb ) {
1366
1364
dev_err (dev , "no memory for framebuffers\n" );
1367
1365
return - ENOMEM ;
@@ -1404,33 +1402,25 @@ static int __devinit s3c_fb_probe(struct platform_device *pdev)
1404
1402
goto err_lcd_clk ;
1405
1403
}
1406
1404
1407
- sfb -> regs_res = request_mem_region (res -> start , resource_size (res ),
1408
- dev_name (dev ));
1409
- if (!sfb -> regs_res ) {
1410
- dev_err (dev , "failed to claim register region\n" );
1411
- ret = - ENOENT ;
1412
- goto err_lcd_clk ;
1413
- }
1414
-
1415
- sfb -> regs = ioremap (res -> start , resource_size (res ));
1405
+ sfb -> regs = devm_request_and_ioremap (dev , res );
1416
1406
if (!sfb -> regs ) {
1417
1407
dev_err (dev , "failed to map registers\n" );
1418
1408
ret = - ENXIO ;
1419
- goto err_req_region ;
1409
+ goto err_lcd_clk ;
1420
1410
}
1421
1411
1422
1412
res = platform_get_resource (pdev , IORESOURCE_IRQ , 0 );
1423
1413
if (!res ) {
1424
1414
dev_err (dev , "failed to acquire irq resource\n" );
1425
1415
ret = - ENOENT ;
1426
- goto err_ioremap ;
1416
+ goto err_lcd_clk ;
1427
1417
}
1428
1418
sfb -> irq_no = res -> start ;
1429
1419
ret = request_irq (sfb -> irq_no , s3c_fb_irq ,
1430
1420
0 , "s3c_fb" , sfb );
1431
1421
if (ret ) {
1432
1422
dev_err (dev , "irq request failed\n" );
1433
- goto err_ioremap ;
1423
+ goto err_lcd_clk ;
1434
1424
}
1435
1425
1436
1426
dev_dbg (dev , "got resources (regs %p), probing windows\n" , sfb -> regs );
@@ -1486,12 +1476,6 @@ static int __devinit s3c_fb_probe(struct platform_device *pdev)
1486
1476
pm_runtime_put_sync (sfb -> dev );
1487
1477
free_irq (sfb -> irq_no , sfb );
1488
1478
1489
- err_ioremap :
1490
- iounmap (sfb -> regs );
1491
-
1492
- err_req_region :
1493
- release_mem_region (sfb -> regs_res -> start , resource_size (sfb -> regs_res ));
1494
-
1495
1479
err_lcd_clk :
1496
1480
pm_runtime_disable (sfb -> dev );
1497
1481
@@ -1505,7 +1489,6 @@ static int __devinit s3c_fb_probe(struct platform_device *pdev)
1505
1489
clk_put (sfb -> bus_clk );
1506
1490
1507
1491
err_sfb :
1508
- kfree (sfb );
1509
1492
return ret ;
1510
1493
}
1511
1494
@@ -1529,8 +1512,6 @@ static int __devexit s3c_fb_remove(struct platform_device *pdev)
1529
1512
1530
1513
free_irq (sfb -> irq_no , sfb );
1531
1514
1532
- iounmap (sfb -> regs );
1533
-
1534
1515
if (!sfb -> variant .has_clksel ) {
1535
1516
clk_disable (sfb -> lcd_clk );
1536
1517
clk_put (sfb -> lcd_clk );
@@ -1539,12 +1520,9 @@ static int __devexit s3c_fb_remove(struct platform_device *pdev)
1539
1520
clk_disable (sfb -> bus_clk );
1540
1521
clk_put (sfb -> bus_clk );
1541
1522
1542
- release_mem_region (sfb -> regs_res -> start , resource_size (sfb -> regs_res ));
1543
-
1544
1523
pm_runtime_put_sync (sfb -> dev );
1545
1524
pm_runtime_disable (sfb -> dev );
1546
1525
1547
- kfree (sfb );
1548
1526
return 0 ;
1549
1527
}
1550
1528
0 commit comments