1 /*
2  * Copyright (c) 2006-2024 RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author        Notes
8  * 2024-08-16     zhujiale     first version
9  */
10 
11 #ifndef _DRIVERS_MMC_RT_SDHCI_PLTFM_H
12 #define _DRIVERS_MMC_RT_SDHCI_PLTFM_H
13 #include <rtthread.h>
14 #include <drivers/core/dm.h>
15 #include <drivers/ofw.h>
16 #include <drivers/platform.h>
17 #include <drivers/clk.h>
18 #include "sdhci.h"
19 
20 struct rt_sdhci_pltfm_data
21 {
22     const struct rt_sdhci_ops *ops;
23     unsigned int            quirks;
24     unsigned int            quirks2;
25 };
26 
27 struct rt_sdhci_pltfm_host
28 {
29     struct rt_clk *clk;
30     unsigned int clock;
31     rt_uint64_t  xfer_mode_shadow;
32 
33     unsigned long private[];
34 };
35 void            rt_sdhci_get_property(struct rt_platform_device *pdev);
36 
sdhci_get_of_property(struct rt_platform_device * pdev)37 static inline void sdhci_get_of_property(struct rt_platform_device *pdev)
38 {
39     return rt_sdhci_get_property(pdev);
40 }
41 extern struct   rt_sdhci_host *rt_sdhci_pltfm_init(struct rt_platform_device     *pdev,
42                                            const struct rt_sdhci_pltfm_data *pdata,
43                                            size_t                         priv_size);
44 extern void               rt_sdhci_pltfm_free(struct rt_platform_device *pdev);
45 
46 extern int      rt_sdhci_pltfm_init_and_add_host(struct rt_platform_device     *pdev,
47                                           const struct rt_sdhci_pltfm_data *pdata,
48                                           size_t                         priv_size);
49 extern void     rt_sdhci_pltfm_remove(struct rt_platform_device *pdev);
50 
51 extern unsigned int rt_sdhci_pltfm_clk_get_max_clock(struct rt_sdhci_host *host);
52 
sdhci_pltfm_priv(struct rt_sdhci_pltfm_host * host)53 static inline void *sdhci_pltfm_priv(struct rt_sdhci_pltfm_host *host)
54 {
55     return host->private;
56 }
57 
sdhci_pltfm_suspend(struct rt_device * dev)58 static inline int sdhci_pltfm_suspend(struct rt_device *dev)
59 {
60     return 0;
61 }
sdhci_pltfm_resume(struct rt_device * dev)62 static inline int sdhci_pltfm_resume(struct rt_device *dev)
63 {
64     return 0;
65 }
66 #endif
67