1b93931a6SPierre Ossman /* 2b93931a6SPierre Ossman * linux/drivers/mmc/core/host.h 3b93931a6SPierre Ossman * 4b93931a6SPierre Ossman * Copyright (C) 2003 Russell King, All Rights Reserved. 5b93931a6SPierre Ossman * Copyright 2007 Pierre Ossman 6b93931a6SPierre Ossman * 7b93931a6SPierre Ossman * This program is free software; you can redistribute it and/or modify 8b93931a6SPierre Ossman * it under the terms of the GNU General Public License version 2 as 9b93931a6SPierre Ossman * published by the Free Software Foundation. 10b93931a6SPierre Ossman */ 11b93931a6SPierre Ossman #ifndef _MMC_CORE_HOST_H 12b93931a6SPierre Ossman #define _MMC_CORE_HOST_H 13066185d6SUlf Hansson 14*5857b29bSUlf Hansson #include <linux/mmc/host.h> 15b93931a6SPierre Ossman 16b93931a6SPierre Ossman int mmc_register_host_class(void); 17b93931a6SPierre Ossman void mmc_unregister_host_class(void); 188ea926b2SAdrian Hunter 19dfa13ebbSAdrian Hunter void mmc_retune_enable(struct mmc_host *host); 20dfa13ebbSAdrian Hunter void mmc_retune_disable(struct mmc_host *host); 21dfa13ebbSAdrian Hunter void mmc_retune_hold(struct mmc_host *host); 22dfa13ebbSAdrian Hunter void mmc_retune_release(struct mmc_host *host); 23dfa13ebbSAdrian Hunter int mmc_retune(struct mmc_host *host); 24*5857b29bSUlf Hansson void mmc_retune_pause(struct mmc_host *host); 25*5857b29bSUlf Hansson void mmc_retune_unpause(struct mmc_host *host); 26*5857b29bSUlf Hansson 27*5857b29bSUlf Hansson static inline void mmc_retune_recheck(struct mmc_host *host) 28*5857b29bSUlf Hansson { 29*5857b29bSUlf Hansson if (host->hold_retune <= 1) 30*5857b29bSUlf Hansson host->retune_now = 1; 31*5857b29bSUlf Hansson } 32*5857b29bSUlf Hansson 33*5857b29bSUlf Hansson static inline int mmc_host_cmd23(struct mmc_host *host) 34*5857b29bSUlf Hansson { 35*5857b29bSUlf Hansson return host->caps & MMC_CAP_CMD23; 36*5857b29bSUlf Hansson } 37*5857b29bSUlf Hansson 38*5857b29bSUlf Hansson static inline int mmc_boot_partition_access(struct mmc_host *host) 39*5857b29bSUlf Hansson { 40*5857b29bSUlf Hansson return !(host->caps2 & MMC_CAP2_BOOTPART_NOACC); 41*5857b29bSUlf Hansson } 42*5857b29bSUlf Hansson 43*5857b29bSUlf Hansson static inline int mmc_host_uhs(struct mmc_host *host) 44*5857b29bSUlf Hansson { 45*5857b29bSUlf Hansson return host->caps & 46*5857b29bSUlf Hansson (MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 | 47*5857b29bSUlf Hansson MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 | 48*5857b29bSUlf Hansson MMC_CAP_UHS_DDR50); 49*5857b29bSUlf Hansson } 50*5857b29bSUlf Hansson 51*5857b29bSUlf Hansson static inline bool mmc_card_hs200(struct mmc_card *card) 52*5857b29bSUlf Hansson { 53*5857b29bSUlf Hansson return card->host->ios.timing == MMC_TIMING_MMC_HS200; 54*5857b29bSUlf Hansson } 55*5857b29bSUlf Hansson 56*5857b29bSUlf Hansson static inline bool mmc_card_ddr52(struct mmc_card *card) 57*5857b29bSUlf Hansson { 58*5857b29bSUlf Hansson return card->host->ios.timing == MMC_TIMING_MMC_DDR52; 59*5857b29bSUlf Hansson } 60*5857b29bSUlf Hansson 61*5857b29bSUlf Hansson static inline bool mmc_card_hs400(struct mmc_card *card) 62*5857b29bSUlf Hansson { 63*5857b29bSUlf Hansson return card->host->ios.timing == MMC_TIMING_MMC_HS400; 64*5857b29bSUlf Hansson } 65*5857b29bSUlf Hansson 66*5857b29bSUlf Hansson static inline bool mmc_card_hs400es(struct mmc_card *card) 67*5857b29bSUlf Hansson { 68*5857b29bSUlf Hansson return card->host->ios.enhanced_strobe; 69*5857b29bSUlf Hansson } 70*5857b29bSUlf Hansson 71dfa13ebbSAdrian Hunter 72b93931a6SPierre Ossman #endif 73b93931a6SPierre Ossman 74