Merge branch 'fix/hda' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
[pandora-kernel.git] / drivers / mmc / core / sdio_io.c
index 87c6189..ff27c8c 100644 (file)
@@ -640,3 +640,52 @@ void sdio_f0_writeb(struct sdio_func *func, unsigned char b, unsigned int addr,
                *err_ret = ret;
 }
 EXPORT_SYMBOL_GPL(sdio_f0_writeb);
+
+/**
+ *     sdio_get_host_pm_caps - get host power management capabilities
+ *     @func: SDIO function attached to host
+ *
+ *     Returns a capability bitmask corresponding to power management
+ *     features supported by the host controller that the card function
+ *     might rely upon during a system suspend.  The host doesn't need
+ *     to be claimed, nor the function active, for this information to be
+ *     obtained.
+ */
+mmc_pm_flag_t sdio_get_host_pm_caps(struct sdio_func *func)
+{
+       BUG_ON(!func);
+       BUG_ON(!func->card);
+
+       return func->card->host->pm_caps;
+}
+EXPORT_SYMBOL_GPL(sdio_get_host_pm_caps);
+
+/**
+ *     sdio_set_host_pm_flags - set wanted host power management capabilities
+ *     @func: SDIO function attached to host
+ *
+ *     Set a capability bitmask corresponding to wanted host controller
+ *     power management features for the upcoming suspend state.
+ *     This must be called, if needed, each time the suspend method of
+ *     the function driver is called, and must contain only bits that
+ *     were returned by sdio_get_host_pm_caps().
+ *     The host doesn't need to be claimed, nor the function active,
+ *     for this information to be set.
+ */
+int sdio_set_host_pm_flags(struct sdio_func *func, mmc_pm_flag_t flags)
+{
+       struct mmc_host *host;
+
+       BUG_ON(!func);
+       BUG_ON(!func->card);
+
+       host = func->card->host;
+
+       if (flags & ~host->pm_caps)
+               return -EINVAL;
+
+       /* function suspend methods are serialized, hence no lock needed */
+       host->pm_flags |= flags;
+       return 0;
+}
+EXPORT_SYMBOL_GPL(sdio_set_host_pm_flags);