162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * linux/drivers/mmc/core/host.h 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2003 Russell King, All Rights Reserved. 662306a36Sopenharmony_ci * Copyright 2007 Pierre Ossman 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci#ifndef _MMC_CORE_HOST_H 962306a36Sopenharmony_ci#define _MMC_CORE_HOST_H 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include <linux/mmc/host.h> 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ciint mmc_register_host_class(void); 1462306a36Sopenharmony_civoid mmc_unregister_host_class(void); 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_civoid mmc_retune_enable(struct mmc_host *host); 1762306a36Sopenharmony_civoid mmc_retune_disable(struct mmc_host *host); 1862306a36Sopenharmony_civoid mmc_retune_hold(struct mmc_host *host); 1962306a36Sopenharmony_civoid mmc_retune_release(struct mmc_host *host); 2062306a36Sopenharmony_ciint mmc_retune(struct mmc_host *host); 2162306a36Sopenharmony_civoid mmc_retune_pause(struct mmc_host *host); 2262306a36Sopenharmony_civoid mmc_retune_unpause(struct mmc_host *host); 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_cistatic inline void mmc_retune_clear(struct mmc_host *host) 2562306a36Sopenharmony_ci{ 2662306a36Sopenharmony_ci host->retune_now = 0; 2762306a36Sopenharmony_ci host->need_retune = 0; 2862306a36Sopenharmony_ci} 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cistatic inline void mmc_retune_hold_now(struct mmc_host *host) 3162306a36Sopenharmony_ci{ 3262306a36Sopenharmony_ci host->retune_now = 0; 3362306a36Sopenharmony_ci host->hold_retune += 1; 3462306a36Sopenharmony_ci} 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_cistatic inline void mmc_retune_recheck(struct mmc_host *host) 3762306a36Sopenharmony_ci{ 3862306a36Sopenharmony_ci if (host->hold_retune <= 1) 3962306a36Sopenharmony_ci host->retune_now = 1; 4062306a36Sopenharmony_ci} 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_cistatic inline int mmc_host_cmd23(struct mmc_host *host) 4362306a36Sopenharmony_ci{ 4462306a36Sopenharmony_ci return host->caps & MMC_CAP_CMD23; 4562306a36Sopenharmony_ci} 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_cistatic inline bool mmc_host_done_complete(struct mmc_host *host) 4862306a36Sopenharmony_ci{ 4962306a36Sopenharmony_ci return host->caps & MMC_CAP_DONE_COMPLETE; 5062306a36Sopenharmony_ci} 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_cistatic inline int mmc_boot_partition_access(struct mmc_host *host) 5362306a36Sopenharmony_ci{ 5462306a36Sopenharmony_ci return !(host->caps2 & MMC_CAP2_BOOTPART_NOACC); 5562306a36Sopenharmony_ci} 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_cistatic inline int mmc_host_uhs(struct mmc_host *host) 5862306a36Sopenharmony_ci{ 5962306a36Sopenharmony_ci return host->caps & 6062306a36Sopenharmony_ci (MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 | 6162306a36Sopenharmony_ci MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_SDR104 | 6262306a36Sopenharmony_ci MMC_CAP_UHS_DDR50) && 6362306a36Sopenharmony_ci host->caps & MMC_CAP_4_BIT_DATA; 6462306a36Sopenharmony_ci} 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_cistatic inline bool mmc_card_hs200(struct mmc_card *card) 6762306a36Sopenharmony_ci{ 6862306a36Sopenharmony_ci return card->host->ios.timing == MMC_TIMING_MMC_HS200; 6962306a36Sopenharmony_ci} 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_cistatic inline bool mmc_card_ddr52(struct mmc_card *card) 7262306a36Sopenharmony_ci{ 7362306a36Sopenharmony_ci return card->host->ios.timing == MMC_TIMING_MMC_DDR52; 7462306a36Sopenharmony_ci} 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_cistatic inline bool mmc_card_hs400(struct mmc_card *card) 7762306a36Sopenharmony_ci{ 7862306a36Sopenharmony_ci return card->host->ios.timing == MMC_TIMING_MMC_HS400; 7962306a36Sopenharmony_ci} 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_cistatic inline bool mmc_card_hs400es(struct mmc_card *card) 8262306a36Sopenharmony_ci{ 8362306a36Sopenharmony_ci return card->host->ios.enhanced_strobe; 8462306a36Sopenharmony_ci} 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_cistatic inline bool mmc_card_sd_express(struct mmc_host *host) 8762306a36Sopenharmony_ci{ 8862306a36Sopenharmony_ci return host->ios.timing == MMC_TIMING_SD_EXP || 8962306a36Sopenharmony_ci host->ios.timing == MMC_TIMING_SD_EXP_1_2V; 9062306a36Sopenharmony_ci} 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci#endif 9362306a36Sopenharmony_ci 94