Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 319702
b: refs/heads/master
c: 5261e10
h: refs/heads/master
v: v3
  • Loading branch information
Arun Murthy authored and Samuel Ortiz committed Jul 8, 2012
1 parent ca60a65 commit 64e58b7
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 31 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: 19d57ed5a308472a02e773f33c03ad4cb2ec6a9d
refs/heads/master: 5261e101198e7ef31a60d3aa97815a49c8b8fa20
45 changes: 19 additions & 26 deletions trunk/drivers/mfd/db8500-prcmu.c
Original file line number Diff line number Diff line change
Expand Up @@ -2269,10 +2269,10 @@ int prcmu_abb_write(u8 slave, u8 reg, u8 *value, u8 size)
/**
* prcmu_ac_wake_req - should be called whenever ARM wants to wakeup Modem
*/
void prcmu_ac_wake_req(void)
int prcmu_ac_wake_req(void)
{
u32 val;
u32 status;
int ret = 0;

mutex_lock(&mb0_transfer.ac_wake_lock);

Expand All @@ -2282,39 +2282,32 @@ void prcmu_ac_wake_req(void)

atomic_set(&ac_wake_req_state, 1);

retry:
writel((val | PRCM_HOSTACCESS_REQ_HOSTACCESS_REQ), PRCM_HOSTACCESS_REQ);
/*
* Force Modem Wake-up before hostaccess_req ping-pong.
* It prevents Modem to enter in Sleep while acking the hostaccess
* request. The 31us delay has been calculated by HWI.
*/
val |= PRCM_HOSTACCESS_REQ_WAKE_REQ;
writel(val, PRCM_HOSTACCESS_REQ);

udelay(31);

val |= PRCM_HOSTACCESS_REQ_HOSTACCESS_REQ;
writel(val, PRCM_HOSTACCESS_REQ);

if (!wait_for_completion_timeout(&mb0_transfer.ac_wake_work,
msecs_to_jiffies(5000))) {
#if defined(CONFIG_DBX500_PRCMU_DEBUG)
db8500_prcmu_debug_dump(__func__, true, true);
#endif
pr_crit("prcmu: %s timed out (5 s) waiting for a reply.\n",
__func__);
goto unlock_and_return;
}

/*
* The modem can generate an AC_WAKE_ACK, and then still go to sleep.
* As a workaround, we wait, and then check that the modem is indeed
* awake (in terms of the value of the PRCM_MOD_AWAKE_STATUS
* register, which may not be the whole truth).
*/
udelay(400);
status = (readl(PRCM_MOD_AWAKE_STATUS) & BITS(0, 2));
if (status != (PRCM_MOD_AWAKE_STATUS_PRCM_MOD_AAPD_AWAKE |
PRCM_MOD_AWAKE_STATUS_PRCM_MOD_COREPD_AWAKE)) {
pr_err("prcmu: %s received ack, but modem not awake (0x%X).\n",
__func__, status);
udelay(1200);
writel(val, PRCM_HOSTACCESS_REQ);
if (wait_for_completion_timeout(&mb0_transfer.ac_wake_work,
msecs_to_jiffies(5000)))
goto retry;
pr_crit("prcmu: %s timed out (5 s) waiting for AC_SLEEP_ACK.\n",
__func__);
ret = -EFAULT;
}

unlock_and_return:
mutex_unlock(&mb0_transfer.ac_wake_lock);
return ret;
}

/**
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/mfd/dbx500-prcmu-regs.h
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@

#define PRCM_HOSTACCESS_REQ (_PRCMU_BASE + 0x334)
#define PRCM_HOSTACCESS_REQ_HOSTACCESS_REQ 0x1
#define PRCM_HOSTACCESS_REQ_WAKE_REQ BIT(16)
#define ARM_WAKEUP_MODEM 0x1

#define PRCM_ARM_IT1_CLR (_PRCMU_BASE + 0x48C)
Expand Down
7 changes: 5 additions & 2 deletions trunk/include/linux/mfd/db8500-prcmu.h
Original file line number Diff line number Diff line change
Expand Up @@ -530,7 +530,7 @@ int db8500_prcmu_stop_temp_sense(void);
int prcmu_abb_read(u8 slave, u8 reg, u8 *value, u8 size);
int prcmu_abb_write(u8 slave, u8 reg, u8 *value, u8 size);

void prcmu_ac_wake_req(void);
int prcmu_ac_wake_req(void);
void prcmu_ac_sleep_req(void);
void db8500_prcmu_modem_reset(void);

Expand Down Expand Up @@ -680,7 +680,10 @@ static inline int prcmu_abb_write(u8 slave, u8 reg, u8 *value, u8 size)
return -ENOSYS;
}

static inline void prcmu_ac_wake_req(void) {}
static inline int prcmu_ac_wake_req(void)
{
return 0;
}

static inline void prcmu_ac_sleep_req(void) {}

Expand Down
7 changes: 5 additions & 2 deletions trunk/include/linux/mfd/dbx500-prcmu.h
Original file line number Diff line number Diff line change
Expand Up @@ -345,7 +345,7 @@ static inline u16 prcmu_get_reset_code(void)
return db8500_prcmu_get_reset_code();
}

void prcmu_ac_wake_req(void);
int prcmu_ac_wake_req(void);
void prcmu_ac_sleep_req(void);
static inline void prcmu_modem_reset(void)
{
Expand Down Expand Up @@ -533,7 +533,10 @@ static inline u16 prcmu_get_reset_code(void)
return 0;
}

static inline void prcmu_ac_wake_req(void) {}
static inline int prcmu_ac_wake_req(void)
{
return 0;
}

static inline void prcmu_ac_sleep_req(void) {}

Expand Down

0 comments on commit 64e58b7

Please sign in to comment.