Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 296845
b: refs/heads/master
c: 485540d
h: refs/heads/master
i:
  296843: 6131ea2
v: v3
  • Loading branch information
Daniel Lezcano authored and Samuel Ortiz committed Mar 6, 2012
1 parent b20f1a9 commit 8d15786
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8dfc4705828178ae25f08ce774831e4c19de8e51
refs/heads/master: 485540dce01cf4b4d3629141399678e35e66b711
32 changes: 32 additions & 0 deletions trunk/drivers/mfd/db8500-prcmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -821,6 +821,38 @@ u8 db8500_prcmu_get_power_state_result(void)
return readb(tcdm_base + PRCM_ACK_MB0_AP_PWRSTTR_STATUS);
}

#define PRCMU_A9_MASK_REQ 0x00000328
#define PRCMU_A9_MASK_REQ_MASK 0x00000001
#define PRCMU_GIC_DELAY 1

/* This function decouple the gic from the prcmu */
int db8500_prcmu_gic_decouple(void)
{
u32 val = readl(_PRCMU_BASE + PRCMU_A9_MASK_REQ);

/* Set bit 0 register value to 1 */
writel(val | PRCMU_A9_MASK_REQ_MASK, _PRCMU_BASE + PRCMU_A9_MASK_REQ);

/* Make sure the register is updated */
readl(_PRCMU_BASE + PRCMU_A9_MASK_REQ);

/* Wait a few cycles for the gic mask completion */
udelay(PRCMU_GIC_DELAY);

return 0;
}

/* This function recouple the gic with the prcmu */
int db8500_prcmu_gic_recouple(void)
{
u32 val = readl(_PRCMU_BASE + PRCMU_A9_MASK_REQ);

/* Set bit 0 register value to 0 */
writel(val & ~PRCMU_A9_MASK_REQ_MASK, _PRCMU_BASE + PRCMU_A9_MASK_REQ);

return 0;
}

/* This function should only be called while mb0_transfer.lock is held. */
static void config_wakeups(void)
{
Expand Down
2 changes: 2 additions & 0 deletions trunk/include/linux/mfd/db8500-prcmu.h
Original file line number Diff line number Diff line change
Expand Up @@ -580,6 +580,8 @@ int db8500_prcmu_load_a9wdog(u8 id, u32 val);
void db8500_prcmu_system_reset(u16 reset_code);
int db8500_prcmu_set_power_state(u8 state, bool keep_ulp_clk, bool keep_ap_pll);
u8 db8500_prcmu_get_power_state_result(void);
int db8500_prcmu_gic_decouple(void);
int db8500_prcmu_gic_recouple(void);
void db8500_prcmu_enable_wakeups(u32 wakeups);
int db8500_prcmu_set_epod(u16 epod_id, u8 epod_state);
int db8500_prcmu_request_clock(u8 clock, bool enable);
Expand Down
16 changes: 16 additions & 0 deletions trunk/include/linux/mfd/dbx500-prcmu.h
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,22 @@ static inline u8 prcmu_get_power_state_result(void)
return db8500_prcmu_get_power_state_result();
}

static inline int prcmu_gic_decouple(void)
{
if (cpu_is_u5500())
return -EINVAL;
else
return db8500_prcmu_gic_decouple();
}

static inline int prcmu_gic_recouple(void)
{
if (cpu_is_u5500())
return -EINVAL;
else
return db8500_prcmu_gic_recouple();
}

static inline int prcmu_set_epod(u16 epod_id, u8 epod_state)
{
if (cpu_is_u5500())
Expand Down

0 comments on commit 8d15786

Please sign in to comment.