From e1b1b0cbfd64322c5206ae5f970345990fbf36d4 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Thu, 1 Oct 2015 18:13:47 +0000 Subject: [PATCH] ralink: the mmc driver can now handle CD lines that are active low Signed-off-by: John Crispin SVN-Revision: 47074 --- ...MIPS-ralink-add-sdhci-for-mt7620a-SoC.patch | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/target/linux/ramips/patches-3.18/0053-mmc-MIPS-ralink-add-sdhci-for-mt7620a-SoC.patch b/target/linux/ramips/patches-3.18/0053-mmc-MIPS-ralink-add-sdhci-for-mt7620a-SoC.patch index 686c643f40..a3688138f8 100644 --- a/target/linux/ramips/patches-3.18/0053-mmc-MIPS-ralink-add-sdhci-for-mt7620a-SoC.patch +++ b/target/linux/ramips/patches-3.18/0053-mmc-MIPS-ralink-add-sdhci-for-mt7620a-SoC.patch @@ -25,7 +25,7 @@ Signed-off-by: John Crispin --- a/drivers/mmc/host/Kconfig +++ b/drivers/mmc/host/Kconfig -@@ -773,3 +773,5 @@ config MMC_SUNXI +@@ -773,3 +773,5 @@ help This selects support for the SD/MMC Host Controller on Allwinner sunxi SoCs. @@ -1760,7 +1760,7 @@ Signed-off-by: John Crispin + --- /dev/null +++ b/drivers/mmc/host/mtk-mmc/sd.c -@@ -0,0 +1,3050 @@ +@@ -0,0 +1,3060 @@ +/* Copyright Statement: + * + * This software/firmware and related documentation ("MediaTek Software") are @@ -1919,6 +1919,8 @@ Signed-off-by: John Crispin + +static int mtk_sw_poll; + ++static int cd_active_low = 1; ++ +//================================= +#define PERI_MSDC0_PDN (15) +//#define PERI_MSDC1_PDN (16) @@ -2337,7 +2339,10 @@ Signed-off-by: John Crispin + inserted = hw->get_cd_status(); + } else { + status = sdr_read32(MSDC_PS); -+ inserted = (status & MSDC_PS_CDSTS) ? 0 : 1; ++ if (cd_active_low) ++ inserted = (status & MSDC_PS_CDSTS) ? 0 : 1; ++ else ++ inserted = (status & MSDC_PS_CDSTS) ? 1 : 0; + } + +#if 0 @@ -4081,7 +4086,11 @@ Signed-off-by: John Crispin +#if 0 + present = host->card_inserted; /* why not read from H/W: Fix me*/ +#else -+ present = (sdr_read32(MSDC_PS) & MSDC_PS_CDSTS) ? 0 : 1; ++ // CD ++ if (cd_active_low) ++ present = (sdr_read32(MSDC_PS) & MSDC_PS_CDSTS) ? 0 : 1; ++ else ++ present = (sdr_read32(MSDC_PS) & MSDC_PS_CDSTS) ? 1 : 0; + host->card_inserted = present; +#endif + spin_unlock_irqrestore(&host->lock, flags); @@ -4534,6 +4543,7 @@ Signed-off-by: John Crispin + if ((hw->flags & MSDC_SDIO_IRQ) || (hw->flags & MSDC_EXT_SDIO_IRQ)) + mmc->caps |= MMC_CAP_SDIO_IRQ; /* yes for sdio */ + ++ cd_active_low = !of_property_read_bool(pdev->dev.of_node, "mediatek,cd-high"); + mtk_sw_poll = of_property_read_bool(pdev->dev.of_node, "mediatek,cd-poll"); + + if (mtk_sw_poll)