[PATCH v4 2/5] mmc: support sdhci-pxav2.c

zhangfei gao zhangfei.gao at gmail.com
Tue Jun 14 02:07:53 EDT 2011


>> +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 at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>



More information about the linux-arm-kernel mailing list