On Mon, Feb 14, 2011 at 04:59:59PM +0000, Russell King - ARM Linux wrote: > On Mon, Feb 14, 2011 at 10:32:20AM +0800, Shawn Guo wrote: > > + switch (mmc_resp_type(cmd)) { > > + case MMC_RSP_NONE: > > + break; > > + case MMC_RSP_R1: > > + case MMC_RSP_R1B: > > + case MMC_RSP_R3: > > + cmd->resp[0] = readl(host->base + HW_SSP_SDRESP0); > > + break; > > + case MMC_RSP_R2: > > + cmd->resp[3] = readl(host->base + HW_SSP_SDRESP0); > > + cmd->resp[2] = readl(host->base + HW_SSP_SDRESP1); > > + cmd->resp[1] = readl(host->base + HW_SSP_SDRESP2); > > + cmd->resp[0] = readl(host->base + HW_SSP_SDRESP3); > > You really should be testing for MMC_RSP_PRESENT and MMC_RSP_136 > here. The response types are made up of a bitfield which allows > you to detect what's required rather than having to decode the > response type itself. > Please review the update. if (mmc_resp_type(cmd) & MMC_RSP_PRESENT) { if (mmc_resp_type(cmd) & MMC_RSP_136) { cmd->resp[3] = readl(host->base + HW_SSP_SDRESP0); cmd->resp[2] = readl(host->base + HW_SSP_SDRESP1); cmd->resp[1] = readl(host->base + HW_SSP_SDRESP2); cmd->resp[0] = readl(host->base + HW_SSP_SDRESP3); } else { cmd->resp[0] = readl(host->base + HW_SSP_SDRESP0); } } > > + else if (stat & BM_SSP_CTRL1_FIFO_UNDERRUN_IRQ) > > + data->error = -ENODATA; > > + else if (stat & BM_SSP_CTRL1_FIFO_OVERRUN_IRQ) > > + data->error = -EOVERFLOW; > > Both of these have a common error code - -EIO. > OK. Thanks for teaching. Regards, Shawn -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html