aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-ux500/devices-db8500.c
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2013-02-07 04:17:31 -0500
committerLinus Walleij <linus.walleij@linaro.org>2013-02-12 06:44:27 -0500
commit05ec260edecaf3dc214cff49d43b1ad9b2cbb710 (patch)
tree7ce97e53a8098a9045191e302c8d9b06319133ac /arch/arm/mach-ux500/devices-db8500.c
parentf25610ce535304f7c2420970d1315c6c4fce157c (diff)
mfd: db8500-prcmu: update resource passing
When trying to get rid of the cross-includes of <mach/id.h> from different drivers, so we can localize ASIC/CPU detection to the mach-ux500 folder, we run into the way the PRCMU handles base addresses and firmware detection. This patch updates the firmware version detection to pass the required information as platform data instead of relying on cpu_is_* macros. Now the PRCMU base address, the secondary TCDM area, the TCPM area and the IRQ are passed as resources instead of being grabbed from <mach/*> files. Incidentally this also removes part of the reliance on <mach/irqs.h>. Further it updates the firmware version detection, since the location of the firmware ID bytes in the designated memory are is now passed from the platform data instead. There is no reason not to include the nice split-off of a struct to hold the firmware information and a separate function to populate it. The patch actually rids the need to use the external db8500_prcmu_early_init call at all, but I'm keepin back that removal as I don't want the patch to be too big. Cc: arm@kernel.org Cc: Michel Jaoen <michel.jaouen@stericsson.com> Cc: Lee Jones <lee.jones@linaro.org> Acked-by: Samuel Ortiz <sameo@linux.intel.com> Acked-by: Loic Pallardy <loic.pallardy@stericsson.com> Acked-by: Fabio Baltieri <fabio.baltieri@linaro.org> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'arch/arm/mach-ux500/devices-db8500.c')
-rw-r--r--arch/arm/mach-ux500/devices-db8500.c44
1 files changed, 44 insertions, 0 deletions
diff --git a/arch/arm/mach-ux500/devices-db8500.c b/arch/arm/mach-ux500/devices-db8500.c
index 318d49020894..f3d9419f75d3 100644
--- a/arch/arm/mach-ux500/devices-db8500.c
+++ b/arch/arm/mach-ux500/devices-db8500.c
@@ -13,11 +13,13 @@
13#include <linux/amba/bus.h> 13#include <linux/amba/bus.h>
14#include <linux/amba/pl022.h> 14#include <linux/amba/pl022.h>
15#include <linux/platform_data/dma-ste-dma40.h> 15#include <linux/platform_data/dma-ste-dma40.h>
16#include <linux/mfd/dbx500-prcmu.h>
16 17
17#include <mach/hardware.h> 18#include <mach/hardware.h>
18#include <mach/setup.h> 19#include <mach/setup.h>
19#include <mach/irqs.h> 20#include <mach/irqs.h>
20 21
22#include "devices-db8500.h"
21#include "ste-dma40-db8500.h" 23#include "ste-dma40-db8500.h"
22 24
23static struct resource dma40_resources[] = { 25static struct resource dma40_resources[] = {
@@ -194,3 +196,45 @@ struct platform_device u8500_ske_keypad_device = {
194 .num_resources = ARRAY_SIZE(keypad_resources), 196 .num_resources = ARRAY_SIZE(keypad_resources),
195 .resource = keypad_resources, 197 .resource = keypad_resources,
196}; 198};
199
200struct prcmu_pdata db8500_prcmu_pdata = {
201 .ab_platdata = &ab8500_platdata,
202 .version_offset = DB8500_PRCMU_FW_VERSION_OFFSET,
203 .legacy_offset = DB8500_PRCMU_LEGACY_OFFSET,
204};
205
206static struct resource db8500_prcmu_res[] = {
207 {
208 .name = "prcmu",
209 .start = U8500_PRCMU_BASE,
210 .end = U8500_PRCMU_BASE + SZ_8K - 1,
211 .flags = IORESOURCE_MEM,
212 },
213 {
214 .name = "prcmu-tcdm",
215 .start = U8500_PRCMU_TCDM_BASE,
216 .end = U8500_PRCMU_TCDM_BASE + SZ_4K - 1,
217 .flags = IORESOURCE_MEM,
218 },
219 {
220 .name = "irq",
221 .start = IRQ_DB8500_PRCMU1,
222 .end = IRQ_DB8500_PRCMU1,
223 .flags = IORESOURCE_IRQ,
224 },
225 {
226 .name = "prcmu-tcpm",
227 .start = U8500_PRCMU_TCPM_BASE,
228 .end = U8500_PRCMU_TCPM_BASE + SZ_4K - 1,
229 .flags = IORESOURCE_MEM,
230 },
231};
232
233struct platform_device db8500_prcmu_device = {
234 .name = "db8500-prcmu",
235 .resource = db8500_prcmu_res,
236 .num_resources = ARRAY_SIZE(db8500_prcmu_res),
237 .dev = {
238 .platform_data = &db8500_prcmu_pdata,
239 },
240};