Home
last modified time | relevance | path

Searched refs:mmc (Results 1 – 25 of 775) sorted by relevance

12345678910>>...31

/linux/drivers/mmc/host/
H A Dmeson-mx-sdhc-mmc.c38 void (*init_hw)(struct mmc_host *mmc);
39 void (*set_pdma)(struct mmc_host *mmc);
40 void (*wait_before_send)(struct mmc_host *mmc);
45 struct mmc_host *mmc; member
80 static void meson_mx_sdhc_clear_fifo(struct mmc_host *mmc) in meson_mx_sdhc_clear_fifo() argument
82 struct meson_mx_sdhc_host *host = mmc_priv(mmc); in meson_mx_sdhc_clear_fifo()
97 dev_warn(mmc_dev(host->mmc), in meson_mx_sdhc_clear_fifo()
103 static void meson_mx_sdhc_wait_cmd_ready(struct mmc_host *mmc) in meson_mx_sdhc_wait_cmd_ready() argument
105 struct meson_mx_sdhc_host *host = mmc_priv(mmc); in meson_mx_sdhc_wait_cmd_ready()
114 dev_warn(mmc_dev(mmc), in meson_mx_sdhc_wait_cmd_ready()
[all …]
H A Dmmc_hsq.c19 struct mmc_host *mmc = hsq->mmc; in mmc_hsq_retry_handler() local
21 mmc->ops->request(mmc, hsq->mrq); in mmc_hsq_retry_handler()
26 struct mmc_host *mmc = hsq->mmc; in mmc_hsq_modify_threshold() local
30 mmc->hsq_depth = HSQ_NORMAL_DEPTH; in mmc_hsq_modify_threshold()
37 mmc->hsq_depth = HSQ_PERFORMANCE_DEPTH; in mmc_hsq_modify_threshold()
45 struct mmc_host *mmc = hsq->mmc; in mmc_hsq_pump_requests() local
72 if (mmc->ops->request_atomic) in mmc_hsq_pump_requests()
73 ret = mmc->ops->request_atomic(mmc, hsq->mrq); in mmc_hsq_pump_requests()
75 mmc->ops->request(mmc, hsq->mrq); in mmc_hsq_pump_requests()
153 bool mmc_hsq_finalize_request(struct mmc_host *mmc, struct mmc_request *mrq) in mmc_hsq_finalize_request() argument
[all …]
H A Dcqhci-core.c55 return cq_host->trans_desc_len * cq_host->mmc->max_segs * tag; in get_trans_desc_offset()
84 if (tag == DCMD_SLOT && (cq_host->mmc->caps2 & MMC_CAP2_CQE_DCMD)) { in setup_trans_desc()
111 pr_err("%s: " DRV_NAME ": " f, mmc_hostname(mmc), ## x)
115 struct mmc_host *mmc = cq_host->mmc; in cqhci_dumpregs() local
154 cq_host->ops->dumpregs(mmc); in cqhci_dumpregs()
208 cq_host->data_size = get_trans_desc_offset(cq_host, cq_host->mmc->cqe_qdepth); in cqhci_host_alloc_tdl()
211 mmc_hostname(cq_host->mmc), cq_host->desc_size, cq_host->data_size, in cqhci_host_alloc_tdl()
220 cq_host->desc_base = dmam_alloc_coherent(mmc_dev(cq_host->mmc), in cqhci_host_alloc_tdl()
227 cq_host->trans_desc_base = dmam_alloc_coherent(mmc_dev(cq_host->mmc), in cqhci_host_alloc_tdl()
232 dmam_free_coherent(mmc_dev(cq_host->mmc), cq_host->desc_size, in cqhci_host_alloc_tdl()
[all …]
H A Dsdhci.c40 pr_debug("%s: " DRIVER_NAME ": " f, mmc_hostname(host->mmc), ## x)
43 pr_err("%s: " DRIVER_NAME ": " f, mmc_hostname(host->mmc), ## x)
161 !mmc_card_is_removable(host->mmc) || mmc_host_can_gpio_cd(host->mmc)) in sdhci_set_card_detection()
193 pm_runtime_get_noresume(mmc_dev(host->mmc)); in sdhci_runtime_pm_bus_on()
201 pm_runtime_put_noidle(mmc_dev(host->mmc)); in sdhci_runtime_pm_bus_off()
228 mmc_hostname(host->mmc), (int)mask); in sdhci_reset()
241 struct mmc_host *mmc = host->mmc; in sdhci_do_reset() local
243 if (!mmc->ops->get_cd(mmc)) in sdhci_do_reset()
364 struct mmc_host *mmc = host->mmc; in sdhci_init() local
385 mmc->ops->set_ios(mmc, &mmc->ios); in sdhci_init()
[all …]
H A Dpxamci.c50 struct mmc_host *mmc; member
78 struct mmc_host *mmc = host->mmc; in pxamci_init_ocr() local
81 ret = mmc_regulator_get_supply(mmc); in pxamci_init_ocr()
85 if (IS_ERR(mmc->supply.vmmc)) { in pxamci_init_ocr()
87 mmc->ocr_avail = host->pdata ? in pxamci_init_ocr()
99 struct mmc_host *mmc = host->mmc; in pxamci_set_power() local
100 struct regulator *supply = mmc->supply.vmmc; in pxamci_set_power()
103 return mmc_regulator_set_ocr(mmc, supply, vdd); in pxamci_set_power()
111 return host->pdata->setpower(mmc_dev(host->mmc), vdd); in pxamci_set_power()
132 dev_err(mmc_dev(host->mmc), "unable to stop clock\n"); in pxamci_stop_clock()
[all …]
H A Dmxcmmc.c120 struct mmc_host *mmc; member
221 if (!IS_ERR(host->mmc->supply.vmmc)) { in mxcmci_set_power()
223 mmc_regulator_set_ocr(host->mmc, in mxcmci_set_power()
224 host->mmc->supply.vmmc, vdd); in mxcmci_set_power()
226 mmc_regulator_set_ocr(host->mmc, in mxcmci_set_power()
227 host->mmc->supply.vmmc, 0); in mxcmci_set_power()
231 host->pdata->setpower(mmc_dev(host->mmc), vdd); in mxcmci_set_power()
243 dev_dbg(mmc_dev(host->mmc), "mxcmci_softreset\n"); in mxcmci_softreset()
359 dev_dbg(mmc_dev(host->mmc), "%s: 0x%08x\n", __func__, stat); in mxcmci_dma_callback()
387 dev_err(mmc_dev(host->mmc), "unhandled response type 0x%x\n", in mxcmci_start_cmd()
[all …]
H A Dlitex_mmc.c77 struct mmc_host *mmc; member
126 struct device *dev = mmc_dev(host->mmc); in litex_mmc_send_cmd()
235 static int litex_mmc_get_cd(struct mmc_host *mmc) in litex_mmc_get_cd() argument
237 struct litex_mmc_host *host = mmc_priv(mmc); in litex_mmc_get_cd()
240 if (!mmc_card_is_removable(mmc)) in litex_mmc_get_cd()
255 struct mmc_host *mmc = arg; in litex_mmc_interrupt() local
256 struct litex_mmc_host *host = mmc_priv(mmc); in litex_mmc_interrupt()
264 mmc_detect_change(mmc, msecs_to_jiffies(10)); in litex_mmc_interrupt()
294 struct device *dev = mmc_dev(host->mmc); in litex_mmc_do_dma()
338 static void litex_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq) in litex_mmc_request() argument
[all …]
H A Dsdhci-brcmstb.c68 void (*hs400es)(struct mmc_host *mmc, struct mmc_ios *ios);
69 void (*save_restore_regs)(struct mmc_host *mmc, int save);
84 static void sdhci_brcmstb_save_regs(struct mmc_host *mmc, enum cfg_core_ver ver) in sdhci_brcmstb_save_regs() argument
86 struct sdhci_host *host = mmc_priv(mmc); in sdhci_brcmstb_save_regs()
91 bool is_emmc = mmc->caps & MMC_CAP_NONREMOVABLE; in sdhci_brcmstb_save_regs()
106 static void sdhci_brcmstb_restore_regs(struct mmc_host *mmc, enum cfg_core_ver ver) in sdhci_brcmstb_restore_regs() argument
108 struct sdhci_host *host = mmc_priv(mmc); in sdhci_brcmstb_restore_regs()
113 bool is_emmc = mmc->caps & MMC_CAP_NONREMOVABLE; in sdhci_brcmstb_restore_regs()
128 static void sdhci_brcmstb_save_restore_regs_v1(struct mmc_host *mmc, int save) in sdhci_brcmstb_save_restore_regs_v1() argument
131 sdhci_brcmstb_save_regs(mmc, SDIO_CFG_CORE_V1); in sdhci_brcmstb_save_restore_regs_v1()
[all …]
H A Dusdhi6rol0.c159 struct mmc_host *mmc; member
212 dev_vdbg(mmc_dev(host->mmc), "%s(0x%p + 0x%x) = 0x%x\n", __func__, in usdhi6_write()
219 dev_vdbg(mmc_dev(host->mmc), "%s(0x%p + 0x%x) = 0x%x\n", __func__, in usdhi6_write16()
226 dev_vdbg(mmc_dev(host->mmc), "%s(0x%p + 0x%x) = 0x%x\n", __func__, in usdhi6_read()
234 dev_vdbg(mmc_dev(host->mmc), "%s(0x%p + 0x%x) = 0x%x\n", __func__, in usdhi6_read16()
286 dev_dbg(mmc_dev(host->mmc), in usdhi6_error_code()
290 dev_warn(mmc_dev(host->mmc), in usdhi6_error_code()
298 dev_warn(mmc_dev(host->mmc), "Err sts 0x%x, state %u, CMD%d\n", in usdhi6_error_code()
320 dev_dbg(mmc_dev(host->mmc), "%s(): CMD%u of %u SG: %ux%u @ 0x%x\n", in usdhi6_blk_bounce()
387 dev_dbg(mmc_dev(host->mmc), "Mapped %p (%lx) at %p + %u for CMD%u @ 0x%p\n", in usdhi6_sg_map()
[all …]
H A Dmmci_stm32_sdmmc.c85 struct device *dev = mmc_dev(host->mmc); in sdmmc_idma_validate_data()
98 dev_dbg(mmc_dev(host->mmc), in sdmmc_idma_validate_data()
106 dev_dbg(mmc_dev(host->mmc), in sdmmc_idma_validate_data()
117 host->mmc->max_req_size, in sdmmc_idma_validate_data()
147 n_elem = dma_map_sg(mmc_dev(host->mmc), in _sdmmc_idma_prep_data()
153 dev_err(mmc_dev(host->mmc), "dma_map_sg failed\n"); in _sdmmc_idma_prep_data()
183 dma_unmap_sg(mmc_dev(host->mmc), data->sg, data->sg_len, in sdmmc_idma_unprep_data()
191 struct device *dev = mmc_dev(host->mmc); in sdmmc_idma_setup()
206 host->mmc->max_segs = SDMMC_LLI_BUF_LEN / in sdmmc_idma_setup()
208 host->mmc->max_seg_size = host->variant->stm32_idmabsize_mask; in sdmmc_idma_setup()
[all …]
H A Dsdricoh_cs.c80 struct mmc_host *mmc; /* MMC structure */ member
254 static void sdricoh_request(struct mmc_host *mmc, struct mmc_request *mrq) in sdricoh_request() argument
256 struct sdricoh_host *host = mmc_priv(mmc); in sdricoh_request()
331 mmc_request_done(mmc, mrq); in sdricoh_request()
335 static void sdricoh_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) in sdricoh_set_ios() argument
337 struct sdricoh_host *host = mmc_priv(mmc); in sdricoh_set_ios()
356 static int sdricoh_get_ro(struct mmc_host *mmc) in sdricoh_get_ro() argument
358 struct sdricoh_host *host = mmc_priv(mmc); in sdricoh_get_ro()
383 struct mmc_host *mmc; in sdricoh_init_mmc() local
405 mmc = pcmcia_dev->priv = in sdricoh_init_mmc()
[all …]
H A Dushc.c91 struct mmc_host *mmc; member
186 mmc_signal_sdio_irq(ushc->mmc); in int_callback()
190 mmc_detect_change(ushc->mmc, msecs_to_jiffies(100)); in int_callback()
245 mmc_request_done(ushc->mmc, req); in csw_callback()
248 static void ushc_request(struct mmc_host *mmc, struct mmc_request *req) in ushc_request() argument
250 struct ushc_data *ushc = mmc_priv(mmc); in ushc_request()
317 mmc_request_done(mmc, req); in ushc_request()
371 static void ushc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) in ushc_set_ios() argument
373 struct ushc_data *ushc = mmc_priv(mmc); in ushc_set_ios()
380 static int ushc_get_cd(struct mmc_host *mmc) in ushc_get_cd() argument
[all …]
H A Dmmc_spi.c105 struct mmc_host *mmc; member
598 if (host->mmc->use_spi_crc) in mmc_spi_writeblock()
745 if (host->mmc->use_spi_crc) { in mmc_spi_readblock()
897 static void mmc_spi_request(struct mmc_host *mmc, struct mmc_request *mrq) in mmc_spi_request() argument
899 struct mmc_spi_host *host = mmc_priv(mmc); in mmc_spi_request()
926 mmc_request_done(host->mmc, mrq); in mmc_spi_request()
967 mmc_request_done(host->mmc, mrq); in mmc_spi_request()
1033 static void mmc_spi_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) in mmc_spi_set_ios() argument
1035 struct mmc_spi_host *host = mmc_priv(mmc); in mmc_spi_set_ios()
1135 mmc_spi_detect_irq(int irq, void *mmc) in mmc_spi_detect_irq() argument
[all …]
H A Dmoxart-mmc.c132 struct mmc_host *mmc; member
198 dev_err(mmc_dev(host->mmc), "timed out waiting for status\n"); in moxart_wait_for_status()
288 dev_err(mmc_dev(host->mmc), "dma_map_sg returned zero length\n"); in moxart_transfer_dma()
393 static void moxart_request(struct mmc_host *mmc, struct mmc_request *mrq) in moxart_request() argument
395 struct moxart_host *host = mmc_priv(mmc); in moxart_request()
438 dev_err(mmc_dev(host->mmc), "card removed\n"); in moxart_request()
458 mmc_request_done(host->mmc, mrq); in moxart_request()
478 mmc_detect_change(host->mmc, 0); in moxart_irq()
488 static void moxart_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) in moxart_set_ios() argument
490 struct moxart_host *host = mmc_priv(mmc); in moxart_set_ios()
[all …]
H A Dwbsd.c194 pr_err("%s: Resetting chip\n", mmc_hostname(host->mmc)); in wbsd_reset()
229 mmc_request_done(host->mmc, mrq); in wbsd_request_end()
715 mmc_hostname(host->mmc), count); in wbsd_finish_data()
743 static void wbsd_request(struct mmc_host *mmc, struct mmc_request *mrq) in wbsd_request() argument
745 struct wbsd_host *host = mmc_priv(mmc); in wbsd_request()
795 mmc_hostname(host->mmc), cmd->opcode); in wbsd_request()
837 static void wbsd_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) in wbsd_set_ios() argument
839 struct wbsd_host *host = mmc_priv(mmc); in wbsd_set_ios()
910 static int wbsd_get_ro(struct mmc_host *mmc) in wbsd_get_ro() argument
912 struct wbsd_host *host = mmc_priv(mmc); in wbsd_get_ro()
[all …]
H A Dowl-mmc.c115 struct mmc_host *mmc; member
170 mmc_request_done(owl_host->mmc, mrq); in owl_mmc_finish_request()
340 static void owl_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq) in owl_mmc_request() argument
342 struct owl_mmc_host *owl_host = mmc_priv(mmc); in owl_mmc_request()
485 static void owl_mmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) in owl_mmc_set_ios() argument
487 struct owl_mmc_host *owl_host = mmc_priv(mmc); in owl_mmc_set_ios()
533 static int owl_mmc_start_signal_voltage_switch(struct mmc_host *mmc, in owl_mmc_start_signal_voltage_switch() argument
536 struct owl_mmc_host *owl_host = mmc_priv(mmc); in owl_mmc_start_signal_voltage_switch()
566 struct mmc_host *mmc; in owl_mmc_probe() local
570 mmc = devm_mmc_alloc_host(&pdev->dev, sizeof(*owl_host)); in owl_mmc_probe()
[all …]
H A Dsdhci-bcm-kona.c132 ret = mmc_gpio_get_ro(host->mmc); in sdhci_bcm_kona_sd_card_emulate()
153 if (mmc_gpio_get_cd(host->mmc) > 0) { in sdhci_bcm_kona_card_event()
154 dev_dbg(mmc_dev(host->mmc), in sdhci_bcm_kona_card_event()
158 dev_dbg(mmc_dev(host->mmc), in sdhci_bcm_kona_card_event()
225 ret = mmc_of_parse(host->mmc); in sdhci_bcm_kona_probe()
229 if (!host->mmc->f_max) { in sdhci_bcm_kona_probe()
243 ret = clk_set_rate(pltfm_priv->clk, host->mmc->f_max); in sdhci_bcm_kona_probe()
256 mmc_card_is_removable(host->mmc) ? 'N' : 'Y'); in sdhci_bcm_kona_probe()
258 (mmc_gpio_get_cd(host->mmc) != -ENOSYS) ? 'Y' : 'N', in sdhci_bcm_kona_probe()
259 (mmc_gpio_get_ro(host->mmc) != -ENOSYS) ? 'Y' : 'N'); in sdhci_bcm_kona_probe()
[all …]
H A Duniphier-sd.c109 dma_unmap_sg(mmc_dev(host->mmc), host->sg_ptr, host->sg_len, in uniphier_sd_external_dma_callback()
151 sg_len = dma_map_sg(mmc_dev(host->mmc), host->sg_ptr, host->sg_len, in uniphier_sd_external_dma_start()
173 dma_unmap_sg(mmc_dev(host->mmc), host->sg_ptr, host->sg_len, in uniphier_sd_external_dma_start()
190 chan = dma_request_chan(mmc_dev(host->mmc), "rx-tx"); in uniphier_sd_external_dma_request()
192 dev_warn(mmc_dev(host->mmc), in uniphier_sd_external_dma_request()
279 sg_len = dma_map_sg(mmc_dev(host->mmc), sg, 1, priv->dma_dir); in uniphier_sd_internal_dma_start()
349 dma_unmap_sg(mmc_dev(host->mmc), host->sg_ptr, 1, priv->dma_dir); in uniphier_sd_internal_dma_dataend()
366 struct mmc_host *mmc = host->mmc; in uniphier_sd_clk_enable() local
380 if (!mmc->f_max) in uniphier_sd_clk_enable()
381 mmc->f_max = priv->clk_rate; in uniphier_sd_clk_enable()
[all …]
H A Dvub300.c336 struct mmc_host *mmc; member
372 struct mmc_host *mmc = vub300->mmc; in vub300_delete() local
379 mmc_free_host(mmc); in vub300_delete()
520 mmc_detect_change(vub300->mmc, 1); in new_system_port_status()
524 mmc_detect_change(vub300->mmc, 0); in new_system_port_status()
595 mmc_signal_sdio_irq(vub300->mmc); in __vub300_irqpoll_response()
622 mmc_signal_sdio_irq(vub300->mmc); in __vub300_irqpoll_response()
640 mmc_signal_sdio_irq(vub300->mmc); in __vub300_irqpoll_response()
697 mmc_signal_sdio_irq(vub300->mmc); in vub300_pollwork_thread()
727 } else if (vub300->mmc && vub300->mmc->card) { in vub300_deadwork_thread()
[all …]
H A Dsdhci-pci-o2micro.c101 mmc_hostname(host->mmc)); in sdhci_o2_wait_card_detect_stable()
137 mmc_hostname(host->mmc)); in sdhci_o2_enable_internal_clock()
155 static int sdhci_o2_get_cd(struct mmc_host *mmc) in sdhci_o2_get_cd() argument
157 struct sdhci_host *host = mmc_priv(mmc); in sdhci_o2_get_cd()
225 mmc_hostname(host->mmc)); in __sdhci_o2_execute_tuning()
233 mmc_hostname(host->mmc)); in __sdhci_o2_execute_tuning()
279 if (sdhci_o2_get_cd(host->mmc)) { in sdhci_o2_dll_recovery()
292 mmc_hostname(host->mmc), in sdhci_o2_dll_recovery()
297 mmc_hostname(host->mmc)); in sdhci_o2_dll_recovery()
305 mmc_hostname(host->mmc)); in sdhci_o2_dll_recovery()
[all …]
H A Dsdhci-of-sparx5.c64 mmc_hostname(host->mmc), len, &addr); in sdhci_sparx5_adma_write_desc()
80 pr_debug("%s: Set Cacheable = 0x%x\n", mmc_hostname(host->mmc), value); in sparx5_set_cacheable()
92 pr_debug("%s: Set DLY_CC = %u\n", mmc_hostname(host->mmc), value); in sparx5_set_delay()
103 if (!mmc_card_is_removable(host->mmc)) { in sdhci_sparx5_set_emmc()
110 mmc_hostname(host->mmc), value); in sdhci_sparx5_set_emmc()
120 pr_debug("%s: Toggle EMMC_CTRL.EMMC_RST_N\n", mmc_hostname(host->mmc)); in sdhci_sparx5_reset_emmc()
134 pr_debug("%s: *** RESET: mask %d\n", mmc_hostname(host->mmc), mask); in sdhci_sparx5_reset()
198 ret = mmc_of_parse(host->mmc); in sdhci_sparx5_probe()
210 if (!mmc_card_is_removable(host->mmc)) { in sdhci_sparx5_probe()
216 host->mmc->caps2 |= (MMC_CAP2_NO_SDIO|MMC_CAP2_NO_SD); in sdhci_sparx5_probe()
[all …]
H A Dsunplus-mmc.c167 struct mmc_host *mmc; member
234 int f_min = host->mmc->f_min; in spmmc_set_bus_clk()
235 int f_max = host->mmc->f_max; in spmmc_set_bus_clk()
437 count = dma_map_sg(host->mmc->parent, data->sg, data->sg_len, in spmmc_prepare_data()
699 dma_unmap_sg(host->mmc->parent, data->sg, data->sg_len, mmc_get_dma_dir(data)); in spmmc_finish_request()
709 mmc_request_done(host->mmc, mrq); in spmmc_finish_request()
727 static void spmmc_request(struct mmc_host *mmc, struct mmc_request *mrq) in spmmc_request() argument
729 struct spmmc_host *host = mmc_priv(mmc); in spmmc_request()
745 mmc_request_done(host->mmc, mrq); in spmmc_request()
772 static void spmmc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) in spmmc_set_ios() argument
[all …]
/linux/Documentation/devicetree/bindings/mmc/
H A Dcavium-mmc.txt11 cavium,octeon-6130-mmc
12 cavium,octeon-7890-mmc
13 cavium,thunder-8190-mmc
14 cavium,thunder-8390-mmc
15 mmc-slot
16 - reg : mmc controller base registers
20 - for cd, bus-width and additional generic mmc parameters
21 please refer to mmc.txt within this directory
29 - cavium,octeon-6130-mmc-slot : use mmc-slot instead
32 mmc_1_4: mmc@1,4 {
[all …]
H A Dsdhci-st.txt4 Documentation/devicetree/bindings/mmc/mmc.txt and the properties
13 - clock-names: Should be "mmc" and "icn". (NB: The latter is not compulsory)
18 - interrupts: One mmc interrupt should be described here.
31 - reg-names: Should be "mmc" and "top-mmc-delay". "top-mmc-delay" is optional
36 See: Documentation/devicetree/bindings/mmc/mmc.txt.
39 See: Documentation/devicetree/bindings/mmc/mmc.txt.
43 See: Documentation/devicetree/bindings/mmc/mmc.txt.
52 See: Documentation/devicetree/bindings/mmc/mmc.txt.
55 See: Documentation/devicetree/bindings/mmc/mmc.txt.
58 See: Documentation/devicetree/bindings/mmc/mmc.txt.
[all …]
H A Dmoxa,moxart-mmc.txt3 Inherits from mmc binding[1].
5 [1] Documentation/devicetree/bindings/mmc/mmc.txt
9 - compatible : Must be "moxa,moxart-mmc" or "faraday,ftsdc010"
22 mmc: mmc@98e00000 {
23 compatible = "moxa,moxart-mmc";

12345678910>>...31