Commit 8ea656bd authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6

* 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6: (21 commits)
  ARM: OMAP4: MMC: increase delay for pbias
  arm: omap2plus: move NAND_BLOCK_SIZE out of boards
  omap4: hwmod: Enable the keypad
  omap3: Free Beagle rev gpios when they are read, so others can read them later
  arm: omap3: beagle: Ensure msecure is mux'd to be able to set the RTC
  omap: rx51: Don't power up speaker amplifier at bootup
  omap: rx51: Set regulator V28_A always on
  ARM: OMAP4: MMC: no regulator off during probe for eMMC
  arm: omap2plus: fix ads7846 pendown gpio request
  ARM: OMAP2: Add missing iounmap in omap4430_phy_init
  ARM: omap4: Pass core and wakeup mux tables to omap4_mux_init
  ARM: omap2+: mux: Allow board mux settings to be NULL
  OMAP4: fix return value of omap4_l3_init
  OMAP: iovmm: fix SW flags passed by user
  arch/arm/mach-omap1/dma.c: Invert calls to platform_device_put and platform_device_del
  OMAP2+: mux: fix compilation warnings
  OMAP: SRAM: Fix warning: format '%08lx' expects type 'long unsigned int'
  arm: omap3: cm-t3517: fix section mismatch warning
  OMAP2+: Fix 9 section mismatch(es) warnings from mach-omap2/built-in.o
  ARM: OMAP2: Add missing include of linux/gpio.h
  ...
