xref: /openbmc/linux/drivers/mmc/core/host.h (revision 8ffb2611)
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 
mmc_retune_clear(struct mmc_host * host)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 
mmc_retune_hold_now(struct mmc_host * host)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 
mmc_retune_recheck(struct mmc_host * host)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 
mmc_host_cmd23(struct mmc_host * host)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 
mmc_host_done_complete(struct mmc_host * host)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 
mmc_boot_partition_access(struct mmc_host * host)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 
mmc_host_uhs(struct mmc_host * host)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 
mmc_card_hs200(struct mmc_card * card)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 
mmc_card_ddr52(struct mmc_card * card)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 
mmc_card_hs400(struct mmc_card * card)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 
mmc_card_hs400es(struct mmc_card * card)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 
mmc_card_sd_express(struct mmc_host * host)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