|
@@ -15,6 +15,20 @@
|
|
|
|
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
|
|
|
|
+static int pci32_sdhci_get_cd(struct sdhci_host *host)
|
|
|
+{
|
|
|
+ /* PIC32 SDHCI CD errata:
|
|
|
+ * - set CD_TEST and clear CD_TEST_INS bit
|
|
|
+ */
|
|
|
+ sdhci_writeb(host, SDHCI_CTRL_CD_TEST, SDHCI_HOST_CONTROL);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static const struct sdhci_ops pic32_sdhci_ops = {
|
|
|
+ .get_cd = pci32_sdhci_get_cd,
|
|
|
+};
|
|
|
+
|
|
|
static int pic32_sdhci_probe(struct udevice *dev)
|
|
|
{
|
|
|
struct sdhci_host *host = dev_get_priv(dev);
|
|
@@ -33,6 +47,7 @@ static int pic32_sdhci_probe(struct udevice *dev)
|
|
|
host->quirks = SDHCI_QUIRK_NO_HISPD_BIT | SDHCI_QUIRK_NO_CD;
|
|
|
host->bus_width = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
|
|
|
"bus-width", 4);
|
|
|
+ host->ops = &pic32_sdhci_ops;
|
|
|
|
|
|
ret = fdtdec_get_int_array(gd->fdt_blob, dev->of_offset,
|
|
|
"clock-freq-min-max", f_min_max, 2);
|