parents d205df99 1fcecf28
...@@ -284,14 +284,15 @@ static int __init omap1_system_dma_init(void) ...@@ -284,14 +284,15 @@ static int __init omap1_system_dma_init(void)
dma_base = ioremap(res[0].start, resource_size(&res[0])); dma_base = ioremap(res[0].start, resource_size(&res[0]));
if (!dma_base) { if (!dma_base) {
pr_err("%s: Unable to ioremap\n", __func__); pr_err("%s: Unable to ioremap\n", __func__);
return -ENODEV; ret = -ENODEV;
goto exit_device_put;
} }
ret = platform_device_add_resources(pdev, res, ARRAY_SIZE(res)); ret = platform_device_add_resources(pdev, res, ARRAY_SIZE(res));
if (ret) { if (ret) {
dev_err(&pdev->dev, "%s: Unable to add resources for %s%d\n", dev_err(&pdev->dev, "%s: Unable to add resources for %s%d\n",
__func__, pdev->name, pdev->id); __func__, pdev->name, pdev->id);
goto exit_device_del; goto exit_device_put;
} }
p = kzalloc(sizeof(struct omap_system_dma_plat_info), GFP_KERNEL); p = kzalloc(sizeof(struct omap_system_dma_plat_info), GFP_KERNEL);
...@@ -299,7 +300,7 @@ static int __init omap1_system_dma_init(void) ...@@ -299,7 +300,7 @@ static int __init omap1_system_dma_init(void)
dev_err(&pdev->dev, "%s: Unable to allocate 'p' for %s\n", dev_err(&pdev->dev, "%s: Unable to allocate 'p' for %s\n",
__func__, pdev->name); __func__, pdev->name);
ret = -ENOMEM; ret = -ENOMEM;
goto exit_device_put; goto exit_device_del;
} }
d = kzalloc(sizeof(struct omap_dma_dev_attr), GFP_KERNEL); d = kzalloc(sizeof(struct omap_dma_dev_attr), GFP_KERNEL);
...@@ -380,10 +381,10 @@ static int __init omap1_system_dma_init(void) ...@@ -380,10 +381,10 @@ static int __init omap1_system_dma_init(void)
kfree(d); kfree(d);
exit_release_p: exit_release_p:
kfree(p); kfree(p);
exit_device_put:
platform_device_put(pdev);
exit_device_del: exit_device_del:
platform_device_del(pdev); platform_device_del(pdev);
exit_device_put:
platform_device_put(pdev);
return ret; return ret;
} }
......
...@@ -26,13 +26,13 @@ ...@@ -26,13 +26,13 @@
#include <linux/err.h> #include <linux/err.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/gpio.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <mach/gpio.h>
#include <plat/board.h> #include <plat/board.h>
#include <plat/common.h> #include <plat/common.h>
#include <plat/gpmc.h> #include <plat/gpmc.h>
......
...@@ -622,19 +622,19 @@ static struct omap_device_pad serial3_pads[] __initdata = { ...@@ -622,19 +622,19 @@ static struct omap_device_pad serial3_pads[] __initdata = {
OMAP_MUX_MODE0), OMAP_MUX_MODE0),
}; };
static struct omap_board_data serial1_data = { static struct omap_board_data serial1_data __initdata = {
.id = 0, .id = 0,
.pads = serial1_pads, .pads = serial1_pads,
.pads_cnt = ARRAY_SIZE(serial1_pads), .pads_cnt = ARRAY_SIZE(serial1_pads),
}; };
static struct omap_board_data serial2_data = { static struct omap_board_data serial2_data __initdata = {
.id = 1, .id = 1,
.pads = serial2_pads, .pads = serial2_pads,
.pads_cnt = ARRAY_SIZE(serial2_pads), .pads_cnt = ARRAY_SIZE(serial2_pads),
}; };
static struct omap_board_data serial3_data = { static struct omap_board_data serial3_data __initdata = {
.id = 2, .id = 2,
.pads = serial3_pads, .pads = serial3_pads,
.pads_cnt = ARRAY_SIZE(serial3_pads), .pads_cnt = ARRAY_SIZE(serial3_pads),
......
...@@ -258,7 +258,7 @@ static struct gpio sdp4430_eth_gpios[] __initdata = { ...@@ -258,7 +258,7 @@ static struct gpio sdp4430_eth_gpios[] __initdata = {
{ ETH_KS8851_IRQ, GPIOF_IN, "eth_irq" }, { ETH_KS8851_IRQ, GPIOF_IN, "eth_irq" },
}; };
static int omap_ethernet_init(void) static int __init omap_ethernet_init(void)
{ {
int status; int status;
...@@ -322,6 +322,7 @@ static struct omap2_hsmmc_info mmc[] = { ...@@ -322,6 +322,7 @@ static struct omap2_hsmmc_info mmc[] = {
.gpio_wp = -EINVAL, .gpio_wp = -EINVAL,
.nonremovable = true, .nonremovable = true,
.ocr_mask = MMC_VDD_29_30, .ocr_mask = MMC_VDD_29_30,
.no_off_init = true,
}, },
{ {
.mmc = 1, .mmc = 1,
...@@ -681,19 +682,19 @@ static struct omap_device_pad serial4_pads[] __initdata = { ...@@ -681,19 +682,19 @@ static struct omap_device_pad serial4_pads[] __initdata = {
OMAP_PIN_OUTPUT | OMAP_MUX_MODE0), OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
}; };
static struct omap_board_data serial2_data = { static struct omap_board_data serial2_data __initdata = {
.id = 1, .id = 1,
.pads = serial2_pads, .pads = serial2_pads,
.pads_cnt = ARRAY_SIZE(serial2_pads), .pads_cnt = ARRAY_SIZE(serial2_pads),
}; };
static struct omap_board_data serial3_data = { static struct omap_board_data serial3_data __initdata = {
.id = 2, .id = 2,
.pads = serial3_pads, .pads = serial3_pads,
.pads_cnt = ARRAY_SIZE(serial3_pads), .pads_cnt = ARRAY_SIZE(serial3_pads),
}; };
static struct omap_board_data serial4_data = { static struct omap_board_data serial4_data __initdata = {
.id = 3, .id = 3,
.pads = serial4_pads, .pads = serial4_pads,
.pads_cnt = ARRAY_SIZE(serial4_pads), .pads_cnt = ARRAY_SIZE(serial4_pads),
...@@ -729,7 +730,7 @@ static void __init omap_4430sdp_init(void) ...@@ -729,7 +730,7 @@ static void __init omap_4430sdp_init(void)
if (omap_rev() == OMAP4430_REV_ES1_0) if (omap_rev() == OMAP4430_REV_ES1_0)
package = OMAP_PACKAGE_CBL; package = OMAP_PACKAGE_CBL;
omap4_mux_init(board_mux, package); omap4_mux_init(board_mux, NULL, package);
omap_board_config = sdp4430_config; omap_board_config = sdp4430_config;
omap_board_config_size = ARRAY_SIZE(sdp4430_config); omap_board_config_size = ARRAY_SIZE(sdp4430_config);
......
...@@ -27,13 +27,13 @@ ...@@ -27,13 +27,13 @@
#include <linux/err.h> #include <linux/err.h>
#include <linux/clk.h> #include <linux/clk.h>
#include <linux/smc91x.h> #include <linux/smc91x.h>
#include <linux/gpio.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <asm/mach-types.h> #include <asm/mach-types.h>
#include <asm/mach/arch.h> #include <asm/mach/arch.h>
#include <asm/mach/flash.h> #include <asm/mach/flash.h>
#include <mach/gpio.h>
#include <plat/led.h> #include <plat/led.h>
#include <plat/usb.h> #include <plat/usb.h>
#include <plat/board.h> #include <plat/board.h>
......
...@@ -63,8 +63,6 @@ ...@@ -63,8 +63,6 @@
#define SB_T35_SMSC911X_CS 4 #define SB_T35_SMSC911X_CS 4
#define SB_T35_SMSC911X_GPIO 65 #define SB_T35_SMSC911X_GPIO 65
#define NAND_BLOCK_SIZE SZ_128K
#if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE) #if defined(CONFIG_SMSC911X) || defined(CONFIG_SMSC911X_MODULE)
#include <linux/smsc911x.h> #include <linux/smsc911x.h>
#include <plat/gpmc-smsc911x.h> #include <plat/gpmc-smsc911x.h>
......
...@@ -48,6 +48,7 @@ ...@@ -48,6 +48,7 @@
#include "mux.h" #include "mux.h"
#include "control.h" #include "control.h"
#include "common-board-devices.h"
#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE) #if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
static struct gpio_led cm_t3517_leds[] = { static struct gpio_led cm_t3517_leds[] = {
...@@ -177,7 +178,7 @@ static struct usbhs_omap_board_data cm_t3517_ehci_pdata __initdata = { ...@@ -177,7 +178,7 @@ static struct usbhs_omap_board_data cm_t3517_ehci_pdata __initdata = {
.reset_gpio_port[2] = -EINVAL, .reset_gpio_port[2] = -EINVAL,
}; };
static int cm_t3517_init_usbh(void) static int __init cm_t3517_init_usbh(void)
{ {
int err; int err;
...@@ -203,8 +204,6 @@ static inline int cm_t3517_init_usbh(void) ...@@ -203,8 +204,6 @@ static inline int cm_t3517_init_usbh(void)
#endif #endif
#if defined(CONFIG_MTD_NAND_OMAP2) || defined(CONFIG_MTD_NAND_OMAP2_MODULE) #if defined(CONFIG_MTD_NAND_OMAP2) || defined(CONFIG_MTD_NAND_OMAP2_MODULE)
#define NAND_BLOCK_SIZE SZ_128K
static struct mtd_partition cm_t3517_nand_partitions[] = { static struct mtd_partition cm_t3517_nand_partitions[] = {
{ {
.name = "xloader", .name = "xloader",
......
...@@ -61,8 +61,6 @@ ...@@ -61,8 +61,6 @@
#include "timer-gp.h" #include "timer-gp.h"
#include "common-board-devices.h" #include "common-board-devices.h"
#define NAND_BLOCK_SIZE SZ_128K
#define OMAP_DM9000_GPIO_IRQ 25 #define OMAP_DM9000_GPIO_IRQ 25
#define OMAP3_DEVKIT_TS_GPIO 27 #define OMAP3_DEVKIT_TS_GPIO 27
......
...@@ -54,8 +54,6 @@ ...@@ -54,8 +54,6 @@
#include "pm.h" #include "pm.h"
#include "common-board-devices.h" #include "common-board-devices.h"
#define NAND_BLOCK_SIZE SZ_128K
/* /*
* OMAP3 Beagle revision * OMAP3 Beagle revision
* Run time detection of Beagle revision is done by reading GPIO. * Run time detection of Beagle revision is done by reading GPIO.
...@@ -106,6 +104,9 @@ static void __init omap3_beagle_init_rev(void) ...@@ -106,6 +104,9 @@ static void __init omap3_beagle_init_rev(void)
beagle_rev = gpio_get_value(171) | (gpio_get_value(172) << 1) beagle_rev = gpio_get_value(171) | (gpio_get_value(172) << 1)
| (gpio_get_value(173) << 2); | (gpio_get_value(173) << 2);
gpio_free_array(omap3_beagle_rev_gpios,
ARRAY_SIZE(omap3_beagle_rev_gpios));
switch (beagle_rev) { switch (beagle_rev) {
case 7: case 7:
printk(KERN_INFO "OMAP3 Beagle Rev: Ax/Bx\n"); printk(KERN_INFO "OMAP3 Beagle Rev: Ax/Bx\n");
...@@ -579,6 +580,9 @@ static void __init omap3_beagle_init(void) ...@@ -579,6 +580,9 @@ static void __init omap3_beagle_init(void)
omap_nand_flash_init(NAND_BUSWIDTH_16, omap3beagle_nand_partitions, omap_nand_flash_init(NAND_BUSWIDTH_16, omap3beagle_nand_partitions,
ARRAY_SIZE(omap3beagle_nand_partitions)); ARRAY_SIZE(omap3beagle_nand_partitions));
/* Ensure msecure is mux'd to be able to set the RTC. */
omap_mux_init_signal("sys_drm_msecure", OMAP_PIN_OFF_OUTPUT_HIGH);
/* Ensure SDRC pins are mux'd for self-refresh */ /* Ensure SDRC pins are mux'd for self-refresh */
omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT); omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT);
......
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <linux/leds.h> #include <linux/leds.h>
#include <linux/input.h> #include <linux/input.h>
#include <linux/input/matrix_keypad.h> #include <linux/input/matrix_keypad.h>
#include <linux/gpio.h>
#include <linux/gpio_keys.h> #include <linux/gpio_keys.h>
#include <linux/mmc/host.h> #include <linux/mmc/host.h>
#include <linux/mmc/card.h> #include <linux/mmc/card.h>
...@@ -41,7 +42,6 @@ ...@@ -41,7 +42,6 @@
#include <plat/board.h> #include <plat/board.h>
#include <plat/common.h> #include <plat/common.h>
#include <mach/gpio.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <plat/mcspi.h> #include <plat/mcspi.h>
#include <plat/usb.h> #include <plat/usb.h>
...@@ -57,8 +57,6 @@ ...@@ -57,8 +57,6 @@
#define PANDORA_WIFI_NRESET_GPIO 23 #define PANDORA_WIFI_NRESET_GPIO 23
#define OMAP3_PANDORA_TS_GPIO 94 #define OMAP3_PANDORA_TS_GPIO 94
#define NAND_BLOCK_SIZE SZ_128K
static struct mtd_partition omap3pandora_nand_partitions[] = { static struct mtd_partition omap3pandora_nand_partitions[] = {
{ {
.name = "xloader", .name = "xloader",
......
...@@ -56,8 +56,6 @@ ...@@ -56,8 +56,6 @@
#include <asm/setup.h> #include <asm/setup.h>
#define NAND_BLOCK_SIZE SZ_128K
#define OMAP3_AC_GPIO 136 #define OMAP3_AC_GPIO 136
#define OMAP3_TS_GPIO 162 #define OMAP3_TS_GPIO 162
#define TB_BL_PWM_TIMER 9 #define TB_BL_PWM_TIMER 9
......
...@@ -526,19 +526,19 @@ static struct omap_device_pad serial4_pads[] __initdata = { ...@@ -526,19 +526,19 @@ static struct omap_device_pad serial4_pads[] __initdata = {
OMAP_PIN_OUTPUT | OMAP_MUX_MODE0), OMAP_PIN_OUTPUT | OMAP_MUX_MODE0),
}; };
static struct omap_board_data serial2_data = { static struct omap_board_data serial2_data __initdata = {
.id = 1, .id = 1,
.pads = serial2_pads, .pads = serial2_pads,
.pads_cnt = ARRAY_SIZE(serial2_pads), .pads_cnt = ARRAY_SIZE(serial2_pads),
}; };
static struct omap_board_data serial3_data = { static struct omap_board_data serial3_data __initdata = {
.id = 2, .id = 2,
.pads = serial3_pads, .pads = serial3_pads,
.pads_cnt = ARRAY_SIZE(serial3_pads), .pads_cnt = ARRAY_SIZE(serial3_pads),
}; };
static struct omap_board_data serial4_data = { static struct omap_board_data serial4_data __initdata = {
.id = 3, .id = 3,
.pads = serial4_pads, .pads = serial4_pads,
.pads_cnt = ARRAY_SIZE(serial4_pads), .pads_cnt = ARRAY_SIZE(serial4_pads),
...@@ -687,7 +687,7 @@ static void __init omap4_panda_init(void) ...@@ -687,7 +687,7 @@ static void __init omap4_panda_init(void)
if (omap_rev() == OMAP4430_REV_ES1_0) if (omap_rev() == OMAP4430_REV_ES1_0)
package = OMAP_PACKAGE_CBL; package = OMAP_PACKAGE_CBL;
omap4_mux_init(board_mux, package); omap4_mux_init(board_mux, NULL, package);
if (wl12xx_set_platform_data(&omap_panda_wlan_data)) if (wl12xx_set_platform_data(&omap_panda_wlan_data))
pr_err("error setting wl12xx data\n"); pr_err("error setting wl12xx data\n");
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <linux/err.h> #include <linux/err.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/gpio.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/i2c/twl.h> #include <linux/i2c/twl.h>
...@@ -45,7 +46,6 @@ ...@@ -45,7 +46,6 @@
#include <plat/common.h> #include <plat/common.h>
#include <video/omapdss.h> #include <video/omapdss.h>
#include <video/omap-panel-generic-dpi.h> #include <video/omap-panel-generic-dpi.h>
#include <mach/gpio.h>
#include <plat/gpmc.h> #include <plat/gpmc.h>
#include <mach/hardware.h> #include <mach/hardware.h>
#include <plat/nand.h> #include <plat/nand.h>
...@@ -65,8 +65,6 @@ ...@@ -65,8 +65,6 @@
#define OVERO_GPIO_USBH_CPEN 168 #define OVERO_GPIO_USBH_CPEN 168
#define OVERO_GPIO_USBH_NRESET 183 #define OVERO_GPIO_USBH_NRESET 183
#define NAND_BLOCK_SIZE SZ_128K
#define OVERO_SMSC911X_CS 5 #define OVERO_SMSC911X_CS 5
#define OVERO_SMSC911X_GPIO 176 #define OVERO_SMSC911X_GPIO 176
#define OVERO_SMSC911X2_CS 4 #define OVERO_SMSC911X2_CS 4
......
...@@ -488,6 +488,7 @@ static struct regulator_init_data rx51_vmmc2 = { ...@@ -488,6 +488,7 @@ static struct regulator_init_data rx51_vmmc2 = {
.name = "V28_A", .name = "V28_A",
.min_uV = 2800000, .min_uV = 2800000,
.max_uV = 3000000, .max_uV = 3000000,
.always_on = true, /* due VIO leak to AIC34 VDDs */
.apply_uV = true, .apply_uV = true,
.valid_modes_mask = REGULATOR_MODE_NORMAL .valid_modes_mask = REGULATOR_MODE_NORMAL
| REGULATOR_MODE_STANDBY, | REGULATOR_MODE_STANDBY,
...@@ -582,7 +583,7 @@ static int rx51_twlgpio_setup(struct device *dev, unsigned gpio, unsigned n) ...@@ -582,7 +583,7 @@ static int rx51_twlgpio_setup(struct device *dev, unsigned gpio, unsigned n)
{ {
/* FIXME this gpio setup is just a placeholder for now */ /* FIXME this gpio setup is just a placeholder for now */
gpio_request_one(gpio + 6, GPIOF_OUT_INIT_LOW, "backlight_pwm"); gpio_request_one(gpio + 6, GPIOF_OUT_INIT_LOW, "backlight_pwm");
gpio_request_one(gpio + 7, GPIOF_OUT_INIT_HIGH, "speaker_en"); gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "speaker_en");
return 0; return 0;
} }
......
...@@ -26,7 +26,7 @@ static struct gpio zoom_lcd_gpios[] __initdata = { ...@@ -26,7 +26,7 @@ static struct gpio zoom_lcd_gpios[] __initdata = {
{ LCD_PANEL_QVGA_GPIO, GPIOF_OUT_INIT_HIGH, "lcd qvga" }, { LCD_PANEL_QVGA_GPIO, GPIOF_OUT_INIT_HIGH, "lcd qvga" },
}; };
static void zoom_lcd_panel_init(void) static void __init zoom_lcd_panel_init(void)
{ {
zoom_lcd_gpios[0].gpio = (omap_rev() > OMAP3430_REV_ES3_0) ? zoom_lcd_gpios[0].gpio = (omap_rev() > OMAP3430_REV_ES3_0) ?
LCD_PANEL_RESET_GPIO_PROD : LCD_PANEL_RESET_GPIO_PROD :
......
...@@ -85,17 +85,17 @@ void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce, ...@@ -85,17 +85,17 @@ void __init omap_ads7846_init(int bus_num, int gpio_pendown, int gpio_debounce,
struct spi_board_info *spi_bi = &ads7846_spi_board_info; struct spi_board_info *spi_bi = &ads7846_spi_board_info;
int err; int err;
err = gpio_request(gpio_pendown, "TS PenDown"); if (board_pdata && board_pdata->get_pendown_state) {
if (err) { err = gpio_request_one(gpio_pendown, GPIOF_IN, "TSPenDown");
pr_err("Could not obtain gpio for TS PenDown: %d\n", err); if (err) {
return; pr_err("Couldn't obtain gpio for TSPenDown: %d\n", err);
} return;
}
gpio_direction_input(gpio_pendown); gpio_export(gpio_pendown, 0);
gpio_export(gpio_pendown, 0);
if (gpio_debounce) if (gpio_debounce)
gpio_set_debounce(gpio_pendown, gpio_debounce); gpio_set_debounce(gpio_pendown, gpio_debounce);
}
ads7846_config.gpio_pendown = gpio_pendown; ads7846_config.gpio_pendown = gpio_pendown;
......
#ifndef __OMAP_COMMON_BOARD_DEVICES__ #ifndef __OMAP_COMMON_BOARD_DEVICES__
#define __OMAP_COMMON_BOARD_DEVICES__ #define __OMAP_COMMON_BOARD_DEVICES__
#define NAND_BLOCK_SIZE SZ_128K
struct twl4030_platform_data; struct twl4030_platform_data;
struct mtd_partition; struct mtd_partition;
......
...@@ -97,7 +97,7 @@ static int __init omap4_l3_init(void) ...@@ -97,7 +97,7 @@ static int __init omap4_l3_init(void)
WARN(IS_ERR(od), "could not build omap_device for %s\n", oh_name); WARN(IS_ERR(od), "could not build omap_device for %s\n", oh_name);
return PTR_ERR(od); return IS_ERR(od) ? PTR_ERR(od) : 0;
} }
postcore_initcall(omap4_l3_init); postcore_initcall(omap4_l3_init);
......
...@@ -145,6 +145,7 @@ static void omap4_hsmmc1_after_set_reg(struct device *dev, int slot, ...@@ -145,6 +145,7 @@ static void omap4_hsmmc1_after_set_reg(struct device *dev, int slot,
int power_on, int vdd) int power_on, int vdd)
{ {
u32 reg; u32 reg;
unsigned long timeout;
if (power_on) { if (power_on) {
reg = omap4_ctrl_pad_readl(control_pbias_offset); reg = omap4_ctrl_pad_readl(control_pbias_offset);
...@@ -157,9 +158,15 @@ static void omap4_hsmmc1_after_set_reg(struct device *dev, int slot, ...@@ -157,9 +158,15 @@ static void omap4_hsmmc1_after_set_reg(struct device *dev, int slot,
OMAP4_MMC1_PWRDNZ_MASK | OMAP4_MMC1_PWRDNZ_MASK |
OMAP4_USBC1_ICUSB_PWRDNZ_MASK); OMAP4_USBC1_ICUSB_PWRDNZ_MASK);
omap4_ctrl_pad_writel(reg, control_pbias_offset); omap4_ctrl_pad_writel(reg, control_pbias_offset);
/* 4 microsec delay for comparator to generate an error*/
udelay(4); timeout = jiffies + msecs_to_jiffies(5);
reg = omap4_ctrl_pad_readl(control_pbias_offset); do {
reg = omap4_ctrl_pad_readl(control_pbias_offset);
if (!(reg & OMAP4_MMC1_PBIASLITE_VMODE_ERROR_MASK))
break;
usleep_range(100, 200);
} while (!time_after(jiffies, timeout));
if (reg & OMAP4_MMC1_PBIASLITE_VMODE_ERROR_MASK) { if (reg & OMAP4_MMC1_PBIASLITE_VMODE_ERROR_MASK) {
pr_err("Pbias Voltage is not same as LDO\n"); pr_err("Pbias Voltage is not same as LDO\n");
/* Caution : On VMODE_ERROR Power Down MMC IO */ /* Caution : On VMODE_ERROR Power Down MMC IO */
...@@ -331,6 +338,9 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c, ...@@ -331,6 +338,9 @@ static int __init omap_hsmmc_pdata_init(struct omap2_hsmmc_info *c,
if (c->no_off) if (c->no_off)
mmc->slots[0].no_off = 1; mmc->slots[0].no_off = 1;
if (c->no_off_init)
mmc->slots[0].no_regulator_off_init = c->no_off_init;
if (c->vcc_aux_disable_is_sleep) if (c->vcc_aux_disable_is_sleep)
mmc->slots[0].vcc_aux_disable_is_sleep = 1; mmc->slots[0].vcc_aux_disable_is_sleep = 1;
......
...@@ -18,6 +18,7 @@ struct omap2_hsmmc_info { ...@@ -18,6 +18,7 @@ struct omap2_hsmmc_info {
bool nonremovable; /* Nonremovable e.g. eMMC */ bool nonremovable; /* Nonremovable e.g. eMMC */
bool power_saving; /* Try to sleep or power off when possible */ bool power_saving; /* Try to sleep or power off when possible */
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 vcc_aux_disable_is_sleep; /* Regulator off remapped to sleep */ bool vcc_aux_disable_is_sleep; /* Regulator off remapped to sleep */
int gpio_cd; /* or -EINVAL */ int gpio_cd; /* or -EINVAL */
int gpio_wp; /* or -EINVAL */ int gpio_wp; /* or -EINVAL */
......
...@@ -83,6 +83,9 @@ void omap_mux_write(struct omap_mux_partition *partition, u16 val, ...@@ -83,6 +83,9 @@ void omap_mux_write(struct omap_mux_partition *partition, u16 val,
void omap_mux_write_array(struct omap_mux_partition *partition, void omap_mux_write_array(struct omap_mux_partition *partition,
struct omap_board_mux *board_mux) struct omap_board_mux *board_mux)
{ {
if (!board_mux)
return;
while (board_mux->reg_offset != OMAP_MUX_TERMINATOR) { while (board_mux->reg_offset != OMAP_MUX_TERMINATOR) {
omap_mux_write(partition, board_mux->value, omap_mux_write(partition, board_mux->value,
board_mux->reg_offset); board_mux->reg_offset);
...@@ -906,7 +909,7 @@ static struct omap_mux *omap_mux_get_by_gpio( ...@@ -906,7 +909,7 @@ static struct omap_mux *omap_mux_get_by_gpio(
u16 omap_mux_get_gpio(int gpio) u16 omap_mux_get_gpio(int gpio)
{ {
struct omap_mux_partition *partition; struct omap_mux_partition *partition;
struct omap_mux *m; struct omap_mux *m = NULL;
list_for_each_entry(partition, &mux_partitions, node) { list_for_each_entry(partition, &mux_partitions, node) {
m = omap_mux_get_by_gpio(partition, gpio); m = omap_mux_get_by_gpio(partition, gpio);
......
...@@ -323,10 +323,12 @@ int omap3_mux_init(struct omap_board_mux *board_mux, int flags); ...@@ -323,10 +323,12 @@ int omap3_mux_init(struct omap_board_mux *board_mux, int flags);
/** /**
* omap4_mux_init() - initialize mux system with board specific set * omap4_mux_init() - initialize mux system with board specific set
* @board_mux: Board specific mux table * @board_subset: Board specific mux table
* @board_wkup_subset: Board specific mux table for wakeup instance
* @flags: OMAP package type used for the board * @flags: OMAP package type used for the board
*/ */
int omap4_mux_init(struct omap_board_mux *board_mux, int flags); int omap4_mux_init(struct omap_board_mux *board_subset,
struct omap_board_mux *board_wkup_subset, int flags);
/** /**
* omap_mux_init - private mux init function, do not call * omap_mux_init - private mux init function, do not call
......
...@@ -1309,7 +1309,8 @@ static struct omap_ball __initdata omap4_wkup_cbl_cbs_ball[] = { ...@@ -1309,7 +1309,8 @@ static struct omap_ball __initdata omap4_wkup_cbl_cbs_ball[] = {
#define omap4_wkup_cbl_cbs_ball NULL #define omap4_wkup_cbl_cbs_ball NULL
#endif #endif
int __init omap4_mux_init(struct omap_board_mux *board_subset, int flags) int __init omap4_mux_init(struct omap_board_mux *board_subset,
struct omap_board_mux *board_wkup_subset, int flags)
{ {
struct omap_ball *package_balls_core; struct omap_ball *package_balls_core;
struct omap_ball *package_balls_wkup = omap4_wkup_cbl_cbs_ball; struct omap_ball *package_balls_wkup = omap4_wkup_cbl_cbs_ball;
...@@ -1347,7 +1348,7 @@ int __init omap4_mux_init(struct omap_board_mux *board_subset, int flags) ...@@ -1347,7 +1348,7 @@ int __init omap4_mux_init(struct omap_board_mux *board_subset, int flags)
OMAP_MUX_GPIO_IN_MODE3, OMAP_MUX_GPIO_IN_MODE3,
OMAP4_CTRL_MODULE_PAD_WKUP_MUX_PBASE, OMAP4_CTRL_MODULE_PAD_WKUP_MUX_PBASE,
OMAP4_CTRL_MODULE_PAD_WKUP_MUX_SIZE, OMAP4_CTRL_MODULE_PAD_WKUP_MUX_SIZE,
omap4_wkup_muxmodes, NULL, board_subset, omap4_wkup_muxmodes, NULL, board_wkup_subset,
package_balls_wkup); package_balls_wkup);
return ret; return ret;
......
...@@ -1628,7 +1628,7 @@ int omap_hwmod_for_each(int (*fn)(struct omap_hwmod *oh, void *data), ...@@ -1628,7 +1628,7 @@ int omap_hwmod_for_each(int (*fn)(struct omap_hwmod *oh, void *data),
void *data) void *data)
{ {
struct omap_hwmod *temp_oh; struct omap_hwmod *temp_oh;
int ret; int ret = 0;
if (!fn) if (!fn)
return -EINVAL; return -EINVAL;
......
...@@ -5109,7 +5109,7 @@ static __initdata struct omap_hwmod *omap44xx_hwmods[] = { ...@@ -5109,7 +5109,7 @@ static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
&omap44xx_iva_seq1_hwmod, &omap44xx_iva_seq1_hwmod,
/* kbd class */ /* kbd class */
/* &omap44xx_kbd_hwmod, */ &omap44xx_kbd_hwmod,
/* mailbox class */ /* mailbox class */
&omap44xx_mailbox_hwmod, &omap44xx_mailbox_hwmod,
......
...@@ -56,8 +56,10 @@ int omap4430_phy_init(struct device *dev) ...@@ -56,8 +56,10 @@ int omap4430_phy_init(struct device *dev)
/* Power down the phy */ /* Power down the phy */
__raw_writel(PHY_PD, ctrl_base + CONTROL_DEV_CONF); __raw_writel(PHY_PD, ctrl_base + CONTROL_DEV_CONF);
if (!dev) if (!dev) {
iounmap(ctrl_base);
return 0; return 0;
}
phyclk = clk_get(dev, "ocp2scp_usb_phy_ick"); phyclk = clk_get(dev, "ocp2scp_usb_phy_ick");
if (IS_ERR(phyclk)) { if (IS_ERR(phyclk)) {
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <linux/mtd/map.h> #include <linux/mtd/map.h>
struct platform_device;
extern void omap1_set_vpp(struct platform_device *pdev, int enable); extern void omap1_set_vpp(struct platform_device *pdev, int enable);
#endif #endif
...@@ -29,9 +29,6 @@ struct iovm_struct { ...@@ -29,9 +29,6 @@ struct iovm_struct {
* lower 16 bit is used for h/w and upper 16 bit is for s/w. * lower 16 bit is used for h/w and upper 16 bit is for s/w.
*/ */
#define IOVMF_SW_SHIFT 16 #define IOVMF_SW_SHIFT 16
#define IOVMF_HW_SIZE (1 << IOVMF_SW_SHIFT)
#define IOVMF_HW_MASK (IOVMF_HW_SIZE - 1)
#define IOVMF_SW_MASK (~IOVMF_HW_MASK)UL
/* /*
* iovma: h/w flags derived from cam and ram attribute * iovma: h/w flags derived from cam and ram attribute
......
...@@ -101,6 +101,9 @@ struct omap_mmc_platform_data { ...@@ -101,6 +101,9 @@ struct omap_mmc_platform_data {
/* If using power_saving and the MMC power is not to go off */ /* If using power_saving and the MMC power is not to go off */
unsigned no_off:1; unsigned no_off:1;
/* eMMC does not handle power off when not in sleep state */
unsigned no_regulator_off_init:1;
/* Regulator off remapped to sleep */ /* Regulator off remapped to sleep */
unsigned vcc_aux_disable_is_sleep:1; unsigned vcc_aux_disable_is_sleep:1;
......
...@@ -648,7 +648,6 @@ u32 iommu_vmap(struct iommu *obj, u32 da, const struct sg_table *sgt, ...@@ -648,7 +648,6 @@ u32 iommu_vmap(struct iommu *obj, u32 da, const struct sg_table *sgt,
return PTR_ERR(va); return PTR_ERR(va);
} }
flags &= IOVMF_HW_MASK;
flags |= IOVMF_DISCONT; flags |= IOVMF_DISCONT;
flags |= IOVMF_MMIO; flags |= IOVMF_MMIO;
...@@ -706,7 +705,6 @@ u32 iommu_vmalloc(struct iommu *obj, u32 da, size_t bytes, u32 flags) ...@@ -706,7 +705,6 @@ u32 iommu_vmalloc(struct iommu *obj, u32 da, size_t bytes, u32 flags)
if (!va) if (!va)
return -ENOMEM; return -ENOMEM;
flags &= IOVMF_HW_MASK;
flags |= IOVMF_DISCONT; flags |= IOVMF_DISCONT;
flags |= IOVMF_ALLOC; flags |= IOVMF_ALLOC;
...@@ -795,7 +793,6 @@ u32 iommu_kmap(struct iommu *obj, u32 da, u32 pa, size_t bytes, ...@@ -795,7 +793,6 @@ u32 iommu_kmap(struct iommu *obj, u32 da, u32 pa, size_t bytes,
if (!va) if (!va)
return -ENOMEM; return -ENOMEM;
flags &= IOVMF_HW_MASK;
flags |= IOVMF_LINEAR; flags |= IOVMF_LINEAR;
flags |= IOVMF_MMIO; flags |= IOVMF_MMIO;
...@@ -853,7 +850,6 @@ u32 iommu_kmalloc(struct iommu *obj, u32 da, size_t bytes, u32 flags) ...@@ -853,7 +850,6 @@ u32 iommu_kmalloc(struct iommu *obj, u32 da, size_t bytes, u32 flags)
return -ENOMEM; return -ENOMEM;
pa = virt_to_phys(va); pa = virt_to_phys(va);
flags &= IOVMF_HW_MASK;
flags |= IOVMF_LINEAR; flags |= IOVMF_LINEAR;
flags |= IOVMF_ALLOC; flags |= IOVMF_ALLOC;
......
...@@ -166,7 +166,7 @@ static void __init omap_detect_sram(void) ...@@ -166,7 +166,7 @@ static void __init omap_detect_sram(void)
else if (cpu_is_omap1611()) else if (cpu_is_omap1611())
omap_sram_size = SZ_256K; omap_sram_size = SZ_256K;
else { else {
printk(KERN_ERR "Could not detect SRAM size\n"); pr_err("Could not detect SRAM size\n");
omap_sram_size = 0x4000; omap_sram_size = 0x4000;
} }
} }
...@@ -221,10 +221,10 @@ static void __init omap_map_sram(void) ...@@ -221,10 +221,10 @@ static void __init omap_map_sram(void)
omap_sram_io_desc[0].length = ROUND_DOWN(omap_sram_size, PAGE_SIZE); omap_sram_io_desc[0].length = ROUND_DOWN(omap_sram_size, PAGE_SIZE);
iotable_init(omap_sram_io_desc, ARRAY_SIZE(omap_sram_io_desc)); iotable_init(omap_sram_io_desc, ARRAY_SIZE(omap_sram_io_desc));
printk(KERN_INFO "SRAM: Mapped pa 0x%08lx to va 0x%08lx size: 0x%lx\n", pr_info("SRAM: Mapped pa 0x%08llx to va 0x%08lx size: 0x%lx\n",
__pfn_to_phys(omap_sram_io_desc[0].pfn), (long long) __pfn_to_phys(omap_sram_io_desc[0].pfn),
omap_sram_io_desc[0].virtual, omap_sram_io_desc[0].virtual,
omap_sram_io_desc[0].length); omap_sram_io_desc[0].length);
/* /*
* Normally devicemaps_init() would flush caches and tlb after * Normally devicemaps_init() would flush caches and tlb after
...@@ -252,7 +252,7 @@ static void __init omap_map_sram(void) ...@@ -252,7 +252,7 @@ static void __init omap_map_sram(void)
void *omap_sram_push_address(unsigned long size) void *omap_sram_push_address(unsigned long size)
{ {
if (size > (omap_sram_ceil - (omap_sram_base + SRAM_BOOTLOADER_SZ))) { if (size > (omap_sram_ceil - (omap_sram_base + SRAM_BOOTLOADER_SZ))) {
printk(KERN_ERR "Not enough space in SRAM\n"); pr_err("Not enough space in SRAM\n");
return NULL; return NULL;
} }
......
...@@ -435,6 +435,9 @@ static int omap_hsmmc_reg_get(struct omap_hsmmc_host *host) ...@@ -435,6 +435,9 @@ static int omap_hsmmc_reg_get(struct omap_hsmmc_host *host)
reg = regulator_get(host->dev, "vmmc_aux"); reg = regulator_get(host->dev, "vmmc_aux");
host->vcc_aux = IS_ERR(reg) ? NULL : reg; host->vcc_aux = IS_ERR(reg) ? NULL : reg;
/* For eMMC do not power off when not in sleep state */
if (mmc_slot(host).no_regulator_off_init)
return 0;
/* /*
* UGLY HACK: workaround regulator framework bugs. * UGLY HACK: workaround regulator framework bugs.
* When the bootloader leaves a supply active, it's * When the bootloader leaves a supply active, it's
......
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