79 lines
1.9 KiB
C
79 lines
1.9 KiB
C
|
#ifndef ARCH_SDMMC_H
|
||
|
#define ARCH_SDMMC_H
|
||
|
|
||
|
|
||
|
#include "device/sdmmc.h"
|
||
|
|
||
|
struct sdmmc_platform_data {
|
||
|
char port;
|
||
|
u8 irq;
|
||
|
u8 data_width;
|
||
|
u8 priority;
|
||
|
u8 detect_mode;
|
||
|
u8 detect_io;
|
||
|
u8 detect_io_level;
|
||
|
u32 detect_time_interval;
|
||
|
u32 detect_timeout;
|
||
|
u32 speed;
|
||
|
volatile u16 *sfr;
|
||
|
int (*detect_func)(const struct sdmmc_platform_data *);
|
||
|
void (*port_init)(const struct sdmmc_platform_data *, int mode);
|
||
|
void (*power)(int on);
|
||
|
};
|
||
|
|
||
|
#define SD0_PLATFORM_DATA_BEGIN(data) \
|
||
|
static const struct sdmmc_platform_data data = {
|
||
|
|
||
|
|
||
|
#define SD0_PLATFORM_DATA_END() \
|
||
|
.irq = IRQ_SD0_IDX, \
|
||
|
.sfr = (volatile u16 *)JL_SD0, \
|
||
|
.port_init = sdmmc_0_port_init, \
|
||
|
.detect_time_interval = 250, \
|
||
|
.detect_timeout = 1000, \
|
||
|
};
|
||
|
|
||
|
extern const struct device_operations sd0_dev_ops;
|
||
|
|
||
|
extern void sdmmc_0_port_init(const struct sdmmc_platform_data *, int mode);
|
||
|
extern int sdmmc_0_clk_detect(const struct sdmmc_platform_data *);
|
||
|
extern int sdmmc_0_io_detect(const struct sdmmc_platform_data *);
|
||
|
|
||
|
extern int sdmmc_cmd_detect(const struct sdmmc_platform_data *);
|
||
|
|
||
|
extern void sd_set_power(u8 enable);
|
||
|
|
||
|
|
||
|
#define SD1_PLATFORM_DATA_BEGIN(data) \
|
||
|
static const struct sdmmc_platform_data data = {
|
||
|
|
||
|
|
||
|
#define SD1_PLATFORM_DATA_END() \
|
||
|
.irq = IRQ_SD0_IDX, \
|
||
|
.sfr = (volatile u16 *)JL_SD0, \
|
||
|
.port_init = sdmmc_0_port_init, \
|
||
|
.detect_time_interval = 250, \
|
||
|
.detect_timeout = 1000, \
|
||
|
};
|
||
|
|
||
|
extern const struct device_operations sd_dev_ops;
|
||
|
|
||
|
extern void sdmmc_1_port_init(const struct sdmmc_platform_data *, int mode);
|
||
|
extern int sdmmc_1_clk_detect(const struct sdmmc_platform_data *);
|
||
|
extern int sdmmc_1_io_detect(const struct sdmmc_platform_data *);
|
||
|
|
||
|
|
||
|
|
||
|
extern void sdmmc_2_port_init(const struct sdmmc_platform_data *, int mode);
|
||
|
extern int sdmmc_2_clk_detect(const struct sdmmc_platform_data *);
|
||
|
|
||
|
extern u8 sd_io_suspend(u8 sdx, u8 sd_io);
|
||
|
extern u8 sd_io_resume(u8 sdx, u8 sd_io);
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
#endif
|
||
|
|