/*
 * This function is called from the board init
 */
struct device * __init u8500_init_devices(void)
{
	struct device *parent;
	int i;

#ifdef CONFIG_STM_TRACE
	/* Early init for STM tracing */
	platform_device_register(&ux500_stm_device);
#endif

	parent = db8500_soc_device_init();

	db8500_dma_init();
	db8500_icn_init();
	db8500_add_rtc(parent);
	db8500_add_usb(parent, usb_db8500_rx_dma_cfg, usb_db8500_tx_dma_cfg);

	for (i = 0; i < ARRAY_SIZE(platform_devs); i++)
		platform_devs[i]->dev.parent = parent;

	((struct dbx500_cpuidle_platform_data *)
	 db8500_cpuidle_device.dev.platform_data)->broadcast_clkevt =
		nmdk_clkevt_get();

	platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs));

	return parent;
}
/*
 * This function is called from the board init
 */
void __init u8500_init_devices(void)
{
	ux500_init_devices();

#ifdef CONFIG_STM_TRACE
	/* Early init for STM tracing */
	platform_device_register(&ux500_stm_device);
#endif

	db8500_dma_init();
	db8500_icn_init();
	db8500_add_rtc();
	db8500_add_usb(usb_db8500_rx_dma_cfg, usb_db8500_tx_dma_cfg);

	platform_device_register_simple("cpufreq-u8500", -1, NULL, 0);
	platform_add_devices(platform_devs, ARRAY_SIZE(platform_devs));

	return ;
}