Loading drivers/mmc/core/sd.c +16 −4 Original line number Diff line number Diff line Loading @@ -335,6 +335,7 @@ static int mmc_read_switch(struct mmc_card *card) card->sw_caps.sd3_bus_mode = status[13]; /* Driver Strengths supported by the card */ card->sw_caps.sd3_drv_type = status[9]; card->sw_caps.sd3_curr_limit = status[7] | status[6] << 8; } out: Loading Loading @@ -557,14 +558,25 @@ static int sd_set_current_limit(struct mmc_card *card, u8 *status) * when we set current limit to 200ma, the card will draw 200ma, and * when we set current limit to 400/600/800ma, the card will draw its * maximum 300ma from the host. * * The above is incorrect: if we try to set a current limit that is * not supported by the card, the card can rightfully error out the * attempt, and remain at the default current limit. This results * in a 300mA card being limited to 200mA even though the host * supports 800mA. Failures seen with SanDisk 8GB UHS cards with * an iMX6 host. --rmk */ if (max_current >= 800) if (max_current >= 800 && card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_800) current_limit = SD_SET_CURRENT_LIMIT_800; else if (max_current >= 600) else if (max_current >= 600 && card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_600) current_limit = SD_SET_CURRENT_LIMIT_600; else if (max_current >= 400) else if (max_current >= 400 && card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_400) current_limit = SD_SET_CURRENT_LIMIT_400; else if (max_current >= 200) else if (max_current >= 200 && card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_200) current_limit = SD_SET_CURRENT_LIMIT_200; if (current_limit != SD_SET_CURRENT_NO_CHANGE) { Loading Loading
drivers/mmc/core/sd.c +16 −4 Original line number Diff line number Diff line Loading @@ -335,6 +335,7 @@ static int mmc_read_switch(struct mmc_card *card) card->sw_caps.sd3_bus_mode = status[13]; /* Driver Strengths supported by the card */ card->sw_caps.sd3_drv_type = status[9]; card->sw_caps.sd3_curr_limit = status[7] | status[6] << 8; } out: Loading Loading @@ -557,14 +558,25 @@ static int sd_set_current_limit(struct mmc_card *card, u8 *status) * when we set current limit to 200ma, the card will draw 200ma, and * when we set current limit to 400/600/800ma, the card will draw its * maximum 300ma from the host. * * The above is incorrect: if we try to set a current limit that is * not supported by the card, the card can rightfully error out the * attempt, and remain at the default current limit. This results * in a 300mA card being limited to 200mA even though the host * supports 800mA. Failures seen with SanDisk 8GB UHS cards with * an iMX6 host. --rmk */ if (max_current >= 800) if (max_current >= 800 && card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_800) current_limit = SD_SET_CURRENT_LIMIT_800; else if (max_current >= 600) else if (max_current >= 600 && card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_600) current_limit = SD_SET_CURRENT_LIMIT_600; else if (max_current >= 400) else if (max_current >= 400 && card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_400) current_limit = SD_SET_CURRENT_LIMIT_400; else if (max_current >= 200) else if (max_current >= 200 && card->sw_caps.sd3_curr_limit & SD_MAX_CURRENT_200) current_limit = SD_SET_CURRENT_LIMIT_200; if (current_limit != SD_SET_CURRENT_NO_CHANGE) { Loading