Zephyr Project API  3.2.0
A Scalable Open Source RTOS
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#include <zephyr/device.h>
15#include <zephyr/sd/sd_spec.h>
16
24#ifdef __cplusplus
25extern "C" {
26#endif
27
28
33#define SDHC_TIMEOUT_FOREVER (-1)
47 unsigned int retries;
49};
50
51#define SDHC_NATIVE_RESPONSE_MASK 0xF
52#define SDHC_SPI_RESPONSE_TYPE_MASK 0xF0
53
60struct sdhc_data {
61 unsigned int block_addr;
62 unsigned int block_size;
63 unsigned int blocks;
64 unsigned int bytes_xfered;
65 void *data;
67};
68
79};
80
91};
92
103};
104
115 SDHC_TIMING_HS = 2U,
131 SDHC_TIMING_HS400 = 10U,
133};
134
143 SD_VOL_3_3_V = 1U,
145 SD_VOL_3_0_V = 2U,
147 SD_VOL_1_8_V = 3U,
149 SD_VOL_1_2_V = 4U,
151};
152
160 unsigned int timeout_clk_freq: 5;
161 unsigned int _rsvd_6: 1;
162 unsigned int timeout_clk_unit: 1;
163 unsigned int sd_base_clk: 8;
164 unsigned int max_blk_len: 2;
165 unsigned int bus_8_bit_support: 1;
166 unsigned int adma_2_support: 1;
167 unsigned int _rsvd_20: 1;
168 unsigned int high_spd_support: 1;
169 unsigned int sdma_support: 1;
170 unsigned int suspend_res_support: 1;
171 unsigned int vol_330_support: 1;
172 unsigned int vol_300_support: 1;
173 unsigned int vol_180_support: 1;
177 unsigned int slot_type: 2;
178 unsigned int sdr50_support: 1;
179 unsigned int sdr104_support: 1;
180 unsigned int ddr50_support: 1;
181 unsigned int uhs_2_support: 1;
182 unsigned int drv_type_a_support: 1;
183 unsigned int drv_type_c_support: 1;
184 unsigned int drv_type_d_support: 1;
185 unsigned int _rsvd_39: 1;
186 unsigned int retune_timer_count: 4;
187 unsigned int sdr50_needs_tuning: 1;
188 unsigned int retuning_mode: 2;
189 unsigned int clk_multiplier: 8;
190 unsigned int _rsvd_56: 3;
191 unsigned int adma3_support: 1;
192 unsigned int vdd2_180_support: 1;
193 unsigned int _rsvd_61: 3;
194};
195
203struct sdhc_io {
211};
212
219 unsigned int f_max;
220 unsigned int f_min;
221 unsigned int power_delay;
226 bool is_spi;
227};
228
229__subsystem struct sdhc_driver_api {
230 int (*reset)(const struct device *dev);
231 int (*request)(const struct device *dev,
232 struct sdhc_command *cmd,
233 struct sdhc_data *data);
234 int (*set_io)(const struct device *dev, struct sdhc_io *ios);
235 int (*get_card_present)(const struct device *dev);
236 int (*execute_tuning)(const struct device *dev);
237 int (*card_busy)(const struct device *dev);
238 int (*get_host_props)(const struct device *dev,
239 struct sdhc_host_props *props);
240};
241
254__syscall int sdhc_hw_reset(const struct device *dev);
255
256static inline int z_impl_sdhc_hw_reset(const struct device *dev)
257{
258 const struct sdhc_driver_api *api =
259 (const struct sdhc_driver_api *)dev->api;
260
261 if (!api->reset) {
262 return -ENOSYS;
263 }
264
265 return api->reset(dev);
266}
267
268
282__syscall int sdhc_request(const struct device *dev, struct sdhc_command *cmd,
283 struct sdhc_data *data);
284
285static inline int z_impl_sdhc_request(const struct device *dev,
286 struct sdhc_command *cmd, struct sdhc_data *data)
287{
288 const struct sdhc_driver_api *api =
289 (const struct sdhc_driver_api *)dev->api;
290
291 if (!api->request) {
292 return -ENOSYS;
293 }
294
295 return api->request(dev, cmd, data);
296}
297
310__syscall int sdhc_set_io(const struct device *dev, struct sdhc_io *io);
311
312static inline int z_impl_sdhc_set_io(const struct device *dev,
313 struct sdhc_io *io)
314{
315 const struct sdhc_driver_api *api =
316 (const struct sdhc_driver_api *)dev->api;
317
318 if (!api->set_io) {
319 return -ENOSYS;
320 }
321
322 return api->set_io(dev, io);
323}
324
336__syscall int sdhc_card_present(const struct device *dev);
337
338static inline int z_impl_sdhc_card_present(const struct device *dev)
339{
340 const struct sdhc_driver_api *api =
341 (const struct sdhc_driver_api *)dev->api;
342
343 if (!api->get_card_present) {
344 return -ENOSYS;
345 }
346
347 return api->get_card_present(dev);
348}
349
350
362__syscall int sdhc_execute_tuning(const struct device *dev);
363
364static inline int z_impl_sdhc_execute_tuning(const struct device *dev)
365{
366 const struct sdhc_driver_api *api =
367 (const struct sdhc_driver_api *)dev->api;
368
369 if (!api->execute_tuning) {
370 return -ENOSYS;
371 }
372
373 return api->execute_tuning(dev);
374}
375
387__syscall int sdhc_card_busy(const struct device *dev);
388
389static inline int z_impl_sdhc_card_busy(const struct device *dev)
390{
391 const struct sdhc_driver_api *api =
392 (const struct sdhc_driver_api *)dev->api;
393
394 if (!api->card_busy) {
395 return -ENOSYS;
396 }
397
398 return api->card_busy(dev);
399}
400
401
412__syscall int sdhc_get_host_props(const struct device *dev,
413 struct sdhc_host_props *props);
414
415static inline int z_impl_sdhc_get_host_props(const struct device *dev,
416 struct sdhc_host_props *props)
417{
418 const struct sdhc_driver_api *api =
419 (const struct sdhc_driver_api *)dev->api;
420
421 if (!api->get_host_props) {
422 return -ENOSYS;
423 }
424
425 return api->get_host_props(dev, props);
426}
427
432#ifdef __cplusplus
433}
434#endif
435
436#include <syscalls/sdhc.h>
437#endif /* ZEPHYR_INCLUDE_DRIVERS_SDHC_H_ */
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:142
sdhc_timing_mode
SD host controller timing mode.
Definition: sdhc.h:112
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:88
int sdhc_hw_reset(const struct device *dev)
reset SDHC controller state
sdhc_bus_width
SD host controller bus width.
Definition: sdhc.h:99
sdhc_bus_mode
SD bus mode.
Definition: sdhc.h:76
@ SD_VOL_3_3_V
Definition: sdhc.h:143
@ SD_VOL_1_2_V
Definition: sdhc.h:149
@ SD_VOL_3_0_V
Definition: sdhc.h:145
@ SD_VOL_1_8_V
Definition: sdhc.h:147
@ SDHC_TIMING_HS400
Definition: sdhc.h:131
@ SDHC_TIMING_DDR52
Definition: sdhc.h:127
@ SDHC_TIMING_SDR50
Definition: sdhc.h:121
@ SDHC_TIMING_LEGACY
Definition: sdhc.h:113
@ SDHC_TIMING_SDR25
Definition: sdhc.h:119
@ SDHC_TIMING_SDR12
Definition: sdhc.h:117
@ SDHC_TIMING_SDR104
Definition: sdhc.h:123
@ SDHC_TIMING_HS200
Definition: sdhc.h:129
@ SDHC_TIMING_HS
Definition: sdhc.h:115
@ SDHC_TIMING_DDR50
Definition: sdhc.h:125
@ SDHC_POWER_OFF
Definition: sdhc.h:89
@ SDHC_POWER_ON
Definition: sdhc.h:90
@ SDHC_BUS_WIDTH8BIT
Definition: sdhc.h:102
@ SDHC_BUS_WIDTH4BIT
Definition: sdhc.h:101
@ SDHC_BUS_WIDTH1BIT
Definition: sdhc.h:100
@ SDHC_BUSMODE_OPENDRAIN
Definition: sdhc.h:77
@ SDHC_BUSMODE_PUSHPULL
Definition: sdhc.h:78
#define ENOSYS
Definition: errno.h:83
sd_driver_type
SD driver types.
Definition: sd_spec.h:436
sdhc_clock_speed
SD host controller clock speed.
Definition: sd_spec.h:390
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
Runtime device structure (in ROM) per driver instance.
Definition: device.h:435
const void * api
Definition: device.h:441
SD host controller command structure.
Definition: sdhc.h:42
uint32_t opcode
Definition: sdhc.h:43
uint32_t response[4]
Definition: sdhc.h:45
unsigned int retries
Definition: sdhc.h:47
int timeout_ms
Definition: sdhc.h:48
uint32_t arg
Definition: sdhc.h:44
uint32_t response_type
Definition: sdhc.h:46
SD host controller data structure.
Definition: sdhc.h:60
void * data
Definition: sdhc.h:65
unsigned int block_size
Definition: sdhc.h:62
unsigned int blocks
Definition: sdhc.h:63
unsigned int block_addr
Definition: sdhc.h:61
unsigned int bytes_xfered
Definition: sdhc.h:64
int timeout_ms
Definition: sdhc.h:66
Definition: sdhc.h:229
int(* get_card_present)(const struct device *dev)
Definition: sdhc.h:235
int(* request)(const struct device *dev, struct sdhc_command *cmd, struct sdhc_data *data)
Definition: sdhc.h:231
int(* execute_tuning)(const struct device *dev)
Definition: sdhc.h:236
int(* reset)(const struct device *dev)
Definition: sdhc.h:230
int(* card_busy)(const struct device *dev)
Definition: sdhc.h:237
int(* set_io)(const struct device *dev, struct sdhc_io *ios)
Definition: sdhc.h:234
int(* get_host_props)(const struct device *dev, struct sdhc_host_props *props)
Definition: sdhc.h:238
SD host controller capabilities.
Definition: sdhc.h:159
unsigned int address_64_bit_support_v3
Definition: sdhc.h:175
unsigned int uhs_2_support
Definition: sdhc.h:181
unsigned int sd_base_clk
Definition: sdhc.h:163
unsigned int sdma_support
Definition: sdhc.h:169
unsigned int vdd2_180_support
Definition: sdhc.h:192
unsigned int slot_type
Definition: sdhc.h:177
unsigned int timeout_clk_freq
Definition: sdhc.h:160
unsigned int sdr104_support
Definition: sdhc.h:179
unsigned int drv_type_a_support
Definition: sdhc.h:182
unsigned int retuning_mode
Definition: sdhc.h:188
unsigned int sdr50_support
Definition: sdhc.h:178
unsigned int sdio_async_interrupt_support
Definition: sdhc.h:176
unsigned int vol_300_support
Definition: sdhc.h:172
unsigned int timeout_clk_unit
Definition: sdhc.h:162
unsigned int adma3_support
Definition: sdhc.h:191
unsigned int max_blk_len
Definition: sdhc.h:164
unsigned int ddr50_support
Definition: sdhc.h:180
unsigned int vol_180_support
Definition: sdhc.h:173
unsigned int high_spd_support
Definition: sdhc.h:168
unsigned int drv_type_c_support
Definition: sdhc.h:183
unsigned int retune_timer_count
Definition: sdhc.h:186
unsigned int sdr50_needs_tuning
Definition: sdhc.h:187
unsigned int vol_330_support
Definition: sdhc.h:171
unsigned int adma_2_support
Definition: sdhc.h:166
unsigned int bus_8_bit_support
Definition: sdhc.h:165
unsigned int drv_type_d_support
Definition: sdhc.h:184
unsigned int address_64_bit_support_v4
Definition: sdhc.h:174
unsigned int suspend_res_support
Definition: sdhc.h:170
unsigned int clk_multiplier
Definition: sdhc.h:189
SD host controller properties.
Definition: sdhc.h:218
unsigned int f_min
Definition: sdhc.h:220
uint32_t max_current_180
Definition: sdhc.h:225
unsigned int power_delay
Definition: sdhc.h:221
bool is_spi
Definition: sdhc.h:226
uint32_t max_current_300
Definition: sdhc.h:224
struct sdhc_host_caps host_caps
Definition: sdhc.h:222
unsigned int f_max
Definition: sdhc.h:219
uint32_t max_current_330
Definition: sdhc.h:223
SD host controller I/O control structure.
Definition: sdhc.h:203
enum sd_driver_type driver_type
Definition: sdhc.h:209
enum sdhc_bus_mode bus_mode
Definition: sdhc.h:205
enum sdhc_timing_mode timing
Definition: sdhc.h:208
enum sdhc_bus_width bus_width
Definition: sdhc.h:207
enum sdhc_clock_speed clock
Definition: sdhc.h:204
enum sdhc_power power_mode
Definition: sdhc.h:206
enum sd_voltage signal_voltage
Definition: sdhc.h:210
static fdata_t data[2]
Definition: test_fifo_contexts.c:15