1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2b93931a6SPierre Ossman /* 3b93931a6SPierre Ossman * linux/drivers/mmc/core/host.h 4b93931a6SPierre Ossman * 5b93931a6SPierre Ossman * Copyright (C) 2003 Russell King, All Rights Reserved. 6b93931a6SPierre Ossman * Copyright 2007 Pierre Ossman 7b93931a6SPierre Ossman */ 8b93931a6SPierre Ossman #ifndef _MMC_CORE_HOST_H 9b93931a6SPierre Ossman #define _MMC_CORE_HOST_H 10066185d6SUlf Hansson 115857b29bSUlf Hansson #include <linux/mmc/host.h> 12b93931a6SPierre Ossman 13b93931a6SPierre Ossman int mmc_register_host_class(void); 14b93931a6SPierre Ossman void mmc_unregister_host_class(void); 158ea926b2SAdrian Hunter 16dfa13ebbSAdrian Hunter void mmc_retune_enable(struct mmc_host *host); 17dfa13ebbSAdrian Hunter void mmc_retune_disable(struct mmc_host *host); 18dfa13ebbSAdrian Hunter void mmc_retune_hold(struct mmc_host *host); 19dfa13ebbSAdrian Hunter void mmc_retune_release(struct mmc_host *host); 20dfa13ebbSAdrian Hunter int mmc_retune(struct mmc_host *host); 215857b29bSUlf Hansson void mmc_retune_pause(struct mmc_host *host); 225857b29bSUlf Hansson void mmc_retune_unpause(struct mmc_host *host); 235857b29bSUlf Hansson 24*8ffb2611SWolfram Sang static inline void mmc_retune_clear(struct mmc_host *host) 25*8ffb2611SWolfram Sang { 26*8ffb2611SWolfram Sang host->retune_now = 0; 27*8ffb2611SWolfram Sang host->need_retune = 0; 28*8ffb2611SWolfram Sang } 29*8ffb2611SWolfram Sang 30cb39f61eSAdrian Hunter static inline void mmc_retune_hold_now(struct mmc_host *host) 31cb39f61eSAdrian Hunter { 32cb39f61eSAdrian Hunter host->retune_now = 0; 33cb39f61eSAdrian Hunter host->hold_retune += 1; 34cb39f61eSAdrian Hunter } 35cb39f61eSAdrian Hunter 365857b29bSUlf Hansson static inline void mmc_retune_recheck(struct mmc_host *host) 375857b29bSUlf Hansson { 385857b29bSUlf Hansson if (host->hold_retune <= 1) 395857b29bSUlf Hansson host->retune_now = 1; 405857b29bSUlf Hansson } 415857b29bSUlf Hansson 425857b29bSUlf Hansson static inline int mmc_host_cmd23(struct mmc_host *host) 435857b29bSUlf Hansson { 445857b29bSUlf Hansson return host->caps & MMC_CAP_CMD23; 455857b29bSUlf Hansson } 465857b29bSUlf Hansson 4710f21df4SAdrian Hunter static inline bool mmc_host_done_complete(struct mmc_host *host) 4810f21df4SAdrian Hunter { 4910f21df4SAdrian Hunter return host->caps & MMC_CAP_DONE_COMPLETE; 5010f21df4SAdrian Hunter } 5110f21df4SAdrian Hunter 525857b29bSUlf Hansson static inline int mmc_boot_partition_access(struct mmc_host *host) 535857b29bSUlf Hansson { 545857b29bSUlf Hansson return !(host->caps2 & MMC_CAP2_BOOTPART_NOACC); 555857b29bSUlf Hansson } 565857b29bSUlf Hansson 575857b29bSUlf Hansson static inline int mmc_host_uhs(struct mmc_host *host) 585857b29bSUlf Hansson { 595857b29bSUlf Hansson return host->caps & 605857b29bSUlf Hansson (MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 | 615857b29bSUlf Hansson MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 | 62d6743a8aSShawn Lin MMC_CAP_UHS_DDR50) && 63d6743a8aSShawn Lin host->caps & MMC_CAP_4_BIT_DATA; 645857b29bSUlf Hansson } 655857b29bSUlf Hansson 665857b29bSUlf Hansson static inline bool mmc_card_hs200(struct mmc_card *card) 675857b29bSUlf Hansson { 685857b29bSUlf Hansson return card->host->ios.timing == MMC_TIMING_MMC_HS200; 695857b29bSUlf Hansson } 705857b29bSUlf Hansson 715857b29bSUlf Hansson static inline bool mmc_card_ddr52(struct mmc_card *card) 725857b29bSUlf Hansson { 735857b29bSUlf Hansson return card->host->ios.timing == MMC_TIMING_MMC_DDR52; 745857b29bSUlf Hansson } 755857b29bSUlf Hansson 765857b29bSUlf Hansson static inline bool mmc_card_hs400(struct mmc_card *card) 775857b29bSUlf Hansson { 785857b29bSUlf Hansson return card->host->ios.timing == MMC_TIMING_MMC_HS400; 795857b29bSUlf Hansson } 805857b29bSUlf Hansson 815857b29bSUlf Hansson static inline bool mmc_card_hs400es(struct mmc_card *card) 825857b29bSUlf Hansson { 835857b29bSUlf Hansson return card->host->ios.enhanced_strobe; 845857b29bSUlf Hansson } 855857b29bSUlf Hansson 86ead49373SUlf Hansson static inline bool mmc_card_sd_express(struct mmc_host *host) 87ead49373SUlf Hansson { 88ead49373SUlf Hansson return host->ios.timing == MMC_TIMING_SD_EXP || 89ead49373SUlf Hansson host->ios.timing == MMC_TIMING_SD_EXP_1_2V; 90ead49373SUlf Hansson } 91ead49373SUlf Hansson 92b93931a6SPierre Ossman #endif 93b93931a6SPierre Ossman 94