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. > + 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. -- 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