Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 163141
b: refs/heads/master
c: ba20bb1
h: refs/heads/master
i:
  163139: 3ed6550
v: v3
  • Loading branch information
Peter 'p2' De Schrijver authored and Kevin Hilman committed Sep 2, 2009
1 parent fdb87d3 commit 7765520
Show file tree
Hide file tree
Showing 11 changed files with 128 additions and 54 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d3d381c6365ef5b06c4184a3fe047cf027533970
refs/heads/master: ba20bb126940ce4847e146a0d00b7f7b0868d773
6 changes: 0 additions & 6 deletions trunk/arch/arm/mach-omap2/board-3430sdp.c
Original file line number Diff line number Diff line change
Expand Up @@ -473,11 +473,6 @@ static inline void board_smc91x_init(void)

#endif

static void enable_board_wakeup_source(void)
{
omap_cfg_reg(AF26_34XX_SYS_NIRQ); /* T2 interrupt line (keypad) */
}

static void __init omap_3430sdp_init(void)
{
omap3430_i2c_init();
Expand All @@ -495,7 +490,6 @@ static void __init omap_3430sdp_init(void)
omap_serial_init();
usb_musb_init();
board_smc91x_init();
enable_board_wakeup_source();
}

static void __init omap_3430sdp_map_io(void)
Expand Down
9 changes: 4 additions & 5 deletions trunk/arch/arm/mach-omap2/board-zoom-debugboard.c
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ static struct plat_serial8250_port serial_platform_data[] = {

static struct platform_device zoom2_debugboard_serial_device = {
.name = "serial8250",
.id = 3,
.id = PLAT8250_DEV_PLATFORM1,
.dev = {
.platform_data = serial_platform_data,
},
Expand Down Expand Up @@ -129,7 +129,6 @@ static inline void __init zoom2_init_quaduart(void)
static inline int omap_zoom2_debugboard_detect(void)
{
int debug_board_detect = 0;
int ret = 1;

debug_board_detect = ZOOM2_SMSC911X_GPIO;

Expand All @@ -141,10 +140,10 @@ static inline int omap_zoom2_debugboard_detect(void)
gpio_direction_input(debug_board_detect);

if (!gpio_get_value(debug_board_detect)) {
ret = 0;
gpio_free(debug_board_detect);
return 0;
}
gpio_free(debug_board_detect);
return ret;
return 1;
}

static struct platform_device *zoom2_devices[] __initdata = {
Expand Down
2 changes: 2 additions & 0 deletions trunk/arch/arm/mach-omap2/clockdomain.c
Original file line number Diff line number Diff line change
Expand Up @@ -484,6 +484,8 @@ void omap2_clkdm_allow_idle(struct clockdomain *clkdm)
v << __ffs(clkdm->clktrctrl_mask),
clkdm->pwrdm.ptr->prcm_offs,
CM_CLKSTCTRL);

pwrdm_clkdm_state_switch(clkdm);
}

/**
Expand Down
5 changes: 0 additions & 5 deletions trunk/arch/arm/mach-omap2/mux.c
Original file line number Diff line number Diff line change
Expand Up @@ -542,11 +542,6 @@ MUX_CFG_34XX("AF13_3430_MMC3_DAT2", 0x5e8,
OMAP34XX_MUX_MODE2 | OMAP34XX_PIN_INPUT_PULLUP)
MUX_CFG_34XX("AF13_3430_MMC3_DAT3", 0x5e2,
OMAP34XX_MUX_MODE2 | OMAP34XX_PIN_INPUT_PULLUP)

/* SYS_NIRQ T2 INT1 */
MUX_CFG_34XX("AF26_34XX_SYS_NIRQ", 0x1E0,
OMAP3_WAKEUP_EN | OMAP34XX_PIN_INPUT_PULLUP |
OMAP34XX_MUX_MODE0)
};

