提交 29831297 编写于 作者: N Nicolas Ferre

ARM: at91/tclib: take iomem size from resource

Requesting iomem region and ioremaping is now done using
the resource size specified instead of a constant value.

Each <SoC>_device.c file is modified accordingly to reflect
actual user interface size.
Signed-off-by: NNicolas Ferre <nicolas.ferre@atmel.com>
Acked-by: NJean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
上级 986c2657
...@@ -642,7 +642,7 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices) ...@@ -642,7 +642,7 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
static struct resource tcb0_resources[] = { static struct resource tcb0_resources[] = {
[0] = { [0] = {
.start = AT91SAM9260_BASE_TCB0, .start = AT91SAM9260_BASE_TCB0,
.end = AT91SAM9260_BASE_TCB0 + SZ_16K - 1, .end = AT91SAM9260_BASE_TCB0 + SZ_256 - 1,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, },
[1] = { [1] = {
...@@ -672,7 +672,7 @@ static struct platform_device at91sam9260_tcb0_device = { ...@@ -672,7 +672,7 @@ static struct platform_device at91sam9260_tcb0_device = {
static struct resource tcb1_resources[] = { static struct resource tcb1_resources[] = {
[0] = { [0] = {
.start = AT91SAM9260_BASE_TCB1, .start = AT91SAM9260_BASE_TCB1,
.end = AT91SAM9260_BASE_TCB1 + SZ_16K - 1, .end = AT91SAM9260_BASE_TCB1 + SZ_256 - 1,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, },
[1] = { [1] = {
......
...@@ -1052,7 +1052,7 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {} ...@@ -1052,7 +1052,7 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {}
static struct resource tcb0_resources[] = { static struct resource tcb0_resources[] = {
[0] = { [0] = {
.start = AT91SAM9G45_BASE_TCB0, .start = AT91SAM9G45_BASE_TCB0,
.end = AT91SAM9G45_BASE_TCB0 + SZ_16K - 1, .end = AT91SAM9G45_BASE_TCB0 + SZ_256 - 1,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, },
[1] = { [1] = {
...@@ -1073,7 +1073,7 @@ static struct platform_device at91sam9g45_tcb0_device = { ...@@ -1073,7 +1073,7 @@ static struct platform_device at91sam9g45_tcb0_device = {
static struct resource tcb1_resources[] = { static struct resource tcb1_resources[] = {
[0] = { [0] = {
.start = AT91SAM9G45_BASE_TCB1, .start = AT91SAM9G45_BASE_TCB1,
.end = AT91SAM9G45_BASE_TCB1 + SZ_16K - 1, .end = AT91SAM9G45_BASE_TCB1 + SZ_256 - 1,
.flags = IORESOURCE_MEM, .flags = IORESOURCE_MEM,
}, },
[1] = { [1] = {
......
...@@ -9,10 +9,6 @@ ...@@ -9,10 +9,6 @@
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/export.h> #include <linux/export.h>
/* Number of bytes to reserve for the iomem resource */
#define ATMEL_TC_IOMEM_SIZE 256
/* /*
* This is a thin library to solve the problem of how to portably allocate * This is a thin library to solve the problem of how to portably allocate
* one of the TC blocks. For simplicity, it doesn't currently expect to * one of the TC blocks. For simplicity, it doesn't currently expect to
...@@ -48,6 +44,7 @@ struct atmel_tc *atmel_tc_alloc(unsigned block, const char *name) ...@@ -48,6 +44,7 @@ struct atmel_tc *atmel_tc_alloc(unsigned block, const char *name)
struct atmel_tc *tc; struct atmel_tc *tc;
struct platform_device *pdev = NULL; struct platform_device *pdev = NULL;
struct resource *r; struct resource *r;
size_t size;
spin_lock(&tc_list_lock); spin_lock(&tc_list_lock);
list_for_each_entry(tc, &tc_list, node) { list_for_each_entry(tc, &tc_list, node) {
...@@ -61,11 +58,15 @@ struct atmel_tc *atmel_tc_alloc(unsigned block, const char *name) ...@@ -61,11 +58,15 @@ struct atmel_tc *atmel_tc_alloc(unsigned block, const char *name)
goto fail; goto fail;
r = platform_get_resource(pdev, IORESOURCE_MEM, 0); r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
r = request_mem_region(r->start, ATMEL_TC_IOMEM_SIZE, name);
if (!r) if (!r)
goto fail; goto fail;
tc->regs = ioremap(r->start, ATMEL_TC_IOMEM_SIZE); size = resource_size(r);
r = request_mem_region(r->start, size, name);
if (!r)
goto fail;
tc->regs = ioremap(r->start, size);
if (!tc->regs) if (!tc->regs)
goto fail_ioremap; goto fail_ioremap;
...@@ -76,7 +77,7 @@ struct atmel_tc *atmel_tc_alloc(unsigned block, const char *name) ...@@ -76,7 +77,7 @@ struct atmel_tc *atmel_tc_alloc(unsigned block, const char *name)
return tc; return tc;
fail_ioremap: fail_ioremap:
release_mem_region(r->start, ATMEL_TC_IOMEM_SIZE); release_mem_region(r->start, size);
fail: fail:
tc = NULL; tc = NULL;
goto out; goto out;
...@@ -96,7 +97,7 @@ void atmel_tc_free(struct atmel_tc *tc) ...@@ -96,7 +97,7 @@ void atmel_tc_free(struct atmel_tc *tc)
spin_lock(&tc_list_lock); spin_lock(&tc_list_lock);
if (tc->regs) { if (tc->regs) {
iounmap(tc->regs); iounmap(tc->regs);
release_mem_region(tc->iomem->start, ATMEL_TC_IOMEM_SIZE); release_mem_region(tc->iomem->start, resource_size(tc->iomem));
tc->regs = NULL; tc->regs = NULL;
tc->iomem = NULL; tc->iomem = NULL;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册