aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-at91/at91sam9260_devices.c4
-rw-r--r--arch/arm/mach-at91/at91sam9g45_devices.c4
-rw-r--r--drivers/misc/atmel_tclib.c17
3 files changed, 13 insertions, 12 deletions
diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c
index df487ce83c5e..c450cb3970a0 100644
--- a/arch/arm/mach-at91/at91sam9260_devices.c
+++ b/arch/arm/mach-at91/at91sam9260_devices.c
@@ -642,7 +642,7 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
642static struct resource tcb0_resources[] = { 642static struct resource tcb0_resources[] = {
643 [0] = { 643 [0] = {
644 .start = AT91SAM9260_BASE_TCB0, 644 .start = AT91SAM9260_BASE_TCB0,
645 .end = AT91SAM9260_BASE_TCB0 + SZ_16K - 1, 645 .end = AT91SAM9260_BASE_TCB0 + SZ_256 - 1,
646 .flags = IORESOURCE_MEM, 646 .flags = IORESOURCE_MEM,
647 }, 647 },
648 [1] = { 648 [1] = {
@@ -672,7 +672,7 @@ static struct platform_device at91sam9260_tcb0_device = {
672static struct resource tcb1_resources[] = { 672static struct resource tcb1_resources[] = {
673 [0] = { 673 [0] = {
674 .start = AT91SAM9260_BASE_TCB1, 674 .start = AT91SAM9260_BASE_TCB1,
675 .end = AT91SAM9260_BASE_TCB1 + SZ_16K - 1, 675 .end = AT91SAM9260_BASE_TCB1 + SZ_256 - 1,
676 .flags = IORESOURCE_MEM, 676 .flags = IORESOURCE_MEM,
677 }, 677 },
678 [1] = { 678 [1] = {
diff --git a/arch/arm/mach-at91/at91sam9g45_devices.c b/arch/arm/mach-at91/at91sam9g45_devices.c
index 410829532aab..aee595013d33 100644
--- a/arch/arm/mach-at91/at91sam9g45_devices.c
+++ b/arch/arm/mach-at91/at91sam9g45_devices.c
@@ -1052,7 +1052,7 @@ void __init at91_add_device_lcdc(struct atmel_lcdfb_info *data) {}
1052static struct resource tcb0_resources[] = { 1052static struct resource tcb0_resources[] = {
1053 [0] = { 1053 [0] = {
1054 .start = AT91SAM9G45_BASE_TCB0, 1054 .start = AT91SAM9G45_BASE_TCB0,
1055 .end = AT91SAM9G45_BASE_TCB0 + SZ_16K - 1, 1055 .end = AT91SAM9G45_BASE_TCB0 + SZ_256 - 1,
1056 .flags = IORESOURCE_MEM, 1056 .flags = IORESOURCE_MEM,
1057 }, 1057 },
1058 [1] = { 1058 [1] = {
@@ -1073,7 +1073,7 @@ static struct platform_device at91sam9g45_tcb0_device = {
1073static struct resource tcb1_resources[] = { 1073static struct resource tcb1_resources[] = {
1074 [0] = { 1074 [0] = {
1075 .start = AT91SAM9G45_BASE_TCB1, 1075 .start = AT91SAM9G45_BASE_TCB1,
1076 .end = AT91SAM9G45_BASE_TCB1 + SZ_16K - 1, 1076 .end = AT91SAM9G45_BASE_TCB1 + SZ_256 - 1,
1077 .flags = IORESOURCE_MEM, 1077 .flags = IORESOURCE_MEM,
1078 }, 1078 },
1079 [1] = { 1079 [1] = {
diff --git a/drivers/misc/atmel_tclib.c b/drivers/misc/atmel_tclib.c
index 4bcfc3759734..7a6512a148d4 100644
--- a/drivers/misc/atmel_tclib.c
+++ b/drivers/misc/atmel_tclib.c
@@ -9,10 +9,6 @@
9#include <linux/slab.h> 9#include <linux/slab.h>
10#include <linux/export.h> 10#include <linux/export.h>
11 11
12/* Number of bytes to reserve for the iomem resource */
13#define ATMEL_TC_IOMEM_SIZE 256
14
15
16/* 12/*
17 * This is a thin library to solve the problem of how to portably allocate 13 * This is a thin library to solve the problem of how to portably allocate
18 * one of the TC blocks. For simplicity, it doesn't currently expect to 14 * 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 struct atmel_tc *tc; 44 struct atmel_tc *tc;
49 struct platform_device *pdev = NULL; 45 struct platform_device *pdev = NULL;
50 struct resource *r; 46 struct resource *r;
47 size_t size;
51 48
52 spin_lock(&tc_list_lock); 49 spin_lock(&tc_list_lock);
53 list_for_each_entry(tc, &tc_list, node) { 50 list_for_each_entry(tc, &tc_list, node) {
@@ -61,11 +58,15 @@ struct atmel_tc *atmel_tc_alloc(unsigned block, const char *name)
61 goto fail; 58 goto fail;
62 59
63 r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 60 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
64 r = request_mem_region(r->start, ATMEL_TC_IOMEM_SIZE, name);
65 if (!r) 61 if (!r)
66 goto fail; 62 goto fail;
67 63
68 tc->regs = ioremap(r->start, ATMEL_TC_IOMEM_SIZE); 64 size = resource_size(r);
65 r = request_mem_region(r->start, size, name);
66 if (!r)
67 goto fail;
68
69 tc->regs = ioremap(r->start, size);
69 if (!tc->regs) 70 if (!tc->regs)
70 goto fail_ioremap; 71 goto fail_ioremap;
71 72
@@ -76,7 +77,7 @@ out:
76 return tc; 77 return tc;
77 78
78fail_ioremap: 79fail_ioremap:
79 release_mem_region(r->start, ATMEL_TC_IOMEM_SIZE); 80 release_mem_region(r->start, size);
80fail: 81fail:
81 tc = NULL; 82 tc = NULL;
82 goto out; 83 goto out;
@@ -96,7 +97,7 @@ void atmel_tc_free(struct atmel_tc *tc)
96 spin_lock(&tc_list_lock); 97 spin_lock(&tc_list_lock);
97 if (tc->regs) { 98 if (tc->regs) {
98 iounmap(tc->regs); 99 iounmap(tc->regs);
99 release_mem_region(tc->iomem->start, ATMEL_TC_IOMEM_SIZE); 100 release_mem_region(tc->iomem->start, resource_size(tc->iomem));
100 tc->regs = NULL; 101 tc->regs = NULL;
101 tc->iomem = NULL; 102 tc->iomem = NULL;
102 } 103 }