Starting with commit 66fceb69b72ff7e9cd8da2ca70033982d5376e0e
"libertas: Added callback functions to support SDIO suspend/resume."
libertas uses new functions from the in kernel sdio framework for
suspend and resume that are not backported.

--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -1963,7 +1963,7 @@ int ath6kl_cfg80211_resume(struct ath6kl
 	return 0;
 }
 
-#ifdef CONFIG_PM
+#if defined(CONFIG_PM) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 
 /* hif layer decides what suspend mode to use */
 static int __ath6kl_cfg80211_suspend(struct wiphy *wiphy,
@@ -2554,7 +2554,7 @@ static struct cfg80211_ops ath6kl_cfg802
 	.del_pmksa = ath6kl_del_pmksa,
 	.flush_pmksa = ath6kl_flush_pmksa,
 	CFG80211_TESTMODE_CMD(ath6kl_tm_cmd)
-#ifdef CONFIG_PM
+#if defined(CONFIG_PM) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 	.suspend = __ath6kl_cfg80211_suspend,
 	.resume = __ath6kl_cfg80211_resume,
 #endif
--- a/drivers/net/wireless/ath/ath6kl/hif-ops.h
+++ b/drivers/net/wireless/ath/ath6kl/hif-ops.h
@@ -83,6 +83,7 @@ static inline void ath6kl_hif_cleanup_sc
 	return ar->hif_ops->cleanup_scatter(ar);
 }
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 static inline int ath6kl_hif_suspend(struct ath6kl *ar,
 				     struct cfg80211_wowlan *wow)
 {
@@ -90,6 +91,7 @@ static inline int ath6kl_hif_suspend(str
 
 	return ar->hif_ops->suspend(ar, wow);
 }
+#endif
 
 /*
  * Read from the ATH6KL through its diagnostic window. No cooperation from
@@ -121,12 +123,14 @@ static inline int ath6kl_hif_bmi_write(s
 	return ar->hif_ops->bmi_write(ar, buf, len);
 }
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 static inline int ath6kl_hif_resume(struct ath6kl *ar)
 {
 	ath6kl_dbg(ATH6KL_DBG_HIF, "hif resume\n");
 
 	return ar->hif_ops->resume(ar);
 }
+#endif
 
 static inline int ath6kl_hif_power_on(struct ath6kl *ar)
 {
--- a/drivers/net/wireless/ath/ath6kl/sdio.c
+++ b/drivers/net/wireless/ath/ath6kl/sdio.c
@@ -782,6 +782,7 @@ out:
 	return ret;
 }
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 static int ath6kl_sdio_suspend(struct ath6kl *ar, struct cfg80211_wowlan *wow)
 {
 	struct ath6kl_sdio *ar_sdio = ath6kl_sdio_priv(ar);
@@ -877,6 +878,7 @@ static int ath6kl_sdio_resume(struct ath
 
 	return 0;
 }
+#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) */
 
 /* set the window address register (using 4-byte register access ). */
 static int ath6kl_set_addrwin_reg(struct ath6kl *ar, u32 reg_addr, u32 addr)
@@ -1178,8 +1180,10 @@ static const struct ath6kl_hif_ops ath6k
 	.enable_scatter = ath6kl_sdio_enable_scatter,
 	.scat_req_rw = ath6kl_sdio_async_rw_scatter,
 	.cleanup_scatter = ath6kl_sdio_cleanup_scatter,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 	.suspend = ath6kl_sdio_suspend,
 	.resume = ath6kl_sdio_resume,
+#endif
 	.diag_read32 = ath6kl_sdio_diag_read32,
 	.diag_write32 = ath6kl_sdio_diag_write32,
 	.bmi_read = ath6kl_sdio_bmi_read,
@@ -1189,7 +1193,7 @@ static const struct ath6kl_hif_ops ath6k
 	.stop = ath6kl_sdio_stop,
 };
 
