qcacld-3.0: Add gpio irq as wakeup source

On some third party platform, the in-band bus suspend-resume is
not supported well, instead add gpio irq as wakeup source to
support out-of-band suspend-resume.

Change-Id: I7621f04d093013e15719b5c84dc244604be238df
CRs-Fixed: 2815754
This commit is contained in:
Li Feng
2020-11-09 16:56:42 +08:00
کامیت شده توسط snandini
والد e75553536a
کامیت 292b491dd8
10فایلهای تغییر یافته به همراه411 افزوده شده و 2 حذف شده

مشاهده پرونده

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2018 The Linux Foundation. All rights reserved.
* Copyright (c) 2012-2018, 2020 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@@ -25,6 +25,7 @@
#include "wlan_pmo_pkt_filter_cfg.h"
#include "wlan_pmo_runtime_pm_cfg.h"
#include "wlan_pmo_wow_pulse_cfg.h"
#include "wlan_pmo_gpio_wakeup_cfg.h"
#define CFG_PMO_ALL \
CFG_EXTWOW_ALL \
@@ -32,6 +33,7 @@
CFG_PMO_APF_ALL \
CFG_PMO_COMMON_ALL \
CFG_RUNTIME_PM_ALL \
CFG_WOW_PULSE_ALL
CFG_WOW_PULSE_ALL \
CFG_GPIO_WAKEUP_ALL
#endif /* WLAN_PMO_CFG_H__ */

مشاهده پرونده

@@ -250,6 +250,22 @@ enum active_apf_mode {
ACTIVE_APF_MODE_COUNT
};
/**
* enum pmo_gpio_wakeup_mode - gpio wakeup mode
* @PMO_GPIO_WAKEUP_MODE_INVALID: gpio wakeup trigger invalid
* @PMO_GPIO_WAKEUP_MODE_RISING: gpio wakeup trigger rising
* @PMO_GPIO_WAKEUP_MODE_FALLING: gpio wakeup trigger failing
* @PMO_GPIO_WAKEUP_MODE_HIGH: gpio wakeup trigger high
* @PMO_GPIO_WAKEUP_MODE_LOW: gpio wakeup trigger low
*/
enum pmo_gpio_wakeup_mode {
PMO_GPIO_WAKEUP_MODE_INVALID,
PMO_GPIO_WAKEUP_MODE_RISING,
PMO_GPIO_WAKEUP_MODE_FALLING,
PMO_GPIO_WAKEUP_MODE_HIGH,
PMO_GPIO_WAKEUP_MODE_LOW,
};
/**
* struct pmo_psoc_cfg - user configuration required for pmo
* @ptrn_match_enable_all_vdev: true when pattern match is enable for all vdev
@@ -307,6 +323,9 @@ enum active_apf_mode {
* @ito_repeat_count: Indicates ito repeated count
* @is_mod_dtim_on_sys_suspend_enabled: true when mod dtim is enabled for
* system suspend wow else false
* @enable_gpio_wakeup: enable gpio wakeup
* @gpio_wakeup_pin: gpio wakeup pin
* @gpio_wakeup_mode: gpio wakeup mode
*/
struct pmo_psoc_cfg {
bool ptrn_match_enable_all_vdev;
@@ -371,6 +390,11 @@ struct pmo_psoc_cfg {
enum active_apf_mode active_mc_bc_apf_mode;
uint8_t ito_repeat_count;
bool is_mod_dtim_on_sys_suspend_enabled;
#ifdef WLAN_ENABLE_GPIO_WAKEUP
bool enable_gpio_wakeup;
uint32_t gpio_wakeup_pin;
enum pmo_gpio_wakeup_mode gpio_wakeup_mode;
#endif
};
/**

مشاهده پرونده

@@ -0,0 +1,93 @@
/*
* Copyright (c) 2020 The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all
* copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
* WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
* TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
* PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef WLAN_PMO_GPIO_WAKEUP_CFG_H__
#define WLAN_PMO_GPIO_WAKEUP_CFG_H__
#ifdef WLAN_ENABLE_GPIO_WAKEUP
/*
* <ini>
* genable_gpio_wakeup - Enable gpio wakeup
* @Min: 0
* @Max: 1
* @Default: 0
*
* Enable gpio wakeup
*
* Supported Feature: gpio wakeup
*
* Usage: External
*
* </ini>
*/
#define CFG_PMO_ENABLE_GPIO_WAKEUP CFG_INI_BOOL("genable_gpio_wakeup", \
0, \
"Enable gpio wakeup")
/*
* <ini>
* ggpio_wakeup_pin - Wakeup gpio pin of host platform
* @Min: 0
* @Max: 255
* @Default: 255
*
* Wakeup gpio pin of host platform
*
* Supported Feature: gpio wakeup
*
* Usage: External
*
* </ini>
*/
#define CFG_PMO_GPIO_WAKEUP_PIN CFG_INI_UINT("ggpio_wakeup_pin", \
0, 255, 255, \
CFG_VALUE_OR_DEFAULT, \
"Wakeup gpio pin of host platform")
/*
* <ini>
* ggpio_wakeup_mode - Wakeup gpio mode
* @Min: 0
* @Max: 4
* @Default: 0
*
* Wakeup gpio mode
* 1 indicates rising trigger
* 2 indicates failing trigger
* 3 indicates high trigger
* 4 indicates low trigger
*
* Supported Feature: gpio wakeup
*
* Usage: External
*
* </ini>
*/
#define CFG_PMO_GPIO_WAKEUP_MODE CFG_INI_UINT("ggpio_wakeup_mode", \
0, 4, 0, \
CFG_VALUE_OR_DEFAULT, \
"Wakeup gpio mode")
#define CFG_GPIO_WAKEUP_ALL \
CFG(CFG_PMO_ENABLE_GPIO_WAKEUP) \
CFG(CFG_PMO_GPIO_WAKEUP_PIN) \
CFG(CFG_PMO_GPIO_WAKEUP_MODE)
#else
#define CFG_GPIO_WAKEUP_ALL
#endif /* WLAN_ENABLE_GPIO_WAKEUP */
#endif /* WLAN_PMO_GPIO_WAKEUP_CFG_H__ */

