diff options
Diffstat (limited to 'arch/arm/mach-omap2/devices.c')
| -rw-r--r-- | arch/arm/mach-omap2/devices.c | 225 | 
1 files changed, 78 insertions, 147 deletions
diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c index 626f3ea3142..4269fc14569 100644 --- a/arch/arm/mach-omap2/devices.c +++ b/arch/arm/mach-omap2/devices.c @@ -20,6 +20,7 @@  #include <linux/pinctrl/machine.h>  #include <linux/platform_data/omap4-keypad.h>  #include <linux/platform_data/omap_ocp2scp.h> +#include <linux/usb/omap_control_usb.h>  #include <asm/mach-types.h>  #include <asm/mach/map.h> @@ -61,14 +62,13 @@ static int __init omap3_l3_init(void)  	if (!oh)  		pr_err("could not look up %s\n", oh_name); -	pdev = omap_device_build("omap_l3_smx", 0, oh, NULL, 0, -							   NULL, 0, 0); +	pdev = omap_device_build("omap_l3_smx", 0, oh, NULL, 0);  	WARN(IS_ERR(pdev), "could not build omap_device for %s\n", oh_name);  	return IS_ERR(pdev) ? PTR_ERR(pdev) : 0;  } -postcore_initcall(omap3_l3_init); +omap_postcore_initcall(omap3_l3_init);  static int __init omap4_l3_init(void)  { @@ -96,14 +96,13 @@ static int __init omap4_l3_init(void)  			pr_err("could not look up %s\n", oh_name);  	} -	pdev = omap_device_build_ss("omap_l3_noc", 0, oh, 3, NULL, -						     0, NULL, 0, 0); +	pdev = omap_device_build_ss("omap_l3_noc", 0, oh, 3, NULL, 0);  	WARN(IS_ERR(pdev), "could not build omap_device for %s\n", oh_name);  	return IS_ERR(pdev) ? PTR_ERR(pdev) : 0;  } -postcore_initcall(omap4_l3_init); +omap_postcore_initcall(omap4_l3_init);  #if defined(CONFIG_VIDEO_OMAP2) || defined(CONFIG_VIDEO_OMAP2_MODULE) @@ -254,6 +253,49 @@ static inline void omap_init_camera(void)  #endif  } +#if IS_ENABLED(CONFIG_OMAP_CONTROL_USB) +static struct omap_control_usb_platform_data omap4_control_usb_pdata = { +	.type = 1, +}; + +struct resource omap4_control_usb_res[] = { +	{ +		.name	= "control_dev_conf", +		.start	= 0x4a002300, +		.end	= 0x4a002303, +		.flags	= IORESOURCE_MEM, +	}, +	{ +		.name	= "otghs_control", +		.start	= 0x4a00233c, +		.end	= 0x4a00233f, +		.flags	= IORESOURCE_MEM, +	}, +}; + +static struct platform_device omap4_control_usb = { +	.name = "omap-control-usb", +	.id = -1, +	.dev = { +		.platform_data = &omap4_control_usb_pdata, +	}, +	.num_resources = 2, +	.resource = omap4_control_usb_res, +}; + +static inline void __init omap_init_control_usb(void) +{ +	if (!cpu_is_omap44xx()) +		return; + +	if (platform_device_register(&omap4_control_usb)) +		pr_err("Error registering omap_control_usb device\n"); +} + +#else +static inline void omap_init_control_usb(void) { } +#endif /* CONFIG_OMAP_CONTROL_USB */ +  int __init omap4_keyboard_init(struct omap4_keypad_platform_data  			*sdp4430_keypad_data, struct omap_board_data *bdata)  { @@ -273,7 +315,7 @@ int __init omap4_keyboard_init(struct omap4_keypad_platform_data  	keypad_data = sdp4430_keypad_data;  	pdev = omap_device_build(name, id, oh, keypad_data, -			sizeof(struct omap4_keypad_platform_data), NULL, 0, 0); +				 sizeof(struct omap4_keypad_platform_data));  	if (IS_ERR(pdev)) {  		WARN(1, "Can't build omap_device for %s:%s.\n", @@ -297,7 +339,7 @@ static inline void __init omap_init_mbox(void)  		return;  	} -	pdev = omap_device_build("omap-mailbox", -1, oh, NULL, 0, NULL, 0, 0); +	pdev = omap_device_build("omap-mailbox", -1, oh, NULL, 0);  	WARN(IS_ERR(pdev), "%s: could not build device, err %ld\n",  						__func__, PTR_ERR(pdev));  } @@ -337,7 +379,7 @@ static void __init omap_init_mcpdm(void)  		return;  	} -	pdev = omap_device_build("omap-mcpdm", -1, oh, NULL, 0, NULL, 0, 0); +	pdev = omap_device_build("omap-mcpdm", -1, oh, NULL, 0);  	WARN(IS_ERR(pdev), "Can't build omap_device for omap-mcpdm.\n");  }  #else @@ -358,7 +400,7 @@ static void __init omap_init_dmic(void)  		return;  	} -	pdev = omap_device_build("omap-dmic", -1, oh, NULL, 0, NULL, 0, 0); +	pdev = omap_device_build("omap-dmic", -1, oh, NULL, 0);  	WARN(IS_ERR(pdev), "Can't build omap_device for omap-dmic.\n");  }  #else @@ -384,8 +426,7 @@ static void __init omap_init_hdmi_audio(void)  		return;  	} -	pdev = omap_device_build("omap-hdmi-audio-dai", -		-1, oh, NULL, 0, NULL, 0, 0); +	pdev = omap_device_build("omap-hdmi-audio-dai", -1, oh, NULL, 0);  	WARN(IS_ERR(pdev),  	     "Can't build omap_device for omap-hdmi-audio-dai.\n"); @@ -429,8 +470,7 @@ static int __init omap_mcspi_init(struct omap_hwmod *oh, void *unused)  	}  	spi_num++; -	pdev = omap_device_build(name, spi_num, oh, pdata, -				sizeof(*pdata),	NULL, 0, 0); +	pdev = omap_device_build(name, spi_num, oh, pdata, sizeof(*pdata));  	WARN(IS_ERR(pdev), "Can't build omap_device for %s:%s\n",  				name, oh->name);  	kfree(pdata); @@ -460,144 +500,35 @@ static void omap_init_rng(void)  	if (!oh)  		return; -	pdev = omap_device_build("omap_rng", -1, oh, NULL, 0, NULL, 0, 0); +	pdev = omap_device_build("omap_rng", -1, oh, NULL, 0);  	WARN(IS_ERR(pdev), "Can't build omap_device for omap_rng\n");  } -#if defined(CONFIG_CRYPTO_DEV_OMAP_SHAM) || defined(CONFIG_CRYPTO_DEV_OMAP_SHAM_MODULE) - -#ifdef CONFIG_ARCH_OMAP2 -static struct resource omap2_sham_resources[] = { -	{ -		.start	= OMAP24XX_SEC_SHA1MD5_BASE, -		.end	= OMAP24XX_SEC_SHA1MD5_BASE + 0x64, -		.flags	= IORESOURCE_MEM, -	}, -	{ -		.start	= 51 + OMAP_INTC_START, -		.flags	= IORESOURCE_IRQ, -	} -}; -static int omap2_sham_resources_sz = ARRAY_SIZE(omap2_sham_resources); -#else -#define omap2_sham_resources		NULL -#define omap2_sham_resources_sz		0 -#endif - -#ifdef CONFIG_ARCH_OMAP3 -static struct resource omap3_sham_resources[] = { -	{ -		.start	= OMAP34XX_SEC_SHA1MD5_BASE, -		.end	= OMAP34XX_SEC_SHA1MD5_BASE + 0x64, -		.flags	= IORESOURCE_MEM, -	}, -	{ -		.start	= 49 + OMAP_INTC_START, -		.flags	= IORESOURCE_IRQ, -	}, -	{ -		.start	= OMAP34XX_DMA_SHA1MD5_RX, -		.flags	= IORESOURCE_DMA, -	} -}; -static int omap3_sham_resources_sz = ARRAY_SIZE(omap3_sham_resources); -#else -#define omap3_sham_resources		NULL -#define omap3_sham_resources_sz		0 -#endif - -static struct platform_device sham_device = { -	.name		= "omap-sham", -	.id		= -1, -}; - -static void omap_init_sham(void) +static void __init omap_init_sham(void)  { -	if (cpu_is_omap24xx()) { -		sham_device.resource = omap2_sham_resources; -		sham_device.num_resources = omap2_sham_resources_sz; -	} else if (cpu_is_omap34xx()) { -		sham_device.resource = omap3_sham_resources; -		sham_device.num_resources = omap3_sham_resources_sz; -	} else { -		pr_err("%s: platform not supported\n", __func__); -		return; -	} -	platform_device_register(&sham_device); -} -#else -static inline void omap_init_sham(void) { } -#endif - -#if defined(CONFIG_CRYPTO_DEV_OMAP_AES) || defined(CONFIG_CRYPTO_DEV_OMAP_AES_MODULE) - -#ifdef CONFIG_ARCH_OMAP2 -static struct resource omap2_aes_resources[] = { -	{ -		.start	= OMAP24XX_SEC_AES_BASE, -		.end	= OMAP24XX_SEC_AES_BASE + 0x4C, -		.flags	= IORESOURCE_MEM, -	}, -	{ -		.start	= OMAP24XX_DMA_AES_TX, -		.flags	= IORESOURCE_DMA, -	}, -	{ -		.start	= OMAP24XX_DMA_AES_RX, -		.flags	= IORESOURCE_DMA, -	} -}; -static int omap2_aes_resources_sz = ARRAY_SIZE(omap2_aes_resources); -#else -#define omap2_aes_resources		NULL -#define omap2_aes_resources_sz		0 -#endif +	struct omap_hwmod *oh; +	struct platform_device *pdev; -#ifdef CONFIG_ARCH_OMAP3 -static struct resource omap3_aes_resources[] = { -	{ -		.start	= OMAP34XX_SEC_AES_BASE, -		.end	= OMAP34XX_SEC_AES_BASE + 0x4C, -		.flags	= IORESOURCE_MEM, -	}, -	{ -		.start	= OMAP34XX_DMA_AES2_TX, -		.flags	= IORESOURCE_DMA, -	}, -	{ -		.start	= OMAP34XX_DMA_AES2_RX, -		.flags	= IORESOURCE_DMA, -	} -}; -static int omap3_aes_resources_sz = ARRAY_SIZE(omap3_aes_resources); -#else -#define omap3_aes_resources		NULL -#define omap3_aes_resources_sz		0 -#endif +	oh = omap_hwmod_lookup("sham"); +	if (!oh) +		return; -static struct platform_device aes_device = { -	.name		= "omap-aes", -	.id		= -1, -}; +	pdev = omap_device_build("omap-sham", -1, oh, NULL, 0); +	WARN(IS_ERR(pdev), "Can't build omap_device for omap-sham\n"); +} -static void omap_init_aes(void) +static void __init omap_init_aes(void)  { -	if (cpu_is_omap24xx()) { -		aes_device.resource = omap2_aes_resources; -		aes_device.num_resources = omap2_aes_resources_sz; -	} else if (cpu_is_omap34xx()) { -		aes_device.resource = omap3_aes_resources; -		aes_device.num_resources = omap3_aes_resources_sz; -	} else { -		pr_err("%s: platform not supported\n", __func__); +	struct omap_hwmod *oh; +	struct platform_device *pdev; + +	oh = omap_hwmod_lookup("aes"); +	if (!oh)  		return; -	} -	platform_device_register(&aes_device); -} -#else -static inline void omap_init_aes(void) { } -#endif +	pdev = omap_device_build("omap-aes", -1, oh, NULL, 0); +	WARN(IS_ERR(pdev), "Can't build omap_device for omap-aes\n"); +}  /*-------------------------------------------------------------------------*/ @@ -689,8 +620,7 @@ static void __init omap_init_ocp2scp(void)  	pdata->dev_cnt	= dev_cnt; -	pdev = omap_device_build(name, bus_id, oh, pdata, sizeof(*pdata), NULL, -								0, false); +	pdev = omap_device_build(name, bus_id, oh, pdata, sizeof(*pdata));  	if (IS_ERR(pdev)) {  		pr_err("Could not build omap_device for %s %s\n",  						name, oh_name); @@ -721,17 +651,18 @@ static int __init omap2_init_devices(void)  	omap_init_mbox();  	/* If dtb is there, the devices will be created dynamically */  	if (!of_have_populated_dt()) { +		omap_init_control_usb();  		omap_init_dmic();  		omap_init_mcpdm();  		omap_init_mcspi(); +		omap_init_sham(); +		omap_init_aes();  	}  	omap_init_sti();  	omap_init_rng(); -	omap_init_sham(); -	omap_init_aes();  	omap_init_vout();  	omap_init_ocp2scp();  	return 0;  } -arch_initcall(omap2_init_devices); +omap_arch_initcall(omap2_init_devices);  |