|
@@ -109,9 +109,8 @@ static int sd_check_data0_status(struct rtsx_chip *chip)
|
|
u8 stat;
|
|
u8 stat;
|
|
|
|
|
|
retval = rtsx_read_register(chip, REG_SD_STAT1, &stat);
|
|
retval = rtsx_read_register(chip, REG_SD_STAT1, &stat);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
if (!(stat & SD_DAT0_STATUS)) {
|
|
if (!(stat & SD_DAT0_STATUS)) {
|
|
sd_set_err_code(chip, SD_BUSY);
|
|
sd_set_err_code(chip, SD_BUSY);
|
|
@@ -234,9 +233,8 @@ RTY_SEND_CMD:
|
|
if ((cmd_idx != SEND_RELATIVE_ADDR) &&
|
|
if ((cmd_idx != SEND_RELATIVE_ADDR) &&
|
|
(cmd_idx != SEND_IF_COND)) {
|
|
(cmd_idx != SEND_IF_COND)) {
|
|
if (cmd_idx != STOP_TRANSMISSION) {
|
|
if (cmd_idx != STOP_TRANSMISSION) {
|
|
- if (ptr[1] & 0x80) {
|
|
|
|
|
|
+ if (ptr[1] & 0x80)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
#ifdef SUPPORT_SD_LOCK
|
|
#ifdef SUPPORT_SD_LOCK
|
|
if (ptr[1] & 0x7D) {
|
|
if (ptr[1] & 0x7D) {
|
|
@@ -284,9 +282,8 @@ static int sd_read_data(struct rtsx_chip *chip,
|
|
if (!buf)
|
|
if (!buf)
|
|
buf_len = 0;
|
|
buf_len = 0;
|
|
|
|
|
|
- if (buf_len > 512) {
|
|
|
|
|
|
+ if (buf_len > 512)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
rtsx_init_cmd(chip);
|
|
rtsx_init_cmd(chip);
|
|
|
|
|
|
@@ -331,9 +328,8 @@ static int sd_read_data(struct rtsx_chip *chip,
|
|
|
|
|
|
if (buf && buf_len) {
|
|
if (buf && buf_len) {
|
|
retval = rtsx_read_ppbuf(chip, buf, buf_len);
|
|
retval = rtsx_read_ppbuf(chip, buf, buf_len);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
@@ -359,9 +355,8 @@ static int sd_write_data(struct rtsx_chip *chip, u8 trans_mode,
|
|
|
|
|
|
if (buf && buf_len) {
|
|
if (buf && buf_len) {
|
|
retval = rtsx_write_ppbuf(chip, buf, buf_len);
|
|
retval = rtsx_write_ppbuf(chip, buf, buf_len);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
rtsx_init_cmd(chip);
|
|
rtsx_init_cmd(chip);
|
|
@@ -426,9 +421,8 @@ static int sd_check_csd(struct rtsx_chip *chip, char check_wp)
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
- if (i == 6) {
|
|
|
|
|
|
+ if (i == 6)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
memcpy(sd_card->raw_csd, rsp + 1, 15);
|
|
memcpy(sd_card->raw_csd, rsp + 1, 15);
|
|
|
|
|
|
@@ -543,9 +537,8 @@ static int sd_set_sample_push_timing(struct rtsx_chip *chip)
|
|
}
|
|
}
|
|
|
|
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, 0x1C, val);
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, 0x1C, val);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -606,9 +599,8 @@ static int sd_set_clock_divider(struct rtsx_chip *chip, u8 clk_div)
|
|
val = 0x20;
|
|
val = 0x20;
|
|
|
|
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, mask, val);
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, mask, val);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -619,16 +611,14 @@ static int sd_set_init_para(struct rtsx_chip *chip)
|
|
int retval;
|
|
int retval;
|
|
|
|
|
|
retval = sd_set_sample_push_timing(chip);
|
|
retval = sd_set_sample_push_timing(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
sd_choose_proper_clock(chip);
|
|
sd_choose_proper_clock(chip);
|
|
|
|
|
|
retval = switch_clock(chip, sd_card->sd_clock);
|
|
retval = switch_clock(chip, sd_card->sd_clock);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -651,9 +641,8 @@ int sd_select_card(struct rtsx_chip *chip, int select)
|
|
}
|
|
}
|
|
|
|
|
|
retval = sd_send_cmd_get_rsp(chip, cmd_idx, addr, cmd_type, NULL, 0);
|
|
retval = sd_send_cmd_get_rsp(chip, cmd_idx, addr, cmd_type, NULL, 0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -667,9 +656,8 @@ static int sd_update_lock_status(struct rtsx_chip *chip)
|
|
|
|
|
|
retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
|
|
retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
|
|
SD_RSP_TYPE_R1, rsp, 5);
|
|
SD_RSP_TYPE_R1, rsp, 5);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if (rsp[1] & 0x02)
|
|
if (rsp[1] & 0x02)
|
|
sd_card->sd_lock_status |= SD_LOCKED;
|
|
sd_card->sd_lock_status |= SD_LOCKED;
|
|
@@ -679,9 +667,8 @@ static int sd_update_lock_status(struct rtsx_chip *chip)
|
|
dev_dbg(rtsx_dev(chip), "sd_card->sd_lock_status = 0x%x\n",
|
|
dev_dbg(rtsx_dev(chip), "sd_card->sd_lock_status = 0x%x\n",
|
|
sd_card->sd_lock_status);
|
|
sd_card->sd_lock_status);
|
|
|
|
|
|
- if (rsp[1] & 0x01) {
|
|
|
|
|
|
+ if (rsp[1] & 0x01)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -698,9 +685,8 @@ static int sd_wait_state_data_ready(struct rtsx_chip *chip, u8 state,
|
|
retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
|
|
retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
|
|
sd_card->sd_addr, SD_RSP_TYPE_R1,
|
|
sd_card->sd_addr, SD_RSP_TYPE_R1,
|
|
rsp, 5);
|
|
rsp, 5);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if (((rsp[3] & 0x1E) == state) &&
|
|
if (((rsp[3] & 0x1E) == state) &&
|
|
((rsp[3] & 0x01) == data_ready))
|
|
((rsp[3] & 0x01) == data_ready))
|
|
@@ -719,31 +705,27 @@ static int sd_change_bank_voltage(struct rtsx_chip *chip, u8 voltage)
|
|
retval = rtsx_write_phy_register(chip, 0x08,
|
|
retval = rtsx_write_phy_register(chip, 0x08,
|
|
0x4FC0 |
|
|
0x4FC0 |
|
|
chip->phy_voltage);
|
|
chip->phy_voltage);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
} else {
|
|
} else {
|
|
retval = rtsx_write_register(chip, SD_PAD_CTL,
|
|
retval = rtsx_write_register(chip, SD_PAD_CTL,
|
|
SD_IO_USING_1V8, 0);
|
|
SD_IO_USING_1V8, 0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
}
|
|
}
|
|
} else if (voltage == SD_IO_1V8) {
|
|
} else if (voltage == SD_IO_1V8) {
|
|
if (chip->asic_code) {
|
|
if (chip->asic_code) {
|
|
retval = rtsx_write_phy_register(chip, 0x08,
|
|
retval = rtsx_write_phy_register(chip, 0x08,
|
|
0x4C40 |
|
|
0x4C40 |
|
|
chip->phy_voltage);
|
|
chip->phy_voltage);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
} else {
|
|
} else {
|
|
retval = rtsx_write_register(chip, SD_PAD_CTL,
|
|
retval = rtsx_write_register(chip, SD_PAD_CTL,
|
|
SD_IO_USING_1V8,
|
|
SD_IO_USING_1V8,
|
|
SD_IO_USING_1V8);
|
|
SD_IO_USING_1V8);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
@@ -760,22 +742,19 @@ static int sd_voltage_switch(struct rtsx_chip *chip)
|
|
retval = rtsx_write_register(chip, SD_BUS_STAT,
|
|
retval = rtsx_write_register(chip, SD_BUS_STAT,
|
|
SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP,
|
|
SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP,
|
|
SD_CLK_TOGGLE_EN);
|
|
SD_CLK_TOGGLE_EN);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
retval = sd_send_cmd_get_rsp(chip, VOLTAGE_SWITCH, 0, SD_RSP_TYPE_R1,
|
|
retval = sd_send_cmd_get_rsp(chip, VOLTAGE_SWITCH, 0, SD_RSP_TYPE_R1,
|
|
NULL, 0);
|
|
NULL, 0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
udelay(chip->sd_voltage_switch_delay);
|
|
udelay(chip->sd_voltage_switch_delay);
|
|
|
|
|
|
retval = rtsx_read_register(chip, SD_BUS_STAT, &stat);
|
|
retval = rtsx_read_register(chip, SD_BUS_STAT, &stat);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
if (stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
|
|
if (stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
|
|
SD_DAT1_STATUS | SD_DAT0_STATUS)) {
|
|
SD_DAT1_STATUS | SD_DAT0_STATUS)) {
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
@@ -783,27 +762,23 @@ static int sd_voltage_switch(struct rtsx_chip *chip)
|
|
|
|
|
|
retval = rtsx_write_register(chip, SD_BUS_STAT, 0xFF,
|
|
retval = rtsx_write_register(chip, SD_BUS_STAT, 0xFF,
|
|
SD_CLK_FORCE_STOP);
|
|
SD_CLK_FORCE_STOP);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = sd_change_bank_voltage(chip, SD_IO_1V8);
|
|
retval = sd_change_bank_voltage(chip, SD_IO_1V8);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
wait_timeout(50);
|
|
wait_timeout(50);
|
|
|
|
|
|
retval = rtsx_write_register(chip, SD_BUS_STAT, 0xFF,
|
|
retval = rtsx_write_register(chip, SD_BUS_STAT, 0xFF,
|
|
SD_CLK_TOGGLE_EN);
|
|
SD_CLK_TOGGLE_EN);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
wait_timeout(10);
|
|
wait_timeout(10);
|
|
|
|
|
|
retval = rtsx_read_register(chip, SD_BUS_STAT, &stat);
|
|
retval = rtsx_read_register(chip, SD_BUS_STAT, &stat);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
if ((stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
|
|
if ((stat & (SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
|
|
SD_DAT1_STATUS | SD_DAT0_STATUS)) !=
|
|
SD_DAT1_STATUS | SD_DAT0_STATUS)) !=
|
|
(SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
|
|
(SD_CMD_STATUS | SD_DAT3_STATUS | SD_DAT2_STATUS |
|
|
@@ -817,9 +792,8 @@ static int sd_voltage_switch(struct rtsx_chip *chip)
|
|
|
|
|
|
retval = rtsx_write_register(chip, SD_BUS_STAT,
|
|
retval = rtsx_write_register(chip, SD_BUS_STAT,
|
|
SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
|
|
SD_CLK_TOGGLE_EN | SD_CLK_FORCE_STOP, 0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -831,23 +805,19 @@ static int sd_reset_dcm(struct rtsx_chip *chip, u8 tune_dir)
|
|
if (tune_dir == TUNE_RX) {
|
|
if (tune_dir == TUNE_RX) {
|
|
retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF,
|
|
retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF,
|
|
DCM_RESET | DCM_RX);
|
|
DCM_RESET | DCM_RX);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF, DCM_RX);
|
|
retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF, DCM_RX);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
} else {
|
|
} else {
|
|
retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF,
|
|
retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF,
|
|
DCM_RESET | DCM_TX);
|
|
DCM_RESET | DCM_TX);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF, DCM_TX);
|
|
retval = rtsx_write_register(chip, DCM_DRP_CTL, 0xFF, DCM_TX);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
@@ -877,28 +847,23 @@ static int sd_change_phase(struct rtsx_chip *chip, u8 sample_point, u8 tune_dir)
|
|
if (chip->asic_code) {
|
|
if (chip->asic_code) {
|
|
retval = rtsx_write_register(chip, CLK_CTL, CHANGE_CLK,
|
|
retval = rtsx_write_register(chip, CLK_CTL, CHANGE_CLK,
|
|
CHANGE_CLK);
|
|
CHANGE_CLK);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, SD_VP_CTL, 0x1F,
|
|
retval = rtsx_write_register(chip, SD_VP_CTL, 0x1F,
|
|
sample_point);
|
|
sample_point);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, SD_VPCLK0_CTL,
|
|
retval = rtsx_write_register(chip, SD_VPCLK0_CTL,
|
|
PHASE_NOT_RESET, 0);
|
|
PHASE_NOT_RESET, 0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, SD_VPCLK0_CTL,
|
|
retval = rtsx_write_register(chip, SD_VPCLK0_CTL,
|
|
PHASE_NOT_RESET, PHASE_NOT_RESET);
|
|
PHASE_NOT_RESET, PHASE_NOT_RESET);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, CLK_CTL, CHANGE_CLK, 0);
|
|
retval = rtsx_write_register(chip, CLK_CTL, CHANGE_CLK, 0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
} else {
|
|
} else {
|
|
rtsx_read_register(chip, SD_VP_CTL, &val);
|
|
rtsx_read_register(chip, SD_VP_CTL, &val);
|
|
dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val);
|
|
dev_dbg(rtsx_dev(chip), "SD_VP_CTL: 0x%x\n", val);
|
|
@@ -909,30 +874,26 @@ static int sd_change_phase(struct rtsx_chip *chip, u8 sample_point, u8 tune_dir)
|
|
retval = rtsx_write_register(chip, SD_VP_CTL,
|
|
retval = rtsx_write_register(chip, SD_VP_CTL,
|
|
PHASE_CHANGE,
|
|
PHASE_CHANGE,
|
|
PHASE_CHANGE);
|
|
PHASE_CHANGE);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
udelay(50);
|
|
udelay(50);
|
|
retval = rtsx_write_register(chip, SD_VP_CTL, 0xFF,
|
|
retval = rtsx_write_register(chip, SD_VP_CTL, 0xFF,
|
|
PHASE_CHANGE |
|
|
PHASE_CHANGE |
|
|
PHASE_NOT_RESET |
|
|
PHASE_NOT_RESET |
|
|
sample_point);
|
|
sample_point);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
} else {
|
|
} else {
|
|
retval = rtsx_write_register(chip, CLK_CTL,
|
|
retval = rtsx_write_register(chip, CLK_CTL,
|
|
CHANGE_CLK, CHANGE_CLK);
|
|
CHANGE_CLK, CHANGE_CLK);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
udelay(50);
|
|
udelay(50);
|
|
retval = rtsx_write_register(chip, SD_VP_CTL, 0xFF,
|
|
retval = rtsx_write_register(chip, SD_VP_CTL, 0xFF,
|
|
PHASE_NOT_RESET |
|
|
PHASE_NOT_RESET |
|
|
sample_point);
|
|
sample_point);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
}
|
|
}
|
|
udelay(100);
|
|
udelay(100);
|
|
|
|
|
|
@@ -942,45 +903,38 @@ static int sd_change_phase(struct rtsx_chip *chip, u8 sample_point, u8 tune_dir)
|
|
rtsx_add_cmd(chip, CHECK_REG_CMD, SD_DCMPS_CTL,
|
|
rtsx_add_cmd(chip, CHECK_REG_CMD, SD_DCMPS_CTL,
|
|
DCMPS_CHANGE_DONE, DCMPS_CHANGE_DONE);
|
|
DCMPS_CHANGE_DONE, DCMPS_CHANGE_DONE);
|
|
retval = rtsx_send_cmd(chip, SD_CARD, 100);
|
|
retval = rtsx_send_cmd(chip, SD_CARD, 100);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto fail;
|
|
goto fail;
|
|
- }
|
|
|
|
|
|
|
|
val = *rtsx_get_cmd_data(chip);
|
|
val = *rtsx_get_cmd_data(chip);
|
|
- if (val & DCMPS_ERROR) {
|
|
|
|
|
|
+ if (val & DCMPS_ERROR)
|
|
goto fail;
|
|
goto fail;
|
|
- }
|
|
|
|
|
|
|
|
- if ((val & DCMPS_CURRENT_PHASE) != sample_point) {
|
|
|
|
|
|
+ if ((val & DCMPS_CURRENT_PHASE) != sample_point)
|
|
goto fail;
|
|
goto fail;
|
|
- }
|
|
|
|
|
|
|
|
retval = rtsx_write_register(chip, SD_DCMPS_CTL,
|
|
retval = rtsx_write_register(chip, SD_DCMPS_CTL,
|
|
DCMPS_CHANGE, 0);
|
|
DCMPS_CHANGE, 0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
if (ddr_rx) {
|
|
if (ddr_rx) {
|
|
retval = rtsx_write_register(chip, SD_VP_CTL,
|
|
retval = rtsx_write_register(chip, SD_VP_CTL,
|
|
PHASE_CHANGE, 0);
|
|
PHASE_CHANGE, 0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
} else {
|
|
} else {
|
|
retval = rtsx_write_register(chip, CLK_CTL,
|
|
retval = rtsx_write_register(chip, CLK_CTL,
|
|
CHANGE_CLK, 0);
|
|
CHANGE_CLK, 0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
udelay(50);
|
|
udelay(50);
|
|
}
|
|
}
|
|
|
|
|
|
retval = rtsx_write_register(chip, SD_CFG1, SD_ASYNC_FIFO_NOT_RST, 0);
|
|
retval = rtsx_write_register(chip, SD_CFG1, SD_ASYNC_FIFO_NOT_RST, 0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
|
|
|
|
@@ -1005,9 +959,8 @@ static int sd_check_spec(struct rtsx_chip *chip, u8 bus_width)
|
|
|
|
|
|
retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
|
|
retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
|
|
SD_RSP_TYPE_R1, NULL, 0);
|
|
SD_RSP_TYPE_R1, NULL, 0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
cmd[0] = 0x40 | SEND_SCR;
|
|
cmd[0] = 0x40 | SEND_SCR;
|
|
cmd[1] = 0;
|
|
cmd[1] = 0;
|
|
@@ -1024,9 +977,8 @@ static int sd_check_spec(struct rtsx_chip *chip, u8 bus_width)
|
|
|
|
|
|
memcpy(sd_card->raw_scr, buf, 8);
|
|
memcpy(sd_card->raw_scr, buf, 8);
|
|
|
|
|
|
- if ((buf[0] & 0x0F) == 0) {
|
|
|
|
|
|
+ if ((buf[0] & 0x0F) == 0)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -1207,29 +1159,25 @@ static int sd_check_switch_mode(struct rtsx_chip *chip, u8 mode, u8 func_group,
|
|
|
|
|
|
dev_dbg(rtsx_dev(chip), "Maximum current consumption: %dmA\n",
|
|
dev_dbg(rtsx_dev(chip), "Maximum current consumption: %dmA\n",
|
|
cc);
|
|
cc);
|
|
- if ((cc == 0) || (cc > 800)) {
|
|
|
|
|
|
+ if ((cc == 0) || (cc > 800))
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = sd_query_switch_result(chip, func_group,
|
|
retval = sd_query_switch_result(chip, func_group,
|
|
func_to_switch, buf, 64);
|
|
func_to_switch, buf, 64);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if ((cc > 400) || (func_to_switch > CURRENT_LIMIT_400)) {
|
|
if ((cc > 400) || (func_to_switch > CURRENT_LIMIT_400)) {
|
|
retval = rtsx_write_register(chip, OCPPARA2,
|
|
retval = rtsx_write_register(chip, OCPPARA2,
|
|
SD_OCP_THD_MASK,
|
|
SD_OCP_THD_MASK,
|
|
chip->sd_800mA_ocp_thd);
|
|
chip->sd_800mA_ocp_thd);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, CARD_PWR_CTL,
|
|
retval = rtsx_write_register(chip, CARD_PWR_CTL,
|
|
PMOS_STRG_MASK,
|
|
PMOS_STRG_MASK,
|
|
PMOS_STRG_800mA);
|
|
PMOS_STRG_800mA);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1278,9 +1226,8 @@ static int sd_check_switch(struct rtsx_chip *chip,
|
|
}
|
|
}
|
|
|
|
|
|
retval = rtsx_read_register(chip, SD_STAT1, &stat);
|
|
retval = rtsx_read_register(chip, SD_STAT1, &stat);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
if (stat & SD_CRC16_ERR) {
|
|
if (stat & SD_CRC16_ERR) {
|
|
dev_dbg(rtsx_dev(chip), "SD CRC16 error when switching mode\n");
|
|
dev_dbg(rtsx_dev(chip), "SD CRC16 error when switching mode\n");
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
@@ -1293,9 +1240,8 @@ static int sd_check_switch(struct rtsx_chip *chip,
|
|
wait_timeout(20);
|
|
wait_timeout(20);
|
|
}
|
|
}
|
|
|
|
|
|
- if (!switch_good) {
|
|
|
|
|
|
+ if (!switch_good)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -1310,9 +1256,8 @@ static int sd_switch_function(struct rtsx_chip *chip, u8 bus_width)
|
|
/* Get supported functions */
|
|
/* Get supported functions */
|
|
retval = sd_check_switch_mode(chip, SD_CHECK_MODE, NO_ARGUMENT,
|
|
retval = sd_check_switch_mode(chip, SD_CHECK_MODE, NO_ARGUMENT,
|
|
NO_ARGUMENT, bus_width);
|
|
NO_ARGUMENT, bus_width);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
sd_card->func_group1_mask &= ~(sd_card->sd_switch_fail);
|
|
sd_card->func_group1_mask &= ~(sd_card->sd_switch_fail);
|
|
|
|
|
|
@@ -1394,13 +1339,11 @@ static int sd_switch_function(struct rtsx_chip *chip, u8 bus_width)
|
|
if (CHK_SD_DDR50(sd_card)) {
|
|
if (CHK_SD_DDR50(sd_card)) {
|
|
retval = rtsx_write_register(chip, SD_PUSH_POINT_CTL, 0x06,
|
|
retval = rtsx_write_register(chip, SD_PUSH_POINT_CTL, 0x06,
|
|
0x04);
|
|
0x04);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = sd_set_sample_push_timing(chip);
|
|
retval = sd_set_sample_push_timing(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (!func_to_switch || (func_to_switch == HS_SUPPORT)) {
|
|
if (!func_to_switch || (func_to_switch == HS_SUPPORT)) {
|
|
@@ -1454,9 +1397,8 @@ static int sd_switch_function(struct rtsx_chip *chip, u8 bus_width)
|
|
retval = sd_check_switch(chip, SD_FUNC_GROUP_4, func_to_switch,
|
|
retval = sd_check_switch(chip, SD_FUNC_GROUP_4, func_to_switch,
|
|
bus_width);
|
|
bus_width);
|
|
if (retval != STATUS_SUCCESS) {
|
|
if (retval != STATUS_SUCCESS) {
|
|
- if (sd_check_err_code(chip, SD_NO_CARD)) {
|
|
|
|
|
|
+ if (sd_check_err_code(chip, SD_NO_CARD))
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
dev_dbg(rtsx_dev(chip), "Switch current limit finished! (%d)\n",
|
|
dev_dbg(rtsx_dev(chip), "Switch current limit finished! (%d)\n",
|
|
retval);
|
|
retval);
|
|
@@ -1464,9 +1406,8 @@ static int sd_switch_function(struct rtsx_chip *chip, u8 bus_width)
|
|
|
|
|
|
if (CHK_SD_DDR50(sd_card)) {
|
|
if (CHK_SD_DDR50(sd_card)) {
|
|
retval = rtsx_write_register(chip, SD_PUSH_POINT_CTL, 0x06, 0);
|
|
retval = rtsx_write_register(chip, SD_PUSH_POINT_CTL, 0x06, 0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
@@ -1480,9 +1421,8 @@ static int sd_wait_data_idle(struct rtsx_chip *chip)
|
|
|
|
|
|
for (i = 0; i < 100; i++) {
|
|
for (i = 0; i < 100; i++) {
|
|
retval = rtsx_read_register(chip, SD_DATA_STATE, &val);
|
|
retval = rtsx_read_register(chip, SD_DATA_STATE, &val);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
if (val & SD_DATA_IDLE) {
|
|
if (val & SD_DATA_IDLE) {
|
|
retval = STATUS_SUCCESS;
|
|
retval = STATUS_SUCCESS;
|
|
break;
|
|
break;
|
|
@@ -1500,9 +1440,8 @@ static int sd_sdr_tuning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
|
|
u8 cmd[5];
|
|
u8 cmd[5];
|
|
|
|
|
|
retval = sd_change_phase(chip, sample_point, TUNE_RX);
|
|
retval = sd_change_phase(chip, sample_point, TUNE_RX);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
cmd[0] = 0x40 | SEND_TUNING_PATTERN;
|
|
cmd[0] = 0x40 | SEND_TUNING_PATTERN;
|
|
cmd[1] = 0;
|
|
cmd[1] = 0;
|
|
@@ -1529,17 +1468,15 @@ static int sd_ddr_tuning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
|
|
u8 cmd[5];
|
|
u8 cmd[5];
|
|
|
|
|
|
retval = sd_change_phase(chip, sample_point, TUNE_RX);
|
|
retval = sd_change_phase(chip, sample_point, TUNE_RX);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
dev_dbg(rtsx_dev(chip), "sd ddr tuning rx\n");
|
|
dev_dbg(rtsx_dev(chip), "sd ddr tuning rx\n");
|
|
|
|
|
|
retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
|
|
retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
|
|
SD_RSP_TYPE_R1, NULL, 0);
|
|
SD_RSP_TYPE_R1, NULL, 0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
cmd[0] = 0x40 | SD_STATUS;
|
|
cmd[0] = 0x40 | SD_STATUS;
|
|
cmd[1] = 0;
|
|
cmd[1] = 0;
|
|
@@ -1573,9 +1510,8 @@ static int mmc_ddr_tuning_rx_cmd(struct rtsx_chip *chip, u8 sample_point)
|
|
bus_width = SD_BUS_WIDTH_1;
|
|
bus_width = SD_BUS_WIDTH_1;
|
|
|
|
|
|
retval = sd_change_phase(chip, sample_point, TUNE_RX);
|
|
retval = sd_change_phase(chip, sample_point, TUNE_RX);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
dev_dbg(rtsx_dev(chip), "mmc ddr tuning rx\n");
|
|
dev_dbg(rtsx_dev(chip), "mmc ddr tuning rx\n");
|
|
|
|
|
|
@@ -1603,15 +1539,13 @@ static int sd_sdr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point)
|
|
int retval;
|
|
int retval;
|
|
|
|
|
|
retval = sd_change_phase(chip, sample_point, TUNE_TX);
|
|
retval = sd_change_phase(chip, sample_point, TUNE_TX);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
|
|
retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
|
|
SD_RSP_80CLK_TIMEOUT_EN);
|
|
SD_RSP_80CLK_TIMEOUT_EN);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
|
|
retval = sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr,
|
|
SD_RSP_TYPE_R1, NULL, 0);
|
|
SD_RSP_TYPE_R1, NULL, 0);
|
|
@@ -1625,9 +1559,8 @@ static int sd_sdr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point)
|
|
|
|
|
|
retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
|
|
retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
|
|
0);
|
|
0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -1639,9 +1572,8 @@ static int sd_ddr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point)
|
|
u8 cmd[5], bus_width;
|
|
u8 cmd[5], bus_width;
|
|
|
|
|
|
retval = sd_change_phase(chip, sample_point, TUNE_TX);
|
|
retval = sd_change_phase(chip, sample_point, TUNE_TX);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if (CHK_SD(sd_card)) {
|
|
if (CHK_SD(sd_card)) {
|
|
bus_width = SD_BUS_WIDTH_4;
|
|
bus_width = SD_BUS_WIDTH_4;
|
|
@@ -1655,15 +1587,13 @@ static int sd_ddr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point)
|
|
}
|
|
}
|
|
|
|
|
|
retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
|
|
retval = sd_wait_state_data_ready(chip, 0x08, 1, 1000);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
|
|
retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
|
|
SD_RSP_80CLK_TIMEOUT_EN);
|
|
SD_RSP_80CLK_TIMEOUT_EN);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
cmd[0] = 0x40 | PROGRAM_CSD;
|
|
cmd[0] = 0x40 | PROGRAM_CSD;
|
|
cmd[1] = 0;
|
|
cmd[1] = 0;
|
|
@@ -1681,9 +1611,8 @@ static int sd_ddr_tuning_tx_cmd(struct rtsx_chip *chip, u8 sample_point)
|
|
|
|
|
|
retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
|
|
retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
|
|
0);
|
|
0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, SD_RSP_TYPE_R1,
|
|
sd_send_cmd_get_rsp(chip, SEND_STATUS, sd_card->sd_addr, SD_RSP_TYPE_R1,
|
|
NULL, 0);
|
|
NULL, 0);
|
|
@@ -1826,11 +1755,10 @@ static int sd_tuning_rx(struct rtsx_chip *chip)
|
|
tuning_cmd = sd_sdr_tuning_rx_cmd;
|
|
tuning_cmd = sd_sdr_tuning_rx_cmd;
|
|
|
|
|
|
} else {
|
|
} else {
|
|
- if (CHK_MMC_DDR52(sd_card)) {
|
|
|
|
|
|
+ if (CHK_MMC_DDR52(sd_card))
|
|
tuning_cmd = mmc_ddr_tuning_rx_cmd;
|
|
tuning_cmd = mmc_ddr_tuning_rx_cmd;
|
|
- } else {
|
|
|
|
|
|
+ else
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
for (i = 0; i < 3; i++) {
|
|
@@ -1855,14 +1783,12 @@ static int sd_tuning_rx(struct rtsx_chip *chip)
|
|
dev_dbg(rtsx_dev(chip), "RX phase_map = 0x%08x\n", phase_map);
|
|
dev_dbg(rtsx_dev(chip), "RX phase_map = 0x%08x\n", phase_map);
|
|
|
|
|
|
final_phase = sd_search_final_phase(chip, phase_map, TUNE_RX);
|
|
final_phase = sd_search_final_phase(chip, phase_map, TUNE_RX);
|
|
- if (final_phase == 0xFF) {
|
|
|
|
|
|
+ if (final_phase == 0xFF)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = sd_change_phase(chip, final_phase, TUNE_RX);
|
|
retval = sd_change_phase(chip, final_phase, TUNE_RX);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -1877,9 +1803,8 @@ static int sd_ddr_pre_tuning_tx(struct rtsx_chip *chip)
|
|
|
|
|
|
retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
|
|
retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
|
|
SD_RSP_80CLK_TIMEOUT_EN);
|
|
SD_RSP_80CLK_TIMEOUT_EN);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
phase_map = 0;
|
|
phase_map = 0;
|
|
for (i = MAX_PHASE; i >= 0; i--) {
|
|
for (i = MAX_PHASE; i >= 0; i--) {
|
|
@@ -1904,22 +1829,19 @@ static int sd_ddr_pre_tuning_tx(struct rtsx_chip *chip)
|
|
|
|
|
|
retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
|
|
retval = rtsx_write_register(chip, SD_CFG3, SD_RSP_80CLK_TIMEOUT_EN,
|
|
0);
|
|
0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase_map = 0x%08x\n",
|
|
dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase_map = 0x%08x\n",
|
|
phase_map);
|
|
phase_map);
|
|
|
|
|
|
final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
|
|
final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
|
|
- if (final_phase == 0xFF) {
|
|
|
|
|
|
+ if (final_phase == 0xFF)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = sd_change_phase(chip, final_phase, TUNE_TX);
|
|
retval = sd_change_phase(chip, final_phase, TUNE_TX);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase: %d\n",
|
|
dev_dbg(rtsx_dev(chip), "DDR TX pre tune phase: %d\n",
|
|
(int)final_phase);
|
|
(int)final_phase);
|
|
@@ -1943,11 +1865,10 @@ static int sd_tuning_tx(struct rtsx_chip *chip)
|
|
tuning_cmd = sd_sdr_tuning_tx_cmd;
|
|
tuning_cmd = sd_sdr_tuning_tx_cmd;
|
|
|
|
|
|
} else {
|
|
} else {
|
|
- if (CHK_MMC_DDR52(sd_card)) {
|
|
|
|
|
|
+ if (CHK_MMC_DDR52(sd_card))
|
|
tuning_cmd = sd_ddr_tuning_tx_cmd;
|
|
tuning_cmd = sd_ddr_tuning_tx_cmd;
|
|
- } else {
|
|
|
|
|
|
+ else
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
for (i = 0; i < 3; i++) {
|
|
for (i = 0; i < 3; i++) {
|
|
@@ -1974,14 +1895,12 @@ static int sd_tuning_tx(struct rtsx_chip *chip)
|
|
dev_dbg(rtsx_dev(chip), "TX phase_map = 0x%08x\n", phase_map);
|
|
dev_dbg(rtsx_dev(chip), "TX phase_map = 0x%08x\n", phase_map);
|
|
|
|
|
|
final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
|
|
final_phase = sd_search_final_phase(chip, phase_map, TUNE_TX);
|
|
- if (final_phase == 0xFF) {
|
|
|
|
|
|
+ if (final_phase == 0xFF)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = sd_change_phase(chip, final_phase, TUNE_TX);
|
|
retval = sd_change_phase(chip, final_phase, TUNE_TX);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -1991,14 +1910,12 @@ static int sd_sdr_tuning(struct rtsx_chip *chip)
|
|
int retval;
|
|
int retval;
|
|
|
|
|
|
retval = sd_tuning_tx(chip);
|
|
retval = sd_tuning_tx(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = sd_tuning_rx(chip);
|
|
retval = sd_tuning_rx(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -2009,27 +1926,23 @@ static int sd_ddr_tuning(struct rtsx_chip *chip)
|
|
|
|
|
|
if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
|
|
if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
|
|
retval = sd_ddr_pre_tuning_tx(chip);
|
|
retval = sd_ddr_pre_tuning_tx(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
} else {
|
|
} else {
|
|
retval = sd_change_phase(chip, (u8)chip->sd_ddr_tx_phase,
|
|
retval = sd_change_phase(chip, (u8)chip->sd_ddr_tx_phase,
|
|
TUNE_TX);
|
|
TUNE_TX);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
retval = sd_tuning_rx(chip);
|
|
retval = sd_tuning_rx(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
|
|
if (!(chip->sd_ctl & SD_DDR_TX_PHASE_SET_BY_USER)) {
|
|
retval = sd_tuning_tx(chip);
|
|
retval = sd_tuning_tx(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
@@ -2041,27 +1954,23 @@ static int mmc_ddr_tuning(struct rtsx_chip *chip)
|
|
|
|
|
|
if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
|
|
if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
|
|
retval = sd_ddr_pre_tuning_tx(chip);
|
|
retval = sd_ddr_pre_tuning_tx(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
} else {
|
|
} else {
|
|
retval = sd_change_phase(chip, (u8)chip->mmc_ddr_tx_phase,
|
|
retval = sd_change_phase(chip, (u8)chip->mmc_ddr_tx_phase,
|
|
TUNE_TX);
|
|
TUNE_TX);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
retval = sd_tuning_rx(chip);
|
|
retval = sd_tuning_rx(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
|
|
if (!(chip->sd_ctl & MMC_DDR_TX_PHASE_SET_BY_USER)) {
|
|
retval = sd_tuning_tx(chip);
|
|
retval = sd_tuning_tx(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
@@ -2074,14 +1983,12 @@ int sd_switch_clock(struct rtsx_chip *chip)
|
|
int re_tuning = 0;
|
|
int re_tuning = 0;
|
|
|
|
|
|
retval = select_card(chip, SD_CARD);
|
|
retval = select_card(chip, SD_CARD);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = switch_clock(chip, sd_card->sd_clock);
|
|
retval = switch_clock(chip, sd_card->sd_clock);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if (re_tuning) {
|
|
if (re_tuning) {
|
|
if (CHK_SD(sd_card)) {
|
|
if (CHK_SD(sd_card)) {
|
|
@@ -2094,9 +2001,8 @@ int sd_switch_clock(struct rtsx_chip *chip)
|
|
retval = mmc_ddr_tuning(chip);
|
|
retval = mmc_ddr_tuning(chip);
|
|
}
|
|
}
|
|
|
|
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
@@ -2126,25 +2032,21 @@ static int sd_prepare_reset(struct rtsx_chip *chip)
|
|
chip->sd_io = 0;
|
|
chip->sd_io = 0;
|
|
|
|
|
|
retval = sd_set_init_para(chip);
|
|
retval = sd_set_init_para(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, 0xFF, 0x40);
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, 0xFF, 0x40);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
retval = rtsx_write_register(chip, CARD_STOP, SD_STOP | SD_CLR_ERR,
|
|
retval = rtsx_write_register(chip, CARD_STOP, SD_STOP | SD_CLR_ERR,
|
|
SD_STOP | SD_CLR_ERR);
|
|
SD_STOP | SD_CLR_ERR);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
retval = select_card(chip, SD_CARD);
|
|
retval = select_card(chip, SD_CARD);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -2157,60 +2059,50 @@ static int sd_pull_ctl_disable(struct rtsx_chip *chip)
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL1, 0xFF,
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL1, 0xFF,
|
|
XD_D3_PD | SD_D7_PD | SD_CLK_PD |
|
|
XD_D3_PD | SD_D7_PD | SD_CLK_PD |
|
|
SD_D5_PD);
|
|
SD_D5_PD);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL2, 0xFF,
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL2, 0xFF,
|
|
SD_D6_PD | SD_D0_PD | SD_D1_PD |
|
|
SD_D6_PD | SD_D0_PD | SD_D1_PD |
|
|
XD_D5_PD);
|
|
XD_D5_PD);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL3, 0xFF,
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL3, 0xFF,
|
|
SD_D4_PD | XD_CE_PD | XD_CLE_PD |
|
|
SD_D4_PD | XD_CE_PD | XD_CLE_PD |
|
|
XD_CD_PU);
|
|
XD_CD_PU);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL4, 0xFF,
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL4, 0xFF,
|
|
XD_RDY_PD | SD_D3_PD | SD_D2_PD |
|
|
XD_RDY_PD | SD_D3_PD | SD_D2_PD |
|
|
XD_ALE_PD);
|
|
XD_ALE_PD);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL5, 0xFF,
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL5, 0xFF,
|
|
MS_INS_PU | SD_WP_PD | SD_CD_PU |
|
|
MS_INS_PU | SD_WP_PD | SD_CD_PU |
|
|
SD_CMD_PD);
|
|
SD_CMD_PD);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL6, 0xFF,
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL6, 0xFF,
|
|
MS_D5_PD | MS_D4_PD);
|
|
MS_D5_PD | MS_D4_PD);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
} else if (CHECK_PID(chip, 0x5288)) {
|
|
} else if (CHECK_PID(chip, 0x5288)) {
|
|
if (CHECK_BARO_PKG(chip, QFN)) {
|
|
if (CHECK_BARO_PKG(chip, QFN)) {
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL1,
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL1,
|
|
0xFF, 0x55);
|
|
0xFF, 0x55);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL2,
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL2,
|
|
0xFF, 0x55);
|
|
0xFF, 0x55);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL3,
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL3,
|
|
0xFF, 0x4B);
|
|
0xFF, 0x4B);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL4,
|
|
retval = rtsx_write_register(chip, CARD_PULL_CTL4,
|
|
0xFF, 0x69);
|
|
0xFF, 0x69);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -2250,9 +2142,8 @@ int sd_pull_ctl_enable(struct rtsx_chip *chip)
|
|
}
|
|
}
|
|
|
|
|
|
retval = rtsx_send_cmd(chip, SD_CARD, 100);
|
|
retval = rtsx_send_cmd(chip, SD_CARD, 100);
|
|
- if (retval < 0) {
|
|
|
|
|
|
+ if (retval < 0)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -2262,36 +2153,31 @@ static int sd_init_power(struct rtsx_chip *chip)
|
|
int retval;
|
|
int retval;
|
|
|
|
|
|
retval = sd_power_off_card3v3(chip);
|
|
retval = sd_power_off_card3v3(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if (!chip->ft2_fast_mode)
|
|
if (!chip->ft2_fast_mode)
|
|
wait_timeout(250);
|
|
wait_timeout(250);
|
|
|
|
|
|
retval = enable_card_clock(chip, SD_CARD);
|
|
retval = enable_card_clock(chip, SD_CARD);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if (chip->asic_code) {
|
|
if (chip->asic_code) {
|
|
retval = sd_pull_ctl_enable(chip);
|
|
retval = sd_pull_ctl_enable(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
} else {
|
|
} else {
|
|
retval = rtsx_write_register(chip, FPGA_PULL_CTL,
|
|
retval = rtsx_write_register(chip, FPGA_PULL_CTL,
|
|
FPGA_SD_PULL_CTL_BIT | 0x20, 0);
|
|
FPGA_SD_PULL_CTL_BIT | 0x20, 0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (!chip->ft2_fast_mode) {
|
|
if (!chip->ft2_fast_mode) {
|
|
retval = card_power_on(chip, SD_CARD);
|
|
retval = card_power_on(chip, SD_CARD);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
wait_timeout(260);
|
|
wait_timeout(260);
|
|
|
|
|
|
@@ -2306,9 +2192,8 @@ static int sd_init_power(struct rtsx_chip *chip)
|
|
|
|
|
|
retval = rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN,
|
|
retval = rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN,
|
|
SD_OUTPUT_EN);
|
|
SD_OUTPUT_EN);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -2318,14 +2203,12 @@ static int sd_dummy_clock(struct rtsx_chip *chip)
|
|
int retval;
|
|
int retval;
|
|
|
|
|
|
retval = rtsx_write_register(chip, REG_SD_CFG3, 0x01, 0x01);
|
|
retval = rtsx_write_register(chip, REG_SD_CFG3, 0x01, 0x01);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
wait_timeout(5);
|
|
wait_timeout(5);
|
|
retval = rtsx_write_register(chip, REG_SD_CFG3, 0x01, 0);
|
|
retval = rtsx_write_register(chip, REG_SD_CFG3, 0x01, 0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -2373,9 +2256,8 @@ static int sd_check_wp_state(struct rtsx_chip *chip)
|
|
|
|
|
|
retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
|
|
retval = sd_send_cmd_get_rsp(chip, APP_CMD, sd_card->sd_addr,
|
|
SD_RSP_TYPE_R1, NULL, 0);
|
|
SD_RSP_TYPE_R1, NULL, 0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
cmd[0] = 0x40 | SD_STATUS;
|
|
cmd[0] = 0x40 | SD_STATUS;
|
|
cmd[1] = 0;
|
|
cmd[1] = 0;
|
|
@@ -2689,9 +2571,8 @@ SD_UNLOCK_ENTRY:
|
|
|
|
|
|
retval = rtsx_write_register(chip, SD30_DRIVE_SEL, 0x07,
|
|
retval = rtsx_write_register(chip, SD30_DRIVE_SEL, 0x07,
|
|
chip->sd30_drive_sel_1v8);
|
|
chip->sd30_drive_sel_1v8);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
retval = sd_set_init_para(chip);
|
|
retval = sd_set_init_para(chip);
|
|
if (retval != STATUS_SUCCESS)
|
|
if (retval != STATUS_SUCCESS)
|
|
@@ -2753,14 +2634,12 @@ SD_UNLOCK_ENTRY:
|
|
if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
|
|
if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
|
|
retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_H, 0xFF,
|
|
retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_H, 0xFF,
|
|
0x02);
|
|
0x02);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_L, 0xFF,
|
|
retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_L, 0xFF,
|
|
0x00);
|
|
0x00);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
@@ -2780,9 +2659,8 @@ static int mmc_test_switch_bus(struct rtsx_chip *chip, u8 width)
|
|
|
|
|
|
retval = sd_send_cmd_get_rsp(chip, BUSTEST_W, 0, SD_RSP_TYPE_R1, NULL,
|
|
retval = sd_send_cmd_get_rsp(chip, BUSTEST_W, 0, SD_RSP_TYPE_R1, NULL,
|
|
0);
|
|
0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return SWITCH_FAIL;
|
|
return SWITCH_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if (width == MMC_8BIT_BUS) {
|
|
if (width == MMC_8BIT_BUS) {
|
|
buf[0] = 0x55;
|
|
buf[0] = 0x55;
|
|
@@ -2798,9 +2676,8 @@ static int mmc_test_switch_bus(struct rtsx_chip *chip, u8 width)
|
|
}
|
|
}
|
|
|
|
|
|
retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0x02);
|
|
retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0x02);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return SWITCH_ERR;
|
|
return SWITCH_ERR;
|
|
- }
|
|
|
|
|
|
|
|
retval = sd_write_data(chip, SD_TM_AUTO_WRITE_3, NULL, 0, byte_cnt, 1,
|
|
retval = sd_write_data(chip, SD_TM_AUTO_WRITE_3, NULL, 0, byte_cnt, 1,
|
|
bus_width, buf, len, 100);
|
|
bus_width, buf, len, 100);
|
|
@@ -2811,9 +2688,8 @@ static int mmc_test_switch_bus(struct rtsx_chip *chip, u8 width)
|
|
}
|
|
}
|
|
|
|
|
|
retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0);
|
|
retval = rtsx_write_register(chip, REG_SD_CFG3, 0x02, 0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return SWITCH_ERR;
|
|
return SWITCH_ERR;
|
|
- }
|
|
|
|
|
|
|
|
dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", BUSTEST_R);
|
|
dev_dbg(rtsx_dev(chip), "SD/MMC CMD %d\n", BUSTEST_R);
|
|
|
|
|
|
@@ -2979,9 +2855,8 @@ static int mmc_switch_timing_bus(struct rtsx_chip *chip, bool switch_ddr)
|
|
|
|
|
|
sd_choose_proper_clock(chip);
|
|
sd_choose_proper_clock(chip);
|
|
retval = switch_clock(chip, sd_card->sd_clock);
|
|
retval = switch_clock(chip, sd_card->sd_clock);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
/* Test Bus Procedure */
|
|
/* Test Bus Procedure */
|
|
retval = mmc_test_switch_bus(chip, MMC_8BIT_BUS);
|
|
retval = mmc_test_switch_bus(chip, MMC_8BIT_BUS);
|
|
@@ -3028,18 +2903,16 @@ static int reset_mmc(struct rtsx_chip *chip)
|
|
|
|
|
|
switch_fail:
|
|
switch_fail:
|
|
retval = sd_prepare_reset(chip);
|
|
retval = sd_prepare_reset(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
SET_MMC(sd_card);
|
|
SET_MMC(sd_card);
|
|
|
|
|
|
RTY_MMC_RST:
|
|
RTY_MMC_RST:
|
|
retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0,
|
|
retval = sd_send_cmd_get_rsp(chip, GO_IDLE_STATE, 0, SD_RSP_TYPE_R0,
|
|
NULL, 0);
|
|
NULL, 0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
do {
|
|
do {
|
|
if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
|
|
if (detect_card_cd(chip, SD_CARD) != STATUS_SUCCESS) {
|
|
@@ -3075,9 +2948,8 @@ RTY_MMC_RST:
|
|
i++;
|
|
i++;
|
|
} while (!(rsp[1] & 0x80) && (i < 255));
|
|
} while (!(rsp[1] & 0x80) && (i < 255));
|
|
|
|
|
|
- if (i == 255) {
|
|
|
|
|
|
+ if (i == 255)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if ((rsp[1] & 0x60) == 0x40)
|
|
if ((rsp[1] & 0x60) == 0x40)
|
|
SET_MMC_SECTOR_MODE(sd_card);
|
|
SET_MMC_SECTOR_MODE(sd_card);
|
|
@@ -3086,47 +2958,40 @@ RTY_MMC_RST:
|
|
|
|
|
|
retval = sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2,
|
|
retval = sd_send_cmd_get_rsp(chip, ALL_SEND_CID, 0, SD_RSP_TYPE_R2,
|
|
NULL, 0);
|
|
NULL, 0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
sd_card->sd_addr = 0x00100000;
|
|
sd_card->sd_addr = 0x00100000;
|
|
retval = sd_send_cmd_get_rsp(chip, SET_RELATIVE_ADDR, sd_card->sd_addr,
|
|
retval = sd_send_cmd_get_rsp(chip, SET_RELATIVE_ADDR, sd_card->sd_addr,
|
|
SD_RSP_TYPE_R6, rsp, 5);
|
|
SD_RSP_TYPE_R6, rsp, 5);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = sd_check_csd(chip, 1);
|
|
retval = sd_check_csd(chip, 1);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
spec_ver = (sd_card->raw_csd[0] & 0x3C) >> 2;
|
|
spec_ver = (sd_card->raw_csd[0] & 0x3C) >> 2;
|
|
|
|
|
|
retval = sd_select_card(chip, 1);
|
|
retval = sd_select_card(chip, 1);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1,
|
|
retval = sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200, SD_RSP_TYPE_R1,
|
|
NULL, 0);
|
|
NULL, 0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
#ifdef SUPPORT_SD_LOCK
|
|
#ifdef SUPPORT_SD_LOCK
|
|
MMC_UNLOCK_ENTRY:
|
|
MMC_UNLOCK_ENTRY:
|
|
retval = sd_update_lock_status(chip);
|
|
retval = sd_update_lock_status(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
|
|
retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
chip->card_bus_width[chip->card2lun[SD_CARD]] = 1;
|
|
chip->card_bus_width[chip->card2lun[SD_CARD]] = 1;
|
|
|
|
|
|
@@ -3136,30 +3001,26 @@ MMC_UNLOCK_ENTRY:
|
|
retval = mmc_switch_timing_bus(chip, switch_ddr);
|
|
retval = mmc_switch_timing_bus(chip, switch_ddr);
|
|
if (retval != STATUS_SUCCESS) {
|
|
if (retval != STATUS_SUCCESS) {
|
|
retval = sd_init_power(chip);
|
|
retval = sd_init_power(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
sd_card->mmc_dont_switch_bus = 1;
|
|
sd_card->mmc_dont_switch_bus = 1;
|
|
goto switch_fail;
|
|
goto switch_fail;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- if (CHK_MMC_SECTOR_MODE(sd_card) && (sd_card->capacity == 0)) {
|
|
|
|
|
|
+ if (CHK_MMC_SECTOR_MODE(sd_card) && (sd_card->capacity == 0))
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if (switch_ddr && CHK_MMC_DDR52(sd_card)) {
|
|
if (switch_ddr && CHK_MMC_DDR52(sd_card)) {
|
|
retval = sd_set_init_para(chip);
|
|
retval = sd_set_init_para(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = mmc_ddr_tuning(chip);
|
|
retval = mmc_ddr_tuning(chip);
|
|
if (retval != STATUS_SUCCESS) {
|
|
if (retval != STATUS_SUCCESS) {
|
|
retval = sd_init_power(chip);
|
|
retval = sd_init_power(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
switch_ddr = false;
|
|
switch_ddr = false;
|
|
goto switch_fail;
|
|
goto switch_fail;
|
|
@@ -3170,9 +3031,8 @@ MMC_UNLOCK_ENTRY:
|
|
retval = sd_read_lba0(chip);
|
|
retval = sd_read_lba0(chip);
|
|
if (retval != STATUS_SUCCESS) {
|
|
if (retval != STATUS_SUCCESS) {
|
|
retval = sd_init_power(chip);
|
|
retval = sd_init_power(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
switch_ddr = false;
|
|
switch_ddr = false;
|
|
goto switch_fail;
|
|
goto switch_fail;
|
|
@@ -3185,14 +3045,12 @@ MMC_UNLOCK_ENTRY:
|
|
if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
|
|
if (sd_card->sd_lock_status & SD_UNLOCK_POW_ON) {
|
|
retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_H, 0xFF,
|
|
retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_H, 0xFF,
|
|
0x02);
|
|
0x02);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_L, 0xFF,
|
|
retval = rtsx_write_register(chip, REG_SD_BLOCK_CNT_L, 0xFF,
|
|
0x00);
|
|
0x00);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|
|
|
|
|
|
@@ -3214,88 +3072,74 @@ int reset_sd_card(struct rtsx_chip *chip)
|
|
chip->capacity[chip->card2lun[SD_CARD]] = 0;
|
|
chip->capacity[chip->card2lun[SD_CARD]] = 0;
|
|
|
|
|
|
retval = enable_card_clock(chip, SD_CARD);
|
|
retval = enable_card_clock(chip, SD_CARD);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if (chip->ignore_sd && CHK_SDIO_EXIST(chip) &&
|
|
if (chip->ignore_sd && CHK_SDIO_EXIST(chip) &&
|
|
!CHK_SDIO_IGNORED(chip)) {
|
|
!CHK_SDIO_IGNORED(chip)) {
|
|
if (chip->asic_code) {
|
|
if (chip->asic_code) {
|
|
retval = sd_pull_ctl_enable(chip);
|
|
retval = sd_pull_ctl_enable(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
} else {
|
|
} else {
|
|
retval = rtsx_write_register(chip, FPGA_PULL_CTL,
|
|
retval = rtsx_write_register(chip, FPGA_PULL_CTL,
|
|
FPGA_SD_PULL_CTL_BIT |
|
|
FPGA_SD_PULL_CTL_BIT |
|
|
0x20, 0);
|
|
0x20, 0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
retval = card_share_mode(chip, SD_CARD);
|
|
retval = card_share_mode(chip, SD_CARD);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
chip->sd_io = 1;
|
|
chip->sd_io = 1;
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
}
|
|
}
|
|
|
|
|
|
retval = sd_init_power(chip);
|
|
retval = sd_init_power(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if (chip->sd_ctl & RESET_MMC_FIRST) {
|
|
if (chip->sd_ctl & RESET_MMC_FIRST) {
|
|
retval = reset_mmc(chip);
|
|
retval = reset_mmc(chip);
|
|
if (retval != STATUS_SUCCESS) {
|
|
if (retval != STATUS_SUCCESS) {
|
|
- if (sd_check_err_code(chip, SD_NO_CARD)) {
|
|
|
|
|
|
+ if (sd_check_err_code(chip, SD_NO_CARD))
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = reset_sd(chip);
|
|
retval = reset_sd(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
} else {
|
|
} else {
|
|
retval = reset_sd(chip);
|
|
retval = reset_sd(chip);
|
|
if (retval != STATUS_SUCCESS) {
|
|
if (retval != STATUS_SUCCESS) {
|
|
- if (sd_check_err_code(chip, SD_NO_CARD)) {
|
|
|
|
|
|
+ if (sd_check_err_code(chip, SD_NO_CARD))
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
- if (chip->sd_io) {
|
|
|
|
|
|
+ if (chip->sd_io)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
retval = reset_mmc(chip);
|
|
retval = reset_mmc(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
|
|
retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_L, 0xFF, 0);
|
|
retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_L, 0xFF, 0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_H, 0xFF, 2);
|
|
retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_H, 0xFF, 2);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
|
|
chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
|
|
|
|
|
|
retval = sd_set_init_para(chip);
|
|
retval = sd_set_init_para(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
dev_dbg(rtsx_dev(chip), "sd_card->sd_type = 0x%x\n", sd_card->sd_type);
|
|
dev_dbg(rtsx_dev(chip), "sd_card->sd_type = 0x%x\n", sd_card->sd_type);
|
|
|
|
|
|
@@ -3321,40 +3165,33 @@ static int reset_mmc_only(struct rtsx_chip *chip)
|
|
chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity = 0;
|
|
chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity = 0;
|
|
|
|
|
|
retval = enable_card_clock(chip, SD_CARD);
|
|
retval = enable_card_clock(chip, SD_CARD);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = sd_init_power(chip);
|
|
retval = sd_init_power(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = reset_mmc(chip);
|
|
retval = reset_mmc(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
|
|
retval = sd_set_clock_divider(chip, SD_CLK_DIVIDE_0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_L, 0xFF, 0);
|
|
retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_L, 0xFF, 0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_H, 0xFF, 2);
|
|
retval = rtsx_write_register(chip, REG_SD_BYTE_CNT_H, 0xFF, 2);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
|
|
chip->capacity[chip->card2lun[SD_CARD]] = sd_card->capacity;
|
|
|
|
|
|
retval = sd_set_init_para(chip);
|
|
retval = sd_set_init_para(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
dev_dbg(rtsx_dev(chip), "In %s, sd_card->sd_type = 0x%x\n",
|
|
dev_dbg(rtsx_dev(chip), "In %s, sd_card->sd_type = 0x%x\n",
|
|
__func__, sd_card->sd_type);
|
|
__func__, sd_card->sd_type);
|
|
@@ -3380,9 +3217,8 @@ static int wait_data_buf_ready(struct rtsx_chip *chip)
|
|
retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
|
|
retval = sd_send_cmd_get_rsp(chip, SEND_STATUS,
|
|
sd_card->sd_addr, SD_RSP_TYPE_R1,
|
|
sd_card->sd_addr, SD_RSP_TYPE_R1,
|
|
NULL, 0);
|
|
NULL, 0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if (sd_card->sd_data_buf_ready) {
|
|
if (sd_card->sd_data_buf_ready) {
|
|
return sd_send_cmd_get_rsp(chip, SEND_STATUS,
|
|
return sd_send_cmd_get_rsp(chip, SEND_STATUS,
|
|
@@ -3460,9 +3296,8 @@ static inline int sd_auto_tune_clock(struct rtsx_chip *chip)
|
|
}
|
|
}
|
|
|
|
|
|
retval = sd_switch_clock(chip);
|
|
retval = sd_switch_clock(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|
|
@@ -3819,9 +3654,8 @@ RTY_SEND_CMD:
|
|
|
|
|
|
if (rsp_type & SD_WAIT_BUSY_END) {
|
|
if (rsp_type & SD_WAIT_BUSY_END) {
|
|
retval = sd_check_data0_status(chip);
|
|
retval = sd_check_data0_status(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
} else {
|
|
} else {
|
|
sd_set_err_code(chip, SD_TO_ERR);
|
|
sd_set_err_code(chip, SD_TO_ERR);
|
|
}
|
|
}
|
|
@@ -3859,9 +3693,8 @@ RTY_SEND_CMD:
|
|
if ((cmd_idx == SELECT_CARD) || (cmd_idx == APP_CMD) ||
|
|
if ((cmd_idx == SELECT_CARD) || (cmd_idx == APP_CMD) ||
|
|
(cmd_idx == SEND_STATUS) || (cmd_idx == STOP_TRANSMISSION)) {
|
|
(cmd_idx == SEND_STATUS) || (cmd_idx == STOP_TRANSMISSION)) {
|
|
if ((cmd_idx != STOP_TRANSMISSION) && !special_check) {
|
|
if ((cmd_idx != STOP_TRANSMISSION) && !special_check) {
|
|
- if (ptr[1] & 0x80) {
|
|
|
|
|
|
+ if (ptr[1] & 0x80)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
#ifdef SUPPORT_SD_LOCK
|
|
#ifdef SUPPORT_SD_LOCK
|
|
if (ptr[1] & 0x7D) {
|
|
if (ptr[1] & 0x7D) {
|
|
@@ -3870,15 +3703,13 @@ RTY_SEND_CMD:
|
|
#endif
|
|
#endif
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
}
|
|
}
|
|
- if (ptr[2] & 0xF8) {
|
|
|
|
|
|
+ if (ptr[2] & 0xF8)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if (cmd_idx == SELECT_CARD) {
|
|
if (cmd_idx == SELECT_CARD) {
|
|
if (rsp_type == SD_RSP_TYPE_R2) {
|
|
if (rsp_type == SD_RSP_TYPE_R2) {
|
|
- if ((ptr[3] & 0x1E) != 0x04) {
|
|
|
|
|
|
+ if ((ptr[3] & 0x1E) != 0x04)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -3915,9 +3746,8 @@ int ext_sd_get_rsp(struct rtsx_chip *chip, int len, u8 *rsp, u8 rsp_type)
|
|
rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_CMD5, 0xFF, 0);
|
|
rtsx_add_cmd(chip, READ_REG_CMD, REG_SD_CMD5, 0xFF, 0);
|
|
|
|
|
|
retval = rtsx_send_cmd(chip, SD_CARD, 100);
|
|
retval = rtsx_send_cmd(chip, SD_CARD, 100);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
if (rsp) {
|
|
if (rsp) {
|
|
int min_len = (rsp_len < len) ? rsp_len : len;
|
|
int min_len = (rsp_len < len) ? rsp_len : len;
|
|
@@ -4057,9 +3887,8 @@ int sd_execute_no_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
|
|
}
|
|
}
|
|
|
|
|
|
retval = sd_switch_clock(chip);
|
|
retval = sd_switch_clock(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return TRANSPORT_FAILED;
|
|
return TRANSPORT_FAILED;
|
|
- }
|
|
|
|
|
|
|
|
if (sd_card->pre_cmd_err) {
|
|
if (sd_card->pre_cmd_err) {
|
|
sd_card->pre_cmd_err = 0;
|
|
sd_card->pre_cmd_err = 0;
|
|
@@ -4085,39 +3914,34 @@ int sd_execute_no_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
|
|
sd_card->last_rsp_type = rsp_type;
|
|
sd_card->last_rsp_type = rsp_type;
|
|
|
|
|
|
retval = sd_switch_clock(chip);
|
|
retval = sd_switch_clock(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return TRANSPORT_FAILED;
|
|
return TRANSPORT_FAILED;
|
|
- }
|
|
|
|
|
|
|
|
#ifdef SUPPORT_SD_LOCK
|
|
#ifdef SUPPORT_SD_LOCK
|
|
if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
|
|
if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
|
|
if (CHK_MMC_8BIT(sd_card)) {
|
|
if (CHK_MMC_8BIT(sd_card)) {
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
|
|
SD_BUS_WIDTH_8);
|
|
SD_BUS_WIDTH_8);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return TRANSPORT_FAILED;
|
|
return TRANSPORT_FAILED;
|
|
- }
|
|
|
|
|
|
|
|
} else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) {
|
|
} else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) {
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
|
|
SD_BUS_WIDTH_4);
|
|
SD_BUS_WIDTH_4);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return TRANSPORT_FAILED;
|
|
return TRANSPORT_FAILED;
|
|
- }
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#else
|
|
#else
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return TRANSPORT_FAILED;
|
|
return TRANSPORT_FAILED;
|
|
- }
|
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
if (standby) {
|
|
if (standby) {
|
|
retval = sd_select_card(chip, 0);
|
|
retval = sd_select_card(chip, 0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_cmd_failed;
|
|
goto sd_execute_cmd_failed;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (acmd) {
|
|
if (acmd) {
|
|
@@ -4125,29 +3949,25 @@ int sd_execute_no_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
|
|
sd_card->sd_addr,
|
|
sd_card->sd_addr,
|
|
SD_RSP_TYPE_R1, NULL, 0,
|
|
SD_RSP_TYPE_R1, NULL, 0,
|
|
false);
|
|
false);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_cmd_failed;
|
|
goto sd_execute_cmd_failed;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type,
|
|
retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type,
|
|
sd_card->rsp, rsp_len, false);
|
|
sd_card->rsp, rsp_len, false);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_cmd_failed;
|
|
goto sd_execute_cmd_failed;
|
|
- }
|
|
|
|
|
|
|
|
if (standby) {
|
|
if (standby) {
|
|
retval = sd_select_card(chip, 1);
|
|
retval = sd_select_card(chip, 1);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_cmd_failed;
|
|
goto sd_execute_cmd_failed;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
#ifdef SUPPORT_SD_LOCK
|
|
#ifdef SUPPORT_SD_LOCK
|
|
retval = sd_update_lock_status(chip);
|
|
retval = sd_update_lock_status(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_cmd_failed;
|
|
goto sd_execute_cmd_failed;
|
|
- }
|
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
scsi_set_resid(srb, 0);
|
|
scsi_set_resid(srb, 0);
|
|
@@ -4186,9 +4006,8 @@ int sd_execute_read_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
|
|
}
|
|
}
|
|
|
|
|
|
retval = sd_switch_clock(chip);
|
|
retval = sd_switch_clock(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return TRANSPORT_FAILED;
|
|
return TRANSPORT_FAILED;
|
|
- }
|
|
|
|
|
|
|
|
cmd_idx = srb->cmnd[2] & 0x3F;
|
|
cmd_idx = srb->cmnd[2] & 0x3F;
|
|
if (srb->cmnd[1] & 0x04)
|
|
if (srb->cmnd[1] & 0x04)
|
|
@@ -4211,9 +4030,8 @@ int sd_execute_read_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
|
|
sd_card->last_rsp_type = rsp_type;
|
|
sd_card->last_rsp_type = rsp_type;
|
|
|
|
|
|
retval = sd_switch_clock(chip);
|
|
retval = sd_switch_clock(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return TRANSPORT_FAILED;
|
|
return TRANSPORT_FAILED;
|
|
- }
|
|
|
|
|
|
|
|
#ifdef SUPPORT_SD_LOCK
|
|
#ifdef SUPPORT_SD_LOCK
|
|
if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
|
|
if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
|
|
@@ -4235,16 +4053,14 @@ int sd_execute_read_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
|
|
retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len,
|
|
retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len,
|
|
SD_RSP_TYPE_R1, NULL, 0,
|
|
SD_RSP_TYPE_R1, NULL, 0,
|
|
false);
|
|
false);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_read_cmd_failed;
|
|
goto sd_execute_read_cmd_failed;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (standby) {
|
|
if (standby) {
|
|
retval = sd_select_card(chip, 0);
|
|
retval = sd_select_card(chip, 0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_read_cmd_failed;
|
|
goto sd_execute_read_cmd_failed;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (acmd) {
|
|
if (acmd) {
|
|
@@ -4252,9 +4068,8 @@ int sd_execute_read_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
|
|
sd_card->sd_addr,
|
|
sd_card->sd_addr,
|
|
SD_RSP_TYPE_R1, NULL, 0,
|
|
SD_RSP_TYPE_R1, NULL, 0,
|
|
false);
|
|
false);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_read_cmd_failed;
|
|
goto sd_execute_read_cmd_failed;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (data_len <= 512) {
|
|
if (data_len <= 512) {
|
|
@@ -4273,9 +4088,8 @@ int sd_execute_read_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
|
|
cmd[4] = srb->cmnd[6];
|
|
cmd[4] = srb->cmnd[6];
|
|
|
|
|
|
buf = kmalloc(data_len, GFP_KERNEL);
|
|
buf = kmalloc(data_len, GFP_KERNEL);
|
|
- if (!buf) {
|
|
|
|
|
|
+ if (!buf)
|
|
return TRANSPORT_ERROR;
|
|
return TRANSPORT_ERROR;
|
|
- }
|
|
|
|
|
|
|
|
retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, byte_cnt,
|
|
retval = sd_read_data(chip, SD_TM_NORMAL_READ, cmd, 5, byte_cnt,
|
|
blk_cnt, bus_width, buf, data_len, 2000);
|
|
blk_cnt, bus_width, buf, data_len, 2000);
|
|
@@ -4340,43 +4154,37 @@ int sd_execute_read_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
|
|
}
|
|
}
|
|
|
|
|
|
retval = ext_sd_get_rsp(chip, rsp_len, sd_card->rsp, rsp_type);
|
|
retval = ext_sd_get_rsp(chip, rsp_len, sd_card->rsp, rsp_type);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_read_cmd_failed;
|
|
goto sd_execute_read_cmd_failed;
|
|
- }
|
|
|
|
|
|
|
|
if (standby) {
|
|
if (standby) {
|
|
retval = sd_select_card(chip, 1);
|
|
retval = sd_select_card(chip, 1);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_read_cmd_failed;
|
|
goto sd_execute_read_cmd_failed;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (send_cmd12) {
|
|
if (send_cmd12) {
|
|
retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
|
|
retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
|
|
SD_RSP_TYPE_R1b, NULL, 0,
|
|
SD_RSP_TYPE_R1b, NULL, 0,
|
|
false);
|
|
false);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_read_cmd_failed;
|
|
goto sd_execute_read_cmd_failed;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (data_len < 512) {
|
|
if (data_len < 512) {
|
|
retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200,
|
|
retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200,
|
|
SD_RSP_TYPE_R1, NULL, 0,
|
|
SD_RSP_TYPE_R1, NULL, 0,
|
|
false);
|
|
false);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_read_cmd_failed;
|
|
goto sd_execute_read_cmd_failed;
|
|
- }
|
|
|
|
|
|
|
|
retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02);
|
|
retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_read_cmd_failed;
|
|
goto sd_execute_read_cmd_failed;
|
|
- }
|
|
|
|
|
|
|
|
retval = rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
|
|
retval = rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_read_cmd_failed;
|
|
goto sd_execute_read_cmd_failed;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04))
|
|
if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04))
|
|
@@ -4390,9 +4198,8 @@ int sd_execute_read_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
|
|
if (retval == STATUS_SUCCESS)
|
|
if (retval == STATUS_SUCCESS)
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_read_cmd_failed;
|
|
goto sd_execute_read_cmd_failed;
|
|
- }
|
|
|
|
|
|
|
|
scsi_set_resid(srb, 0);
|
|
scsi_set_resid(srb, 0);
|
|
return TRANSPORT_GOOD;
|
|
return TRANSPORT_GOOD;
|
|
@@ -4438,9 +4245,8 @@ int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
|
|
}
|
|
}
|
|
|
|
|
|
retval = sd_switch_clock(chip);
|
|
retval = sd_switch_clock(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return TRANSPORT_FAILED;
|
|
return TRANSPORT_FAILED;
|
|
- }
|
|
|
|
|
|
|
|
cmd_idx = srb->cmnd[2] & 0x3F;
|
|
cmd_idx = srb->cmnd[2] & 0x3F;
|
|
if (srb->cmnd[1] & 0x04)
|
|
if (srb->cmnd[1] & 0x04)
|
|
@@ -4472,48 +4278,42 @@ int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
|
|
sd_card->last_rsp_type = rsp_type;
|
|
sd_card->last_rsp_type = rsp_type;
|
|
|
|
|
|
retval = sd_switch_clock(chip);
|
|
retval = sd_switch_clock(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return TRANSPORT_FAILED;
|
|
return TRANSPORT_FAILED;
|
|
- }
|
|
|
|
|
|
|
|
#ifdef SUPPORT_SD_LOCK
|
|
#ifdef SUPPORT_SD_LOCK
|
|
if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
|
|
if ((sd_card->sd_lock_status & SD_LOCK_1BIT_MODE) == 0) {
|
|
if (CHK_MMC_8BIT(sd_card)) {
|
|
if (CHK_MMC_8BIT(sd_card)) {
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
|
|
SD_BUS_WIDTH_8);
|
|
SD_BUS_WIDTH_8);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return TRANSPORT_FAILED;
|
|
return TRANSPORT_FAILED;
|
|
- }
|
|
|
|
|
|
|
|
} else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) {
|
|
} else if (CHK_SD(sd_card) || CHK_MMC_4BIT(sd_card)) {
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03,
|
|
SD_BUS_WIDTH_4);
|
|
SD_BUS_WIDTH_4);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return TRANSPORT_FAILED;
|
|
return TRANSPORT_FAILED;
|
|
- }
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#else
|
|
#else
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
|
|
retval = rtsx_write_register(chip, REG_SD_CFG1, 0x03, SD_BUS_WIDTH_4);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return TRANSPORT_FAILED;
|
|
return TRANSPORT_FAILED;
|
|
- }
|
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
if (data_len < 512) {
|
|
if (data_len < 512) {
|
|
retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len,
|
|
retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, data_len,
|
|
SD_RSP_TYPE_R1, NULL, 0,
|
|
SD_RSP_TYPE_R1, NULL, 0,
|
|
false);
|
|
false);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_write_cmd_failed;
|
|
goto sd_execute_write_cmd_failed;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (standby) {
|
|
if (standby) {
|
|
retval = sd_select_card(chip, 0);
|
|
retval = sd_select_card(chip, 0);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_write_cmd_failed;
|
|
goto sd_execute_write_cmd_failed;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (acmd) {
|
|
if (acmd) {
|
|
@@ -4521,25 +4321,22 @@ int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
|
|
sd_card->sd_addr,
|
|
sd_card->sd_addr,
|
|
SD_RSP_TYPE_R1, NULL, 0,
|
|
SD_RSP_TYPE_R1, NULL, 0,
|
|
false);
|
|
false);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_write_cmd_failed;
|
|
goto sd_execute_write_cmd_failed;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type,
|
|
retval = ext_sd_send_cmd_get_rsp(chip, cmd_idx, arg, rsp_type,
|
|
sd_card->rsp, rsp_len, false);
|
|
sd_card->rsp, rsp_len, false);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_write_cmd_failed;
|
|
goto sd_execute_write_cmd_failed;
|
|
- }
|
|
|
|
|
|
|
|
if (data_len <= 512) {
|
|
if (data_len <= 512) {
|
|
u16 i;
|
|
u16 i;
|
|
u8 *buf;
|
|
u8 *buf;
|
|
|
|
|
|
buf = kmalloc(data_len, GFP_KERNEL);
|
|
buf = kmalloc(data_len, GFP_KERNEL);
|
|
- if (!buf) {
|
|
|
|
|
|
+ if (!buf)
|
|
return TRANSPORT_ERROR;
|
|
return TRANSPORT_ERROR;
|
|
- }
|
|
|
|
|
|
|
|
rtsx_stor_get_xfer_buf(buf, data_len, srb);
|
|
rtsx_stor_get_xfer_buf(buf, data_len, srb);
|
|
|
|
|
|
@@ -4663,37 +4460,32 @@ int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
|
|
|
|
|
|
if (standby) {
|
|
if (standby) {
|
|
retval = sd_select_card(chip, 1);
|
|
retval = sd_select_card(chip, 1);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_write_cmd_failed;
|
|
goto sd_execute_write_cmd_failed;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (send_cmd12) {
|
|
if (send_cmd12) {
|
|
retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
|
|
retval = ext_sd_send_cmd_get_rsp(chip, STOP_TRANSMISSION, 0,
|
|
SD_RSP_TYPE_R1b, NULL, 0,
|
|
SD_RSP_TYPE_R1b, NULL, 0,
|
|
false);
|
|
false);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_write_cmd_failed;
|
|
goto sd_execute_write_cmd_failed;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (data_len < 512) {
|
|
if (data_len < 512) {
|
|
retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200,
|
|
retval = ext_sd_send_cmd_get_rsp(chip, SET_BLOCKLEN, 0x200,
|
|
SD_RSP_TYPE_R1, NULL, 0,
|
|
SD_RSP_TYPE_R1, NULL, 0,
|
|
false);
|
|
false);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_write_cmd_failed;
|
|
goto sd_execute_write_cmd_failed;
|
|
- }
|
|
|
|
|
|
|
|
retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02);
|
|
retval = rtsx_write_register(chip, SD_BYTE_CNT_H, 0xFF, 0x02);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_write_cmd_failed;
|
|
goto sd_execute_write_cmd_failed;
|
|
- }
|
|
|
|
|
|
|
|
retval = rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
|
|
retval = rtsx_write_register(chip, SD_BYTE_CNT_L, 0xFF, 0x00);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_write_cmd_failed;
|
|
goto sd_execute_write_cmd_failed;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04))
|
|
if ((srb->cmnd[1] & 0x02) || (srb->cmnd[1] & 0x04))
|
|
@@ -4707,9 +4499,8 @@ int sd_execute_write_data(struct scsi_cmnd *srb, struct rtsx_chip *chip)
|
|
if (retval == STATUS_SUCCESS)
|
|
if (retval == STATUS_SUCCESS)
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
goto sd_execute_write_cmd_failed;
|
|
goto sd_execute_write_cmd_failed;
|
|
- }
|
|
|
|
|
|
|
|
#ifdef SUPPORT_SD_LOCK
|
|
#ifdef SUPPORT_SD_LOCK
|
|
if (cmd_idx == LOCK_UNLOCK) {
|
|
if (cmd_idx == LOCK_UNLOCK) {
|
|
@@ -4888,36 +4679,31 @@ int sd_power_off_card3v3(struct rtsx_chip *chip)
|
|
int retval;
|
|
int retval;
|
|
|
|
|
|
retval = disable_card_clock(chip, SD_CARD);
|
|
retval = disable_card_clock(chip, SD_CARD);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
retval = rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
|
|
retval = rtsx_write_register(chip, CARD_OE, SD_OUTPUT_EN, 0);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
|
|
|
|
if (!chip->ft2_fast_mode) {
|
|
if (!chip->ft2_fast_mode) {
|
|
retval = card_power_off(chip, SD_CARD);
|
|
retval = card_power_off(chip, SD_CARD);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
mdelay(50);
|
|
mdelay(50);
|
|
}
|
|
}
|
|
|
|
|
|
if (chip->asic_code) {
|
|
if (chip->asic_code) {
|
|
retval = sd_pull_ctl_disable(chip);
|
|
retval = sd_pull_ctl_disable(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
} else {
|
|
} else {
|
|
retval = rtsx_write_register(chip, FPGA_PULL_CTL,
|
|
retval = rtsx_write_register(chip, FPGA_PULL_CTL,
|
|
FPGA_SD_PULL_CTL_BIT | 0x20,
|
|
FPGA_SD_PULL_CTL_BIT | 0x20,
|
|
FPGA_SD_PULL_CTL_BIT);
|
|
FPGA_SD_PULL_CTL_BIT);
|
|
- if (retval) {
|
|
|
|
|
|
+ if (retval)
|
|
return retval;
|
|
return retval;
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
@@ -4944,9 +4730,8 @@ int release_sd_card(struct rtsx_chip *chip)
|
|
memset(sd_card->raw_scr, 0, 8);
|
|
memset(sd_card->raw_scr, 0, 8);
|
|
|
|
|
|
retval = sd_power_off_card3v3(chip);
|
|
retval = sd_power_off_card3v3(chip);
|
|
- if (retval != STATUS_SUCCESS) {
|
|
|
|
|
|
+ if (retval != STATUS_SUCCESS)
|
|
return STATUS_FAIL;
|
|
return STATUS_FAIL;
|
|
- }
|
|
|
|
|
|
|
|
return STATUS_SUCCESS;
|
|
return STATUS_SUCCESS;
|
|
}
|
|
}
|