1 /*
2  * Copyright (c) 2006-2021, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2013-11-06     xiaonong      first version.
9  */
10 
11 #ifndef __DRV_SD_H
12 #define __DRV_SD_H
13 
14 #include <stdint.h>
15 #include <rtthread.h>
16 #include <LPC54608.h>
17 #include "fsl_card.h"
18 #include "fsl_iocon.h"
19 #include <rtdevice.h>
20 
21 #define IOCON_PIO_DIGITAL_EN        0x0100u   /*!< Enables digital function */
22 #define IOCON_PIO_FUNC1               0x01u   /*!< Selects pin function 1 */
23 #define IOCON_PIO_FUNC2               0x02u   /*!< Selects pin function 2 */
24 #define IOCON_PIO_INPFILT_OFF       0x0200u   /*!< Input filter disabled */
25 #define IOCON_PIO_INV_DI              0x00u   /*!< Input function is not inverted */
26 #define IOCON_PIO_MODE_INACT          0x00u   /*!< No addition pin function */
27 #define IOCON_PIO_MODE_PULLUP         0x20u   /*!< Selects pull-up function */
28 #define IOCON_PIO_OPENDRAIN_DI        0x00u   /*!< Open drain is disabled */
29 #define IOCON_PIO_SLEW_FAST         0x0400u   /*!< Fast mode, slew rate control is disabled */
30 #define IOCON_PIO_SLEW_STANDARD       0x00u   /*!< Standard mode, output slew rate control is enabled */
31 #define PIN3_IDX                         3u   /*!< Pin number for pin 3 in a port 2 */
32 #define PIN4_IDX                         4u   /*!< Pin number for pin 4 in a port 2 */
33 #define PIN5_IDX                         5u   /*!< Pin number for pin 5 in a port 2 */
34 #define PIN6_IDX                         6u   /*!< Pin number for pin 6 in a port 2 */
35 #define PIN7_IDX                         7u   /*!< Pin number for pin 7 in a port 2 */
36 #define PIN8_IDX                         8u   /*!< Pin number for pin 8 in a port 2 */
37 #define PIN9_IDX                         9u   /*!< Pin number for pin 9 in a port 2 */
38 #define PIN10_IDX                       10u   /*!< Pin number for pin 10 in a port 2 */
39 #define PIN15_IDX                       15u   /*!< Pin number for pin 15 in a port 3 */
40 #define PIN27_IDX                       27u   /*!< Pin number for pin 27 in a port 1 */
41 #define PIN28_IDX                       28u   /*!< Pin number for pin 28 in a port 1 */
42 #define PIN29_IDX                       29u   /*!< Pin number for pin 29 in a port 0 */
43 #define PIN30_IDX                       30u   /*!< Pin number for pin 30 in a port 0 */
44 #define PORT0_IDX                        0u   /*!< Port index */
45 #define PORT1_IDX                        1u   /*!< Port index */
46 #define PORT2_IDX                        2u   /*!< Port index */
47 #define PORT3_IDX                        3u   /*!< Port index */
48 
49 struct mci_device
50 {
51     struct rt_device                parent;      /**< RT-Thread device struct */
52     struct rt_device_blk_geometry   geometry;    /**< sector size, sector count */
53     sd_card_t                       card;        /**< Card descriptor */
54     rt_event_t finish_event;                     /**< data send finish event*/
55     rt_bool_t data_error;                        /**< data send error*/
56     struct rt_mutex lock;
57 };
58 
59 extern rt_err_t mci_hw_init(const char *device_name);
60 
61 #endif // __DRV_SD_H
62