Lines Matching full:host
63 rt_int32_t sdio_io_send_op_cond(struct rt_mmcsd_host *host, in sdio_io_send_op_cond() argument
70 RT_ASSERT(host != RT_NULL); in sdio_io_send_op_cond()
80 err = mmcsd_send_cmd(host, &cmd, 0); in sdio_io_send_op_cond()
89 if (controller_is_spi(host)) in sdio_io_send_op_cond()
112 *cmd5_resp = cmd.resp[controller_is_spi(host) ? 1 : 0]; in sdio_io_send_op_cond()
144 err = mmcsd_send_cmd(card->host, &cmd, 0); in sdio_io_rw_direct()
148 if (!controller_is_spi(card->host)) in sdio_io_rw_direct()
160 if (controller_is_spi(card->host)) in sdio_io_rw_direct()
216 mmcsd_send_request(card->host, &req); in sdio_io_rw_extended()
223 if (!controller_is_spi(card->host)) in sdio_io_rw_extended()
238 rt_uint32_t size = MIN(func->card->host->max_seg_size, in sdio_max_block_size()
239 func->card->host->max_blk_size); in sdio_max_block_size()
261 max_blks = MIN(func->card->host->max_blk_count, in sdio_io_rw_extended_block()
262 func->card->host->max_seg_size / func->cur_blk_size); in sdio_io_rw_extended_block()
731 if (!(card->host->flags & MMCSD_SUP_HIGHSPEED)) in sdio_set_highspeed()
757 if (!(card->host->flags & MMCSD_BUSWIDTH_4)) in sdio_set_bus_wide()
773 mmcsd_set_bus_width(card->host, MMCSD_BUS_WIDTH_4); in sdio_set_bus_wide()
812 static rt_int32_t sdio_init_card(struct rt_mmcsd_host *host, rt_uint32_t ocr) in sdio_init_card() argument
819 err = sdio_io_send_op_cond(host, ocr, &cmd5_resp); in sdio_init_card()
823 if (controller_is_spi(host)) in sdio_init_card()
825 err = mmcsd_spi_use_crc(host, host->spi_use_crc); in sdio_init_card()
843 card->host = host; in sdio_init_card()
844 host->card = card; in sdio_init_card()
857 if (!controller_is_spi(host)) in sdio_init_card()
859 err = mmcsd_get_card_addr(host, &card->rca); in sdio_init_card()
863 mmcsd_set_bus_mode(host, MMCSD_BUSMODE_PUSHPULL); in sdio_init_card()
866 if (!controller_is_spi(host)) in sdio_init_card()
887 mmcsd_set_clock(host, 50000000); in sdio_init_card()
891 mmcsd_set_clock(host, card->cis.max_tran_speed); in sdio_init_card()
916 if (host->card) in sdio_init_card()
918 for (i = 1; i < host->card->sdio_function_num + 1; i++) in sdio_init_card()
920 if (host->card->sdio_function[i]) in sdio_init_card()
922 sdio_free_cis(host->card->sdio_function[i]); in sdio_init_card()
923 rt_free(host->card->sdio_function[i]); in sdio_init_card()
924 host->card->sdio_function[i] = RT_NULL; in sdio_init_card()
925 rt_free(host->card); in sdio_init_card()
926 host->card = RT_NULL; in sdio_init_card()
932 if (host->card && host->card->sdio_function[0]) in sdio_init_card()
934 sdio_free_cis(host->card->sdio_function[0]); in sdio_init_card()
935 rt_free(host->card->sdio_function[0]); in sdio_init_card()
936 host->card->sdio_function[0] = RT_NULL; in sdio_init_card()
939 if (host->card) in sdio_init_card()
941 rt_free(host->card); in sdio_init_card()
949 rt_int32_t init_sdio(struct rt_mmcsd_host *host, rt_uint32_t ocr) in init_sdio() argument
954 RT_ASSERT(host != RT_NULL); in init_sdio()
968 current_ocr = mmcsd_select_voltage(host, ocr); in init_sdio()
976 err = sdio_init_card(host, current_ocr); in init_sdio()
983 rt_free(host->card); in init_sdio()
984 host->card = RT_NULL; in init_sdio()
997 struct rt_mmcsd_host *host = (struct rt_mmcsd_host *)param; in sdio_irq_thread() local
998 RT_ASSERT(host != RT_NULL); in sdio_irq_thread()
999 card = host->card; in sdio_irq_thread()
1004 if (rt_sem_take(host->sdio_irq_sem, RT_WAITING_FOREVER) == RT_EOK) in sdio_irq_thread()
1006 mmcsd_host_lock(host); in sdio_irq_thread()
1007 pending = sdio_io_readb(host->card->sdio_function[0], in sdio_irq_thread()
1039 mmcsd_host_unlock(host); in sdio_irq_thread()
1040 if (host->flags & MMCSD_SUP_SDIO_IRQ) in sdio_irq_thread()
1041 host->ops->enable_sdio_irq(host, 1); in sdio_irq_thread()
1049 struct rt_mmcsd_host *host = card->host; in sdio_irq_thread_create() local
1052 if (!host->sdio_irq_num) in sdio_irq_thread_create()
1054 host->sdio_irq_num++; in sdio_irq_thread_create()
1055 host->sdio_irq_sem = rt_sem_create("sdio_irq", 0, RT_IPC_FLAG_FIFO); in sdio_irq_thread_create()
1056 RT_ASSERT(host->sdio_irq_sem != RT_NULL); in sdio_irq_thread_create()
1058 host->sdio_irq_thread = rt_thread_create("sdio_irq", sdio_irq_thread, host, in sdio_irq_thread_create()
1060 if (host->sdio_irq_thread != RT_NULL) in sdio_irq_thread_create()
1062 rt_thread_startup(host->sdio_irq_thread); in sdio_irq_thread_create()
1071 struct rt_mmcsd_host *host = card->host; in sdio_irq_thread_delete() local
1073 RT_ASSERT(host->sdio_irq_num > 0); in sdio_irq_thread_delete()
1075 host->sdio_irq_num--; in sdio_irq_thread_delete()
1076 if (!host->sdio_irq_num) in sdio_irq_thread_delete()
1078 if (host->flags & MMCSD_SUP_SDIO_IRQ) in sdio_irq_thread_delete()
1079 host->ops->enable_sdio_irq(host, 0); in sdio_irq_thread_delete()
1080 rt_sem_delete(host->sdio_irq_sem); in sdio_irq_thread_delete()
1081 host->sdio_irq_sem = RT_NULL; in sdio_irq_thread_delete()
1082 rt_thread_delete(host->sdio_irq_thread); in sdio_irq_thread_delete()
1083 host->sdio_irq_thread = RT_NULL; in sdio_irq_thread_delete()
1167 void sdio_irq_wakeup(struct rt_mmcsd_host *host) in sdio_irq_wakeup() argument
1169 if (host->flags & MMCSD_SUP_SDIO_IRQ) in sdio_irq_wakeup()
1170 host->ops->enable_sdio_irq(host, 0); in sdio_irq_wakeup()
1171 if (host->sdio_irq_sem) in sdio_irq_wakeup()
1172 rt_sem_release(host->sdio_irq_sem); in sdio_irq_wakeup()
1270 if (blksize > func->card->host->max_blk_size) in sdio_set_block_size()
1275 blksize = MIN(func->max_blk_size, func->card->host->max_blk_size); in sdio_set_block_size()