Commit 04496e37 authored by Arnd Bergmann's avatar Arnd Bergmann

Merge branch 'fixes-non-critical' of...

Merge branch 'fixes-non-critical' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into next/fixes-non-critical

* 'fixes-non-critical' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap:
  OMAP4: dma: Correct CPU version check for dma_common_ch_end
  ARM: OMAP: Fix section mismatch warning for platform_cpu_die()
  ARM: OMAP: fix section mismatch warning for omap4_hotplug_cpu()
  ARM: OMAP: convert omap_device_build() and callers to __init
  ARM: OMAP2+: Mark omap_hsmmc_init and omap_mux related functions as __init
  ARM: OMAP2+: Fix multiple randconfig errors with SOC_OMAP and SOC_OMAP_NOOP
  ARM: OMAP: Fix devexit for dma when CONFIG_HOTPLUG is not set
  ARM: OMAP2+: Fix devexit for smartreflex when CONFIG_HOTPLUG is not set
  ARM: OMAP2+: Fix zoom LCD backlight if TWL_CORE is not selected
  ARM: OMAP2+: Fix board_mux section type conflict when OMAP_MUX is not set
  ARM: OMAP2+: Fix OMAP_HDQ_BASE build error
  ARM: OMAP2+: Fix Kconfig dependencies for USB_ARCH_HAS_EHCI
  ARM: OMAP2+: I2C: always compile I2C reset code, even if I2C driver is not built
  ARM: OMAP2+: Split omap2_hsmmc_init() to properly support I2C GPIO pins
  ARM: OMAP: omap_device: Expose omap_device_{alloc, delete, register}
  ARM: OMAP: Fix build error when mmc_omap is built as module
  ARM: OMAP: Fix kernel panic with HSMMC when twl4030_gpio is a module
