OMAP2+: hwmod: Add hwmod's API's for pad wakeup
Subsystems (4)
v4 cover OMAP2+: hwmod: Add hwmod's API's for pad wakeup
Add two API's to set IO Pad wakeup capability based on hwmod mux pins available and also to check the status of IO Pad wakeup event.
This two patches are separated from uart_runtime patches posted earlier and uart_runtime adaptation relies on these two API's.
Rebased on 3.0-rc5
Changes from v3:
---------------
Hooked up enable/disable io-ring to hwmod enable/disable
Changes from v2:
---------------
http://www.mail-archive.com/linux-omap at vger.kernel.org/msg49194.html
Changes from v1:
---------------
http://www.mail-archive.com/linux-omap at vger.kernel.org/msg49141.html
Reference to Discussion:
------------------------
http://www.mail-archive.com/linux-omap at vger.kernel.org/msg49000.html
http://www.mail-archive.com/linux-omap at vger.kernel.org/msg49001.html
Govindraj.R (2):
OMAP2+: hwmod: Add API to enable IO ring wakeup. OMAP2+: hwmod: Add API to check IO PAD wakeup status
arch/arm/mach-omap2/mux.c | 30 ++++++++++++ arch/arm/mach-omap2/mux.h | 13 +++++ arch/arm/mach-omap2/omap_hwmod.c | 66 ++++++++++++++++++++++++++ arch/arm/plat-omap/include/plat/omap_hwmod.h | 1 + 4 files changed, 110 insertions(+), 0 deletions(-)
Signature · 1 line
1.7.4.1
PATCH v4 1/2 OMAP2+: hwmod: Add API to enable IO ring wakeup.
Add API to enable IO pad wakeup capability based on mux dynamic pad and wake_up enable flag available from hwmod_mux initialization.
Use the wakeup_enable flag and enable wakeup capability for the given pads. Wakeup capability will be enabled/disabled during hmwod idle transition based on whether wakeup_flag is set or cleared.
Map the enable/disable pad wakeup API's to hwmod_wakeup_enable/disable.
--- arch/arm/mach-omap2/omap_hwmod.c | 59 ++++++++++++++++++++++++++++++++++++++ 1 files changed, 59 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/omap_hwmod.c +59 -0
@@ -1770,6 +1770,34 @@ static int __init omap_hwmod_setup_all(void)core_initcall (omap_hwmod_setup_all);/** +* omap_hwmod_set_ioring_wakeup - enable io pad wakeup flag. +* @oh: struct omap_hwmod * +* @set: bool value indicating to set or clear wakeup status. +* +* Set or Clear wakeup flag for the io_pad. +*/ +static int omap_hwmod_set_ioring_wakeup (struct omap_hwmod *oh,bool set_wake) +{ +struct omap_device_pad *pad; +int ret = -EINVAL , j; + +if (oh->mux && oh->mux->enabled) { +for (j =0 ; j < oh->mux->nr_pads_dynamic; j++) { + pad = oh->mux->pads_dynamic[j]; +if (pad->flags &OMAP_DEVICE_PAD_WAKEUP ) { +if (set_wake) + pad->idle |=OMAP_WAKEUP_EN ; +else + pad->idle &= ~OMAP_WAKEUP_EN ; + ret =0 ; + } + } + } + +return ret; +} + +/** * omap_hwmod_enable - enable an omap_hwmod * @oh: struct omap_hwmod * *
@@ -2097,6 +2125,35 @@ int omap_hwmod_del_initiator_dep(struct omap_hwmod *oh, {return _del_initiator_dep (oh, init_oh); } +/** +* omap_hwmod_enable_ioring_wakeup - Set wakeup flag for iopad. +* @oh: struct omap_hwmod * +* +* Traverse through dynamic pads, if pad is enabled then +* set wakeup enable bit flag for the mux pin. Wakeup pad bit +* will be set during hwmod idle transistion. +* Return error if pads are not enabled or not available. +*/ +int omap_hwmod_enable_ioring_wakeup (struct omap_hwmod *oh) +{ +/* Enable pad wake-up capability */ +return omap_hwmod_set_ioring_wakeup (oh, true); +} + +/** +* omap_hwmod_disable_ioring_wakeup - Clear wakeup flag for iopad. +* @oh: struct omap_hwmod * +* +* Traverse through dynamic pads, if pad is enabled then +* clear wakeup enable bit flag for the mux pin. Wakeup pad bit +* will be set during hwmod idle transistion. +* Return error if pads are not enabled or not available. +*/ +int omap_hwmod_disable_ioring_wakeup (struct omap_hwmod *oh) +{ +/* Disable pad wakeup capability */ +return omap_hwmod_set_ioring_wakeup (oh, false); +}/** * omap_hwmod_enable_wakeup - allow device to wake up the system
@@ -2123,6 +2180,7 @@ int omap_hwmod_enable_wakeup(struct omap_hwmod *oh) v = oh->_sysc_cache;_enable_wakeup (oh, &v);_write_sysconfig (v, oh); +omap_hwmod_enable_ioring_wakeup (oh);spin_unlock_irqrestore (&oh->_lock, flags);return 0 ;
@@ -2153,6 +2211,7 @@ int omap_hwmod_disable_wakeup(struct omap_hwmod *oh) v = oh->_sysc_cache;_disable_wakeup (oh, &v);_write_sysconfig (v, oh); +omap_hwmod_disable_ioring_wakeup (oh);spin_unlock_irqrestore (&oh->_lock, flags);return 0 ;
Signature · 1 line
1.7.4.1
PATCH v4 1/2 OMAP2+: hwmod: Add API to enable IO ring wakeup.
Add API to enable IO pad wakeup capability based on mux dynamic pad and wake_up enable flag available from hwmod_mux initialization.
Use the wakeup_enable flag and enable wakeup capability for the given pads. Wakeup capability will be enabled/disabled during hwmod idle transition based on whether wakeup_flag is set or cleared.
Map the enable/disable pad wakeup API's to hwmod_wakeup_enable/disable.
--- arch/arm/mach-omap2/omap_hwmod.c | 59 ++++++++++++++++++++++++++++++++++++++ 1 files changed, 59 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/omap_hwmod.c +59 -0
@@ -1770,6 +1770,34 @@ static int __init omap_hwmod_setup_all(void)core_initcall (omap_hwmod_setup_all);/** +* omap_hwmod_set_ioring_wakeup - enable io pad wakeup flag. +* @oh: struct omap_hwmod * +* @set: bool value indicating to set or clear wakeup status. +* +* Set or Clear wakeup flag for the io_pad. +*/ +static int omap_hwmod_set_ioring_wakeup (struct omap_hwmod *oh,bool set_wake) +{ +struct omap_device_pad *pad; +int ret = -EINVAL , j; + +if (oh->mux && oh->mux->enabled) { +for (j =0 ; j < oh->mux->nr_pads_dynamic; j++) { + pad = oh->mux->pads_dynamic[j]; +if (pad->flags &OMAP_DEVICE_PAD_WAKEUP ) { +if (set_wake) + pad->idle |=OMAP_WAKEUP_EN ; +else + pad->idle &= ~OMAP_WAKEUP_EN ; + ret =0 ; + } + } + } + +return ret; +} + +/** * omap_hwmod_enable - enable an omap_hwmod * @oh: struct omap_hwmod * *
@@ -2097,6 +2125,35 @@ int omap_hwmod_del_initiator_dep(struct omap_hwmod *oh, {return _del_initiator_dep (oh, init_oh); } +/** +* omap_hwmod_enable_ioring_wakeup - Set wakeup flag for iopad. +* @oh: struct omap_hwmod * +* +* Traverse through dynamic pads, if pad is enabled then +* set wakeup enable bit flag for the mux pin. Wakeup pad bit +* will be set during hwmod idle transistion. +* Return error if pads are not enabled or not available. +*/ +int omap_hwmod_enable_ioring_wakeup (struct omap_hwmod *oh) +{ +/* Enable pad wake-up capability */ +return omap_hwmod_set_ioring_wakeup (oh, true); +} + +/** +* omap_hwmod_disable_ioring_wakeup - Clear wakeup flag for iopad. +* @oh: struct omap_hwmod * +* +* Traverse through dynamic pads, if pad is enabled then +* clear wakeup enable bit flag for the mux pin. Wakeup pad bit +* will be set during hwmod idle transistion. +* Return error if pads are not enabled or not available. +*/ +int omap_hwmod_disable_ioring_wakeup (struct omap_hwmod *oh) +{ +/* Disable pad wakeup capability */ +return omap_hwmod_set_ioring_wakeup (oh, false); +}/** * omap_hwmod_enable_wakeup - allow device to wake up the system
@@ -2123,6 +2180,7 @@ int omap_hwmod_enable_wakeup(struct omap_hwmod *oh) v = oh->_sysc_cache;_enable_wakeup (oh, &v);_write_sysconfig (v, oh); +omap_hwmod_enable_ioring_wakeup (oh);spin_unlock_irqrestore (&oh->_lock, flags);return 0 ;
@@ -2153,6 +2211,7 @@ int omap_hwmod_disable_wakeup(struct omap_hwmod *oh) v = oh->_sysc_cache;_disable_wakeup (oh, &v);_write_sysconfig (v, oh); +omap_hwmod_disable_ioring_wakeup (oh);spin_unlock_irqrestore (&oh->_lock, flags);return 0 ;
Signature · 1 line
1.7.4.1
PATCH v4 1/2 OMAP2+: hwmod: Add API to enable IO ring wakeup.
Quoted 32 lines · Govindraj.R
Add API to enable IO pad wakeup capability based on mux dynamic pad and
wake_upenable flag available fromhwmod_muxinitialization.Use the
wakeup_enableflag and enable wakeup capability for the given pads. Wakeup capability will be enabled/disabled during hwmod idle transition based on whetherwakeup_flagis set or cleared.Map the enable/disable pad wakeup API's to hwmod_wakeup_enable/disable.
Signed-off-by Govindraj.R <[email protected]>--- arch/arm/mach-omap2/omap_hwmod.c | 59 ++++++++++++++++++++++++++++++++++++++ 1 files changed, 59 insertions(+), 0 deletions(-)arch/arm/mach-omap2/omap_hwmod.c +9
-0@@ -1770,6 +1770,34 @@ static int __init omap_hwmod_setup_all(void)core_initcall (omap_hwmod_setup_all);/** +* omap_hwmod_set_ioring_wakeup - enable io pad wakeup flag. +* @oh: struct omap_hwmod * +* @set: bool value indicating to set or clear wakeup status. +* +* Set or Clear wakeup flag for the io_pad. +*/ +static int omap_hwmod_set_ioring_wakeup (struct omap_hwmod *oh,bool set_wake) +{ +struct omap_device_pad *pad;
arch/arm/mach-omap2/omap_hwmod.c static int __init omap_hwmod_setup_all(void) · line 1791
Quoted 10 lines
arch/arm/mach-omap2/omap_hwmod.c +10
-0+int ret = -EINVAL , j; + +if (oh->mux && oh->mux->enabled) { +for (j =0 ; j < oh->mux->nr_pads_dynamic; j++) { + pad = oh->mux->pads_dynamic[j]; +if (pad->flags &OMAP_DEVICE_PAD_WAKEUP ) { +if (set_wake) + pad->idle |=OMAP_WAKEUP_EN ; +else + pad->idle &= ~OMAP_WAKEUP_EN ;
Will this not erase the other bits ?
Should we read and erase only the wakeup bits.
Am I missing something ?
Quoted 64 lines
arch/arm/mach-omap2/omap_hwmod.c +40
-0+ ret =0 ; + } + } + } + +return ret; +} + +/** * omap_hwmod_enable - enable an omap_hwmod * @oh: struct omap_hwmod * * @@ -2097,6 +2125,35 @@ int omap_hwmod_del_initiator_dep(struct omap_hwmod *oh, {return _del_initiator_dep (oh, init_oh); } +/** +* omap_hwmod_enable_ioring_wakeup - Set wakeup flag for iopad. +* @oh: struct omap_hwmod * +* +* Traverse through dynamic pads, if pad is enabled then +* set wakeup enable bit flag for the mux pin. Wakeup pad bit +* will be set during hwmod idle transistion. +* Return error if pads are not enabled or not available. +*/ +int omap_hwmod_enable_ioring_wakeup (struct omap_hwmod *oh) +{ +/* Enable pad wake-up capability */ +return omap_hwmod_set_ioring_wakeup (oh, true); +} + +/** +* omap_hwmod_disable_ioring_wakeup - Clear wakeup flag for iopad. +* @oh: struct omap_hwmod * +* +* Traverse through dynamic pads, if pad is enabled then +* clear wakeup enable bit flag for the mux pin. Wakeup pad bit +* will be set during hwmod idle transistion. +* Return error if pads are not enabled or not available. +*/ +int omap_hwmod_disable_ioring_wakeup (struct omap_hwmod *oh) +{ +/* Disable pad wakeup capability */ +return omap_hwmod_set_ioring_wakeup (oh, false); +}/** * omap_hwmod_enable_wakeup - allow device to wake up the system @@ -2123,6 +2180,7 @@ int omap_hwmod_enable_wakeup(struct omap_hwmod *oh) v = oh->_sysc_cache;_enable_wakeup (oh, &v);_write_sysconfig (v, oh); +omap_hwmod_enable_ioring_wakeup (oh);spin_unlock_irqrestore (&oh->_lock, flags);return 0 ;@@ -2153,6 +2211,7 @@ int omap_hwmod_disable_wakeup(struct omap_hwmod *oh) v = oh->_sysc_cache;_disable_wakeup (oh, &v);_write_sysconfig (v, oh); +omap_hwmod_disable_ioring_wakeup (oh);spin_unlock_irqrestore (&oh->_lock, flags);return 0 ;
PATCH v4 1/2 OMAP2+: hwmod: Add API to enable IO ring wakeup.
Quoted 38 lines · Shubhrajyoti
Quoted 37 lines · Govindraj.R
Add API to enable IO pad wakeup capability based on mux dynamic pad and
wake_upenable flag available fromhwmod_muxinitialization.Use the
wakeup_enableflag and enable wakeup capability for the given pads. Wakeup capability will be enabled/disabled during hwmod idle transition based on whetherwakeup_flagis set or cleared.Map the enable/disable pad wakeup API's to hwmod_wakeup_enable/disable.
Signed-off-by Govindraj.R <[email protected]>--- arch/arm/mach-omap2/omap_hwmod.c | 59 ++++++++++++++++++++++++++++++++++++++ 1 files changed, 59 insertions(+), 0 deletions(-)arch/arm/mach-omap2/omap_hwmod.c +14
-0@@ -1770,6 +1770,34 @@ static int __init omap_hwmod_setup_all(void)core_initcall (omap_hwmod_setup_all);/** +* omap_hwmod_set_ioring_wakeup - enable io pad wakeup flag. +* @oh: struct omap_hwmod * +* @set: bool value indicating to set or clear wakeup status. +* +* Set or Clear wakeup flag for the io_pad. +*/ +static int omap_hwmod_set_ioring_wakeup (struct omap_hwmod *oh,bool set_wake) +{ +struct omap_device_pad *pad; +int ret = -EINVAL , j; + +if (oh->mux && oh->mux->enabled) { +for (j =0 ; j < oh->mux->nr_pads_dynamic; j++) { + pad = oh->mux->pads_dynamic[j];
Quoted 8 lines
arch/arm/mach-omap2/omap_hwmod.c static int __init omap_hwmod_setup_all(void) · line 1791
Quoted 5 lines
arch/arm/mach-omap2/omap_hwmod.c +5
-0+if (pad->flags &OMAP_DEVICE_PAD_WAKEUP ) { +if (set_wake) + pad->idle |=OMAP_WAKEUP_EN ; +else + pad->idle &= ~OMAP_WAKEUP_EN ;Will this not erase the other bits ?
Should we read and erase only the wakeup bits.
Am I missing something ?
My bad please ignore
Quoted 64 lines
Quoted 64 lines
arch/arm/mach-omap2/omap_hwmod.c +40
-0+ ret =0 ; + } + } + } + +return ret; +} + +/** * omap_hwmod_enable - enable an omap_hwmod * @oh: struct omap_hwmod * * @@ -2097,6 +2125,35 @@ int omap_hwmod_del_initiator_dep(struct omap_hwmod *oh, {return _del_initiator_dep (oh, init_oh); } +/** +* omap_hwmod_enable_ioring_wakeup - Set wakeup flag for iopad. +* @oh: struct omap_hwmod * +* +* Traverse through dynamic pads, if pad is enabled then +* set wakeup enable bit flag for the mux pin. Wakeup pad bit +* will be set during hwmod idle transistion. +* Return error if pads are not enabled or not available. +*/ +int omap_hwmod_enable_ioring_wakeup (struct omap_hwmod *oh) +{ +/* Enable pad wake-up capability */ +return omap_hwmod_set_ioring_wakeup (oh, true); +} + +/** +* omap_hwmod_disable_ioring_wakeup - Clear wakeup flag for iopad. +* @oh: struct omap_hwmod * +* +* Traverse through dynamic pads, if pad is enabled then +* clear wakeup enable bit flag for the mux pin. Wakeup pad bit +* will be set during hwmod idle transistion. +* Return error if pads are not enabled or not available. +*/ +int omap_hwmod_disable_ioring_wakeup (struct omap_hwmod *oh) +{ +/* Disable pad wakeup capability */ +return omap_hwmod_set_ioring_wakeup (oh, false); +}/** * omap_hwmod_enable_wakeup - allow device to wake up the system @@ -2123,6 +2180,7 @@ int omap_hwmod_enable_wakeup(struct omap_hwmod *oh) v = oh->_sysc_cache;_enable_wakeup (oh, &v);_write_sysconfig (v, oh); +omap_hwmod_enable_ioring_wakeup (oh);spin_unlock_irqrestore (&oh->_lock, flags);return 0 ;@@ -2153,6 +2211,7 @@ int omap_hwmod_disable_wakeup(struct omap_hwmod *oh) v = oh->_sysc_cache;_disable_wakeup (oh, &v);_write_sysconfig (v, oh); +omap_hwmod_disable_ioring_wakeup (oh);spin_unlock_irqrestore (&oh->_lock, flags);return 0 ;
PATCH v4 2/2 OMAP2+: hwmod: Add API to check IO PAD wakeup status
In reply to Govindraj.RAdd API to determine IO-PAD wakeup event status for a given hwmod dynamic_mux pad.
--- arch/arm/mach-omap2/mux.c | 30 ++++++++++++++++++++++++++ arch/arm/mach-omap2/mux.h | 13 +++++++++++ arch/arm/mach-omap2/omap_hwmod.c | 7 ++++++ arch/arm/plat-omap/include/plat/omap_hwmod.h | 1 + 4 files changed, 51 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/mux.c +30 -0
@@ -351,6 +351,36 @@ err1:return NULL ; } +/** +* omap_hwmod_mux_get_wake_status - omap hwmod check pad wakeup +* @hmux: Pads for a hwmod +* +* Gets the wakeup status of given pad from omap-hwmod. +* Returns true if wakeup event is set for pad else false +* if wakeup is not occured or pads are not avialable. +*/ +bool omap_hwmod_mux_get_wake_status (struct omap_hwmod_mux_info *hmux) +{ +int i; +unsigned int val; +u8 ret = false; + +for (i =0 ; i < hmux->nr_pads; i++) { +struct omap_device_pad *pad = &hmux->pads[i]; + +if (pad->flags &OMAP_DEVICE_PAD_WAKEUP ) { + val =omap_mux_read (pad->partition, + pad->mux->reg_offset); +if (val &OMAP_WAKEUP_EVENT ) { + ret = true; +break ; + } + } + } + +return ret; +} +/* Assumes the calling function takes care of locking */ void omap_hwmod_mux (struct omap_hwmod_mux_info *hmux,u8 state) {
arch/arm/mach-omap2/mux.h +13 -0
@@ -225,8 +225,21 @@ omap_hwmod_mux_init(struct omap_device_pad *bpads, int nr_pads);*/ void omap_hwmod_mux (struct omap_hwmod_mux_info *hmux,u8 state); +/** +* omap_hwmod_mux_get_wake_status - omap hwmod check pad wakeup +* @hmux: Pads for a hwmod +* +* Called only from omap_hwmod.c, do not use. +*/ +bool omap_hwmod_mux_get_wake_status (struct omap_hwmod_mux_info *hmux);#else +static inline bool +omap_hwmod_mux_get_wake_status (struct omap_hwmod_mux_info *hmux) +{ +return 0 ; +} +static inline int omap_mux_init_gpio (int gpio,int val) {return 0 ;
arch/arm/mach-omap2/omap_hwmod.c +7 -0
@@ -2428,3 +2428,10 @@ int omap_hwmod_no_setup_reset(struct omap_hwmod *oh)return 0 ; } + +int omap_hmwod_pad_get_wakeup_status (struct omap_hwmod *oh) +{ +if (oh && oh->mux) +return omap_hwmod_mux_get_wake_status (oh->mux); +return -EINVAL ; +}
arch/arm/plat-omap/include/plat/omap_hwmod.h +1 -0
@@ -602,6 +602,7 @@ u32 omap_hwmod_get_context_loss_count(struct omap_hwmod *oh);int omap_hwmod_no_setup_reset (struct omap_hwmod *oh); +int omap_hmwod_pad_get_wakeup_status (struct omap_hwmod *oh);/* * Chip variant-specific hwmod init routines - XXX should be converted * to use initcalls once the initial boot ordering is straightened out
Signature · 1 line
1.7.4.1
Paul Walmsley
maintainerPATCH v4 2/2 OMAP2+: hwmod: Add API to check IO PAD wakeup status
Quoted 1 line · Govindraj.R
+int
omap_hmwod_pad_get_wakeup_status(struct omap_hwmod *oh)
^^^^^
should be "hwmod"
- Paul
PATCH v4 2/2 OMAP2+: hwmod: Add API to check IO PAD wakeup status
Quoted 6 lines · Paul Walmsley
Quoted 1 line · Govindraj.R
+int
omap_hmwod_pad_get_wakeup_status(struct omap_hwmod *oh)? ? ? ? ? ?^^^^^
should be "hwmod"
corrected and re-posted both patches.
http://permalink.gmane.org/gmane.linux.ports.arm.omap/60250
http://permalink.gmane.org/gmane.linux.ports.arm.omap/60252
--
Thanks,
Govindraj.R
Quoted 9 lines
- Paul
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo at vger.kernel.org
More majordomo info at ?http://vger.kernel.org/majordomo-info.html
PATCH v4 2/2 OMAP2+: hwmod: Add API to check IO PAD wakeup status
In reply to Govindraj.RAdd API to determine IO-PAD wakeup event status for a given hwmod dynamic_mux pad.
--- arch/arm/mach-omap2/mux.c | 30 ++++++++++++++++++++++++++ arch/arm/mach-omap2/mux.h | 13 +++++++++++ arch/arm/mach-omap2/omap_hwmod.c | 7 ++++++ arch/arm/plat-omap/include/plat/omap_hwmod.h | 1 + 4 files changed, 51 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/mux.c +30 -0
@@ -351,6 +351,36 @@ err1:return NULL ; } +/** +* omap_hwmod_mux_get_wake_status - omap hwmod check pad wakeup +* @hmux: Pads for a hwmod +* +* Gets the wakeup status of given pad from omap-hwmod. +* Returns true if wakeup event is set for pad else false +* if wakeup is not occured or pads are not avialable. +*/ +bool omap_hwmod_mux_get_wake_status (struct omap_hwmod_mux_info *hmux) +{ +int i; +unsigned int val; +u8 ret = false; + +for (i =0 ; i < hmux->nr_pads; i++) { +struct omap_device_pad *pad = &hmux->pads[i]; + +if (pad->flags &OMAP_DEVICE_PAD_WAKEUP ) { + val =omap_mux_read (pad->partition, + pad->mux->reg_offset); +if (val &OMAP_WAKEUP_EVENT ) { + ret = true; +break ; + } + } + } + +return ret; +} +/* Assumes the calling function takes care of locking */ void omap_hwmod_mux (struct omap_hwmod_mux_info *hmux,u8 state) {
arch/arm/mach-omap2/mux.h +13 -0
@@ -225,8 +225,21 @@ omap_hwmod_mux_init(struct omap_device_pad *bpads, int nr_pads);*/ void omap_hwmod_mux (struct omap_hwmod_mux_info *hmux,u8 state); +/** +* omap_hwmod_mux_get_wake_status - omap hwmod check pad wakeup +* @hmux: Pads for a hwmod +* +* Called only from omap_hwmod.c, do not use. +*/ +bool omap_hwmod_mux_get_wake_status (struct omap_hwmod_mux_info *hmux);#else +static inline bool +omap_hwmod_mux_get_wake_status (struct omap_hwmod_mux_info *hmux) +{ +return 0 ; +} +static inline int omap_mux_init_gpio (int gpio,int val) {return 0 ;
arch/arm/mach-omap2/omap_hwmod.c +7 -0
@@ -2428,3 +2428,10 @@ int omap_hwmod_no_setup_reset(struct omap_hwmod *oh)return 0 ; } + +int omap_hwwod_pad_get_wakeup_status (struct omap_hwmod *oh) +{ +if (oh && oh->mux) +return omap_hwmod_mux_get_wake_status (oh->mux); +return -EINVAL ; +}
arch/arm/plat-omap/include/plat/omap_hwmod.h +1 -0
@@ -602,6 +602,7 @@ u32 omap_hwmod_get_context_loss_count(struct omap_hwmod *oh);int omap_hwmod_no_setup_reset (struct omap_hwmod *oh); +int omap_hwwod_pad_get_wakeup_status (struct omap_hwmod *oh);/* * Chip variant-specific hwmod init routines - XXX should be converted * to use initcalls once the initial boot ordering is straightened out
Signature · 1 line
1.7.4.1
PATCH v4 2/2 OMAP2+: hwmod: Add API to check IO PAD wakeup status
In reply to Govindraj.RAdd API to determine IO-PAD wakeup event status for a given hwmod dynamic_mux pad.
--- arch/arm/mach-omap2/mux.c | 30 ++++++++++++++++++++++++++ arch/arm/mach-omap2/mux.h | 13 +++++++++++ arch/arm/mach-omap2/omap_hwmod.c | 7 ++++++ arch/arm/plat-omap/include/plat/omap_hwmod.h | 1 + 4 files changed, 51 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/mux.c +30 -0
@@ -351,6 +351,36 @@ err1:return NULL ; } +/** +* omap_hwmod_mux_get_wake_status - omap hwmod check pad wakeup +* @hmux: Pads for a hwmod +* +* Gets the wakeup status of given pad from omap-hwmod. +* Returns true if wakeup event is set for pad else false +* if wakeup is not occured or pads are not avialable. +*/ +bool omap_hwmod_mux_get_wake_status (struct omap_hwmod_mux_info *hmux) +{ +int i; +unsigned int val; +u8 ret = false; + +for (i =0 ; i < hmux->nr_pads; i++) { +struct omap_device_pad *pad = &hmux->pads[i]; + +if (pad->flags &OMAP_DEVICE_PAD_WAKEUP ) { + val =omap_mux_read (pad->partition, + pad->mux->reg_offset); +if (val &OMAP_WAKEUP_EVENT ) { + ret = true; +break ; + } + } + } + +return ret; +} +/* Assumes the calling function takes care of locking */ void omap_hwmod_mux (struct omap_hwmod_mux_info *hmux,u8 state) {
arch/arm/mach-omap2/mux.h +13 -0
@@ -225,8 +225,21 @@ omap_hwmod_mux_init(struct omap_device_pad *bpads, int nr_pads);*/ void omap_hwmod_mux (struct omap_hwmod_mux_info *hmux,u8 state); +/** +* omap_hwmod_mux_get_wake_status - omap hwmod check pad wakeup +* @hmux: Pads for a hwmod +* +* Called only from omap_hwmod.c, do not use. +*/ +bool omap_hwmod_mux_get_wake_status (struct omap_hwmod_mux_info *hmux);#else +static inline bool +omap_hwmod_mux_get_wake_status (struct omap_hwmod_mux_info *hmux) +{ +return 0 ; +} +static inline int omap_mux_init_gpio (int gpio,int val) {return 0 ;
arch/arm/mach-omap2/omap_hwmod.c +7 -0
@@ -2428,3 +2428,10 @@ int omap_hwmod_no_setup_reset(struct omap_hwmod *oh)return 0 ; } + +int omap_hwmod_pad_get_wakeup_status (struct omap_hwmod *oh) +{ +if (oh && oh->mux) +return omap_hwmod_mux_get_wake_status (oh->mux); +return -EINVAL ; +}
arch/arm/plat-omap/include/plat/omap_hwmod.h +1 -0
@@ -602,6 +602,7 @@ u32 omap_hwmod_get_context_loss_count(struct omap_hwmod *oh);int omap_hwmod_no_setup_reset (struct omap_hwmod *oh); +int omap_hwmod_pad_get_wakeup_status (struct omap_hwmod *oh);/* * Chip variant-specific hwmod init routines - XXX should be converted * to use initcalls once the initial boot ordering is straightened out
Signature · 1 line
1.7.4.1