-#ifdef CONFIG_PM_SLEEP
+#if defined(CONFIG_PM_SLEEP) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 
 /*
  * Empty handlers so that mmc subsystem doesn't remove us entirely during
@@ -1336,7 +1340,9 @@ static struct sdio_driver ath6kl_sdio_dr
 	.id_table = ath6kl_sdio_devices,
 	.probe = ath6kl_sdio_probe,
 	.remove = ath6kl_sdio_remove,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 	.drv.pm = ATH6KL_SDIO_PM_OPS,
+#endif
 };
 
 static int __init ath6kl_sdio_init(void)
--- a/drivers/net/wireless/libertas/if_sdio.c
+++ b/drivers/net/wireless/libertas/if_sdio.c
@@ -1306,6 +1306,7 @@ static void if_sdio_remove(struct sdio_f
 	lbs_deb_leave(LBS_DEB_SDIO);
 }
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 static int if_sdio_suspend(struct device *dev)
 {
 	struct sdio_func *func = dev_to_sdio_func(dev);
@@ -1359,15 +1360,18 @@ static const struct dev_pm_ops if_sdio_p
 	.suspend	= if_sdio_suspend,
 	.resume		= if_sdio_resume,
 };
+#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) */
 
 static struct sdio_driver if_sdio_driver = {
 	.name		= "libertas_sdio",
 	.id_table	= if_sdio_ids,
 	.probe		= if_sdio_probe,
 	.remove		= if_sdio_remove,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 	.drv = {
 		.pm = &if_sdio_pm_ops,
 	},
+#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) */
 };
 
 /*******************************************************************/
--- a/drivers/net/wireless/mwifiex/sdio.c
+++ b/drivers/net/wireless/mwifiex/sdio.c
@@ -127,8 +127,10 @@ mwifiex_sdio_remove(struct sdio_func *fu
 		return;
 
 	if (user_rmmod) {
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 		if (adapter->is_suspended)
 			mwifiex_sdio_resume(adapter->dev);
+#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) */
 
 		for (i = 0; i < adapter->priv_num; i++)
 			if ((GET_BSS_ROLE(adapter->priv[i]) ==
@@ -148,6 +150,7 @@ mwifiex_sdio_remove(struct sdio_func *fu
 	kfree(card);
 }
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 /*
  * SDIO suspend.
  *
@@ -255,6 +258,7 @@ static int mwifiex_sdio_resume(struct de
 
 	return 0;
 }
+#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) */
 
 /* Device ID for SD8787 */
 #define SDIO_DEVICE_ID_MARVELL_8787   (0x9119)
@@ -270,10 +274,12 @@ static const struct sdio_device_id mwifi
 
 MODULE_DEVICE_TABLE(sdio, mwifiex_ids);
 
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 static const struct dev_pm_ops mwifiex_sdio_pm_ops = {
 	.suspend = mwifiex_sdio_suspend,
 	.resume = mwifiex_sdio_resume,
 };
+#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) */
 
 static struct sdio_driver mwifiex_sdio = {
 	.name = "mwifiex_sdio",
@@ -282,7 +288,9 @@ static struct sdio_driver mwifiex_sdio =
 	.remove = mwifiex_sdio_remove,
 	.drv = {
 		.owner = THIS_MODULE,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 		.pm = &mwifiex_sdio_pm_ops,
+#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34)) */
 	}
 };
 
--- a/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c
@@ -59,7 +59,7 @@ static bool
 brcmf_pm_resume_error(struct brcmf_sdio_dev *sdiodev)
 {
 	bool is_err = false;
-#ifdef CONFIG_PM_SLEEP
+#if defined(CONFIG_PM_SLEEP) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 	is_err = atomic_read(&sdiodev->suspend);
 #endif
 	return is_err;
@@ -68,7 +68,7 @@ brcmf_pm_resume_error(struct brcmf_sdio_
 static void
 brcmf_pm_resume_wait(struct brcmf_sdio_dev *sdiodev, wait_queue_head_t *wq)
 {
-#ifdef CONFIG_PM_SLEEP
+#if defined(CONFIG_PM_SLEEP) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 	int retry = 0;
 	while (atomic_read(&sdiodev->suspend) && retry++ != 30)
 		wait_event_timeout(*wq, false, HZ/100);
@@ -539,7 +539,7 @@ static void brcmf_ops_sdio_remove(struct
 	}
 }
 
-#ifdef CONFIG_PM_SLEEP
+#if defined(CONFIG_PM_SLEEP) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 static int brcmf_sdio_suspend(struct device *dev)
 {
 	mmc_pm_flag_t sdio_flags;
@@ -589,7 +589,7 @@ static struct sdio_driver brcmf_sdmmc_dr
 	.remove = brcmf_ops_sdio_remove,
 	.name = "brcmfmac",
 	.id_table = brcmf_sdmmc_ids,
-#ifdef CONFIG_PM_SLEEP
+#if defined(CONFIG_PM_SLEEP) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,34))
 	.drv = {
 		.pm = &brcmf_sdio_pm_ops,
 	},

