| 536 | (((rt_uint32_t)(x) & (rt_uint32_t)0xff000000UL) >> 24))) |
| 537 | |
| 538 | rt_int32_t mmcsd_get_scr(struct rt_mmcsd_card *card, rt_uint32_t *scr) |
| 539 | { |
| 540 | rt_int32_t err; |
| 541 | struct rt_mmcsd_req req; |
| 542 | struct rt_mmcsd_cmd cmd; |
| 543 | struct rt_mmcsd_data data; |
| 544 | |
| 545 | err = mmcsd_app_cmd(card->host, card); |
| 546 | if (err) |
| 547 | return err; |
| 548 | |
| 549 | rt_memset(&req, 0, sizeof(struct rt_mmcsd_req)); |
| 550 | rt_memset(&cmd, 0, sizeof(struct rt_mmcsd_cmd)); |
| 551 | rt_memset(&data, 0, sizeof(struct rt_mmcsd_data)); |
| 552 | |
| 553 | req.cmd = &cmd; |
| 554 | req.data = &data; |
| 555 | |
| 556 | cmd.cmd_code = SD_APP_SEND_SCR; |
| 557 | cmd.arg = 0; |
| 558 | cmd.flags = RESP_SPI_R1 | RESP_R1 | CMD_ADTC; |
| 559 | |
| 560 | data.blksize = 8; |
| 561 | data.blks = 1; |
| 562 | data.flags = DATA_DIR_READ; |
| 563 | data.buf = scr; |
| 564 | |
| 565 | mmcsd_set_data_timeout(&data, card); |
| 566 | |
| 567 | mmcsd_send_request(card->host, &req); |
| 568 | |
| 569 | if (cmd.err) |
| 570 | return cmd.err; |
| 571 | if (data.err) |
| 572 | return data.err; |
| 573 | |
| 574 | scr[0] = be32_to_cpu(scr[0]); |
| 575 | scr[1] = be32_to_cpu(scr[1]); |
| 576 | |
| 577 | return 0; |
| 578 | } |
| 579 | |
| 580 | static rt_err_t mmcsd_read_sd_status(struct rt_mmcsd_card *card, rt_uint32_t *sd_status) |
| 581 | { |
no test coverage detected