Lines Matching refs:card

63 static rt_int32_t mmcsd_parse_csd(struct rt_mmcsd_card *card)  in mmcsd_parse_csd()  argument
65 struct rt_mmcsd_csd *csd = &card->csd; in mmcsd_parse_csd()
66 rt_uint32_t *resp = card->resp_csd; in mmcsd_parse_csd()
89 card->card_blksize = 1 << csd->rd_blk_len; in mmcsd_parse_csd()
90 card->card_capacity = (csd->c_size + 1) << (csd->c_size_mult + 2); in mmcsd_parse_csd()
91 card->card_capacity *= card->card_blksize; in mmcsd_parse_csd()
92 card->card_capacity >>= 10; /* unit:KB */ in mmcsd_parse_csd()
93 card->tacc_clks = csd->nsac * 100; in mmcsd_parse_csd()
94 card->tacc_ns = (tacc_uint[csd->taac&0x07] * tacc_value[(csd->taac&0x78)>>3] + 9) / 10; in mmcsd_parse_csd()
95card->max_data_rate = tran_unit[csd->tran_speed&0x07] * tran_value[(csd->tran_speed&0x78)>>3]; in mmcsd_parse_csd()
99 card->flags |= CARD_FLAG_SDHC; in mmcsd_parse_csd()
121 card->card_blksize = 512; in mmcsd_parse_csd()
122 card->card_capacity = (csd->c_size + 1) * 512; /* unit:KB */ in mmcsd_parse_csd()
123 card->card_sec_cnt = card->card_capacity * 2; in mmcsd_parse_csd()
124 card->tacc_clks = 0; in mmcsd_parse_csd()
125 card->tacc_ns = 0; in mmcsd_parse_csd()
126card->max_data_rate = tran_unit[csd->tran_speed&0x07] * tran_value[(csd->tran_speed&0x78)>>3]; in mmcsd_parse_csd()
134 LOG_I("SD card capacity %d KB.", card->card_capacity); in mmcsd_parse_csd()
139 static rt_int32_t mmcsd_parse_scr(struct rt_mmcsd_card *card) in mmcsd_parse_scr() argument
141 struct rt_sd_scr *scr = &card->scr; in mmcsd_parse_scr()
144 resp[3] = card->resp_scr[1]; in mmcsd_parse_scr()
145 resp[2] = card->resp_scr[0]; in mmcsd_parse_scr()
152 static rt_int32_t mmcsd_switch(struct rt_mmcsd_card *card) in mmcsd_switch() argument
155 struct rt_mmcsd_host *host = card->host; in mmcsd_switch()
169 if (card->card_type != CARD_TYPE_SD) in mmcsd_switch()
171 if (card->scr.sd_version < SCR_SPEC_VER_1) in mmcsd_switch()
182 mmcsd_set_data_timeout(&data, card); in mmcsd_switch()
202 card->hs_max_data_rate = 50000000; in mmcsd_switch()
209 if ((card->flags & CARD_FLAG_SDR104) && (card->host->flags & MMCSD_SUP_SDR104)) in mmcsd_switch()
213 else if ((card->flags & CARD_FLAG_SDR50) && (card->host->flags & MMCSD_SUP_SDR50)) in mmcsd_switch()
217 else if ((card->flags & CARD_FLAG_DDR50) && (card->host->flags & MMCSD_SUP_DDR50)) in mmcsd_switch()
230 mmcsd_set_data_timeout(&data, card); in mmcsd_switch()
258 card->flags |= CARD_FLAG_SDR104; in mmcsd_switch()
261 card->flags |= CARD_FLAG_SDR50; in mmcsd_switch()
264 card->flags |= CARD_FLAG_DDR50; in mmcsd_switch()
267 card->flags |= CARD_FLAG_HIGHSPEED; in mmcsd_switch()
274 card->max_data_rate = 50000000; in mmcsd_switch()
278 mmcsd_set_timing(card->host, MMCSD_TIMING_UHS_SDR104); in mmcsd_switch()
279 mmcsd_set_clock(card->host, 208000000); in mmcsd_switch()
280 err = mmcsd_excute_tuning(card); in mmcsd_switch()
281 card->max_data_rate = 208000000; in mmcsd_switch()
286 mmcsd_set_timing(card->host, MMCSD_TIMING_UHS_SDR50); in mmcsd_switch()
287 mmcsd_set_clock(card->host, 100000000); in mmcsd_switch()
288 err = mmcsd_excute_tuning(card); in mmcsd_switch()
289 card->max_data_rate = 10000000; in mmcsd_switch()
294 mmcsd_set_timing(card->host, MMCSD_TIMING_UHS_DDR50); in mmcsd_switch()
295 mmcsd_set_clock(card->host, 50000000); in mmcsd_switch()
300 mmcsd_set_timing(card->host, MMCSD_TIMING_SD_HS); in mmcsd_switch()
301 mmcsd_set_clock(card->host, 50000000); in mmcsd_switch()
318 struct rt_mmcsd_card *card) in mmcsd_app_cmd() argument
325 if (card) in mmcsd_app_cmd()
327 cmd.arg = card->rca << 16; in mmcsd_app_cmd()
349 struct rt_mmcsd_card *card, in mmcsd_send_app_cmd() argument
367 err = mmcsd_app_cmd(host, card); in mmcsd_send_app_cmd()
403 rt_err_t mmcsd_app_set_bus_width(struct rt_mmcsd_card *card, rt_int32_t width) in mmcsd_app_set_bus_width() argument
425 err = mmcsd_send_app_cmd(card->host, card, &cmd, 3); in mmcsd_app_set_bus_width()
538 rt_int32_t mmcsd_get_scr(struct rt_mmcsd_card *card, rt_uint32_t *scr) in mmcsd_get_scr() argument
545 err = mmcsd_app_cmd(card->host, card); in mmcsd_get_scr()
565 mmcsd_set_data_timeout(&data, card); in mmcsd_get_scr()
567 mmcsd_send_request(card->host, &req); in mmcsd_get_scr()
580 static rt_err_t mmcsd_read_sd_status(struct rt_mmcsd_card *card, rt_uint32_t *sd_status) in mmcsd_read_sd_status() argument
587 err = mmcsd_app_cmd(card->host, card); in mmcsd_read_sd_status()
607 mmcsd_set_data_timeout(&data, card); in mmcsd_read_sd_status()
609 mmcsd_send_request(card->host, &req); in mmcsd_read_sd_status()
660 struct rt_mmcsd_card *card; in mmcsd_sd_init_card() local
705 card = rt_malloc(sizeof(struct rt_mmcsd_card)); in mmcsd_sd_init_card()
706 if (!card) in mmcsd_sd_init_card()
712 rt_memset(card, 0, sizeof(struct rt_mmcsd_card)); in mmcsd_sd_init_card()
714 card->card_type = CARD_TYPE_SD; in mmcsd_sd_init_card()
715 card->host = host; in mmcsd_sd_init_card()
716 rt_memcpy(card->resp_cid, resp, sizeof(card->resp_cid)); in mmcsd_sd_init_card()
723 err = mmcsd_get_card_addr(host, &card->rca); in mmcsd_sd_init_card()
730 err = mmcsd_get_csd(card, card->resp_csd); in mmcsd_sd_init_card()
734 err = mmcsd_parse_csd(card); in mmcsd_sd_init_card()
740 err = mmcsd_select_card(card); in mmcsd_sd_init_card()
745 err = mmcsd_get_scr(card, card->resp_scr); in mmcsd_sd_init_card()
749 mmcsd_parse_scr(card); in mmcsd_sd_init_card()
761 if ((host->flags & MMCSD_BUSWIDTH_4) && (card->scr.sd_bus_widths & SD_SCR_BUS_WIDTH_4)) in mmcsd_sd_init_card()
763 err = mmcsd_app_set_bus_width(card, MMCSD_BUS_WIDTH_4); in mmcsd_sd_init_card()
772 err = mmcsd_read_sd_status(card, sd_status.status_words); in mmcsd_sd_init_card()
780 card->flags |= CARD_FLAG_SDR50 | CARD_FLAG_SDR104 | CARD_FLAG_DDR50; in mmcsd_sd_init_card()
786 err = mmcsd_switch(card); in mmcsd_sd_init_card()
792 if (max_data_rate < card->hs_max_data_rate) in mmcsd_sd_init_card()
794 max_data_rate = card->hs_max_data_rate; in mmcsd_sd_init_card()
796 if (max_data_rate < card->max_data_rate) in mmcsd_sd_init_card()
798 max_data_rate = card->max_data_rate; in mmcsd_sd_init_card()
802 host->card = card; in mmcsd_sd_init_card()
807 rt_free(card); in mmcsd_sd_init_card()
852 err = rt_mmcsd_blk_probe(host->card); in init_sd()
861 rt_mmcsd_blk_remove(host->card); in init_sd()
862 rt_free(host->card); in init_sd()
863 host->card = RT_NULL; in init_sd()