1 /*
2 * Copyright 2022 NXP
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7
8 #ifndef ZEPHYR_SUBSYS_SD_SD_OPS_H_
9 #define ZEPHYR_SUBSYS_SD_SD_OPS_H_
10
11 /*
12 * Switches voltage of SD card to 1.8V, as described by
13 * "Signal volatage switch procedure" in section 3.6.1 of SD specification.
14 */
15 int sdmmc_switch_voltage(struct sd_card *card);
16
17 /*
18 * Reads card identification register, and decodes it
19 */
20 int card_read_cid(struct sd_card *card);
21
22 /*
23 * Read card specific data register
24 */
25 int sdmmc_read_csd(struct sd_card *card);
26
27 /*
28 * Requests card to publish a new relative card address, and move from
29 * identification to data mode
30 */
31 int sdmmc_request_rca(struct sd_card *card);
32
33 /*
34 * Selects card, moving it into data transfer mode
35 */
36 int sdmmc_select_card(struct sd_card *card);
37
38 /* Returns 1 if host supports UHS, zero otherwise */
sdmmc_host_uhs(struct sdhc_host_props * props)39 static inline int sdmmc_host_uhs(struct sdhc_host_props *props)
40 {
41 return (props->host_caps.sdr50_support |
42 props->host_caps.uhs_2_support |
43 props->host_caps.sdr104_support |
44 props->host_caps.ddr50_support)
45 & (props->host_caps.vol_180_support);
46 }
47
48 int card_ioctl(struct sd_card *card, uint8_t cmd, void *buf);
49
50 int card_read_blocks(struct sd_card *card, uint8_t *rbuf,
51 uint32_t start_block, uint32_t num_blocks);
52
53 int card_write_blocks(struct sd_card *card, const uint8_t *wbuf,
54 uint32_t start_block, uint32_t num_blocks);
55
56 int card_app_command(struct sd_card *card, int relative_card_address);
57
58 int sdmmc_read_status(struct sd_card *card);
59
60 int sdmmc_wait_ready(struct sd_card *card);
61
62 #endif /* ZEPHYR_SUBSYS_SD_SD_OPS_H_ */
63