xref: /linux/drivers/mmc/core/host.h (revision 5857b29b96dcf208e4903ec6f20d132e6a77cac2)
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