#define OMAP34XX_PINS_SZ ARRAY_SIZE(omap34xx_pins)
Expand Down
2 changes: 1 addition & 1 deletion trunk/arch/arm/mach-omap2/pm34xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -665,7 +665,7 @@ static int __init pwrdms_setup(struct powerdomain *pwrdm)
if (!pwrdm->pwrsts)
return 0;

pwrst = kmalloc(sizeof(struct power_state), GFP_ATOMIC);
pwrst = kmalloc(sizeof(struct power_state), GFP_KERNEL);
if (!pwrst)
return -ENOMEM;
pwrst->pwrdm = pwrdm;
Expand Down
101 changes: 99 additions & 2 deletions trunk/arch/arm/mach-omap2/powerdomain.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,11 @@
#include <mach/powerdomain.h>
#include <mach/clockdomain.h>

enum {
PWRDM_STATE_NOW = 0,
PWRDM_STATE_PREV,
};

/* pwrdm_list contains all registered struct powerdomains */
static LIST_HEAD(pwrdm_list);

Expand Down Expand Up @@ -102,6 +107,63 @@ static struct powerdomain *_pwrdm_deps_lookup(struct powerdomain *pwrdm,
return pd->pwrdm;
}

static int _pwrdm_state_switch(struct powerdomain *pwrdm, int flag)
{

int prev;
int state;

if (pwrdm == NULL)
return -EINVAL;

state = pwrdm_read_pwrst(pwrdm);

switch (flag) {
case PWRDM_STATE_NOW:
prev = pwrdm->state;
break;
case PWRDM_STATE_PREV:
prev = pwrdm_read_prev_pwrst(pwrdm);
if (pwrdm->state != prev)
pwrdm->state_counter[prev]++;
break;
default:
return -EINVAL;
}

if (state != prev)
pwrdm->state_counter[state]++;

pwrdm->state = state;

return 0;
}

static int _pwrdm_pre_transition_cb(struct powerdomain *pwrdm)
{
pwrdm_clear_all_prev_pwrst(pwrdm);
_pwrdm_state_switch(pwrdm, PWRDM_STATE_NOW);
return 0;
}

static int _pwrdm_post_transition_cb(struct powerdomain *pwrdm)
{
_pwrdm_state_switch(pwrdm, PWRDM_STATE_PREV);
return 0;
}

static __init void _pwrdm_setup(struct powerdomain *pwrdm)
{
int i;

for (i = 0; i < 4; i++)
pwrdm->state_counter[i] = 0;

pwrdm_wait_transition(pwrdm);
pwrdm->state = pwrdm_read_pwrst(pwrdm);
pwrdm->state_counter[pwrdm->state] = 1;

}

/* Public functions */

Expand All @@ -117,9 +179,12 @@ void pwrdm_init(struct powerdomain **pwrdm_list)
{
struct powerdomain **p = NULL;

if (pwrdm_list)
for (p = pwrdm_list; *p; p++)
if (pwrdm_list) {
for (p = pwrdm_list; *p; p++) {
pwrdm_register(*p);
_pwrdm_setup(*p);
}
}
}

