Author: ian
Date: Fri Dec 19 23:13:46 2014
New Revision: 275944
URL: https://svnweb.freebsd.org/changeset/base/275944

Log:
  Add code to set and reset open-drain mode on the bus when requested.
  
  Submitted by: Michal Meloun <[email protected]>

Modified:
  head/sys/arm/ti/ti_sdhci.c

Modified: head/sys/arm/ti/ti_sdhci.c
==============================================================================
--- head/sys/arm/ti/ti_sdhci.c  Fri Dec 19 20:51:54 2014        (r275943)
+++ head/sys/arm/ti/ti_sdhci.c  Fri Dec 19 23:13:46 2014        (r275944)
@@ -112,6 +112,7 @@ static struct ofw_compat_data compat_dat
 #define        MMCHS_CON                       0x02C
 #define          MMCHS_CON_DW8                   (1 << 5)
 #define          MMCHS_CON_DVAL_8_4MS            (3 << 9)
+#define          MMCHS_CON_OD                    (1 << 0)
 #define MMCHS_SYSCTL                   0x12C
 #define   MMCHS_SYSCTL_CLKD_MASK          0x3FF
 #define   MMCHS_SYSCTL_CLKD_SHIFT         6
@@ -327,7 +328,7 @@ ti_sdhci_update_ios(device_t brdev, devi
        struct ti_sdhci_softc *sc = device_get_softc(brdev);
        struct sdhci_slot *slot;
        struct mmc_ios *ios;
-       uint32_t val32;
+       uint32_t val32, newval32;
 
        slot = device_get_ivars(reqdev);
        ios = &slot->host.ios;
@@ -339,10 +340,20 @@ ti_sdhci_update_ios(device_t brdev, devi
         * requested, then let the standard driver handle everything else.
         */
        val32 = ti_mmchs_read_4(sc, MMCHS_CON);
+       newval32  = val32;
+
        if (ios->bus_width == bus_width_8)
-               ti_mmchs_write_4(sc, MMCHS_CON, val32 | MMCHS_CON_DW8); 
+               newval32 |= MMCHS_CON_DW8;
        else
-               ti_mmchs_write_4(sc, MMCHS_CON, val32 & ~MMCHS_CON_DW8); 
+               newval32 &= ~MMCHS_CON_DW8;
+
+       if (ios->bus_mode == opendrain)
+               newval32 |= MMCHS_CON_OD;
+       else /* if (ios->bus_mode == pushpull) */
+               newval32 &= ~MMCHS_CON_OD;
+
+       if (newval32 != val32)
+               ti_mmchs_write_4(sc, MMCHS_CON, newval32);
 
        return (sdhci_generic_update_ios(brdev, reqdev));
 }
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to