parents a0008bf7 824e2dbb
...@@ -164,9 +164,7 @@ machine-$(CONFIG_ARCH_MXS) := mxs ...@@ -164,9 +164,7 @@ machine-$(CONFIG_ARCH_MXS) := mxs
machine-$(CONFIG_ARCH_NETX) := netx machine-$(CONFIG_ARCH_NETX) := netx
machine-$(CONFIG_ARCH_NOMADIK) := nomadik machine-$(CONFIG_ARCH_NOMADIK) := nomadik
machine-$(CONFIG_ARCH_OMAP1) := omap1 machine-$(CONFIG_ARCH_OMAP1) := omap1
machine-$(CONFIG_ARCH_OMAP2) := omap2 machine-$(CONFIG_ARCH_OMAP2PLUS) := omap2
machine-$(CONFIG_ARCH_OMAP3) := omap2
machine-$(CONFIG_ARCH_OMAP4) := omap2
machine-$(CONFIG_ARCH_ORION5X) := orion5x machine-$(CONFIG_ARCH_ORION5X) := orion5x
machine-$(CONFIG_ARCH_PICOXCELL) := picoxcell machine-$(CONFIG_ARCH_PICOXCELL) := picoxcell
machine-$(CONFIG_ARCH_PNX4008) := pnx4008 machine-$(CONFIG_ARCH_PNX4008) := pnx4008
......
...@@ -21,27 +21,21 @@ config ARCH_OMAP2PLUS_TYPICAL ...@@ -21,27 +21,21 @@ config ARCH_OMAP2PLUS_TYPICAL
Compile a kernel suitable for booting most boards Compile a kernel suitable for booting most boards
config ARCH_OMAP2 config ARCH_OMAP2
bool "TI OMAP2" bool
depends on ARCH_OMAP2PLUS
default y
select CPU_V6 select CPU_V6
select MULTI_IRQ_HANDLER select MULTI_IRQ_HANDLER
config ARCH_OMAP3 config ARCH_OMAP3
bool "TI OMAP3" bool
depends on ARCH_OMAP2PLUS
default y
select CPU_V7 select CPU_V7
select USB_ARCH_HAS_EHCI select USB_ARCH_HAS_EHCI if USB_SUPPORT
select ARCH_HAS_OPP select ARCH_HAS_OPP
select PM_OPP if PM select PM_OPP if PM
select ARM_CPU_SUSPEND if PM select ARM_CPU_SUSPEND if PM
select MULTI_IRQ_HANDLER select MULTI_IRQ_HANDLER
config ARCH_OMAP4 config ARCH_OMAP4
bool "TI OMAP4" bool
default y
depends on ARCH_OMAP2PLUS
select CACHE_L2X0 select CACHE_L2X0
select CPU_V7 select CPU_V7
select ARM_GIC select ARM_GIC
...@@ -52,40 +46,62 @@ config ARCH_OMAP4 ...@@ -52,40 +46,62 @@ config ARCH_OMAP4
select ARM_ERRATA_720789 select ARM_ERRATA_720789
select ARCH_HAS_OPP select ARCH_HAS_OPP
select PM_OPP if PM select PM_OPP if PM
select USB_ARCH_HAS_EHCI select USB_ARCH_HAS_EHCI if USB_SUPPORT
select ARM_CPU_SUSPEND if PM select ARM_CPU_SUSPEND if PM
comment "OMAP Core Type" comment "OMAP Core Type"
depends on ARCH_OMAP2
config SOC_OMAP
bool
config SOC_OMAP2420 config SOC_OMAP2420
bool "OMAP2420 support" bool "OMAP2420 support"
depends on ARCH_OMAP2
default y default y
select SOC_OMAP
select ARCH_OMAP2
select OMAP_DM_TIMER select OMAP_DM_TIMER
select ARCH_OMAP_OTG select ARCH_OMAP_OTG
config SOC_OMAP2430 config SOC_OMAP2430
bool "OMAP2430 support" bool "OMAP2430 support"
depends on ARCH_OMAP2
default y default y
select SOC_OMAP
select ARCH_OMAP2
select ARCH_OMAP_OTG select ARCH_OMAP_OTG
config SOC_OMAP3430 config SOC_OMAP3430
bool "OMAP3430 support" bool "OMAP3430 support"
depends on ARCH_OMAP3
default y default y
select SOC_OMAP
select ARCH_OMAP3
select ARCH_OMAP_OTG select ARCH_OMAP_OTG
config SOC_OMAPTI81XX config SOC_OMAPTI81XX
bool "TI81XX support" bool "TI81XX support"
depends on ARCH_OMAP3
default y default y
select SOC_OMAP
select ARCH_OMAP3
config SOC_OMAPAM33XX config SOC_OMAPAM33XX
bool "AM33XX support" bool "AM33XX support"
depends on ARCH_OMAP3
default y default y
select SOC_OMAP
select ARCH_OMAP3
config SOC_OMAP44XX
bool "OMAP44XX support"
default y
select SOC_OMAP
select ARCH_OMAP4
config SOC_OMAP_NOOP
bool
depends on !SOC_OMAP
default y
select ARCH_OMAP2
select ARCH_OMAP3
select ARCH_OMAP4
select MACH_OMAP_GENERIC
config OMAP_PACKAGE_ZAF config OMAP_PACKAGE_ZAF
bool bool
...@@ -112,17 +128,17 @@ config OMAP_PACKAGE_CBS ...@@ -112,17 +128,17 @@ config OMAP_PACKAGE_CBS
bool bool
comment "OMAP Board Type" comment "OMAP Board Type"
depends on ARCH_OMAP2PLUS
config MACH_OMAP_GENERIC config MACH_OMAP_GENERIC
bool "Generic OMAP2+ board" bool "Generic OMAP2+ board"
depends on ARCH_OMAP2PLUS
select USE_OF select USE_OF
default y default y
help help
Support for generic TI OMAP2+ boards using Flattened Device Tree. Support for generic TI OMAP2+ boards using Flattened Device Tree.
More information at Documentation/devicetree More information at Documentation/devicetree
if SOC_OMAP
config MACH_OMAP2_TUSB6010 config MACH_OMAP2_TUSB6010
bool bool
depends on ARCH_OMAP2 && SOC_OMAP2420 depends on ARCH_OMAP2 && SOC_OMAP2420
...@@ -343,6 +359,7 @@ config MACH_OMAP4_PANDA ...@@ -343,6 +359,7 @@ config MACH_OMAP4_PANDA
select OMAP_PACKAGE_CBS select OMAP_PACKAGE_CBS
select REGULATOR_FIXED_VOLTAGE if REGULATOR select REGULATOR_FIXED_VOLTAGE if REGULATOR
endif
config OMAP3_EMU config OMAP3_EMU
bool "OMAP3 debugging peripherals" bool "OMAP3 debugging peripherals"
depends on ARCH_OMAP3 depends on ARCH_OMAP3
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
# Common support # Common support
obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer.o pm.o \ obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer.o pm.o \
common.o gpio.o dma.o wd_timer.o display.o common.o gpio.o dma.o wd_timer.o display.o i2c.o
omap-2-3-common = irq.o sdrc.o omap-2-3-common = irq.o sdrc.o
hwmod-common = omap_hwmod.o \ hwmod-common = omap_hwmod.o \
...@@ -182,9 +182,6 @@ obj-$(CONFIG_OMAP_IOMMU) += iommu2.o ...@@ -182,9 +182,6 @@ obj-$(CONFIG_OMAP_IOMMU) += iommu2.o
iommu-$(CONFIG_OMAP_IOMMU) := omap-iommu.o iommu-$(CONFIG_OMAP_IOMMU) := omap-iommu.o
obj-y += $(iommu-m) $(iommu-y) obj-y += $(iommu-m) $(iommu-y)
i2c-omap-$(CONFIG_I2C_OMAP) := i2c.o
obj-y += $(i2c-omap-m) $(i2c-omap-y)
ifneq ($(CONFIG_TIDSPBRIDGE),) ifneq ($(CONFIG_TIDSPBRIDGE),)
obj-y += dsp.o obj-y += dsp.o
endif endif
......
...@@ -279,7 +279,7 @@ static void __init omap_2430sdp_init(void) ...@@ -279,7 +279,7 @@ static void __init omap_2430sdp_init(void)
platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices)); platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices));
omap_serial_init(); omap_serial_init();
omap_sdrc_init(NULL, NULL); omap_sdrc_init(NULL, NULL);
omap2_hsmmc_init(mmc); omap_hsmmc_init(mmc);
omap2_usbfs_init(&sdp2430_usb_config); omap2_usbfs_init(&sdp2430_usb_config);
omap_mux_init_signal("usb0hs_stp", OMAP_PULL_ENA | OMAP_PULL_UP); omap_mux_init_signal("usb0hs_stp", OMAP_PULL_ENA | OMAP_PULL_UP);
......
...@@ -232,11 +232,13 @@ static struct omap2_hsmmc_info mmc[] = { ...@@ -232,11 +232,13 @@ static struct omap2_hsmmc_info mmc[] = {
*/ */
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
.gpio_wp = 4, .gpio_wp = 4,
.deferred = true,
}, },
{ {
.mmc = 2, .mmc = 2,
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
.gpio_wp = 7, .gpio_wp = 7,
.deferred = true,
}, },
{} /* Terminator */ {} /* Terminator */
}; };
...@@ -249,7 +251,7 @@ static int sdp3430_twl_gpio_setup(struct device *dev, ...@@ -249,7 +251,7 @@ static int sdp3430_twl_gpio_setup(struct device *dev,
*/ */
mmc[0].gpio_cd = gpio + 0; mmc[0].gpio_cd = gpio + 0;
mmc[1].gpio_cd = gpio + 1; mmc[1].gpio_cd = gpio + 1;
omap2_hsmmc_init(mmc); omap_hsmmc_late_init(mmc);
/* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */ /* gpio + 7 is "sub_lcd_en_bkl" (output/PWM1) */
gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "sub_lcd_en_bkl"); gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "sub_lcd_en_bkl");
...@@ -606,6 +608,7 @@ static void __init omap_3430sdp_init(void) ...@@ -606,6 +608,7 @@ static void __init omap_3430sdp_init(void)
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_board_config = sdp3430_config; omap_board_config = sdp3430_config;
omap_board_config_size = ARRAY_SIZE(sdp3430_config); omap_board_config_size = ARRAY_SIZE(sdp3430_config);
omap_hsmmc_init(mmc);
omap3430_i2c_init(); omap3430_i2c_init();
omap_display_init(&sdp3430_dss_data); omap_display_init(&sdp3430_dss_data);
if (omap_rev() > OMAP3430_REV_ES1_0) if (omap_rev() > OMAP3430_REV_ES1_0)
......
...@@ -491,9 +491,9 @@ static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers) ...@@ -491,9 +491,9 @@ static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers)
{ {
struct omap2_hsmmc_info *c; struct omap2_hsmmc_info *c;
omap2_hsmmc_init(controllers); omap_hsmmc_init(controllers);
for (c = controllers; c->mmc; c++) for (c = controllers; c->mmc; c++)
omap4_twl6030_hsmmc_set_late_init(c->dev); omap4_twl6030_hsmmc_set_late_init(&c->pdev->dev);
return 0; return 0;
} }
......
...@@ -504,7 +504,7 @@ static void __init am3517_evm_init(void) ...@@ -504,7 +504,7 @@ static void __init am3517_evm_init(void)
am3517_evm_musb_init(); am3517_evm_musb_init();
/* MMC init function */ /* MMC init function */
omap2_hsmmc_init(mmc); omap_hsmmc_init(mmc);
} }
MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM") MACHINE_START(OMAP3517EVM, "OMAP3517/AM3517 EVM")
......
...@@ -413,7 +413,7 @@ static struct omap2_hsmmc_info mmc[] = { ...@@ -413,7 +413,7 @@ static struct omap2_hsmmc_info mmc[] = {
.caps = MMC_CAP_4_BIT_DATA, .caps = MMC_CAP_4_BIT_DATA,
.gpio_cd = -EINVAL, .gpio_cd = -EINVAL,
.gpio_wp = -EINVAL, .gpio_wp = -EINVAL,
.deferred = true,
}, },
{ {
.mmc = 2, .mmc = 2,
...@@ -471,7 +471,7 @@ static int cm_t35_twl_gpio_setup(struct device *dev, unsigned gpio, ...@@ -471,7 +471,7 @@ static int cm_t35_twl_gpio_setup(struct device *dev, unsigned gpio,
/* gpio + 0 is "mmc0_cd" (input/IRQ) */ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
mmc[0].gpio_cd = gpio + 0; mmc[0].gpio_cd = gpio + 0;
omap2_hsmmc_init(mmc); omap_hsmmc_late_init(mmc);
return 0; return 0;
} }
...@@ -639,6 +639,7 @@ static void __init cm_t3x_common_init(void) ...@@ -639,6 +639,7 @@ static void __init cm_t3x_common_init(void)
omap_serial_init(); omap_serial_init();
omap_sdrc_init(mt46h32m32lf6_sdrc_params, omap_sdrc_init(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params); mt46h32m32lf6_sdrc_params);
omap_hsmmc_init(mmc);
cm_t35_init_i2c(); cm_t35_init_i2c();
omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL); omap_ads7846_init(1, CM_T35_GPIO_PENDOWN, 0, NULL);
cm_t35_init_ethernet(); cm_t35_init_ethernet();
......
...@@ -100,6 +100,7 @@ static struct omap2_hsmmc_info mmc[] = { ...@@ -100,6 +100,7 @@ static struct omap2_hsmmc_info mmc[] = {
.mmc = 1, .mmc = 1,
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
.gpio_wp = 29, .gpio_wp = 29,
.deferred = true,
}, },
{} /* Terminator */ {} /* Terminator */
}; };
...@@ -228,7 +229,7 @@ static int devkit8000_twl_gpio_setup(struct device *dev, ...@@ -228,7 +229,7 @@ static int devkit8000_twl_gpio_setup(struct device *dev,
/* gpio + 0 is "mmc0_cd" (input/IRQ) */ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
mmc[0].gpio_cd = gpio + 0; mmc[0].gpio_cd = gpio + 0;
omap2_hsmmc_init(mmc); omap_hsmmc_late_init(mmc);
/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
...@@ -636,6 +637,7 @@ static void __init devkit8000_init(void) ...@@ -636,6 +637,7 @@ static void __init devkit8000_init(void)
omap_dm9000_init(); omap_dm9000_init();
omap_hsmmc_init(mmc);
devkit8000_i2c_init(); devkit8000_i2c_init();
platform_add_devices(devkit8000_devices, platform_add_devices(devkit8000_devices,
ARRAY_SIZE(devkit8000_devices)); ARRAY_SIZE(devkit8000_devices));
......
...@@ -189,7 +189,7 @@ static u8 get_gpmc0_type(void) ...@@ -189,7 +189,7 @@ static u8 get_gpmc0_type(void)
* *
* @return - void. * @return - void.
*/ */
void board_flash_init(struct flash_partitions partition_info[], void __init board_flash_init(struct flash_partitions partition_info[],
char chip_sel_board[][GPMC_CS_NUM], int nand_type) char chip_sel_board[][GPMC_CS_NUM], int nand_type)
{ {
u8 cs = 0; u8 cs = 0;
......
...@@ -295,6 +295,7 @@ static struct omap2_hsmmc_info mmc[] = { ...@@ -295,6 +295,7 @@ static struct omap2_hsmmc_info mmc[] = {
.caps = MMC_CAP_4_BIT_DATA, .caps = MMC_CAP_4_BIT_DATA,
.gpio_cd = -EINVAL, .gpio_cd = -EINVAL,
.gpio_wp = -EINVAL, .gpio_wp = -EINVAL,
.deferred = true,
}, },
#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE) #if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
{ {
...@@ -402,7 +403,7 @@ static int igep_twl_gpio_setup(struct device *dev, ...@@ -402,7 +403,7 @@ static int igep_twl_gpio_setup(struct device *dev,
/* gpio + 0 is "mmc0_cd" (input/IRQ) */ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
mmc[0].gpio_cd = gpio + 0; mmc[0].gpio_cd = gpio + 0;
omap2_hsmmc_init(mmc); omap_hsmmc_late_init(mmc);
/* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */ /* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE) #if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
...@@ -639,6 +640,9 @@ static void __init igep_init(void) ...@@ -639,6 +640,9 @@ static void __init igep_init(void)
/* Get IGEP2 hardware revision */ /* Get IGEP2 hardware revision */
igep2_get_revision(); igep2_get_revision();
omap_hsmmc_init(mmc);
/* Register I2C busses and drivers */ /* Register I2C busses and drivers */
igep_i2c_init(); igep_i2c_init();
platform_add_devices(igep_devices, ARRAY_SIZE(igep_devices)); platform_add_devices(igep_devices, ARRAY_SIZE(igep_devices));
......
...@@ -424,7 +424,7 @@ static void __init omap_ldp_init(void) ...@@ -424,7 +424,7 @@ static void __init omap_ldp_init(void)
board_nand_init(ldp_nand_partitions, board_nand_init(ldp_nand_partitions,
ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0); ARRAY_SIZE(ldp_nand_partitions), ZOOM_NAND_CS, 0);
omap2_hsmmc_init(mmc); omap_hsmmc_init(mmc);
ldp_display_init(); ldp_display_init();
} }
......
...@@ -371,7 +371,11 @@ static void n8x0_mmc_callback(void *data, u8 card_mask) ...@@ -371,7 +371,11 @@ static void n8x0_mmc_callback(void *data, u8 card_mask)
else else
*openp = 0; *openp = 0;
#ifdef CONFIG_MMC_OMAP
omap_mmc_notify_cover_event(mmc_device, index, *openp); omap_mmc_notify_cover_event(mmc_device, index, *openp);
#else
pr_warn("MMC: notify cover event not available\n");
#endif
} }
static int n8x0_mmc_late_init(struct device *dev) static int n8x0_mmc_late_init(struct device *dev)
......
...@@ -253,6 +253,7 @@ static struct omap2_hsmmc_info mmc[] = { ...@@ -253,6 +253,7 @@ static struct omap2_hsmmc_info mmc[] = {
.mmc = 1, .mmc = 1,
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
.gpio_wp = -EINVAL, .gpio_wp = -EINVAL,
.deferred = true,
}, },
{} /* Terminator */ {} /* Terminator */
}; };
...@@ -272,12 +273,10 @@ static int beagle_twl_gpio_setup(struct device *dev, ...@@ -272,12 +273,10 @@ static int beagle_twl_gpio_setup(struct device *dev,
{ {
int r; int r;
if (beagle_config.mmc1_gpio_wp != -EINVAL)
omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp; mmc[0].gpio_wp = beagle_config.mmc1_gpio_wp;
/* gpio + 0 is "mmc0_cd" (input/IRQ) */ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
mmc[0].gpio_cd = gpio + 0; mmc[0].gpio_cd = gpio + 0;
omap2_hsmmc_init(mmc); omap_hsmmc_late_init(mmc);
/* /*
* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active
...@@ -521,6 +520,11 @@ static void __init omap3_beagle_init(void) ...@@ -521,6 +520,11 @@ static void __init omap3_beagle_init(void)
{ {
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap3_beagle_init_rev(); omap3_beagle_init_rev();
if (beagle_config.mmc1_gpio_wp != -EINVAL)
omap_mux_init_gpio(beagle_config.mmc1_gpio_wp, OMAP_PIN_INPUT);
omap_hsmmc_init(mmc);
omap3_beagle_i2c_init(); omap3_beagle_i2c_init();
gpio_buttons[0].gpio = beagle_config.usr_button_gpio; gpio_buttons[0].gpio = beagle_config.usr_button_gpio;
......
...@@ -317,6 +317,7 @@ static struct omap2_hsmmc_info mmc[] = { ...@@ -317,6 +317,7 @@ static struct omap2_hsmmc_info mmc[] = {
.caps = MMC_CAP_4_BIT_DATA, .caps = MMC_CAP_4_BIT_DATA,
.gpio_cd = -EINVAL, .gpio_cd = -EINVAL,
.gpio_wp = 63, .gpio_wp = 63,
.deferred = true,
}, },
#ifdef CONFIG_WL12XX_PLATFORM_DATA #ifdef CONFIG_WL12XX_PLATFORM_DATA
{ {
...@@ -361,9 +362,8 @@ static int omap3evm_twl_gpio_setup(struct device *dev, ...@@ -361,9 +362,8 @@ static int omap3evm_twl_gpio_setup(struct device *dev,
int r, lcd_bl_en; int r, lcd_bl_en;
/* gpio + 0 is "mmc0_cd" (input/IRQ) */ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
omap_mux_init_gpio(63, OMAP_PIN_INPUT);
mmc[0].gpio_cd = gpio + 0; mmc[0].gpio_cd = gpio + 0;
omap2_hsmmc_init(mmc); omap_hsmmc_late_init(mmc);
/* /*
* Most GPIOs are for USB OTG. Some are mostly sent to * Most GPIOs are for USB OTG. Some are mostly sent to
...@@ -644,6 +644,9 @@ static void __init omap3_evm_init(void) ...@@ -644,6 +644,9 @@ static void __init omap3_evm_init(void)
omap_board_config = omap3_evm_config; omap_board_config = omap3_evm_config;
omap_board_config_size = ARRAY_SIZE(omap3_evm_config); omap_board_config_size = ARRAY_SIZE(omap3_evm_config);
omap_mux_init_gpio(63, OMAP_PIN_INPUT);
omap_hsmmc_init(mmc);
omap3_evm_i2c_init(); omap3_evm_i2c_init();
omap_display_init(&omap3_evm_dss_data); omap_display_init(&omap3_evm_dss_data);
......
...@@ -128,7 +128,7 @@ static void __init board_mmc_init(void) ...@@ -128,7 +128,7 @@ static void __init board_mmc_init(void)
return; return;
} }
omap2_hsmmc_init(board_mmc_info); omap_hsmmc_init(board_mmc_info);
} }
static struct omap_smsc911x_platform_data __initdata board_smsc911x_data = { static struct omap_smsc911x_platform_data __initdata board_smsc911x_data = {
......
...@@ -273,6 +273,7 @@ static struct omap2_hsmmc_info omap3pandora_mmc[] = { ...@@ -273,6 +273,7 @@ static struct omap2_hsmmc_info omap3pandora_mmc[] = {
.gpio_cd = -EINVAL, .gpio_cd = -EINVAL,
.gpio_wp = 126, .gpio_wp = 126,
.ext_clock = 0, .ext_clock = 0,
.deferred = true,
}, },
{ {
.mmc = 2, .mmc = 2,
...@@ -281,6 +282,7 @@ static struct omap2_hsmmc_info omap3pandora_mmc[] = { ...@@ -281,6 +282,7 @@ static struct omap2_hsmmc_info omap3pandora_mmc[] = {
.gpio_wp = 127, .gpio_wp = 127,
.ext_clock = 1, .ext_clock = 1,
.transceiver = true, .transceiver = true,
.deferred = true,
}, },
{ {
.mmc = 3, .mmc = 3,
...@@ -300,7 +302,7 @@ static int omap3pandora_twl_gpio_setup(struct device *dev, ...@@ -300,7 +302,7 @@ static int omap3pandora_twl_gpio_setup(struct device *dev,
/* gpio + {0,1} is "mmc{0,1}_cd" (input/IRQ) */ /* gpio + {0,1} is "mmc{0,1}_cd" (input/IRQ) */
omap3pandora_mmc[0].gpio_cd = gpio + 0; omap3pandora_mmc[0].gpio_cd = gpio + 0;
omap3pandora_mmc[1].gpio_cd = gpio + 1; omap3pandora_mmc[1].gpio_cd = gpio + 1;
omap2_hsmmc_init(omap3pandora_mmc); omap_hsmmc_late_init(omap3pandora_mmc);
/* gpio + 13 drives 32kHz buffer for wifi module */ /* gpio + 13 drives 32kHz buffer for wifi module */
gpio_32khz = gpio + 13; gpio_32khz = gpio + 13;
...@@ -580,6 +582,7 @@ static struct omap_board_mux board_mux[] __initdata = { ...@@ -580,6 +582,7 @@ static struct omap_board_mux board_mux[] __initdata = {
static void __init omap3pandora_init(void) static void __init omap3pandora_init(void)
{ {
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_hsmmc_init(omap3pandora_mmc);
omap3pandora_i2c_init(); omap3pandora_i2c_init();
pandora_wl1251_init(); pandora_wl1251_init();
platform_add_devices(omap3pandora_devices, platform_add_devices(omap3pandora_devices,
......
...@@ -209,10 +209,11 @@ static struct regulator_init_data omap3stalker_vsim = { ...@@ -209,10 +209,11 @@ static struct regulator_init_data omap3stalker_vsim = {
static struct omap2_hsmmc_info mmc[] = { static struct omap2_hsmmc_info mmc[] = {
{ {
.mmc = 1, .mmc = 1,
.caps = MMC_CAP_4_BIT_DATA, .caps = MMC_CAP_4_BIT_DATA,
.gpio_cd = -EINVAL, .gpio_cd = -EINVAL,
.gpio_wp = 23, .gpio_wp = 23,
.deferred = true,
}, },
{} /* Terminator */ {} /* Terminator */
}; };
...@@ -282,9 +283,8 @@ omap3stalker_twl_gpio_setup(struct device *dev, ...@@ -282,9 +283,8 @@ omap3stalker_twl_gpio_setup(struct device *dev,
unsigned gpio, unsigned ngpio) unsigned gpio, unsigned ngpio)
{ {
/* gpio + 0 is "mmc0_cd" (input/IRQ) */ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
omap_mux_init_gpio(23, OMAP_PIN_INPUT);
mmc[0].gpio_cd = gpio + 0; mmc[0].gpio_cd = gpio + 0;
omap2_hsmmc_init(mmc); omap_hsmmc_late_init(mmc);
/* /*
* Most GPIOs are for USB OTG. Some are mostly sent to * Most GPIOs are for USB OTG. Some are mostly sent to
...@@ -425,6 +425,9 @@ static void __init omap3_stalker_init(void) ...@@ -425,6 +425,9 @@ static void __init omap3_stalker_init(void)
omap_board_config = omap3_stalker_config; omap_board_config = omap3_stalker_config;
omap_board_config_size = ARRAY_SIZE(omap3_stalker_config); omap_board_config_size = ARRAY_SIZE(omap3_stalker_config);
omap_mux_init_gpio(23, OMAP_PIN_INPUT);
omap_hsmmc_init(mmc);
omap3_stalker_i2c_init(); omap3_stalker_i2c_init();
platform_add_devices(omap3_stalker_devices, platform_add_devices(omap3_stalker_devices,
......
...@@ -100,6 +100,7 @@ static struct omap2_hsmmc_info mmc[] = { ...@@ -100,6 +100,7 @@ static struct omap2_hsmmc_info mmc[] = {
.mmc = 1, .mmc = 1,
.caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
.gpio_wp = 29, .gpio_wp = 29,
.deferred = true,
}, },
{} /* Terminator */ {} /* Terminator */
}; };
...@@ -117,15 +118,9 @@ static struct gpio_led gpio_leds[]; ...@@ -117,15 +118,9 @@ static struct gpio_led gpio_leds[];
static int touchbook_twl_gpio_setup(struct device *dev, static int touchbook_twl_gpio_setup(struct device *dev,
unsigned gpio, unsigned ngpio) unsigned gpio, unsigned ngpio)
{ {
if (system_rev >= 0x20 && system_rev <= 0x34301000) {
omap_mux_init_gpio(23, OMAP_PIN_INPUT);
mmc[0].gpio_wp = 23;
} else {
omap_mux_init_gpio(29, OMAP_PIN_INPUT);
}
/* gpio + 0 is "mmc0_cd" (input/IRQ) */ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
mmc[0].gpio_cd = gpio + 0; mmc[0].gpio_cd = gpio + 0;
omap2_hsmmc_init(mmc); omap_hsmmc_late_init(mmc);
/* REVISIT: need ehci-omap hooks for external VBUS /* REVISIT: need ehci-omap hooks for external VBUS
* power switch and overcurrent detect * power switch and overcurrent detect
...@@ -351,6 +346,14 @@ static void __init omap3_touchbook_init(void) ...@@ -351,6 +346,14 @@ static void __init omap3_touchbook_init(void)
pm_power_off = omap3_touchbook_poweroff; pm_power_off = omap3_touchbook_poweroff;
if (system_rev >= 0x20 && system_rev <= 0x34301000) {
omap_mux_init_gpio(23, OMAP_PIN_INPUT);
mmc[0].gpio_wp = 23;
} else {
omap_mux_init_gpio(29, OMAP_PIN_INPUT);
}
omap_hsmmc_init(mmc);
omap3_touchbook_i2c_init(); omap3_touchbook_i2c_init();
platform_add_devices(omap3_touchbook_devices, platform_add_devices(omap3_touchbook_devices,
ARRAY_SIZE(omap3_touchbook_devices)); ARRAY_SIZE(omap3_touchbook_devices));
......
...@@ -245,9 +245,9 @@ static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers) ...@@ -245,9 +245,9 @@ static int __init omap4_twl6030_hsmmc_init(struct omap2_hsmmc_info *controllers)
{ {
struct omap2_hsmmc_info *c; struct omap2_hsmmc_info *c;
omap2_hsmmc_init(controllers); omap_hsmmc_init(controllers);
for (c = controllers; c->mmc; c++) for (c = controllers; c->mmc; c++)
omap4_twl6030_hsmmc_set_late_init(c->dev); omap4_twl6030_hsmmc_set_late_init(&c->pdev->dev);
return 0; return 0;
} }
...@@ -461,7 +461,7 @@ static struct omap_dss_board_info omap4_panda_dss_data = { ...@@ -461,7 +461,7 @@ static struct omap_dss_board_info omap4_panda_dss_data = {
.default_device = &omap4_panda_dvi_device, .default_device = &omap4_panda_dvi_device,
}; };
void omap4_panda_display_init(void) void __init omap4_panda_display_init(void)
{ {
int r; int r;
......
...@@ -407,8 +407,6 @@ static inline void __init overo_init_keys(void) { return; } ...@@ -407,8 +407,6 @@ static inline void __init overo_init_keys(void) { return; }
static int overo_twl_gpio_setup(struct device *dev, static int overo_twl_gpio_setup(struct device *dev,
unsigned gpio, unsigned ngpio) unsigned gpio, unsigned ngpio)
{ {
omap2_hsmmc_init(mmc);
#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) #if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
/* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */
gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1;
...@@ -505,6 +503,7 @@ static void __init overo_init(void) ...@@ -505,6 +503,7 @@ static void __init overo_init(void)
int ret; int ret;
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
omap_hsmmc_init(mmc);
overo_i2c_init(); overo_i2c_init();
omap_display_init(&overo_dss_data); omap_display_init(&overo_dss_data);
omap_serial_init(); omap_serial_init();
......
...@@ -120,7 +120,7 @@ static void __init rm680_peripherals_init(void) ...@@ -120,7 +120,7 @@ static void __init rm680_peripherals_init(void)
ARRAY_SIZE(rm680_peripherals_devices)); ARRAY_SIZE(rm680_peripherals_devices));
rm680_i2c_init(); rm680_i2c_init();
gpmc_onenand_init(board_onenand_data); gpmc_onenand_init(board_onenand_data);
omap2_hsmmc_init(mmc); omap_hsmmc_init(mmc);
} }
#ifdef CONFIG_OMAP_MUX #ifdef CONFIG_OMAP_MUX
......
...@@ -1145,7 +1145,7 @@ void __init rx51_peripherals_init(void) ...@@ -1145,7 +1145,7 @@ void __init rx51_peripherals_init(void)
partition = omap_mux_get("core"); partition = omap_mux_get("core");
if (partition) if (partition)
omap2_hsmmc_init(mmc); omap_hsmmc_init(mmc);
rx51_charger_init(); rx51_charger_init();
} }
......
...@@ -55,6 +55,7 @@ static void zoom_panel_disable_lcd(struct omap_dss_device *dssdev) ...@@ -55,6 +55,7 @@ static void zoom_panel_disable_lcd(struct omap_dss_device *dssdev)
static int zoom_set_bl_intensity(struct omap_dss_device *dssdev, int level) static int zoom_set_bl_intensity(struct omap_dss_device *dssdev, int level)
{ {
#ifdef CONFIG_TWL4030_CORE
unsigned char c; unsigned char c;
u8 mux_pwm, enb_pwm; u8 mux_pwm, enb_pwm;
...@@ -90,6 +91,9 @@ static int zoom_set_bl_intensity(struct omap_dss_device *dssdev, int level) ...@@ -90,6 +91,9 @@ static int zoom_set_bl_intensity(struct omap_dss_device *dssdev, int level)
c = ((50 * (100 - level)) / 100) + 1; c = ((50 * (100 - level)) / 100) + 1;
twl_i2c_write_u8(TWL4030_MODULE_PWM1, 0x7F, TWL_LED_PWMOFF); twl_i2c_write_u8(TWL4030_MODULE_PWM1, 0x7F, TWL_LED_PWMOFF);
twl_i2c_write_u8(TWL4030_MODULE_PWM1, c, TWL_LED_PWMON); twl_i2c_write_u8(TWL4030_MODULE_PWM1, c, TWL_LED_PWMON);
#else
pr_warn("Backlight not enabled\n");
#endif
return 0; return 0;
} }
......
...@@ -205,6 +205,7 @@ static struct omap2_hsmmc_info mmc[] = { ...@@ -205,6 +205,7 @@ static struct omap2_hsmmc_info mmc[] = {
.caps = MMC_CAP_4_BIT_DATA, .caps = MMC_CAP_4_BIT_DATA,
.gpio_wp = -EINVAL, .gpio_wp = -EINVAL,
.power_saving = true, .power_saving = true,
.deferred = true,
}, },
{ {
.name = "internal", .name = "internal",
...@@ -233,7 +234,7 @@ static int zoom_twl_gpio_setup(struct device *dev, ...@@ -233,7 +234,7 @@ static int zoom_twl_gpio_setup(struct device *dev,
/* gpio + 0 is "mmc0_cd" (input/IRQ) */ /* gpio + 0 is "mmc0_cd" (input/IRQ) */
mmc[0].gpio_cd = gpio + 0; mmc[0].gpio_cd = gpio + 0;
omap2_hsmmc_init(mmc); omap_hsmmc_late_init(mmc);
ret = gpio_request_one(LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW, ret = gpio_request_one(LCD_PANEL_ENABLE_GPIO, GPIOF_OUT_INIT_LOW,
"lcd enable"); "lcd enable");
...@@ -301,6 +302,7 @@ void __init zoom_peripherals_init(void) ...@@ -301,6 +302,7 @@ void __init zoom_peripherals_init(void)
if (ret) if (ret)
pr_err("error setting wl12xx data: %d\n", ret); pr_err("error setting wl12xx data: %d\n", ret);
omap_hsmmc_init(mmc);
omap_i2c_init(); omap_i2c_init();
platform_device_register(&omap_vwlan_device); platform_device_register(&omap_vwlan_device);
usb_musb_init(NULL); usb_musb_init(NULL);
......
...@@ -276,7 +276,7 @@ int __init omap4_keyboard_init(struct omap4_keypad_platform_data ...@@ -276,7 +276,7 @@ int __init omap4_keyboard_init(struct omap4_keypad_platform_data
} }
#if defined(CONFIG_OMAP_MBOX_FWK) || defined(CONFIG_OMAP_MBOX_FWK_MODULE) #if defined(CONFIG_OMAP_MBOX_FWK) || defined(CONFIG_OMAP_MBOX_FWK_MODULE)
static inline void omap_init_mbox(void) static inline void __init omap_init_mbox(void)
{ {
struct omap_hwmod *oh; struct omap_hwmod *oh;
struct platform_device *pdev; struct platform_device *pdev;
...@@ -337,7 +337,7 @@ static inline void omap_init_audio(void) {} ...@@ -337,7 +337,7 @@ static inline void omap_init_audio(void) {}
#if defined(CONFIG_SND_OMAP_SOC_MCPDM) || \ #if defined(CONFIG_SND_OMAP_SOC_MCPDM) || \
defined(CONFIG_SND_OMAP_SOC_MCPDM_MODULE) defined(CONFIG_SND_OMAP_SOC_MCPDM_MODULE)
static void omap_init_mcpdm(void) static void __init omap_init_mcpdm(void)
{ {
struct omap_hwmod *oh; struct omap_hwmod *oh;
struct platform_device *pdev; struct platform_device *pdev;
...@@ -358,7 +358,7 @@ static inline void omap_init_mcpdm(void) {} ...@@ -358,7 +358,7 @@ static inline void omap_init_mcpdm(void) {}
#if defined(CONFIG_SND_OMAP_SOC_DMIC) || \ #if defined(CONFIG_SND_OMAP_SOC_DMIC) || \
defined(CONFIG_SND_OMAP_SOC_DMIC_MODULE) defined(CONFIG_SND_OMAP_SOC_DMIC_MODULE)
static void omap_init_dmic(void) static void __init omap_init_dmic(void)
{ {
struct omap_hwmod *oh; struct omap_hwmod *oh;
struct platform_device *pdev; struct platform_device *pdev;
...@@ -380,7 +380,7 @@ static inline void omap_init_dmic(void) {} ...@@ -380,7 +380,7 @@ static inline void omap_init_dmic(void) {}
#include <plat/mcspi.h> #include <plat/mcspi.h>
static int omap_mcspi_init(struct omap_hwmod *oh, void *unused) static int __init omap_mcspi_init(struct omap_hwmod *oh, void *unused)
{ {
struct platform_device *pdev; struct platform_device *pdev;
char *name = "omap2_mcspi"; char *name = "omap2_mcspi";
...@@ -654,9 +654,7 @@ void __init omap242x_init_mmc(struct omap_mmc_platform_data **mmc_data) ...@@ -654,9 +654,7 @@ void __init omap242x_init_mmc(struct omap_mmc_platform_data **mmc_data)
/*-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------*/
#if defined(CONFIG_HDQ_MASTER_OMAP) || defined(CONFIG_HDQ_MASTER_OMAP_MODULE) #if defined(CONFIG_HDQ_MASTER_OMAP) || defined(CONFIG_HDQ_MASTER_OMAP_MODULE)
#if defined(CONFIG_SOC_OMAP2430) || defined(CONFIG_SOC_OMAP3430)
#define OMAP_HDQ_BASE 0x480B2000 #define OMAP_HDQ_BASE 0x480B2000
#endif
static struct resource omap_hdq_resources[] = { static struct resource omap_hdq_resources[] = {
{ {
.start = OMAP_HDQ_BASE, .start = OMAP_HDQ_BASE,
...@@ -679,7 +677,10 @@ static struct platform_device omap_hdq_dev = { ...@@ -679,7 +677,10 @@ static struct platform_device omap_hdq_dev = {
}; };
static inline void omap_hdq_init(void) static inline void omap_hdq_init(void)
{ {
(void) platform_device_register(&omap_hdq_dev); if (cpu_is_omap2420())
return;
platform_device_register(&omap_hdq_dev);
} }
#else #else
static inline void omap_hdq_init(void) {} static inline void omap_hdq_init(void) {}
......
...@@ -124,7 +124,7 @@ static void omap4_hdmi_mux_pads(enum omap_hdmi_flags flags) ...@@ -124,7 +124,7 @@ static void omap4_hdmi_mux_pads(enum omap_hdmi_flags flags)
} }
} }
static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes) static int __init omap4_dsi_mux_pads(int dsi_id, unsigned lanes)
{ {
u32 enable_mask, enable_shift; u32 enable_mask, enable_shift;
u32 pipd_mask, pipd_shift; u32 pipd_mask, pipd_shift;
...@@ -157,7 +157,7 @@ static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes) ...@@ -157,7 +157,7 @@ static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes)
return 0; return 0;
} }
int omap_hdmi_init(enum omap_hdmi_flags flags) int __init omap_hdmi_init(enum omap_hdmi_flags flags)
{ {
if (cpu_is_omap44xx()) if (cpu_is_omap44xx())
omap4_hdmi_mux_pads(flags); omap4_hdmi_mux_pads(flags);
...@@ -165,7 +165,7 @@ int omap_hdmi_init(enum omap_hdmi_flags flags) ...@@ -165,7 +165,7 @@ int omap_hdmi_init(enum omap_hdmi_flags flags)
return 0; return 0;
} }
static int omap_dsi_enable_pads(int dsi_id, unsigned lane_mask) static int __init omap_dsi_enable_pads(int dsi_id, unsigned lane_mask)
{ {
if (cpu_is_omap44xx()) if (cpu_is_omap44xx())
return omap4_dsi_mux_pads(dsi_id, lane_mask); return omap4_dsi_mux_pads(dsi_id, lane_mask);
...@@ -173,7 +173,7 @@ static int omap_dsi_enable_pads(int dsi_id, unsigned lane_mask) ...@@ -173,7 +173,7 @@ static int omap_dsi_enable_pads(int dsi_id, unsigned lane_mask)
return 0; return 0;
} }
static void omap_dsi_disable_pads(int dsi_id, unsigned lane_mask) static void __init omap_dsi_disable_pads(int dsi_id, unsigned lane_mask)
{ {
if (cpu_is_omap44xx()) if (cpu_is_omap44xx())
omap4_dsi_mux_pads(dsi_id, 0); omap4_dsi_mux_pads(dsi_id, 0);
......
...@@ -227,7 +227,7 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused) ...@@ -227,7 +227,7 @@ static int __init omap2_system_dma_init_dev(struct omap_hwmod *oh, void *unused)
dma_stride = OMAP2_DMA_STRIDE; dma_stride = OMAP2_DMA_STRIDE;
dma_common_ch_start = CSDP; dma_common_ch_start = CSDP;
if (cpu_is_omap3630() || cpu_is_omap4430()) if (cpu_is_omap3630() || cpu_is_omap44xx())
dma_common_ch_end = CCDN; dma_common_ch_end = CCDN;
else else
dma_common_ch_end = CCFN; dma_common_ch_end = CCFN;
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include <plat/omap_hwmod.h> #include <plat/omap_hwmod.h>
#include <plat/omap_device.h> #include <plat/omap_device.h>
static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused) static int __init omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
{ {
struct platform_device *pdev; struct platform_device *pdev;
struct omap_gpio_platform_data *pdata; struct omap_gpio_platform_data *pdata;
......
...@@ -293,8 +293,8 @@ static inline void omap_hsmmc_mux(struct omap_mmc_platform_data *mmc_controller, ...@@ -293,8 +293,8 @@ static inline void omap_hsmmc_mux(struct omap_mmc_platform_data *mmc_controller,
} }
} }
static int omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c, static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
struct omap_mmc_platform_data *mmc) struct omap_mmc_platform_data *mmc)
{ {
char *hc_name; char *hc_name;
...@@ -428,69 +428,140 @@ static int omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c, ...@@ -428,69 +428,140 @@ static int omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
return 0; return 0;
} }
static int omap_hsmmc_done;
void omap_hsmmc_late_init(struct omap2_hsmmc_info *c)
{
struct platform_device *pdev;
struct omap_mmc_platform_data *mmc_pdata;
int res;
if (omap_hsmmc_done != 1)
return;
omap_hsmmc_done++;
for (; c->mmc; c++) {
if (!c->deferred)
continue;
pdev = c->pdev;
if (!pdev)
continue;
mmc_pdata = pdev->dev.platform_data;
if (!mmc_pdata)
continue;
mmc_pdata->slots[0].switch_pin = c->gpio_cd;
mmc_pdata->slots[0].gpio_wp = c->gpio_wp;
res = omap_device_register(pdev);
if (res)
pr_err("Could not late init MMC %s\n",
c->name);
}
}
#define MAX_OMAP_MMC_HWMOD_NAME_LEN 16 #define MAX_OMAP_MMC_HWMOD_NAME_LEN 16
void omap_init_hsmmc(struct omap2_hsmmc_info *hsmmcinfo, int ctrl_nr) static void omap_hsmmc_init_one(struct omap2_hsmmc_info *hsmmcinfo,
int ctrl_nr)
{ {
struct omap_hwmod *oh; struct omap_hwmod *oh;
struct omap_hwmod *ohs[1];
struct omap_device *od;
struct platform_device *pdev; struct platform_device *pdev;
char oh_name[MAX_OMAP_MMC_HWMOD_NAME_LEN]; char oh_name[MAX_OMAP_MMC_HWMOD_NAME_LEN];
struct omap_mmc_platform_data *mmc_data; struct omap_mmc_platform_data *mmc_data;
struct omap_mmc_dev_attr *mmc_dev_attr; struct omap_mmc_dev_attr *mmc_dev_attr;
char *name; char *name;
int l; int res;
mmc_data = kzalloc(sizeof(struct omap_mmc_platform_data), GFP_KERNEL); mmc_data = kzalloc(sizeof(struct omap_mmc_platform_data), GFP_KERNEL);
if (!mmc_data) { if (!mmc_data) {
pr_err("Cannot allocate memory for mmc device!\n"); pr_err("Cannot allocate memory for mmc device!\n");
goto done; return;
} }
if (omap_hsmmc_pdata_init(hsmmcinfo, mmc_data) < 0) { res = omap_hsmmc_pdata_init(hsmmcinfo, mmc_data);
pr_err("%s fails!\n", __func__); if (res < 0)
goto done; goto free_mmc;
}
omap_hsmmc_mux(mmc_data, (ctrl_nr - 1)); omap_hsmmc_mux(mmc_data, (ctrl_nr - 1));
name = "omap_hsmmc"; name = "omap_hsmmc";
res = snprintf(oh_name, MAX_OMAP_MMC_HWMOD_NAME_LEN,
l = snprintf(oh_name, MAX_OMAP_MMC_HWMOD_NAME_LEN,
"mmc%d", ctrl_nr); "mmc%d", ctrl_nr);
WARN(l >= MAX_OMAP_MMC_HWMOD_NAME_LEN, WARN(res >= MAX_OMAP_MMC_HWMOD_NAME_LEN,
"String buffer overflow in MMC%d device setup\n", ctrl_nr); "String buffer overflow in MMC%d device setup\n", ctrl_nr);
oh = omap_hwmod_lookup(oh_name); oh = omap_hwmod_lookup(oh_name);
if (!oh) { if (!oh) {
pr_err("Could not look up %s\n", oh_name); pr_err("Could not look up %s\n", oh_name);
kfree(mmc_data->slots[0].name); goto free_name;
goto done;
} }
ohs[0] = oh;
if (oh->dev_attr != NULL) { if (oh->dev_attr != NULL) {
mmc_dev_attr = oh->dev_attr; mmc_dev_attr = oh->dev_attr;
mmc_data->controller_flags = mmc_dev_attr->flags; mmc_data->controller_flags = mmc_dev_attr->flags;
} }
pdev = omap_device_build(name, ctrl_nr - 1, oh, mmc_data, pdev = platform_device_alloc(name, ctrl_nr - 1);
sizeof(struct omap_mmc_platform_data), NULL, 0, false); if (!pdev) {
if (IS_ERR(pdev)) { pr_err("Could not allocate pdev for %s\n", name);
WARN(1, "Can't build omap_device for %s:%s.\n", name, oh->name); goto free_name;
kfree(mmc_data->slots[0].name);
goto done;
} }
/* dev_set_name(&pdev->dev, "%s.%d", pdev->name, pdev->id);
* return device handle to board setup code
* required to populate for regulator framework structure od = omap_device_alloc(pdev, ohs, 1, NULL, 0);
*/ if (!od) {
hsmmcinfo->dev = &pdev->dev; pr_err("Could not allocate od for %s\n", name);
goto put_pdev;
}
res = platform_device_add_data(pdev, mmc_data,
sizeof(struct omap_mmc_platform_data));
if (res) {
pr_err("Could not add pdata for %s\n", name);
goto put_pdev;
}
hsmmcinfo->pdev = pdev;
if (hsmmcinfo->deferred)
goto free_mmc;
done: res = omap_device_register(pdev);
if (res) {
pr_err("Could not register od for %s\n", name);
goto free_od;
}
goto free_mmc;
free_od:
omap_device_delete(od);
put_pdev:
platform_device_put(pdev);
free_name:
kfree(mmc_data->slots[0].name);
free_mmc:
kfree(mmc_data); kfree(mmc_data);
} }
void omap2_hsmmc_init(struct omap2_hsmmc_info *controllers) void __init omap_hsmmc_init(struct omap2_hsmmc_info *controllers)
{ {
u32 reg; u32 reg;
if (omap_hsmmc_done)
return;
omap_hsmmc_done = 1;
if (!cpu_is_omap44xx()) { if (!cpu_is_omap44xx()) {
if (cpu_is_omap2430()) { if (cpu_is_omap2430()) {
control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE; control_pbias_offset = OMAP243X_CONTROL_PBIAS_LITE;
...@@ -515,7 +586,7 @@ void omap2_hsmmc_init(struct omap2_hsmmc_info *controllers) ...@@ -515,7 +586,7 @@ void omap2_hsmmc_init(struct omap2_hsmmc_info *controllers)
} }
for (; controllers->mmc; controllers++) for (; controllers->mmc; controllers++)
omap_init_hsmmc(controllers, controllers->mmc); omap_hsmmc_init_one(controllers, controllers->mmc);
} }
......
...@@ -21,10 +21,11 @@ struct omap2_hsmmc_info { ...@@ -21,10 +21,11 @@ struct omap2_hsmmc_info {
bool no_off; /* power_saving and power is not to go off */ bool no_off; /* power_saving and power is not to go off */
bool no_off_init; /* no power off when not in MMC sleep state */ bool no_off_init; /* no power off when not in MMC sleep state */
bool vcc_aux_disable_is_sleep; /* Regulator off remapped to sleep */ bool vcc_aux_disable_is_sleep; /* Regulator off remapped to sleep */
bool deferred; /* mmc needs a deferred probe */
int gpio_cd; /* or -EINVAL */ int gpio_cd; /* or -EINVAL */
int gpio_wp; /* or -EINVAL */ int gpio_wp; /* or -EINVAL */
char *name; /* or NULL for default */ char *name; /* or NULL for default */
struct device *dev; /* returned: pointer to mmc adapter */ struct platform_device *pdev; /* mmc controller instance */
int ocr_mask; /* temporary HACK */ int ocr_mask; /* temporary HACK */
/* Remux (pad configuration) when powering on/off */ /* Remux (pad configuration) when powering on/off */
void (*remux)(struct device *dev, int slot, int power_on); void (*remux)(struct device *dev, int slot, int power_on);
...@@ -34,11 +35,16 @@ struct omap2_hsmmc_info { ...@@ -34,11 +35,16 @@ struct omap2_hsmmc_info {
#if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE) #if defined(CONFIG_MMC_OMAP_HS) || defined(CONFIG_MMC_OMAP_HS_MODULE)
void omap2_hsmmc_init(struct omap2_hsmmc_info *); void omap_hsmmc_init(struct omap2_hsmmc_info *);
void omap_hsmmc_late_init(struct omap2_hsmmc_info *);
#else #else
static inline void omap2_hsmmc_init(struct omap2_hsmmc_info *info) static inline void omap_hsmmc_init(struct omap2_hsmmc_info *info)
{
}
static inline void omap_hsmmc_late_init(struct omap2_hsmmc_info *info)
{ {
} }
......
...@@ -122,7 +122,7 @@ static int omap3_enable_st_clock(unsigned int id, bool enable) ...@@ -122,7 +122,7 @@ static int omap3_enable_st_clock(unsigned int id, bool enable)
return 0; return 0;
} }
static int omap_init_mcbsp(struct omap_hwmod *oh, void *unused) static int __init omap_init_mcbsp(struct omap_hwmod *oh, void *unused)
{ {
int id, count = 1; int id, count = 1;
char *name = "omap-mcbsp"; char *name = "omap-mcbsp";
......
...@@ -100,8 +100,8 @@ void omap_mux_write_array(struct omap_mux_partition *partition, ...@@ -100,8 +100,8 @@ void omap_mux_write_array(struct omap_mux_partition *partition,
static char *omap_mux_options; static char *omap_mux_options;
static int _omap_mux_init_gpio(struct omap_mux_partition *partition, static int __init _omap_mux_init_gpio(struct omap_mux_partition *partition,
int gpio, int val) int gpio, int val)
{ {
struct omap_mux_entry *e; struct omap_mux_entry *e;
struct omap_mux *gpio_mux = NULL; struct omap_mux *gpio_mux = NULL;
...@@ -145,7 +145,7 @@ static int _omap_mux_init_gpio(struct omap_mux_partition *partition, ...@@ -145,7 +145,7 @@ static int _omap_mux_init_gpio(struct omap_mux_partition *partition,
return 0; return 0;
} }
int omap_mux_init_gpio(int gpio, int val) int __init omap_mux_init_gpio(int gpio, int val)
{ {
struct omap_mux_partition *partition; struct omap_mux_partition *partition;
int ret; int ret;
...@@ -159,9 +159,9 @@ int omap_mux_init_gpio(int gpio, int val) ...@@ -159,9 +159,9 @@ int omap_mux_init_gpio(int gpio, int val)
return -ENODEV; return -ENODEV;
} }
static int _omap_mux_get_by_name(struct omap_mux_partition *partition, static int __init _omap_mux_get_by_name(struct omap_mux_partition *partition,
const char *muxname, const char *muxname,
struct omap_mux **found_mux) struct omap_mux **found_mux)
{ {
struct omap_mux *mux = NULL; struct omap_mux *mux = NULL;
struct omap_mux_entry *e; struct omap_mux_entry *e;
...@@ -240,7 +240,7 @@ omap_mux_get_by_name(const char *muxname, ...@@ -240,7 +240,7 @@ omap_mux_get_by_name(const char *muxname,
return -ENODEV; return -ENODEV;
} }
int omap_mux_init_signal(const char *muxname, int val) int __init omap_mux_init_signal(const char *muxname, int val)
{ {
struct omap_mux_partition *partition = NULL; struct omap_mux_partition *partition = NULL;
struct omap_mux *mux = NULL; struct omap_mux *mux = NULL;
......
...@@ -246,7 +246,7 @@ static inline void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state) ...@@ -246,7 +246,7 @@ static inline void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state)
{ {
} }
static struct omap_board_mux *board_mux __initdata __maybe_unused; static struct omap_board_mux *board_mux __maybe_unused;
#endif #endif
......
...@@ -33,7 +33,7 @@ int platform_cpu_kill(unsigned int cpu) ...@@ -33,7 +33,7 @@ int platform_cpu_kill(unsigned int cpu)
* platform-specific code to shutdown a CPU * platform-specific code to shutdown a CPU
* Called with IRQs disabled * Called with IRQs disabled
*/ */
void platform_cpu_die(unsigned int cpu) void __ref platform_cpu_die(unsigned int cpu)
{ {
unsigned int this_cpu; unsigned int this_cpu;
......
...@@ -300,7 +300,7 @@ int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state) ...@@ -300,7 +300,7 @@ int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state)
* @cpu : CPU ID * @cpu : CPU ID
* @power_state: CPU low power state. * @power_state: CPU low power state.
*/ */
int omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state) int __cpuinit omap4_hotplug_cpu(unsigned int cpu, unsigned int power_state)
{ {
unsigned int cpu_state = 0; unsigned int cpu_state = 0;
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
static struct omap_device_pm_latency *pm_lats; static struct omap_device_pm_latency *pm_lats;
static int _init_omap_device(char *name) static int __init _init_omap_device(char *name)
{ {
struct omap_hwmod *oh; struct omap_hwmod *oh;
struct platform_device *pdev; struct platform_device *pdev;
......
...@@ -1012,7 +1012,7 @@ static int __devexit omap_sr_remove(struct platform_device *pdev) ...@@ -1012,7 +1012,7 @@ static int __devexit omap_sr_remove(struct platform_device *pdev)
} }
static struct platform_driver smartreflex_driver = { static struct platform_driver smartreflex_driver = {
.remove = omap_sr_remove, .remove = __devexit_p(omap_sr_remove),
.driver = { .driver = {
.name = "smartreflex", .name = "smartreflex",
}, },
......
...@@ -69,7 +69,7 @@ static void __init sr_set_nvalues(struct omap_volt_data *volt_data, ...@@ -69,7 +69,7 @@ static void __init sr_set_nvalues(struct omap_volt_data *volt_data,
sr_data->nvalue_count = count; sr_data->nvalue_count = count;
} }
static int sr_dev_init(struct omap_hwmod *oh, void *user) static int __init sr_dev_init(struct omap_hwmod *oh, void *user)
{ {
struct omap_sr_data *sr_data; struct omap_sr_data *sr_data;
struct platform_device *pdev; struct platform_device *pdev;
......
...@@ -2125,7 +2125,7 @@ static int __devexit omap_system_dma_remove(struct platform_device *pdev) ...@@ -2125,7 +2125,7 @@ static int __devexit omap_system_dma_remove(struct platform_device *pdev)
static struct platform_driver omap_system_dma_driver = { static struct platform_driver omap_system_dma_driver = {
.probe = omap_system_dma_probe, .probe = omap_system_dma_probe,
.remove = omap_system_dma_remove, .remove = __devexit_p(omap_system_dma_remove),
.driver = { .driver = {
.name = "omap_dma_system" .name = "omap_dma_system"
}, },
......
...@@ -100,6 +100,13 @@ struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id, ...@@ -100,6 +100,13 @@ struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id,
struct omap_device_pm_latency *pm_lats, struct omap_device_pm_latency *pm_lats,
int pm_lats_cnt, int is_early_device); int pm_lats_cnt, int is_early_device);
struct omap_device *omap_device_alloc(struct platform_device *pdev,
struct omap_hwmod **ohs, int oh_cnt,
struct omap_device_pm_latency *pm_lats,
int pm_lats_cnt);
void omap_device_delete(struct omap_device *od);
int omap_device_register(struct platform_device *pdev);
void __iomem *omap_device_get_rt_va(struct omap_device *od); void __iomem *omap_device_get_rt_va(struct omap_device *od);
struct device *omap_device_get_by_hwmod_name(const char *oh_name); struct device *omap_device_get_by_hwmod_name(const char *oh_name);
......
/* /*
* omap_device implementation * omap_device implementation
* *
...@@ -97,14 +98,7 @@ ...@@ -97,14 +98,7 @@
#define USE_WAKEUP_LAT 0 #define USE_WAKEUP_LAT 0
#define IGNORE_WAKEUP_LAT 1 #define IGNORE_WAKEUP_LAT 1
static int omap_device_register(struct platform_device *pdev);
static int omap_early_device_register(struct platform_device *pdev); static int omap_early_device_register(struct platform_device *pdev);
static struct omap_device *omap_device_alloc(struct platform_device *pdev,
struct omap_hwmod **ohs, int oh_cnt,
struct omap_device_pm_latency *pm_lats,
int pm_lats_cnt);
static void omap_device_delete(struct omap_device *od);
static struct omap_device_pm_latency omap_default_latency[] = { static struct omap_device_pm_latency omap_default_latency[] = {
{ {
...@@ -509,7 +503,7 @@ static int omap_device_fill_resources(struct omap_device *od, ...@@ -509,7 +503,7 @@ static int omap_device_fill_resources(struct omap_device *od,
* *
* Returns an struct omap_device pointer or ERR_PTR() on error; * Returns an struct omap_device pointer or ERR_PTR() on error;
*/ */
static struct omap_device *omap_device_alloc(struct platform_device *pdev, struct omap_device *omap_device_alloc(struct platform_device *pdev,
struct omap_hwmod **ohs, int oh_cnt, struct omap_hwmod **ohs, int oh_cnt,
struct omap_device_pm_latency *pm_lats, struct omap_device_pm_latency *pm_lats,
int pm_lats_cnt) int pm_lats_cnt)
...@@ -591,7 +585,7 @@ static struct omap_device *omap_device_alloc(struct platform_device *pdev, ...@@ -591,7 +585,7 @@ static struct omap_device *omap_device_alloc(struct platform_device *pdev,
return ERR_PTR(ret); return ERR_PTR(ret);
} }
static void omap_device_delete(struct omap_device *od) void omap_device_delete(struct omap_device *od)
{ {
if (!od) if (!od)
return; return;
...@@ -619,7 +613,7 @@ static void omap_device_delete(struct omap_device *od) ...@@ -619,7 +613,7 @@ static void omap_device_delete(struct omap_device *od)
* information. Returns ERR_PTR(-EINVAL) if @oh is NULL; otherwise, * information. Returns ERR_PTR(-EINVAL) if @oh is NULL; otherwise,
* passes along the return value of omap_device_build_ss(). * passes along the return value of omap_device_build_ss().
*/ */
struct platform_device *omap_device_build(const char *pdev_name, int pdev_id, struct platform_device __init *omap_device_build(const char *pdev_name, int pdev_id,
struct omap_hwmod *oh, void *pdata, struct omap_hwmod *oh, void *pdata,
int pdata_len, int pdata_len,
struct omap_device_pm_latency *pm_lats, struct omap_device_pm_latency *pm_lats,
...@@ -652,7 +646,7 @@ struct platform_device *omap_device_build(const char *pdev_name, int pdev_id, ...@@ -652,7 +646,7 @@ struct platform_device *omap_device_build(const char *pdev_name, int pdev_id,
* platform_device record. Returns an ERR_PTR() on error, or passes * platform_device record. Returns an ERR_PTR() on error, or passes
* along the return value of omap_device_register(). * along the return value of omap_device_register().
*/ */
struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id, struct platform_device __init *omap_device_build_ss(const char *pdev_name, int pdev_id,
struct omap_hwmod **ohs, int oh_cnt, struct omap_hwmod **ohs, int oh_cnt,
void *pdata, int pdata_len, void *pdata, int pdata_len,
struct omap_device_pm_latency *pm_lats, struct omap_device_pm_latency *pm_lats,
...@@ -717,7 +711,7 @@ struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id, ...@@ -717,7 +711,7 @@ struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id,
* platform_early_add_device() on the underlying platform_device. * platform_early_add_device() on the underlying platform_device.
* Returns 0 by default. * Returns 0 by default.
*/ */
static int omap_early_device_register(struct platform_device *pdev) static int __init omap_early_device_register(struct platform_device *pdev)
{ {
struct platform_device *devices[1]; struct platform_device *devices[1];
...@@ -817,7 +811,7 @@ static struct dev_pm_domain omap_device_pm_domain = { ...@@ -817,7 +811,7 @@ static struct dev_pm_domain omap_device_pm_domain = {
* platform_device_register() on the underlying platform_device. * platform_device_register() on the underlying platform_device.
* Returns the return value of platform_device_register(). * Returns the return value of platform_device_register().
*/ */
static int omap_device_register(struct platform_device *pdev) int omap_device_register(struct platform_device *pdev)
{ {
pr_debug("omap_device: %s: registering\n", pdev->name); pr_debug("omap_device: %s: registering\n", pdev->name);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment