Zephyr API Documentation  3.5.0
A Scalable Open Source RTOS
3.5.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
sdhc.h
Go to the documentation of this file.
1/*
2 * Copyright 2022 NXP
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12#ifndef ZEPHYR_INCLUDE_DRIVERS_SDHC_H_
13#define ZEPHYR_INCLUDE_DRIVERS_SDHC_H_
14
15#include <errno.h>
16#include <zephyr/device.h>
17#include <zephyr/sd/sd_spec.h>
18
26#ifdef __cplusplus
27extern "C" {
28#endif
29
30
35#define SDHC_TIMEOUT_FOREVER (-1)
49 unsigned int retries;
51};
52
53#define SDHC_NATIVE_RESPONSE_MASK 0xF
54#define SDHC_SPI_RESPONSE_TYPE_MASK 0xF0
55
62struct sdhc_data {
63 unsigned int block_addr;
64 unsigned int block_size;
65 unsigned int blocks;
66 unsigned int bytes_xfered;
67 void *data;
69};
70
81};
82
93};
94
105};
106
117 SDHC_TIMING_HS = 2U,
133 SDHC_TIMING_HS400 = 10U,
135};
136
145 SD_VOL_3_3_V = 1U,
147 SD_VOL_3_0_V = 2U,
149 SD_VOL_1_8_V = 3U,
151 SD_VOL_1_2_V = 4U,
153};
154
162 unsigned int timeout_clk_freq: 5;
163 unsigned int _rsvd_6: 1;
164 unsigned int timeout_clk_unit: 1;
165 unsigned int sd_base_clk: 8;
166 unsigned int max_blk_len: 2;
167 unsigned int bus_8_bit_support: 1;
168 unsigned int bus_4_bit_support: 1;
169 unsigned int adma_2_support: 1;
170 unsigned int _rsvd_20: 1;
171 unsigned int high_spd_support: 1;
172 unsigned int sdma_support: 1;
173 unsigned int suspend_res_support: 1;
174 unsigned int vol_330_support: 1;
175 unsigned int vol_300_support: 1;
176 unsigned int vol_180_support: 1;
180 unsigned int slot_type: 2;
181 unsigned int sdr50_support: 1;
182 unsigned int sdr104_support: 1;
183 unsigned int ddr50_support: 1;
184 unsigned int uhs_2_support: 1;
185 unsigned int drv_type_a_support: 1;
186 unsigned int drv_type_c_support: 1;
187 unsigned int drv_type_d_support: 1;
188 unsigned int _rsvd_39: 1;
189 unsigned int retune_timer_count: 4;
190 unsigned int sdr50_needs_tuning: 1;
191 unsigned int retuning_mode: 2;
192 unsigned int clk_multiplier: 8;
193 unsigned int _rsvd_56: 3;
194 unsigned int adma3_support: 1;
195 unsigned int vdd2_180_support: 1;
196 unsigned int _rsvd_61: 3;
197 unsigned int hs200_support: 1;
198 unsigned int hs400_support: 1;
199};
200
208struct sdhc_io {
216};
217
224 unsigned int f_max;
225 unsigned int f_min;
226 unsigned int power_delay;
231 bool is_spi;
232};
233
234__subsystem struct sdhc_driver_api {
235 int (*reset)(const struct device *dev);
236 int (*request)(const struct device *dev,
237 struct sdhc_command *cmd,
238 struct sdhc_data *data);
239 int (*set_io)(const struct device *dev, struct sdhc_io *ios);
240 int (*get_card_present)(const struct device *dev);
241 int (*execute_tuning)(const struct device *dev);
242 int (*card_busy)(const struct device *dev);
243 int (*get_host_props)(const struct device *dev,
244 struct sdhc_host_props *props);
245};
246
259__syscall int sdhc_hw_reset(const struct device *dev);
260
261static inline int z_impl_sdhc_hw_reset(const struct device *dev)
262{
263 const struct sdhc_driver_api *api =
264 (const struct sdhc_driver_api *)dev->api;
265
266 if (!api->reset) {
267 return -ENOSYS;
268 }
269
270 return api->reset(dev);
271}
272
273
287__syscall int sdhc_request(const struct device *dev, struct sdhc_command *cmd,
288 struct sdhc_data *data);
289
290static inline int z_impl_sdhc_request(const struct device *dev,
291 struct sdhc_command *cmd, struct sdhc_data *data)
292{
293 const struct sdhc_driver_api *api =
294 (const struct sdhc_driver_api *)dev->api;
295
296 if (!api->request) {
297 return -ENOSYS;
298 }
299
300 return api->request(dev, cmd, data);
301}
302
315__syscall int sdhc_set_io(const struct device *dev, struct sdhc_io *io);
316
317static inline int z_impl_sdhc_set_io(const struct device *dev,
318 struct sdhc_io *io)
319{
320 const struct sdhc_driver_api *api =
321 (const struct sdhc_driver_api *)dev->api;
322
323 if (!api->set_io) {
324 return -ENOSYS;
325 }
326
327 return api->set_io(dev, io);
328}
329
341__syscall int sdhc_card_present(const struct device *dev);
342
343static inline int z_impl_sdhc_card_present(const struct device *dev)
344{
345 const struct sdhc_driver_api *api =
346 (const struct sdhc_driver_api *)dev->api;
347
348 if (!api->get_card_present) {
349 return -ENOSYS;
350 }
351
352 return api->get_card_present(dev);
353}
354
355
367__syscall int sdhc_execute_tuning(const struct device *dev);
368
369static inline int z_impl_sdhc_execute_tuning(const struct device *dev)
370{
371 const struct sdhc_driver_api *api =
372 (const struct sdhc_driver_api *)dev->api;
373
374 if (!api->execute_tuning) {
375 return -ENOSYS;
376 }
377
378 return api->execute_tuning(dev);
379}
380
392__syscall int sdhc_card_busy(const struct device *dev);
393
394static inline int z_impl_sdhc_card_busy(const struct device *dev)
395{
396 const struct sdhc_driver_api *api =
397 (const struct sdhc_driver_api *)dev->api;
398
399 if (!api->card_busy) {
400 return -ENOSYS;
401 }
402
403 return api->card_busy(dev);
404}
405
406
417__syscall int sdhc_get_host_props(const struct device *dev,
418 struct sdhc_host_props *props);
419
420static inline int z_impl_sdhc_get_host_props(const struct device *dev,
421 struct sdhc_host_props *props)
422{
423 const struct sdhc_driver_api *api =
424 (const struct sdhc_driver_api *)dev->api;
425
426 if (!api->get_host_props) {
427 return -ENOSYS;
428 }
429
430 return api->get_host_props(dev, props);
431}
432
437#ifdef __cplusplus
438}
439#endif
440
441#include <syscalls/sdhc.h>
442#endif /* ZEPHYR_INCLUDE_DRIVERS_SDHC_H_ */
System error numbers.
static void cmd(uint32_t command)
Execute a display list command by co-processor engine.
Definition: ft8xx_reference_api.h:153
int sdhc_set_io(const struct device *dev, struct sdhc_io *io)
set I/O properties of SDHC
sd_voltage
SD voltage.
Definition: sdhc.h:144
sdhc_timing_mode
SD host controller timing mode.
Definition: sdhc.h:114
int sdhc_card_present(const struct device *dev)
check for SDHC card presence
int sdhc_card_busy(const struct device *dev)
check if SD card is busy
int sdhc_get_host_props(const struct device *dev, struct sdhc_host_props *props)
Get SD host controller properties.
int sdhc_execute_tuning(const struct device *dev)
run SDHC tuning
int sdhc_request(const struct device *dev, struct sdhc_command *cmd, struct sdhc_data *data)
Send command to SDHC.
sdhc_power
SD host controller power.
Definition: sdhc.h:90
int sdhc_hw_reset(const struct device *dev)
reset SDHC controller state
sdhc_bus_width
SD host controller bus width.
Definition: sdhc.h:101
sdhc_bus_mode
SD bus mode.
Definition: sdhc.h:78
@ SD_VOL_3_3_V
card operation voltage around 3.3v
Definition: sdhc.h:145
@ SD_VOL_1_2_V
card operation voltage around 1.2v
Definition: sdhc.h:151
@ SD_VOL_3_0_V
card operation voltage around 3.0v
Definition: sdhc.h:147
@ SD_VOL_1_8_V
card operation voltage around 1.8v
Definition: sdhc.h:149
@ SDHC_TIMING_HS400
HS400 mode.
Definition: sdhc.h:133
@ SDHC_TIMING_DDR52
DDR52 mode.
Definition: sdhc.h:129
@ SDHC_TIMING_SDR50
SDR49 mode.
Definition: sdhc.h:123
@ SDHC_TIMING_LEGACY
Legacy 3.3V Mode.
Definition: sdhc.h:115
@ SDHC_TIMING_SDR25
High speed mode & SDR25.
Definition: sdhc.h:121
@ SDHC_TIMING_SDR12
Identification mode & SDR12.
Definition: sdhc.h:119
@ SDHC_TIMING_SDR104
SDR104 mode.
Definition: sdhc.h:125
@ SDHC_TIMING_HS200
HS200 mode.
Definition: sdhc.h:131
@ SDHC_TIMING_HS
Legacy High speed mode (3.3V)
Definition: sdhc.h:117
@ SDHC_TIMING_DDR50
DDR50 mode.
Definition: sdhc.h:127
@ SDHC_POWER_OFF
Definition: sdhc.h:91
@ SDHC_POWER_ON
Definition: sdhc.h:92
@ SDHC_BUS_WIDTH8BIT
Definition: sdhc.h:104
@ SDHC_BUS_WIDTH4BIT
Definition: sdhc.h:103
@ SDHC_BUS_WIDTH1BIT
Definition: sdhc.h:102
@ SDHC_BUSMODE_OPENDRAIN
Definition: sdhc.h:79
@ SDHC_BUSMODE_PUSHPULL
Definition: sdhc.h:80
#define ENOSYS
Function not implemented.
Definition: errno.h:83
sd_driver_type
SD driver types.
Definition: sd_spec.h:456
sdhc_clock_speed
SD host controller clock speed.
Definition: sd_spec.h:410
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
Runtime device structure (in ROM) per driver instance.
Definition: device.h:381
const void * api
Address of the API structure exposed by the device instance.
Definition: device.h:387
SD host controller command structure.
Definition: sdhc.h:44
uint32_t opcode
SD Host specification CMD index.
Definition: sdhc.h:45
uint32_t response[4]
SD card response field.
Definition: sdhc.h:47
unsigned int retries
Max number of retries.
Definition: sdhc.h:49
int timeout_ms
Command timeout in milliseconds.
Definition: sdhc.h:50
uint32_t arg
SD host specification argument.
Definition: sdhc.h:46
uint32_t response_type
Expected SD response type.
Definition: sdhc.h:48
SD host controller data structure.
Definition: sdhc.h:62
void * data
Data to transfer or receive.
Definition: sdhc.h:67
unsigned int block_size
Block size.
Definition: sdhc.h:64
unsigned int blocks
Number of blocks.
Definition: sdhc.h:65
unsigned int block_addr
Block to start read from.
Definition: sdhc.h:63
unsigned int bytes_xfered
populated with number of bytes sent by SDHC
Definition: sdhc.h:66
int timeout_ms
data timeout in milliseconds
Definition: sdhc.h:68
Definition: sdhc.h:234
int(* get_card_present)(const struct device *dev)
Definition: sdhc.h:240
int(* request)(const struct device *dev, struct sdhc_command *cmd, struct sdhc_data *data)
Definition: sdhc.h:236
int(* execute_tuning)(const struct device *dev)
Definition: sdhc.h:241
int(* reset)(const struct device *dev)
Definition: sdhc.h:235
int(* card_busy)(const struct device *dev)
Definition: sdhc.h:242
int(* set_io)(const struct device *dev, struct sdhc_io *ios)
Definition: sdhc.h:239
int(* get_host_props)(const struct device *dev, struct sdhc_host_props *props)
Definition: sdhc.h:243
SD host controller capabilities.
Definition: sdhc.h:161
unsigned int address_64_bit_support_v3
64-bit system address support for V3
Definition: sdhc.h:178
unsigned int uhs_2_support
UHS-II support.
Definition: sdhc.h:184
unsigned int sd_base_clk
SD base clock frequency.
Definition: sdhc.h:165
unsigned int sdma_support
SDMA support.
Definition: sdhc.h:172
unsigned int vdd2_180_support
1.8V VDD2 support
Definition: sdhc.h:195
unsigned int slot_type
Slot type.
Definition: sdhc.h:180
unsigned int timeout_clk_freq
Timeout clock frequency.
Definition: sdhc.h:162
unsigned int sdr104_support
SDR104 support.
Definition: sdhc.h:182
unsigned int drv_type_a_support
Driver type A support.
Definition: sdhc.h:185
unsigned int retuning_mode
Re-tuning mode.
Definition: sdhc.h:191
unsigned int sdr50_support
SDR50 support.
Definition: sdhc.h:181
unsigned int sdio_async_interrupt_support
Asynchronous interrupt support.
Definition: sdhc.h:179
unsigned int bus_4_bit_support
4 bit bus support
Definition: sdhc.h:168
unsigned int vol_300_support
Voltage support 3.0V.
Definition: sdhc.h:175
unsigned int timeout_clk_unit
Timeout clock unit.
Definition: sdhc.h:164
unsigned int adma3_support
ADMA3 support.
Definition: sdhc.h:194
unsigned int hs200_support
HS200 support.
Definition: sdhc.h:197
unsigned int max_blk_len
Max block length.
Definition: sdhc.h:166
unsigned int ddr50_support
DDR50 support.
Definition: sdhc.h:183
unsigned int vol_180_support
Voltage support 1.8V.
Definition: sdhc.h:176
unsigned int high_spd_support
High speed support.
Definition: sdhc.h:171
unsigned int drv_type_c_support
Driver type C support.
Definition: sdhc.h:186
unsigned int retune_timer_count
Timer count for re-tuning.
Definition: sdhc.h:189
unsigned int sdr50_needs_tuning
Use tuning for SDR50.
Definition: sdhc.h:190
unsigned int vol_330_support
Voltage support 3.3V.
Definition: sdhc.h:174
unsigned int adma_2_support
ADMA2 support.
Definition: sdhc.h:169
unsigned int bus_8_bit_support
8-bit Support for embedded device
Definition: sdhc.h:167
unsigned int hs400_support
HS400 support.
Definition: sdhc.h:198
unsigned int drv_type_d_support
Driver type D support.
Definition: sdhc.h:187
unsigned int address_64_bit_support_v4
64-bit system address support for V4
Definition: sdhc.h:177
unsigned int suspend_res_support
Suspend/Resume support.
Definition: sdhc.h:173
unsigned int clk_multiplier
Clock multiplier.
Definition: sdhc.h:192
SD host controller properties.
Definition: sdhc.h:223
unsigned int f_min
Min bus frequency.
Definition: sdhc.h:225
uint32_t max_current_180
Max current (in mA) at 1.8V.
Definition: sdhc.h:230
unsigned int power_delay
Delay to allow SD to power up or down (in ms)
Definition: sdhc.h:226
bool is_spi
Is the host using SPI mode.
Definition: sdhc.h:231
uint32_t max_current_300
Max current (in mA) at 3.0V.
Definition: sdhc.h:229
struct sdhc_host_caps host_caps
Host capability bitfield.
Definition: sdhc.h:227
unsigned int f_max
Max bus frequency.
Definition: sdhc.h:224
uint32_t max_current_330
Max current (in mA) at 3.3V.
Definition: sdhc.h:228
SD host controller I/O control structure.
Definition: sdhc.h:208
enum sd_driver_type driver_type
SD driver type.
Definition: sdhc.h:214
enum sdhc_bus_mode bus_mode
command output mode
Definition: sdhc.h:210
enum sdhc_timing_mode timing
SD bus timing.
Definition: sdhc.h:213
enum sdhc_bus_width bus_width
SD bus width.
Definition: sdhc.h:212
enum sdhc_clock_speed clock
Clock rate.
Definition: sdhc.h:209
enum sdhc_power power_mode
SD power supply mode.
Definition: sdhc.h:211
enum sd_voltage signal_voltage
IO signalling voltage (usually 1.8 or 3.3V)
Definition: sdhc.h:215