mmc: sdhci-pci-gli: GL9755: Support for CD/WP inversion on OF platforms
authorHector Martin <marcan@marcan.st>
Wed, 15 Dec 2021 16:10:44 +0000 (01:10 +0900)
committerUlf Hansson <ulf.hansson@linaro.org>
Tue, 21 Dec 2021 12:10:34 +0000 (13:10 +0100)
This is required on some Apple ARM64 laptops using this controller.
As is typical on DT platforms, pull these quirks from the device tree
using the standard mmc bindings.

See Documentation/devicetree/bindings/mmc/mmc-controller.yaml

Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Hector Martin <marcan@marcan.st>
Link: https://lore.kernel.org/r/20211215161045.38843-2-marcan@marcan.st
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
drivers/mmc/host/sdhci-pci-gli.c

index 4fd99c1..ad50f16 100644 (file)
@@ -12,6 +12,7 @@
 #include <linux/pci.h>
 #include <linux/mmc/mmc.h>
 #include <linux/delay.h>
+#include <linux/of.h>
 #include "sdhci.h"
 #include "sdhci-pci.h"
 #include "cqhci.h"
 #define PCI_GLI_9755_PECONF   0x44
 #define   PCI_GLI_9755_LFCLK    GENMASK(14, 12)
 #define   PCI_GLI_9755_DMACLK   BIT(29)
+#define   PCI_GLI_9755_INVERT_CD  BIT(30)
+#define   PCI_GLI_9755_INVERT_WP  BIT(31)
 
 #define PCI_GLI_9755_CFG2          0x48
 #define   PCI_GLI_9755_CFG2_L1DLY    GENMASK(28, 24)
@@ -570,6 +573,14 @@ static void gl9755_hw_setting(struct sdhci_pci_slot *slot)
        gl9755_wt_on(pdev);
 
        pci_read_config_dword(pdev, PCI_GLI_9755_PECONF, &value);
+       /*
+        * Apple ARM64 platforms using these chips may have
+        * inverted CD/WP detection.
+        */
+       if (of_property_read_bool(pdev->dev.of_node, "cd-inverted"))
+               value |= PCI_GLI_9755_INVERT_CD;
+       if (of_property_read_bool(pdev->dev.of_node, "wp-inverted"))
+               value |= PCI_GLI_9755_INVERT_WP;
        value &= ~PCI_GLI_9755_LFCLK;
        value &= ~PCI_GLI_9755_DMACLK;
        pci_write_config_dword(pdev, PCI_GLI_9755_PECONF, value);