diff options
author | Lee Jones <lee.jones@linaro.org> | 2012-02-06 14:22:24 -0500 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2012-02-13 01:31:38 -0500 |
commit | eda413c228e227d888bc13d210e7c4c6aa62a682 (patch) | |
tree | 998f73c26e85a3557a2c911fd954c7ad0c0c8462 /arch/arm/mach-ux500/cpu-db8500.c | |
parent | 18403424c4fe5bac509bf52343f5d5407d45ee3a (diff) |
ARM: ux500: export System-on-Chip information ux500 via sysfs
Here we make use of the new System-On-Chip bus driver to export
vital SoC information out to userspace via sysfs. This patch
provides a data structure of strings to populate the base
nodes found in:
/sys/devices/soc[0|1|2|...]/[family|machine|revision|soc_id].
It also adds one more node as requested by ST-Ericsson.
'process' depicts the way in which the silicon was manufactured.
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'arch/arm/mach-ux500/cpu-db8500.c')
-rw-r--r-- | arch/arm/mach-ux500/cpu-db8500.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/arch/arm/mach-ux500/cpu-db8500.c b/arch/arm/mach-ux500/cpu-db8500.c index 1e8a2cb7e503..afcde3df71d7 100644 --- a/arch/arm/mach-ux500/cpu-db8500.c +++ b/arch/arm/mach-ux500/cpu-db8500.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <mach/setup.h> | 24 | #include <mach/setup.h> |
25 | #include <mach/devices.h> | 25 | #include <mach/devices.h> |
26 | #include <mach/usb.h> | 26 | #include <mach/usb.h> |
27 | #include <mach/db8500-regs.h> | ||
27 | 28 | ||
28 | #include "devices-db8500.h" | 29 | #include "devices-db8500.h" |
29 | #include "ste-dma40-db8500.h" | 30 | #include "ste-dma40-db8500.h" |
@@ -164,18 +165,38 @@ static int usb_db8500_tx_dma_cfg[] = { | |||
164 | DB8500_DMA_DEV39_USB_OTG_OEP_8 | 165 | DB8500_DMA_DEV39_USB_OTG_OEP_8 |
165 | }; | 166 | }; |
166 | 167 | ||
168 | static const char *db8500_read_soc_id(void) | ||
169 | { | ||
170 | void __iomem *uid = __io_address(U8500_BB_UID_BASE); | ||
171 | |||
172 | return kasprintf(GFP_KERNEL, "%08x%08x%08x%08x%08x", | ||
173 | readl((u32 *)uid+1), | ||
174 | readl((u32 *)uid+1), readl((u32 *)uid+2), | ||
175 | readl((u32 *)uid+3), readl((u32 *)uid+4)); | ||
176 | } | ||
177 | |||
178 | static struct device * __init db8500_soc_device_init(void) | ||
179 | { | ||
180 | const char *soc_id = db8500_read_soc_id(); | ||
181 | |||
182 | return ux500_soc_device_init(soc_id); | ||
183 | } | ||
184 | |||
167 | /* | 185 | /* |
168 | * This function is called from the board init | 186 | * This function is called from the board init |
169 | */ | 187 | */ |
170 | struct device* __init u8500_init_devices(void) | 188 | struct device * __init u8500_init_devices(void) |
171 | { | 189 | { |
172 | db8500_add_rtc(NULL); | 190 | struct device *parent; |
173 | db8500_add_gpios(NULL); | 191 | |
174 | db8500_add_usb(NULL, usb_db8500_rx_dma_cfg, usb_db8500_tx_dma_cfg); | 192 | parent = db8500_soc_device_init(); |
193 | |||
194 | db8500_add_rtc(parent); | ||
195 | db8500_add_gpios(parent); | ||
196 | db8500_add_usb(parent, usb_db8500_rx_dma_cfg, usb_db8500_tx_dma_cfg); | ||
175 | 197 | ||
176 | platform_device_register_simple("cpufreq-u8500", -1, NULL, 0); | 198 | platform_device_register_simple("cpufreq-u8500", -1, NULL, 0); |
177 | platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs)); | 199 | platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs)); |
178 | 200 | ||
179 | /* FIXME: Return value to be a real parent. */ | 201 | return parent; |
180 | return NULL; | ||
181 | } | 202 | } |