diff options
| author | David Woodhouse <David.Woodhouse@intel.com> | 2009-09-20 05:55:36 -0700 |
|---|---|---|
| committer | David Woodhouse <David.Woodhouse@intel.com> | 2009-09-20 05:55:36 -0700 |
| commit | 6469f540ea37d53db089c8fea9c0c77a3d9353d4 (patch) | |
| tree | 1dc9dc077150d57f4424cae49e711b5dd6e903a1 /drivers/amba/bus.c | |
| parent | 304e6d5fe294b80e6d3107f99ec241816390ebcc (diff) | |
| parent | 78f28b7c555359c67c2a0d23f7436e915329421e (diff) | |
| download | linux-6469f540ea37d53db089c8fea9c0c77a3d9353d4.tar.gz linux-6469f540ea37d53db089c8fea9c0c77a3d9353d4.tar.bz2 linux-6469f540ea37d53db089c8fea9c0c77a3d9353d4.zip | |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts:
drivers/mtd/mtdcore.c
Merged in order that I can apply the Nomadik nand/onenand support patches.
Diffstat (limited to 'drivers/amba/bus.c')
| -rw-r--r-- | drivers/amba/bus.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c index 246650673010..f60b2b6a0931 100644 --- a/drivers/amba/bus.c +++ b/drivers/amba/bus.c @@ -204,6 +204,7 @@ static void amba_device_release(struct device *dev) int amba_device_register(struct amba_device *dev, struct resource *parent) { u32 pid, cid; + u32 size; void __iomem *tmp; int i, ret; @@ -229,16 +230,25 @@ int amba_device_register(struct amba_device *dev, struct resource *parent) if (ret) goto err_out; - tmp = ioremap(dev->res.start, SZ_4K); + /* + * Dynamically calculate the size of the resource + * and use this for iomap + */ + size = resource_size(&dev->res); + tmp = ioremap(dev->res.start, size); if (!tmp) { ret = -ENOMEM; goto err_release; } + /* + * Read pid and cid based on size of resource + * they are located at end of region + */ for (pid = 0, i = 0; i < 4; i++) - pid |= (readl(tmp + 0xfe0 + 4 * i) & 255) << (i * 8); + pid |= (readl(tmp + size - 0x20 + 4 * i) & 255) << (i * 8); for (cid = 0, i = 0; i < 4; i++) - cid |= (readl(tmp + 0xff0 + 4 * i) & 255) << (i * 8); + cid |= (readl(tmp + size - 0x10 + 4 * i) & 255) << (i * 8); iounmap(tmp); @@ -353,11 +363,14 @@ amba_find_device(const char *busid, struct device *parent, unsigned int id, int amba_request_regions(struct amba_device *dev, const char *name) { int ret = 0; + u32 size; if (!name) name = dev->dev.driver->name; - if (!request_mem_region(dev->res.start, SZ_4K, name)) + size = resource_size(&dev->res); + + if (!request_mem_region(dev->res.start, size, name)) ret = -EBUSY; return ret; @@ -371,7 +384,10 @@ int amba_request_regions(struct amba_device *dev, const char *name) */ void amba_release_regions(struct amba_device *dev) { - release_mem_region(dev->res.start, SZ_4K); + u32 size; + + size = resource_size(&dev->res); + release_mem_region(dev->res.start, size); } EXPORT_SYMBOL(amba_driver_register); |
