Blame view
include/sdhci.h
13.7 KB
83d290c56 SPDX: Convert all... |
1 |
/* SPDX-License-Identifier: GPL-2.0+ */ |
af62a5578 MMC: add sdhci ge... |
2 3 4 5 |
/* * Copyright 2011, Marvell Semiconductor Inc. * Lei Wen <leiwen@marvell.com> * |
af62a5578 MMC: add sdhci ge... |
6 7 8 9 10 |
* Back ported to the 8xx platform (from the 8260 platform) by * Murray.Jensen@cmst.csiro.au, 27-Jan-01. */ #ifndef __SDHCI_HW_H #define __SDHCI_HW_H |
f5df6aa1e mmc: sdhci: reduc... |
11 |
#include <linux/types.h> |
af62a5578 MMC: add sdhci ge... |
12 |
#include <asm/io.h> |
6cf1b17cd mmc: sdhci: add m... |
13 |
#include <mmc.h> |
0347960b8 dm: mmc: Remove u... |
14 |
#include <asm/gpio.h> |
6cf1b17cd mmc: sdhci: add m... |
15 |
|
af62a5578 MMC: add sdhci ge... |
16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/* * Controller registers */ #define SDHCI_DMA_ADDRESS 0x00 #define SDHCI_BLOCK_SIZE 0x04 #define SDHCI_MAKE_BLKSZ(dma, blksz) (((dma & 0x7) << 12) | (blksz & 0xFFF)) #define SDHCI_BLOCK_COUNT 0x06 #define SDHCI_ARGUMENT 0x08 #define SDHCI_TRANSFER_MODE 0x0C |
91914581a mmc: sdhci: use t... |
30 31 32 33 34 |
#define SDHCI_TRNS_DMA BIT(0) #define SDHCI_TRNS_BLK_CNT_EN BIT(1) #define SDHCI_TRNS_ACMD12 BIT(2) #define SDHCI_TRNS_READ BIT(4) #define SDHCI_TRNS_MULTI BIT(5) |
af62a5578 MMC: add sdhci ge... |
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
#define SDHCI_COMMAND 0x0E #define SDHCI_CMD_RESP_MASK 0x03 #define SDHCI_CMD_CRC 0x08 #define SDHCI_CMD_INDEX 0x10 #define SDHCI_CMD_DATA 0x20 #define SDHCI_CMD_ABORTCMD 0xC0 #define SDHCI_CMD_RESP_NONE 0x00 #define SDHCI_CMD_RESP_LONG 0x01 #define SDHCI_CMD_RESP_SHORT 0x02 #define SDHCI_CMD_RESP_SHORT_BUSY 0x03 #define SDHCI_MAKE_CMD(c, f) (((c & 0xff) << 8) | (f & 0xff)) #define SDHCI_GET_CMD(c) ((c>>8) & 0x3f) #define SDHCI_RESPONSE 0x10 #define SDHCI_BUFFER 0x20 #define SDHCI_PRESENT_STATE 0x24 |
91914581a mmc: sdhci: use t... |
56 57 58 59 60 61 62 63 64 65 |
#define SDHCI_CMD_INHIBIT BIT(0) #define SDHCI_DATA_INHIBIT BIT(1) #define SDHCI_DOING_WRITE BIT(8) #define SDHCI_DOING_READ BIT(9) #define SDHCI_SPACE_AVAILABLE BIT(10) #define SDHCI_DATA_AVAILABLE BIT(11) #define SDHCI_CARD_PRESENT BIT(16) #define SDHCI_CARD_STATE_STABLE BIT(17) #define SDHCI_CARD_DETECT_PIN_LEVEL BIT(18) #define SDHCI_WRITE_PROTECT BIT(19) |
af62a5578 MMC: add sdhci ge... |
66 67 |
#define SDHCI_HOST_CONTROL 0x28 |
91914581a mmc: sdhci: use t... |
68 69 70 |
#define SDHCI_CTRL_LED BIT(0) #define SDHCI_CTRL_4BITBUS BIT(1) #define SDHCI_CTRL_HISPD BIT(2) |
af62a5578 MMC: add sdhci ge... |
71 72 73 74 75 |
#define SDHCI_CTRL_DMA_MASK 0x18 #define SDHCI_CTRL_SDMA 0x00 #define SDHCI_CTRL_ADMA1 0x08 #define SDHCI_CTRL_ADMA32 0x10 #define SDHCI_CTRL_ADMA64 0x18 |
91914581a mmc: sdhci: use t... |
76 77 78 |
#define SDHCI_CTRL_8BITBUS BIT(5) #define SDHCI_CTRL_CD_TEST_INS BIT(6) #define SDHCI_CTRL_CD_TEST BIT(7) |
af62a5578 MMC: add sdhci ge... |
79 80 81 82 83 84 85 86 87 88 |
#define SDHCI_POWER_CONTROL 0x29 #define SDHCI_POWER_ON 0x01 #define SDHCI_POWER_180 0x0A #define SDHCI_POWER_300 0x0C #define SDHCI_POWER_330 0x0E #define SDHCI_BLOCK_GAP_CONTROL 0x2A #define SDHCI_WAKE_UP_CONTROL 0x2B |
91914581a mmc: sdhci: use t... |
89 90 91 |
#define SDHCI_WAKE_ON_INT BIT(0) #define SDHCI_WAKE_ON_INSERT BIT(1) #define SDHCI_WAKE_ON_REMOVE BIT(2) |
af62a5578 MMC: add sdhci ge... |
92 93 94 95 96 97 98 |
#define SDHCI_CLOCK_CONTROL 0x2C #define SDHCI_DIVIDER_SHIFT 8 #define SDHCI_DIVIDER_HI_SHIFT 6 #define SDHCI_DIV_MASK 0xFF #define SDHCI_DIV_MASK_LEN 8 #define SDHCI_DIV_HI_MASK 0x300 |
91914581a mmc: sdhci: use t... |
99 100 101 102 |
#define SDHCI_PROG_CLOCK_MODE BIT(5) #define SDHCI_CLOCK_CARD_EN BIT(2) #define SDHCI_CLOCK_INT_STABLE BIT(1) #define SDHCI_CLOCK_INT_EN BIT(0) |
af62a5578 MMC: add sdhci ge... |
103 104 105 106 107 108 109 110 111 112 113 |
#define SDHCI_TIMEOUT_CONTROL 0x2E #define SDHCI_SOFTWARE_RESET 0x2F #define SDHCI_RESET_ALL 0x01 #define SDHCI_RESET_CMD 0x02 #define SDHCI_RESET_DATA 0x04 #define SDHCI_INT_STATUS 0x30 #define SDHCI_INT_ENABLE 0x34 #define SDHCI_SIGNAL_ENABLE 0x38 |
91914581a mmc: sdhci: use t... |
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
#define SDHCI_INT_RESPONSE BIT(0) #define SDHCI_INT_DATA_END BIT(1) #define SDHCI_INT_DMA_END BIT(3) #define SDHCI_INT_SPACE_AVAIL BIT(4) #define SDHCI_INT_DATA_AVAIL BIT(5) #define SDHCI_INT_CARD_INSERT BIT(6) #define SDHCI_INT_CARD_REMOVE BIT(7) #define SDHCI_INT_CARD_INT BIT(8) #define SDHCI_INT_ERROR BIT(15) #define SDHCI_INT_TIMEOUT BIT(16) #define SDHCI_INT_CRC BIT(17) #define SDHCI_INT_END_BIT BIT(18) #define SDHCI_INT_INDEX BIT(19) #define SDHCI_INT_DATA_TIMEOUT BIT(20) #define SDHCI_INT_DATA_CRC BIT(21) #define SDHCI_INT_DATA_END_BIT BIT(22) #define SDHCI_INT_BUS_POWER BIT(23) #define SDHCI_INT_ACMD12ERR BIT(24) #define SDHCI_INT_ADMA_ERROR BIT(25) |
af62a5578 MMC: add sdhci ge... |
133 134 135 136 137 138 139 140 141 142 143 144 145 |
#define SDHCI_INT_NORMAL_MASK 0x00007FFF #define SDHCI_INT_ERROR_MASK 0xFFFF8000 #define SDHCI_INT_CMD_MASK (SDHCI_INT_RESPONSE | SDHCI_INT_TIMEOUT | \ SDHCI_INT_CRC | SDHCI_INT_END_BIT | SDHCI_INT_INDEX) #define SDHCI_INT_DATA_MASK (SDHCI_INT_DATA_END | SDHCI_INT_DMA_END | \ SDHCI_INT_DATA_AVAIL | SDHCI_INT_SPACE_AVAIL | \ SDHCI_INT_DATA_TIMEOUT | SDHCI_INT_DATA_CRC | \ SDHCI_INT_DATA_END_BIT | SDHCI_INT_ADMA_ERROR) #define SDHCI_INT_ALL_MASK ((unsigned int)-1) #define SDHCI_ACMD12_ERR 0x3C |
d1c0a2200 mmc: sdhci: Add s... |
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
#define SDHCI_HOST_CONTROL2 0x3E #define SDHCI_CTRL_UHS_MASK 0x0007 #define SDHCI_CTRL_UHS_SDR12 0x0000 #define SDHCI_CTRL_UHS_SDR25 0x0001 #define SDHCI_CTRL_UHS_SDR50 0x0002 #define SDHCI_CTRL_UHS_SDR104 0x0003 #define SDHCI_CTRL_UHS_DDR50 0x0004 #define SDHCI_CTRL_HS400 0x0005 /* Non-standard */ #define SDHCI_CTRL_VDD_180 0x0008 #define SDHCI_CTRL_DRV_TYPE_MASK 0x0030 #define SDHCI_CTRL_DRV_TYPE_B 0x0000 #define SDHCI_CTRL_DRV_TYPE_A 0x0010 #define SDHCI_CTRL_DRV_TYPE_C 0x0020 #define SDHCI_CTRL_DRV_TYPE_D 0x0030 #define SDHCI_CTRL_EXEC_TUNING 0x0040 #define SDHCI_CTRL_TUNED_CLK 0x0080 #define SDHCI_CTRL_PRESET_VAL_ENABLE 0x8000 |
af62a5578 MMC: add sdhci ge... |
163 164 165 166 167 168 169 170 171 172 |
#define SDHCI_CAPABILITIES 0x40 #define SDHCI_TIMEOUT_CLK_MASK 0x0000003F #define SDHCI_TIMEOUT_CLK_SHIFT 0 #define SDHCI_TIMEOUT_CLK_UNIT 0x00000080 #define SDHCI_CLOCK_BASE_MASK 0x00003F00 #define SDHCI_CLOCK_V3_BASE_MASK 0x0000FF00 #define SDHCI_CLOCK_BASE_SHIFT 8 #define SDHCI_MAX_BLOCK_MASK 0x00030000 #define SDHCI_MAX_BLOCK_SHIFT 16 |
91914581a mmc: sdhci: use t... |
173 174 175 176 177 178 179 180 181 |
#define SDHCI_CAN_DO_8BIT BIT(18) #define SDHCI_CAN_DO_ADMA2 BIT(19) #define SDHCI_CAN_DO_ADMA1 BIT(20) #define SDHCI_CAN_DO_HISPD BIT(21) #define SDHCI_CAN_DO_SDMA BIT(22) #define SDHCI_CAN_VDD_330 BIT(24) #define SDHCI_CAN_VDD_300 BIT(25) #define SDHCI_CAN_VDD_180 BIT(26) #define SDHCI_CAN_64BIT BIT(28) |
af62a5578 MMC: add sdhci ge... |
182 183 |
#define SDHCI_CAPABILITIES_1 0x44 |
b8e25ef16 mmc: sdhci: Read ... |
184 185 186 187 |
#define SDHCI_SUPPORT_SDR50 0x00000001 #define SDHCI_SUPPORT_SDR104 0x00000002 #define SDHCI_SUPPORT_DDR50 0x00000004 #define SDHCI_USE_SDR50_TUNING 0x00002000 |
a0d0d86f5 mmc: atmel_sdhci:... |
188 189 |
#define SDHCI_CLOCK_MUL_MASK 0x00FF0000 #define SDHCI_CLOCK_MUL_SHIFT 16 |
af62a5578 MMC: add sdhci ge... |
190 191 192 193 194 195 196 197 198 199 200 201 202 |
#define SDHCI_MAX_CURRENT 0x48 /* 4C-4F reserved for more max current */ #define SDHCI_SET_ACMD12_ERROR 0x50 #define SDHCI_SET_INT_ERROR 0x52 #define SDHCI_ADMA_ERROR 0x54 /* 55-57 reserved */ #define SDHCI_ADMA_ADDRESS 0x58 |
37cb626da mmc: sdhci: Add S... |
203 |
#define SDHCI_ADMA_ADDRESS_HI 0x5c |
af62a5578 MMC: add sdhci ge... |
204 205 206 207 208 209 210 211 212 213 214 215 216 |
/* 60-FB reserved */ #define SDHCI_SLOT_INT_STATUS 0xFC #define SDHCI_HOST_VERSION 0xFE #define SDHCI_VENDOR_VER_MASK 0xFF00 #define SDHCI_VENDOR_VER_SHIFT 8 #define SDHCI_SPEC_VER_MASK 0x00FF #define SDHCI_SPEC_VER_SHIFT 0 #define SDHCI_SPEC_100 0 #define SDHCI_SPEC_200 1 #define SDHCI_SPEC_300 2 |
113e5dfcd mmc: sdhci: use t... |
217 |
#define SDHCI_GET_VERSION(x) (x->version & SDHCI_SPEC_VER_MASK) |
af62a5578 MMC: add sdhci ge... |
218 219 220 221 222 223 224 225 226 227 228 |
/* * End of controller registers. */ #define SDHCI_MAX_DIV_SPEC_200 256 #define SDHCI_MAX_DIV_SPEC_300 2046 /* * quirks */ #define SDHCI_QUIRK_32BIT_DMA_ADDR (1 << 0) |
5af9a5699 mmc: mv_sdhci: Fi... |
229 |
#define SDHCI_QUIRK_REG32_RW (1 << 1) |
3a6383207 mmc: sdhci: add t... |
230 |
#define SDHCI_QUIRK_BROKEN_R1B (1 << 2) |
236bfecff mmc: add the quir... |
231 232 |
#define SDHCI_QUIRK_NO_HISPD_BIT (1 << 3) #define SDHCI_QUIRK_BROKEN_VOLTAGE (1 << 4) |
88a57125f mmc: sdhci: add S... |
233 234 235 236 237 238 |
/* * SDHCI_QUIRK_BROKEN_HISPD_MODE * the hardware cannot operate correctly in high-speed mode, * this quirk forces the sdhci host-controller to non high-speed mode */ #define SDHCI_QUIRK_BROKEN_HISPD_MODE BIT(5) |
13243f2ea mmc: sdhci: Add a... |
239 |
#define SDHCI_QUIRK_WAIT_SEND_CMD (1 << 6) |
113e5dfcd mmc: sdhci: use t... |
240 |
#define SDHCI_QUIRK_USE_WIDE8 (1 << 8) |
b8e25ef16 mmc: sdhci: Read ... |
241 |
#define SDHCI_QUIRK_NO_1_8_V (1 << 9) |
af62a5578 MMC: add sdhci ge... |
242 |
|
0d2f15f9c mmc: sdhci: fix b... |
243 244 |
/* to make gcc happy */ struct sdhci_host; |
af62a5578 MMC: add sdhci ge... |
245 246 247 248 249 250 251 |
/* * Host SDMA buffer boundary. Valid values from 4K to 512K in powers of 2. */ #define SDHCI_DEFAULT_BOUNDARY_SIZE (512 * 1024) #define SDHCI_DEFAULT_BOUNDARY_ARG (7) struct sdhci_ops { #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS |
62226b686 mmc: sdhci: move ... |
252 253 254 255 256 257 |
u32 (*read_l)(struct sdhci_host *host, int reg); u16 (*read_w)(struct sdhci_host *host, int reg); u8 (*read_b)(struct sdhci_host *host, int reg); void (*write_l)(struct sdhci_host *host, u32 val, int reg); void (*write_w)(struct sdhci_host *host, u16 val, int reg); void (*write_b)(struct sdhci_host *host, u8 val, int reg); |
af62a5578 MMC: add sdhci ge... |
258 |
#endif |
62226b686 mmc: sdhci: move ... |
259 260 |
int (*get_cd)(struct sdhci_host *host); void (*set_control_reg)(struct sdhci_host *host); |
a8185c50d mmc: sdhci: Make ... |
261 |
int (*set_ios_post)(struct sdhci_host *host); |
62226b686 mmc: sdhci: move ... |
262 |
void (*set_clock)(struct sdhci_host *host, u32 div); |
2fc3ed5d0 sdhci: Add new sd... |
263 264 |
int (*platform_execute_tuning)(struct mmc *host, u8 opcode); void (*set_delay)(struct sdhci_host *host); |
cb884347f sdhci: Add sdhci_... |
265 |
int (*deferred_probe)(struct sdhci_host *host); |
af62a5578 MMC: add sdhci ge... |
266 |
}; |
37cb626da mmc: sdhci: Add S... |
267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 |
#if CONFIG_IS_ENABLED(MMC_SDHCI_ADMA) #define ADMA_MAX_LEN 65532 #ifdef CONFIG_DMA_ADDR_T_64BIT #define ADMA_DESC_LEN 16 #else #define ADMA_DESC_LEN 8 #endif #define ADMA_TABLE_NO_ENTRIES (CONFIG_SYS_MMC_MAX_BLK_COUNT * \ MMC_MAX_BLOCK_LEN) / ADMA_MAX_LEN #define ADMA_TABLE_SZ (ADMA_TABLE_NO_ENTRIES * ADMA_DESC_LEN) /* Decriptor table defines */ #define ADMA_DESC_ATTR_VALID BIT(0) #define ADMA_DESC_ATTR_END BIT(1) #define ADMA_DESC_ATTR_INT BIT(2) #define ADMA_DESC_ATTR_ACT1 BIT(4) #define ADMA_DESC_ATTR_ACT2 BIT(5) #define ADMA_DESC_TRANSFER_DATA ADMA_DESC_ATTR_ACT2 #define ADMA_DESC_LINK_DESC (ADMA_DESC_ATTR_ACT1 | ADMA_DESC_ATTR_ACT2) struct sdhci_adma_desc { u8 attr; u8 reserved; u16 len; u32 addr_lo; #ifdef CONFIG_DMA_ADDR_T_64BIT u32 addr_hi; #endif } __packed; #endif |
af62a5578 MMC: add sdhci ge... |
299 |
struct sdhci_host { |
cacd1d2f3 mmc: sdhci: add c... |
300 |
const char *name; |
af62a5578 MMC: add sdhci ge... |
301 302 |
void *ioaddr; unsigned int quirks; |
236bfecff mmc: add the quir... |
303 |
unsigned int host_caps; |
af62a5578 MMC: add sdhci ge... |
304 |
unsigned int version; |
6d0e34bf4 mmc: sdhci: Disti... |
305 |
unsigned int max_clk; /* Maximum Base Clock frequency */ |
6dffdbc3a mmc: sdhci: Add t... |
306 |
unsigned int clk_mul; /* Clock Multiplier value */ |
af62a5578 MMC: add sdhci ge... |
307 |
unsigned int clock; |
6cf1b17cd mmc: sdhci: add m... |
308 |
struct mmc *mmc; |
af62a5578 MMC: add sdhci ge... |
309 |
const struct sdhci_ops *ops; |
b09ed6e4f mmc: s5p_sdhci: a... |
310 |
int index; |
236bfecff mmc: add the quir... |
311 |
|
3577fe8be drivers:mmc:sdhci... |
312 |
int bus_width; |
0347960b8 dm: mmc: Remove u... |
313 314 |
struct gpio_desc pwr_gpio; /* Power GPIO */ struct gpio_desc cd_gpio; /* Card Detect GPIO */ |
3577fe8be drivers:mmc:sdhci... |
315 |
|
236bfecff mmc: add the quir... |
316 |
uint voltages; |
93bfd6167 mmc: Split mmc st... |
317 318 |
struct mmc_config cfg; |
c8cc18b7a mmc: sdhci: put t... |
319 |
void *align_buffer; |
f5df6aa1e mmc: sdhci: reduc... |
320 |
bool force_align_buffer; |
6d6af2057 mmc: sdhci: Move ... |
321 322 323 |
dma_addr_t start_addr; int flags; #define USE_SDMA (0x1 << 0) |
37cb626da mmc: sdhci: Add S... |
324 325 326 327 328 329 330 331 |
#define USE_ADMA (0x1 << 1) #define USE_ADMA64 (0x1 << 2) #define USE_DMA (USE_SDMA | USE_ADMA | USE_ADMA64) dma_addr_t adma_addr; #if CONFIG_IS_ENABLED(MMC_SDHCI_ADMA) struct sdhci_adma_desc *adma_desc_table; uint desc_slot; #endif |
af62a5578 MMC: add sdhci ge... |
332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 |
}; #ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS static inline void sdhci_writel(struct sdhci_host *host, u32 val, int reg) { if (unlikely(host->ops->write_l)) host->ops->write_l(host, val, reg); else writel(val, host->ioaddr + reg); } static inline void sdhci_writew(struct sdhci_host *host, u16 val, int reg) { if (unlikely(host->ops->write_w)) host->ops->write_w(host, val, reg); else writew(val, host->ioaddr + reg); } static inline void sdhci_writeb(struct sdhci_host *host, u8 val, int reg) { if (unlikely(host->ops->write_b)) host->ops->write_b(host, val, reg); else writeb(val, host->ioaddr + reg); } static inline u32 sdhci_readl(struct sdhci_host *host, int reg) { if (unlikely(host->ops->read_l)) return host->ops->read_l(host, reg); else return readl(host->ioaddr + reg); } static inline u16 sdhci_readw(struct sdhci_host *host, int reg) { if (unlikely(host->ops->read_w)) return host->ops->read_w(host, reg); else return readw(host->ioaddr + reg); } static inline u8 sdhci_readb(struct sdhci_host *host, int reg) { if (unlikely(host->ops->read_b)) return host->ops->read_b(host, reg); else return readb(host->ioaddr + reg); } #else static inline void sdhci_writel(struct sdhci_host *host, u32 val, int reg) { writel(val, host->ioaddr + reg); } static inline void sdhci_writew(struct sdhci_host *host, u16 val, int reg) { writew(val, host->ioaddr + reg); } static inline void sdhci_writeb(struct sdhci_host *host, u8 val, int reg) { writeb(val, host->ioaddr + reg); } static inline u32 sdhci_readl(struct sdhci_host *host, int reg) { return readl(host->ioaddr + reg); } static inline u16 sdhci_readw(struct sdhci_host *host, int reg) { return readw(host->ioaddr + reg); } static inline u8 sdhci_readb(struct sdhci_host *host, int reg) { return readb(host->ioaddr + reg); } #endif |
ef1e4eda6 dm: mmc: sdhci: S... |
415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 |
#ifdef CONFIG_BLK /** * sdhci_setup_cfg() - Set up the configuration for DWMMC * * This is used to set up an SDHCI device when you are using CONFIG_BLK. * * This should be called from your MMC driver's probe() method once you have * the information required. * * Generally your driver will have a platform data structure which holds both * the configuration (struct mmc_config) and the MMC device info (struct mmc). * For example: * * struct msm_sdhc_plat { * struct mmc_config cfg; * struct mmc mmc; * }; * * ... * * Inside U_BOOT_DRIVER(): * .platdata_auto_alloc_size = sizeof(struct msm_sdhc_plat), * * To access platform data: * struct msm_sdhc_plat *plat = dev_get_platdata(dev); * * See msm_sdhci.c for an example. * * @cfg: Configuration structure to fill in (generally &plat->mmc) |
14bed52d2 mmc: sdhci: remov... |
444 |
* @host: SDHCI host structure |
6d0e34bf4 mmc: sdhci: Disti... |
445 446 |
* @f_max: Maximum supported clock frequency in HZ (0 for default) * @f_min: Minimum supported clock frequency in HZ (0 for default) |
ef1e4eda6 dm: mmc: sdhci: S... |
447 |
*/ |
14bed52d2 mmc: sdhci: remov... |
448 |
int sdhci_setup_cfg(struct mmc_config *cfg, struct sdhci_host *host, |
6d0e34bf4 mmc: sdhci: Disti... |
449 |
u32 f_max, u32 f_min); |
ef1e4eda6 dm: mmc: sdhci: S... |
450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 |
/** * sdhci_bind() - Set up a new MMC block device * * This is used to set up an SDHCI block device when you are using CONFIG_BLK. * It should be called from your driver's bind() method. * * See msm_sdhci.c for an example. * * @dev: Device to set up * @mmc: Pointer to mmc structure (normally &plat->mmc) * @cfg: Empty configuration structure (generally &plat->cfg). This is * normally all zeroes at this point. The only purpose of passing * this in is to set mmc->cfg to it. * @return 0 if OK, -ve if the block device could not be created */ int sdhci_bind(struct udevice *dev, struct mmc *mmc, struct mmc_config *cfg); #else /** * add_sdhci() - Add a new SDHCI interface * * This is used when you are not using CONFIG_BLK. Convert your driver over! * * @host: SDHCI host structure |
6d0e34bf4 mmc: sdhci: Disti... |
475 476 |
* @f_max: Maximum supported clock frequency in HZ (0 for default) * @f_min: Minimum supported clock frequency in HZ (0 for default) |
ef1e4eda6 dm: mmc: sdhci: S... |
477 478 |
* @return 0 if OK, -ve on error */ |
6d0e34bf4 mmc: sdhci: Disti... |
479 |
int add_sdhci(struct sdhci_host *host, u32 f_max, u32 f_min); |
ef1e4eda6 dm: mmc: sdhci: S... |
480 |
#endif /* !CONFIG_BLK */ |
d1c0a2200 mmc: sdhci: Add s... |
481 |
void sdhci_set_uhs_timing(struct sdhci_host *host); |
e7881d85a dm: mmc: Drop CON... |
482 |
#ifdef CONFIG_DM_MMC |
ef1e4eda6 dm: mmc: sdhci: S... |
483 484 |
/* Export the operations to drivers */ int sdhci_probe(struct udevice *dev); |
3966c7d00 mmc: sdhci: Make ... |
485 |
int sdhci_set_clock(struct mmc *mmc, unsigned int clock); |
ef1e4eda6 dm: mmc: sdhci: S... |
486 487 488 |
extern const struct dm_mmc_ops sdhci_ops; #else #endif |
af62a5578 MMC: add sdhci ge... |
489 |
#endif /* __SDHCI_HW_H */ |