On Jun 5, 2012, at 7:11 PM, Mark F. Brown wrote:
> Hi Philip,
>
> Minor nitpicks: You should reuse SDHCI_QUIRK_MISSING_CAPS rather than
> adding SDHCI_QUIRK2_MISSING_CAPS2. The less quirks the better IMHO.
I am not sure that this is a good idea. It breaks the existing code for people
using quirks
for capability register 1.
>
> Also add an initializer for caps array rather than having an else statement:
>
> Instead of this:
> + } else
> + caps[1] = 0;
>
> Do this:
> u32 caps[2] = { 0, 0 };
okay
>
> -- Mark
>
> On Sat, Jun 2, 2012 at 4:30 PM, <[email protected]> wrote:
>> From: Philip Rakity <[email protected]>
>>
>> CAPABILITY_1 can be changed by the platform code using a quirk
>> CAPALBILTY_2 should also be allowed to be redefined.
>>
>> This is useful if UHS or other modes are not supported that
>> are defined in the the register but the platform code has
>> specific information that these value should be changed.
>>
>> Signed-off-by: Philip Rakity <[email protected]>
>> ---
>> drivers/mmc/host/sdhci.c | 7 +++++--
>> include/linux/mmc/sdhci.h | 4 +++-
>> 2 files changed, 8 insertions(+), 3 deletions(-)
>>
>> diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
>> index e626732..0fec448 100644
>> --- a/drivers/mmc/host/sdhci.c
>> +++ b/drivers/mmc/host/sdhci.c
>> @@ -2614,8 +2614,11 @@ int sdhci_add_host(struct sdhci_host *host)
>> caps[0] = (host->quirks & SDHCI_QUIRK_MISSING_CAPS) ? host->caps :
>> sdhci_readl(host, SDHCI_CAPABILITIES);
>>
>> - caps[1] = (host->version >= SDHCI_SPEC_300) ?
>> - sdhci_readl(host, SDHCI_CAPABILITIES_1) : 0;
>> + if (host->version >= SDHCI_SPEC_300) {
>> + caps[1] = (host->quirks & SDHCI_QUIRK2_MISSING_CAPS1) ?
>> + host->caps1 : sdhci_readl(host, SDHCI_CAPABILITIES_1);
>> + } else
>> + caps[1] = 0;
>>
>> if (host->quirks & SDHCI_QUIRK_FORCE_DMA)
>> host->flags |= SDHCI_USE_SDMA;
>> diff --git a/include/linux/mmc/sdhci.h b/include/linux/mmc/sdhci.h
>> index e9051e1..560fe22 100644
>> --- a/include/linux/mmc/sdhci.h
>> +++ b/include/linux/mmc/sdhci.h
>> @@ -91,6 +91,7 @@ struct sdhci_host {
>> unsigned int quirks2; /* More deviations from spec. */
>>
>> #define SDHCI_QUIRK2_HOST_OFF_CARD_ON (1<<0)
>> +#define SDHCI_QUIRK2_MISSING_CAPS1 (1<<1)
>>
>> int irq; /* Device IRQ */
>> void __iomem *ioaddr; /* Mapped address */
>> @@ -155,7 +156,8 @@ struct sdhci_host {
>>
>> struct timer_list timer; /* Timer for timeouts */
>>
>> - unsigned int caps; /* Alternative capabilities */
>> + unsigned int caps; /* replace capability register 1 */
>> + unsigned int caps1; /* replace capability register 2 */
>>
>> unsigned int ocr_avail_sdio; /* OCR bit masks */
>> unsigned int ocr_avail_sd;
>> --
>> 1.7.0.4
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html