/**
Expand Down Expand Up @@ -1110,4 +1175,36 @@ int pwrdm_wait_transition(struct powerdomain *pwrdm)
return 0;
}

int pwrdm_state_switch(struct powerdomain *pwrdm)
{
return _pwrdm_state_switch(pwrdm, PWRDM_STATE_NOW);
}

int pwrdm_clkdm_state_switch(struct clockdomain *clkdm)
{
if (clkdm != NULL && clkdm->pwrdm.ptr != NULL) {
pwrdm_wait_transition(clkdm->pwrdm.ptr);
return pwrdm_state_switch(clkdm->pwrdm.ptr);
}

return -EINVAL;
}
int pwrdm_clk_state_switch(struct clk *clk)
{
if (clk != NULL && clk->clkdm != NULL)
return pwrdm_clkdm_state_switch(clk->clkdm);
return -EINVAL;
}

int pwrdm_pre_transition(void)
{
pwrdm_for_each(_pwrdm_pre_transition_cb);
return 0;
}

int pwrdm_post_transition(void)
{
pwrdm_for_each(_pwrdm_post_transition_cb);
return 0;
}

33 changes: 2 additions & 31 deletions trunk/arch/arm/mach-omap2/serial.c
Original file line number Diff line number Diff line change
Expand Up @@ -113,21 +113,6 @@ static struct plat_serial8250_port serial_platform_data2[] = {
}
};

#ifdef CONFIG_ARCH_OMAP4
static struct plat_serial8250_port serial_platform_data3[] = {
{
.membase = IO_ADDRESS(OMAP_UART4_BASE),
.mapbase = OMAP_UART4_BASE,
.irq = 70,
.flags = UPF_BOOT_AUTOCONF,
.iotype = UPIO_MEM,
.regshift = 2,
.uartclk = OMAP24XX_BASE_BAUD * 16,
}, {
.flags = 0
}
};
#endif
static inline unsigned int serial_read_reg(struct plat_serial8250_port *up,
int offset)
{
Expand Down Expand Up @@ -565,17 +550,6 @@ static struct omap_uart_state omap_uart[OMAP_MAX_NR_PORTS] = {
},
},
},
#ifdef CONFIG_ARCH_OMAP4
{
.pdev = {
.name = "serial8250",
.id = 3
.dev = {
.platform_data = serial_platform_data3,
},
},
},
#endif
};

void __init omap_serial_init(void)
Expand Down Expand Up @@ -609,11 +583,8 @@ void __init omap_serial_init(void)
uart->fck = NULL;
}

/* FIXME: Remove this once the clkdev is ready */
if (!cpu_is_omap44xx()) {
if (!uart->ick || !uart->fck)
continue;
}
if (!uart->ick || !uart->fck)
continue;

uart->num = i;
p->private_data = uart;
Expand Down
12 changes: 12 additions & 0 deletions trunk/arch/arm/mach-omap2/usb-musb.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,15 @@
#include <mach/mux.h>
#include <mach/usb.h>

#define OTG_SYSCONFIG (OMAP34XX_HSUSB_OTG_BASE + 0x404)

static void __init usb_musb_pm_init(void)
{
/* Ensure force-idle mode for OTG controller */
if (cpu_is_omap34xx())
omap_writel(0, OTG_SYSCONFIG);
}

#ifdef CONFIG_USB_MUSB_SOC

static struct resource musb_resources[] = {
Expand Down Expand Up @@ -164,10 +173,13 @@ void __init usb_musb_init(void)
printk(KERN_ERR "Unable to register HS-USB (MUSB) device\n");
return;
}

usb_musb_pm_init();
}

#else
void __init usb_musb_init(void)
{
usb_musb_pm_init();
}
#endif /* CONFIG_USB_MUSB_SOC */
3 changes: 0 additions & 3 deletions trunk/arch/arm/plat-omap/include/mach/mux.h
Original file line number Diff line number Diff line change
Expand Up @@ -885,9 +885,6 @@ enum omap34xx_index {
AH9_3430_MMC3_DAT1,
AF13_3430_MMC3_DAT2,
AF13_3430_MMC3_DAT3,

/* SYS_NIRQ T2 INT1 */
AF26_34XX_SYS_NIRQ,
};

struct omap_mux_cfg {
Expand Down
7 changes: 7 additions & 0 deletions trunk/arch/arm/plat-omap/include/mach/powerdomain.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,8 @@ struct powerdomain {

struct list_head node;

int state;
unsigned state_counter[4];
};


Expand Down Expand Up @@ -164,4 +166,9 @@ bool pwrdm_has_hdwr_sar(struct powerdomain *pwrdm);

int pwrdm_wait_transition(struct powerdomain *pwrdm);

int pwrdm_state_switch(struct powerdomain *pwrdm);
int pwrdm_clkdm_state_switch(struct clockdomain *clkdm);
int pwrdm_pre_transition(void);
int pwrdm_post_transition(void);

#endif

0 comments on commit 7765520

Please sign in to comment.