qcacld-3.0: Register suspend_noirq/resume_noirq to kernel

Register suspend_noirq/resume_noirq callbacks to kernel. It will
make sure no wake up is pending from FW and if initial wake up is
received then failing it should trigger resume.

Change-Id: Ie553dfc1401c2c6934961773bc98a24626a9cd34
CRs-Fixed: 1060669
This commit is contained in:
Yuanyuan Liu
2016-08-29 12:17:20 -07:00
committed by qcabuildsw
부모 3508408d32
커밋 22896aa193
2개의 변경된 파일68개의 추가작업 그리고 7개의 파일을 삭제

파일 보기

@@ -298,6 +298,8 @@ struct pld_soc_info {
* @runtime_resume: optional operation, put the device into the fully
* active state in response to a wakeup event generated by
* hardware or at the request of software.
* @suspend_noirq: optional operation, complete the actions started by suspend().
* @resume_noirq: optional operation, prepare for the execution of resume()
*/
struct pld_driver_ops {
int (*probe)(struct device *dev,
@@ -326,6 +328,10 @@ struct pld_driver_ops {
enum pld_bus_type bus_type);
int (*runtime_resume)(struct device *dev,
enum pld_bus_type bus_type);
int (*suspend_noirq)(struct device *dev,
enum pld_bus_type bus_type);
int (*resume_noirq)(struct device *dev,
enum pld_bus_type bus_type);
};
int pld_init(void);

파일 보기

@@ -148,25 +148,26 @@ static void pld_snoc_crash_shutdown(void *dev)
}
/**
* pld_snoc_suspend() - Suspend callback function for power management
* pld_snoc_pm_suspend() - PM suspend callback function for power management
* @dev: device
* @state: power state
*
* This function is to suspend the platform device when power management
* is enabled.
*
* Return: void
*/
static int pld_snoc_suspend(struct device *dev, pm_message_t state)
static int pld_snoc_pm_suspend(struct device *dev)
{
struct pld_context *pld_context;
pm_message_t state;
state.event = PM_EVENT_SUSPEND;
pld_context = pld_get_global_context();
return pld_context->ops->suspend(dev, PLD_BUS_TYPE_SNOC, state);
}
/**
* pld_snoc_resume() - Resume callback function for power management
* pld_snoc_pm_resume() - PM resume callback function for power management
* @pdev: device
*
* This function is to resume the platform device when power management
@@ -174,7 +175,7 @@ static int pld_snoc_suspend(struct device *dev, pm_message_t state)
*
* Return: void
*/
static int pld_snoc_resume(struct device *dev)
static int pld_snoc_pm_resume(struct device *dev)
{
struct pld_context *pld_context;
@@ -182,6 +183,58 @@ static int pld_snoc_resume(struct device *dev)
return pld_context->ops->resume(dev, PLD_BUS_TYPE_SNOC);
}
/**
* pld_snoc_suspend_noirq() - Complete the actions started by suspend()
* @dev: device
*
* Complete the actions started by suspend(). Carry out any
* additional operations required for suspending the device that might be
* racing with its driver's interrupt handler, which is guaranteed not to
* run while suspend_noirq() is being executed.
*
* Return: 0 for success
* Non zero failure code for errors
*/
static int pld_snoc_suspend_noirq(struct device *dev)
{
struct pld_context *pld_context;
pld_context = pld_get_global_context();
if (!pld_context)
return -EINVAL;
if (pld_context->ops->suspend_noirq)
return pld_context->ops->
suspend_noirq(dev, PLD_BUS_TYPE_SNOC);
return 0;
}
/**
* pld_snoc_resume_noirq() - Prepare for the execution of resume()
* @pdev: device
*
* Prepare for the execution of resume() by carrying out any
* operations required for resuming the device that might be racing with
* its driver's interrupt handler, which is guaranteed not to run while
* resume_noirq() is being executed.
*
* Return: 0 for success
* Non zero failure code for errors
*/
static int pld_snoc_resume_noirq(struct device *dev)
{
struct pld_context *pld_context;
pld_context = pld_get_global_context();
if (!pld_context)
return -EINVAL;
if (pld_context->ops->resume_noirq)
return pld_context->ops->
resume_noirq(dev, PLD_BUS_TYPE_SNOC);
return 0;
}
struct icnss_driver_ops pld_snoc_ops = {
.name = "pld_snoc",
.probe = pld_snoc_probe,
@@ -189,8 +242,10 @@ struct icnss_driver_ops pld_snoc_ops = {
.shutdown = pld_snoc_shutdown,
.reinit = pld_snoc_reinit,
.crash_shutdown = pld_snoc_crash_shutdown,
.suspend = pld_snoc_suspend,
.resume = pld_snoc_resume,
.pm_suspend = pld_snoc_pm_suspend,
.pm_resume = pld_snoc_pm_resume,
.suspend_noirq = pld_snoc_suspend_noirq,
.resume_noirq = pld_snoc_resume_noirq,
};
/**