Lines Matching refs:card
37 struct rt_mmcsd_card *card; member
59 rt_inline rt_int32_t sdio_match_card(struct rt_mmcsd_card *card,
117 rt_int32_t sdio_io_rw_direct(struct rt_mmcsd_card *card, in sdio_io_rw_direct() argument
127 RT_ASSERT(card != RT_NULL); in sdio_io_rw_direct()
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()
169 rt_int32_t sdio_io_rw_extended(struct rt_mmcsd_card *card, in sdio_io_rw_extended() argument
182 RT_ASSERT(card != RT_NULL); in sdio_io_rw_extended()
214 mmcsd_set_data_timeout(&data, card); in sdio_io_rw_extended()
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()
257 RT_ASSERT(func->card != RT_NULL); in sdio_io_rw_extended_block()
262 if (func->card->cccr.multi_block && (len > sdio_max_block_size(func))) in sdio_io_rw_extended_block()
264 max_blks = MIN(func->card->host->max_blk_count, in sdio_io_rw_extended_block()
265 func->card->host->max_seg_size / func->cur_blk_size); in sdio_io_rw_extended_block()
275 ret = sdio_io_rw_extended(func->card, rw, func->num, in sdio_io_rw_extended_block()
291 ret = sdio_io_rw_extended(func->card, rw, func->num, in sdio_io_rw_extended_block()
312 ret = sdio_io_rw_direct(func->card, 0, func->num, reg, &data, 0); in sdio_io_readb()
326 return sdio_io_rw_direct(func->card, 1, func->num, reg, &data, 0); in sdio_io_writeb()
419 static rt_int32_t sdio_read_cccr(struct rt_mmcsd_card *card) in sdio_read_cccr() argument
425 rt_memset(&card->cccr, 0, sizeof(struct rt_sdio_cccr)); in sdio_read_cccr()
427 data = sdio_io_readb(card->sdio_function[0], SDIO_REG_CCCR_CCCR_REV, &ret); in sdio_read_cccr()
440 card->cccr.sdio_version = (data & 0xf0) >> 4; in sdio_read_cccr()
442 data = sdio_io_readb(card->sdio_function[0], SDIO_REG_CCCR_CARD_CAPS, &ret); in sdio_read_cccr()
447 card->cccr.multi_block = 1; in sdio_read_cccr()
449 card->cccr.low_speed = 1; in sdio_read_cccr()
451 card->cccr.low_speed_4 = 1; in sdio_read_cccr()
453 card->cccr.bus_width = 1; in sdio_read_cccr()
457 data = sdio_io_readb(card->sdio_function[0], SDIO_REG_CCCR_POWER_CTRL, &ret); in sdio_read_cccr()
462 card->cccr.power_ctrl = 1; in sdio_read_cccr()
467 data = sdio_io_readb(card->sdio_function[0], SDIO_REG_CCCR_SPEED, &ret); in sdio_read_cccr()
472 card->cccr.high_speed = 1; in sdio_read_cccr()
479 static rt_int32_t cistpl_funce_func0(struct rt_mmcsd_card *card, in cistpl_funce_func0() argument
487 card->cis.func0_blk_size = buf[1] | (buf[2] << 8); in cistpl_funce_func0()
490 card->cis.max_tran_speed = speed_value[(buf[3] >> 3) & 15] * in cistpl_funce_func0()
503 version = func->card->cccr.sdio_version; in cistpl_funce_func()
529 struct rt_mmcsd_card *card = func->card; in sdio_read_cis() local
530 struct rt_sdio_function *func0 = card->sdio_function[0]; in sdio_read_cis()
595 card->cis.manufacturer = curr->data[0]; in sdio_read_cis()
596 card->cis.manufacturer |= curr->data[1] << 8; in sdio_read_cis()
597 card->cis.product = curr->data[2]; in sdio_read_cis()
598 card->cis.product |= curr->data[3] << 8; in sdio_read_cis()
608 ret = cistpl_funce_func0(card, curr->data, tpl_link); in sdio_read_cis()
652 struct rt_mmcsd_card *card = func->card; in sdio_free_cis() local
656 while (tuple && ((tuple != card->sdio_function[0]->tuples) || (!func->num))) in sdio_free_cis()
670 struct rt_sdio_function *func0 = func->card->sdio_function[0]; in sdio_read_fbr()
693 static rt_int32_t sdio_initialize_function(struct rt_mmcsd_card *card, in sdio_initialize_function() argument
710 func->card = card; in sdio_initialize_function()
727 func->manufacturer = card->cis.manufacturer; in sdio_initialize_function()
728 func->product = card->cis.product; in sdio_initialize_function()
731 card->sdio_function[func_num] = func; in sdio_initialize_function()
738 card->sdio_function[func_num] = RT_NULL; in sdio_initialize_function()
743 static rt_int32_t sdio_set_highspeed(struct rt_mmcsd_card *card) in sdio_set_highspeed() argument
748 if (!(card->host->flags & MMCSD_SUP_HIGHSPEED)) in sdio_set_highspeed()
751 if (!card->cccr.high_speed) in sdio_set_highspeed()
754 speed = sdio_io_readb(card->sdio_function[0], SDIO_REG_CCCR_SPEED, &ret); in sdio_set_highspeed()
760 ret = sdio_io_writeb(card->sdio_function[0], SDIO_REG_CCCR_SPEED, speed); in sdio_set_highspeed()
764 card->flags |= CARD_FLAG_HIGHSPEED; in sdio_set_highspeed()
769 static rt_int32_t sdio_set_bus_wide(struct rt_mmcsd_card *card) in sdio_set_bus_wide() argument
774 if (!(card->host->flags & MMCSD_BUSWIDTH_4)) in sdio_set_bus_wide()
777 if (card->cccr.low_speed && !card->cccr.bus_width) in sdio_set_bus_wide()
780 busif = sdio_io_readb(card->sdio_function[0], SDIO_REG_CCCR_BUS_IF, &ret); in sdio_set_bus_wide()
786 ret = sdio_io_writeb(card->sdio_function[0], SDIO_REG_CCCR_BUS_IF, busif); in sdio_set_bus_wide()
790 mmcsd_set_bus_width(card->host, MMCSD_BUS_WIDTH_4); in sdio_set_bus_wide()
795 static rt_int32_t sdio_register_card(struct rt_mmcsd_card *card) in sdio_register_card() argument
808 sc->card = card; in sdio_register_card()
819 if (sdio_match_card(card, sd->drv->id)) in sdio_register_card()
821 sd->drv->probe(card); in sdio_register_card()
834 struct rt_mmcsd_card *card; in sdio_init_card() local
849 card = rt_malloc(sizeof(struct rt_mmcsd_card)); in sdio_init_card()
850 if (!card) in sdio_init_card()
856 rt_memset(card, 0, sizeof(struct rt_mmcsd_card)); in sdio_init_card()
858 card->card_type = CARD_TYPE_SDIO; in sdio_init_card()
859 card->sdio_function_num = function_num; in sdio_init_card()
860 card->host = host; in sdio_init_card()
861 host->card = card; in sdio_init_card()
863 card->sdio_function[0] = rt_malloc(sizeof(struct rt_sdio_function)); in sdio_init_card()
864 if (!card->sdio_function[0]) in sdio_init_card()
870 rt_memset(card->sdio_function[0], 0, sizeof(struct rt_sdio_function)); in sdio_init_card()
871 card->sdio_function[0]->card = card; in sdio_init_card()
872 card->sdio_function[0]->num = 0; in sdio_init_card()
876 err = mmcsd_get_card_addr(host, &card->rca); in sdio_init_card()
885 err = mmcsd_select_card(card); in sdio_init_card()
890 err = sdio_read_cccr(card); in sdio_init_card()
894 err = sdio_read_cis(card->sdio_function[0]); in sdio_init_card()
898 err = sdio_set_highspeed(card); in sdio_init_card()
902 if (card->flags & CARD_FLAG_HIGHSPEED) in sdio_init_card()
904 mmcsd_set_clock(host, card->host->freq_max > 50000000 ? 50000000 : card->host->freq_max); in sdio_init_card()
908 mmcsd_set_clock(host, card->cis.max_tran_speed); in sdio_init_card()
911 err = sdio_set_bus_wide(card); in sdio_init_card()
917 err = sdio_initialize_function(card, i); in sdio_init_card()
924 err = sdio_register_card(card); in sdio_init_card()
933 if (host->card) in sdio_init_card()
935 for (i = 1; i < host->card->sdio_function_num + 1; i++) in sdio_init_card()
937 if (host->card->sdio_function[i]) in sdio_init_card()
939 sdio_free_cis(host->card->sdio_function[i]); in sdio_init_card()
940 rt_free(host->card->sdio_function[i]); in sdio_init_card()
941 host->card->sdio_function[i] = RT_NULL; in sdio_init_card()
946 if (host->card && host->card->sdio_function[0]) in sdio_init_card()
948 sdio_free_cis(host->card->sdio_function[0]); in sdio_init_card()
949 rt_free(host->card->sdio_function[0]); in sdio_init_card()
950 host->card->sdio_function[0] = RT_NULL; in sdio_init_card()
953 if (host->card) in sdio_init_card()
955 rt_free(host->card); in sdio_init_card()
956 host->card = RT_NULL; in sdio_init_card()
1008 struct rt_mmcsd_card *card; in sdio_irq_thread() local
1011 card = host->card; in sdio_irq_thread()
1012 RT_ASSERT(card != RT_NULL); in sdio_irq_thread()
1019 pending = sdio_io_readb(host->card->sdio_function[0], in sdio_irq_thread()
1031 struct rt_sdio_function *func = card->sdio_function[i]; in sdio_irq_thread()
1058 static rt_int32_t sdio_irq_thread_create(struct rt_mmcsd_card *card) in sdio_irq_thread_create() argument
1060 struct rt_mmcsd_host *host = card->host; in sdio_irq_thread_create()
1080 static rt_int32_t sdio_irq_thread_delete(struct rt_mmcsd_card *card) in sdio_irq_thread_delete() argument
1082 struct rt_mmcsd_host *host = card->host; in sdio_irq_thread_delete()
1108 RT_ASSERT(func->card != RT_NULL); in sdio_attach_irq()
1110 func0 = func->card->sdio_function[0]; in sdio_attach_irq()
1135 ret = sdio_irq_thread_create(func->card); in sdio_attach_irq()
1149 RT_ASSERT(func->card != RT_NULL); in sdio_detach_irq()
1151 func0 = func->card->sdio_function[0]; in sdio_detach_irq()
1158 sdio_irq_thread_delete(func->card); in sdio_detach_irq()
1194 RT_ASSERT(func->card != RT_NULL); in sdio_enable_func()
1196 func0 = func->card->sdio_function[0]; in sdio_enable_func()
1240 RT_ASSERT(func->card != RT_NULL); in sdio_disable_func()
1242 func0 = func->card->sdio_function[0]; in sdio_disable_func()
1279 struct rt_sdio_function *func0 = func->card->sdio_function[0]; in sdio_set_block_size()
1281 if (blksize > func->card->host->max_blk_size) in sdio_set_block_size()
1286 blksize = MIN(func->max_blk_size, func->card->host->max_blk_size); in sdio_set_block_size()
1303 rt_inline rt_int32_t sdio_match_card(struct rt_mmcsd_card *card, in sdio_match_card() argument
1309 (id->manufacturer != card->cis.manufacturer)) in sdio_match_card()
1312 while (num <= card->sdio_function_num) in sdio_match_card()
1315 (id->product == card->sdio_function[num]->product)) in sdio_match_card()
1328 struct rt_mmcsd_card *card; in sdio_match_driver() local
1333 card = sc->card; in sdio_match_driver()
1335 if (sdio_match_card(card, id)) in sdio_match_driver()
1337 return card; in sdio_match_driver()
1347 struct rt_mmcsd_card *card; in sdio_register_driver() local
1362 card = sdio_match_driver(driver->id); in sdio_register_driver()
1363 if (card != RT_NULL) in sdio_register_driver()
1365 return driver->probe(card); in sdio_register_driver()
1376 struct rt_mmcsd_card *card; in sdio_unregister_driver() local
1395 card = sdio_match_driver(driver->id); in sdio_unregister_driver()
1396 if (card != RT_NULL) in sdio_unregister_driver()
1398 driver->remove(card); in sdio_unregister_driver()