From 5656ab99a0ff9136613ab1da509ccd6d7652d173 Mon Sep 17 00:00:00 2001 From: Rui Miguel Silva Date: Wed, 24 Jun 2015 23:20:26 +0100 Subject: [PATCH] greybus: sdio: fix defines for older kernels Some of the options for mmc host, are not defined in older kernels. MMC_CAP2_HS400_1_2V, MMC_CAP2_HS400_1_8V, MMC_TIMING_MMC_DDR52 and MMC_TIMING_MMC_HS400. To not use them for older versions. Signed-off-by: Rui Miguel Silva Tested-by: Mark Greer Signed-off-by: Greg Kroah-Hartman --- drivers/staging/greybus/kernel_ver.h | 8 ++++++++ drivers/staging/greybus/sdio.c | 14 +++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/drivers/staging/greybus/kernel_ver.h b/drivers/staging/greybus/kernel_ver.h index 8b8e712df48e..f95f302b2b2d 100644 --- a/drivers/staging/greybus/kernel_ver.h +++ b/drivers/staging/greybus/kernel_ver.h @@ -127,4 +127,12 @@ static inline void sysfs_remove_groups(struct kobject *kobj, } #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0) +#define MMC_HS400_SUPPORTED +#define MMC_DDR52_DEFINED +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 17, 0) +#define MMC_POWER_UNDEFINED_SUPPORTED +#endif #endif /* __GREYBUS_KERNEL_VER_H */ diff --git a/drivers/staging/greybus/sdio.c b/drivers/staging/greybus/sdio.c index 1fd17c89b100..16abf7cafd90 100644 --- a/drivers/staging/greybus/sdio.c +++ b/drivers/staging/greybus/sdio.c @@ -62,9 +62,11 @@ static void _gb_sdio_set_host_caps(struct gb_sdio_host *host, u32 r) (r & GB_SDIO_CAP_DRIVER_TYPE_D ? MMC_CAP_DRIVER_TYPE_D : 0); caps2 = (r & GB_SDIO_CAP_HS200_1_2V ? MMC_CAP2_HS200_1_2V_SDR : 0) | - (r & GB_SDIO_CAP_HS200_1_8V ? MMC_CAP2_HS200_1_8V_SDR : 0) | +#ifdef MMC_HS400_SUPPORTED (r & GB_SDIO_CAP_HS400_1_2V ? MMC_CAP2_HS400_1_2V : 0) | - (r & GB_SDIO_CAP_HS400_1_8V ? MMC_CAP2_HS400_1_8V : 0); + (r & GB_SDIO_CAP_HS400_1_8V ? MMC_CAP2_HS400_1_8V : 0) | +#endif + (r & GB_SDIO_CAP_HS200_1_8V ? MMC_CAP2_HS200_1_8V_SDR : 0); host->mmc->caps = caps; host->mmc->caps2 = caps2; @@ -478,6 +480,7 @@ static void gb_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) switch (ios->power_mode) { case MMC_POWER_OFF: + default: power_mode = GB_SDIO_POWER_OFF; break; case MMC_POWER_UP: @@ -486,10 +489,11 @@ static void gb_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) case MMC_POWER_ON: power_mode = GB_SDIO_POWER_ON; break; +#ifdef MMC_POWER_UNDEFINED_SUPPORTED case MMC_POWER_UNDEFINED: - default: power_mode = GB_SDIO_POWER_UNDEFINED; break; +#endif } request.power_mode = power_mode; @@ -533,15 +537,19 @@ static void gb_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) case MMC_TIMING_UHS_DDR50: timing = GB_SDIO_TIMING_UHS_DDR50; break; +#ifdef MMC_DDR52_DEFINED case MMC_TIMING_MMC_DDR52: timing = GB_SDIO_TIMING_MMC_DDR52; break; +#endif case MMC_TIMING_MMC_HS200: timing = GB_SDIO_TIMING_MMC_HS200; break; +#ifdef MMC_HS400_SUPPORTED case MMC_TIMING_MMC_HS400: timing = GB_SDIO_TIMING_MMC_HS400; break; +#endif } request.timing = timing;