Skip to content

Commit c6498b5

Browse files
authored
[sdio][dm] update for DM (#11078)
* [sdio][dm] import Kconfig for DM Signed-off-by: GuEe-GUI <[email protected]> * [sdio] fixup IRQ and mmcsd threads' stack size default Signed-off-by: GuEe-GUI <[email protected]> * [sdio][dm] Support DM mode 1. Support features read by DM. 2. Support regulator API in drivers. 3. Support send tuning option CMD. 4. Replace `switch_uhs_voltage` by `signal_voltage_switch`. Signed-off-by: GuEe-GUI <[email protected]> * [dm][sdhci] Cleanup the SDHCI Signed-off-by: GuEe-GUI <[email protected]> * [sdio][dm] add new SDIO/SDHCI drivers 1. SDHCI support on PCI bus 2. Synopsys DesignWare MMC Family(MMIO/PCI) Signed-off-by: GuEe-GUI <[email protected]> --------- Signed-off-by: GuEe-GUI <[email protected]>
1 parent 71d802c commit c6498b5

29 files changed

+7108
-1810
lines changed

bsp/hpmicro/libraries/drivers/drv_sdio.c

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ static hpm_stat_t hpm_sdmmc_transfer_polling(struct hpm_mmcsd *mmcsd, sdxc_adma_
9797
static hpm_stat_t hpm_sdmmc_transfer_interrupt_driven(struct hpm_mmcsd *mmcsd, sdxc_adma_config_t *dma_config, sdxc_xfer_t *xfer);
9898
static hpm_stat_t hpm_sdmmc_transfer(struct hpm_mmcsd *mmcsd, sdxc_adma_config_t *dma_config, sdxc_xfer_t *xfer);
9999
static rt_int32_t hpm_sdmmc_execute_tuning(struct rt_mmcsd_host *host, rt_int32_t opcode);
100-
static rt_int32_t hpm_sdmmc_switch_uhs_voltage(struct rt_mmcsd_host *host);
100+
static rt_err_t hpm_sdmmc_signal_voltage_switch(struct rt_mmcsd_host *host, struct rt_mmcsd_io_cfg *io_cfg);
101101

102102
static void hpm_sdmmc_power_on_via_pin(struct hpm_mmcsd *mmcsd);
103103
static void hpm_sdmmc_power_off_via_pin(struct hpm_mmcsd *mmcsd);
@@ -152,7 +152,7 @@ static void hpm_sdmmc_switch_to_1v8_via_pin(struct hpm_mmcsd *mmcsd)
152152
}
153153

154154

155-
static rt_int32_t hpm_sdmmc_switch_uhs_voltage(struct rt_mmcsd_host *host)
155+
static rt_err_t hpm_sdmmc_signal_voltage_switch(struct rt_mmcsd_host *host, struct rt_mmcsd_io_cfg *io_cfg)
156156
{
157157
struct hpm_mmcsd *mmcsd = (struct hpm_mmcsd *) host->private_data;
158158
SDXC_Type *base = mmcsd->sdxc_base;
@@ -174,9 +174,17 @@ static rt_int32_t hpm_sdmmc_switch_uhs_voltage(struct rt_mmcsd_host *host)
174174
return -RT_ETIMEOUT;
175175
}
176176

177-
/* 3. Switch to 1.8V */
178-
hpm_sdmmc_switch_to_1v8_via_pin(mmcsd);
179-
sdxc_select_voltage(mmcsd->sdxc_base, sdxc_bus_voltage_sd_1v8);
177+
/* 3. Switch to 1.8V/3.3V */
178+
if (ios->signal_voltage == MMCSD_SIGNAL_VOLTAGE_330)
179+
{
180+
hpm_sdmmc_switch_to_3v3_via_pin(mmcsd);
181+
sdxc_select_voltage(mmcsd->sdxc_base, sdxc_bus_voltage_sd_3v3);
182+
}
183+
else
184+
{
185+
hpm_sdmmc_switch_to_1v8_via_pin(mmcsd);
186+
sdxc_select_voltage(mmcsd->sdxc_base, sdxc_bus_voltage_sd_1v8);
187+
}
180188

181189
/* 4. spec:host delay 5ms, host: give more delay time here */
182190
rt_thread_mdelay(10);
@@ -213,7 +221,7 @@ static const struct rt_mmcsd_host_ops hpm_mmcsd_host_ops =
213221
.get_card_status = NULL,
214222
.enable_sdio_irq = hpm_sdmmc_enable_sdio_irq,
215223
.execute_tuning = hpm_sdmmc_execute_tuning,
216-
.switch_uhs_voltage = hpm_sdmmc_switch_uhs_voltage,
224+
.signal_voltage_switch = hpm_sdmmc_signal_voltage_switch,
217225
};
218226

219227
void hpm_sdmmc_isr(struct hpm_mmcsd *mmcsd)

components/drivers/include/drivers/dev_mmcsd_core.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,12 @@ void mmcsd_set_bus_width(struct rt_mmcsd_host *host, rt_uint32_t width);
242242
void mmcsd_set_timing(struct rt_mmcsd_host *host, rt_uint32_t timing);
243243
void mmcsd_set_data_timeout(struct rt_mmcsd_data *data, const struct rt_mmcsd_card *card);
244244
rt_uint32_t mmcsd_select_voltage(struct rt_mmcsd_host *host, rt_uint32_t ocr);
245+
rt_err_t mmcsd_set_signal_voltage(struct rt_mmcsd_host *host, unsigned char signal_voltage);
246+
void mmcsd_set_initial_signal_voltage(struct rt_mmcsd_host *host);
247+
rt_err_t mmcsd_host_set_uhs_voltage(struct rt_mmcsd_host *host);
248+
rt_err_t mmcsd_set_uhs_voltage(struct rt_mmcsd_host *host, rt_uint32_t ocr);
249+
rt_err_t mmcsd_send_tuning(struct rt_mmcsd_host *host, rt_uint32_t opcode, rt_err_t *cmd_error);
250+
rt_err_t mmcsd_send_abort_tuning(struct rt_mmcsd_host *host, rt_uint32_t opcode);
245251
void mmcsd_change(struct rt_mmcsd_host *host);
246252
void mmcsd_detect(void *param);
247253
void mmcsd_host_init(struct rt_mmcsd_host *host);

0 commit comments

Comments
 (0)