>> +static void pxav2_set_private_registers(struct sdhci_host *host, u8 mask) >> +{ >> + struct platform_device *pdev = to_platform_device(mmc_dev(host->mmc)); >> + struct sdhci_pxa_platdata *pdata = pdev->dev.platform_data; >> + >> + if (mask == SDHCI_RESET_ALL) { >> + u16 tmp = 0; >> + >> + /* >> + * tune timing of read data/command when crc error happen >> + * no performance impact >> + */ >> + if (pdata->clk_delay_sel == 1) { >> + tmp = readw(host->ioaddr + SD_CLOCK_BURST_SIZE_SETUP); >> + >> + tmp &= ~(SDCLK_DELAY_MASK << SDCLK_DELAY_SHIFT); >> + tmp |= (pdata->clk_delay_cycles & SDCLK_DELAY_MASK) >> + << SDCLK_DELAY_SHIFT; >> + tmp &= ~(SDCLK_SEL_MASK << SDCLK_SEL_SHIFT); >> + tmp |= (1 & SDCLK_SEL_MASK) << SDCLK_SEL_SHIFT; >> + >> + writew(tmp, host->ioaddr + SD_CLOCK_BURST_SIZE_SETUP); >> + } > > There are 3 possible value for clk_delay_sel. > > 0 == do not use clk_delay_cycles > 1 == use programmed clk_delay_cycles value (the code above) > all other values use the sd_clk which was used to drive the output > > The code about only handles 2 of the 3 cases pxa910/920 only require two cases. 1, clk_delay_sel = 1 with delay value. 2, use default setting and directly use sd_clk. clk_delay_sel = 3. > > suggest > > (if (pdata->clk_delay_sel) { >> + if (pdata->clk_delay_sel == 1) { >> + tmp = readw(host->ioaddr + SD_CLOCK_BURST_SIZE_SETUP); >> + >> + tmp &= ~(SDCLK_DELAY_MASK << SDCLK_DELAY_SHIFT); >> + tmp |= (pdata->clk_delay_cycles & SDCLK_DELAY_MASK) >> + << SDCLK_DELAY_SHIFT; >> + tmp &= ~(SDCLK_SEL_MASK << SDCLK_SEL_SHIFT); >> + tmp |= 1 << SDCLK_SEL_SHIFT; >> + >> + writew(tmp, host->ioaddr + SD_CLOCK_BURST_SIZE_SETUP); >> + } else { > >> + tmp = readw(host->ioaddr + SD_CLOCK_BURST_SIZE_SETUP); >> + tmp &= ~(SDCLK_SEL_MASK << SDCLK_SEL_SHIFT); >> + tmp |= 2 << SDCLK_SEL_SHIFT; >> + writew(tmp, host->ioaddr + SD_CLOCK_BURST_SIZE_SETUP); The else is default setting on pxa910 after reset. > } > } > > Philip and Mark >> > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@xxxxxxxxxxxxxxxxxxx > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > -- 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