مشاهده پرونده

@@ -1138,6 +1138,51 @@ static inline bool ucfg_pmo_is_apf_enabled(struct wlan_objmgr_psoc *psoc)
}
#endif
#ifdef WLAN_ENABLE_GPIO_WAKEUP
/**
* ucfg_pmo_get_enable_gpio_wakeup() - to get gpio wakeup enable configuration
* @psoc: objmgr psoc handle
*
* Return: gpio wakeup enable configuration
*/
bool ucfg_pmo_is_gpio_wakeup_enabled(struct wlan_objmgr_psoc *psoc);
/**
* ucfg_pmo_get_gpio_wakeup_pin() - to get gpio wakeup pin number
* @psoc: objmgr psoc handle
*
* Return: gpio wakeup pin number
*/
uint32_t ucfg_pmo_get_gpio_wakeup_pin(struct wlan_objmgr_psoc *psoc);
/**
* ucfg_pmo_get_gpio_wakeup_mode() - to get gpio wakeup interrupt mode
* @psoc: objmgr psoc handle
*
* Return: gpio wakeup mode
*/
enum pmo_gpio_wakeup_mode
ucfg_pmo_get_gpio_wakeup_mode(struct wlan_objmgr_psoc *psoc);
#else
static inline bool
ucfg_pmo_is_gpio_wakeup_enabled(struct wlan_objmgr_psoc *psoc)
{
return false;
}
static inline uint32_t
ucfg_pmo_get_gpio_wakeup_pin(struct wlan_objmgr_psoc *psoc)
{
return 0;
}
static inline enum pmo_gpio_wakeup_mode
ucfg_pmo_get_gpio_wakeup_mode(struct wlan_objmgr_psoc *psoc)
{
return PMO_GPIO_WAKEUP_MODE_INVALID;
}
#endif
#else /* WLAN_POWER_MANAGEMENT_OFFLOAD */
static inline QDF_STATUS
ucfg_pmo_psoc_open(struct wlan_objmgr_psoc *psoc)