]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 28 Oct 2010 16:33:42 +0000 (09:33 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 28 Oct 2010 16:33:42 +0000 (09:33 -0700)
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/cjb/mmc: (66 commits)
  mmc: add new sdhci-pxa driver for Marvell SoCs
  mmc: make number of mmcblk minors configurable
  mmc_spi: Recover from CRC errors for r/w operation over SPI.
  mmc: sdhci-pltfm: add -pltfm driver for imx35/51
  mmc: sdhci-of-esdhc: factor out common stuff
  mmc: sdhci_pltfm: pass more data on custom init call
  mmc: sdhci: introduce get_ro private write-protect hook
  mmc: sdhci-pltfm: move .h file into appropriate subdir
  mmc: sdhci-pltfm: Add structure for host-specific data
  mmc: fix cb710 kconfig dependency warning
  mmc: cb710: remove debugging printk (info duplicated from mmc-core)
  mmc: cb710: clear irq handler on init() error path
  mmc: cb710: remove unnecessary msleep()
  mmc: cb710: implement get_cd() callback
  mmc: cb710: partially demystify clock selection
  mmc: add a file to debugfs for changing host clock at runtime
  mmc: sdhci: allow for eMMC 74 clock generation by controller
  mmc: sdhci: highspeed: check for mmc as well as sd cards
  mmc: sdhci: Add Moorestown device support
  mmc: sdhci: Intel Medfield support
  ...

1  2 
drivers/mmc/host/Kconfig
drivers/mmc/host/omap_hsmmc.c
include/linux/pci_ids.h

diff --combined drivers/mmc/host/Kconfig
index 1a0261160e5600dafdf42127029523bc303e5922,40b0fb9a47fb459f3d3582e83ed0e91292e4800f..d618e867399686e4d11916a72e434325ab135e6c
@@@ -130,6 -130,16 +130,16 @@@ config MMC_SDHCI_CNS3XX
  
          If unsure, say N.
  
+ config MMC_SDHCI_ESDHC_IMX
+       bool "SDHCI platform support for the Freescale eSDHC i.MX controller"
+       depends on MMC_SDHCI_PLTFM && (ARCH_MX25 || ARCH_MX35 || ARCH_MX5)
+       select MMC_SDHCI_IO_ACCESSORS
+       help
+         This selects the Freescale eSDHC controller support on the platform
+         bus, found on platforms like mx35/51.
+         If unsure, say N.
  config MMC_SDHCI_S3C
        tristate "SDHCI support on Samsung S3C SoC"
        depends on MMC_SDHCI && PLAT_SAMSUNG
  
          If unsure, say N.
  
+ config MMC_SDHCI_PXA
+       tristate "Marvell PXA168/PXA910/MMP2 SD Host Controller support"
+       depends on ARCH_PXA || ARCH_MMP
+       select MMC_SDHCI
+       select MMC_SDHCI_IO_ACCESSORS
+       help
+         This selects the Marvell(R) PXA168/PXA910/MMP2 SD Host Controller.
+         If you have a PXA168/PXA910/MMP2 platform with SD Host Controller
+         and a card slot, say Y or M here.
+         If unsure, say N.
  config MMC_SDHCI_SPEAR
        tristate "SDHCI support on ST SPEAr platform"
        depends on MMC_SDHCI && PLAT_SPEAR
@@@ -237,7 -259,7 +259,7 @@@ endchoic
  
  config MMC_ATMELMCI_DMA
        bool "Atmel MCI DMA support (EXPERIMENTAL)"
 -      depends on MMC_ATMELMCI && AVR32 && DMA_ENGINE && EXPERIMENTAL
 +      depends on MMC_ATMELMCI && (AVR32 || ARCH_AT91SAM9G45) && DMA_ENGINE && EXPERIMENTAL
        help
          Say Y here to have the Atmel MCI driver use a DMA engine to
          do data transfers and thus increase the throughput and
@@@ -395,6 -417,7 +417,7 @@@ config MMC_TMI
  config MMC_CB710
        tristate "ENE CB710 MMC/SD Interface support"
        depends on PCI
+       select MISC_DEVICES
        select CB710_CORE
        help
          This option enables support for MMC/SD part of ENE CB710/720 Flash
@@@ -451,3 -474,17 +474,17 @@@ config MMC_JZ474
          SoCs.
          If you have a board based on such a SoC and with a SD/MMC slot,
          say Y or M here.
+ config MMC_USHC
+       tristate "USB SD Host Controller (USHC) support"
+       depends on USB
+       help
+         This selects support for USB SD Host Controllers based on
+         the Cypress Astoria chip with firmware compliant with CSR's
+         USB SD Host Controller specification (CS-118793-SP).
+         CSR boards with this device include: USB<>SDIO (M1985v2),
+         and Ultrasira.
+         Note: These controllers only support SDIO cards and do not
+         support MMC or SD memory cards.
index 4693e62145a6797f2a67415495c9c7e953ec8e66,8c863ccb1bfeb4e9affc6d651d512e8bd8bcb261..e865032a52ebba3640fd1cbbaac0ff0dc8093be1
@@@ -250,9 -250,9 +250,9 @@@ static int omap_hsmmc_1_set_power(struc
                mmc_slot(host).before_set_reg(dev, slot, power_on, vdd);
  
        if (power_on)
-               ret = mmc_regulator_set_ocr(host->vcc, vdd);
+               ret = mmc_regulator_set_ocr(host->mmc, host->vcc, vdd);
        else
-               ret = mmc_regulator_set_ocr(host->vcc, 0);
+               ret = mmc_regulator_set_ocr(host->mmc, host->vcc, 0);
  
        if (mmc_slot(host).after_set_reg)
                mmc_slot(host).after_set_reg(dev, slot, power_on, vdd);
@@@ -291,18 -291,23 +291,23 @@@ static int omap_hsmmc_23_set_power(stru
         * chips/cards need an interface voltage rail too.
         */
        if (power_on) {
-               ret = mmc_regulator_set_ocr(host->vcc, vdd);
+               ret = mmc_regulator_set_ocr(host->mmc, host->vcc, vdd);
                /* Enable interface voltage rail, if needed */
                if (ret == 0 && host->vcc_aux) {
                        ret = regulator_enable(host->vcc_aux);
                        if (ret < 0)
-                               ret = mmc_regulator_set_ocr(host->vcc, 0);
+                               ret = mmc_regulator_set_ocr(host->mmc,
+                                                       host->vcc, 0);
                }
        } else {
+               /* Shut down the rail */
                if (host->vcc_aux)
                        ret = regulator_disable(host->vcc_aux);
-               if (ret == 0)
-                       ret = mmc_regulator_set_ocr(host->vcc, 0);
+               if (!ret) {
+                       /* Then proceed to shut down the local regulator */
+                       ret = mmc_regulator_set_ocr(host->mmc,
+                                               host->vcc, 0);
+               }
        }
  
        if (mmc_slot(host).after_set_reg)
@@@ -343,9 -348,9 +348,9 @@@ static int omap_hsmmc_23_set_sleep(stru
        if (cardsleep) {
                /* VCC can be turned off if card is asleep */
                if (sleep)
-                       err = mmc_regulator_set_ocr(host->vcc, 0);
+                       err = mmc_regulator_set_ocr(host->mmc, host->vcc, 0);
                else
-                       err = mmc_regulator_set_ocr(host->vcc, vdd);
+                       err = mmc_regulator_set_ocr(host->mmc, host->vcc, vdd);
        } else
                err = regulator_set_mode(host->vcc, mode);
        if (err)
@@@ -364,7 -369,6 +369,7 @@@ static int omap_hsmmc_reg_get(struct om
  {
        struct regulator *reg;
        int ret = 0;
 +      int ocr_value = 0;
  
        switch (host->id) {
        case OMAP_MMC1_DEVID:
                }
        } else {
                host->vcc = reg;
 +              ocr_value = mmc_regulator_get_ocrmask(reg);
 +              if (!mmc_slot(host).ocr_mask) {
 +                      mmc_slot(host).ocr_mask = ocr_value;
 +              } else {
 +                      if (!(mmc_slot(host).ocr_mask & ocr_value)) {
 +                              pr_err("MMC%d ocrmask %x is not supported\n",
 +                                      host->id, mmc_slot(host).ocr_mask);
 +                              mmc_slot(host).ocr_mask = 0;
 +                              return -EINVAL;
 +                      }
 +              }
                mmc_slot(host).ocr_mask = mmc_regulator_get_ocrmask(reg);
  
                /* Allow an aux regulator */
@@@ -994,17 -987,6 +999,17 @@@ static inline void omap_hsmmc_reset_con
        OMAP_HSMMC_WRITE(host->base, SYSCTL,
                         OMAP_HSMMC_READ(host->base, SYSCTL) | bit);
  
 +      /*
 +       * OMAP4 ES2 and greater has an updated reset logic.
 +       * Monitor a 0->1 transition first
 +       */
 +      if (mmc_slot(host).features & HSMMC_HAS_UPDATED_RESET) {
 +              while ((!(OMAP_HSMMC_READ(host, SYSCTL) & bit))
 +                                      && (i++ < limit))
 +                      cpu_relax();
 +      }
 +      i = 0;
 +
        while ((OMAP_HSMMC_READ(host->base, SYSCTL) & bit) &&
                (i++ < limit))
                cpu_relax();
@@@ -2026,8 -2008,6 +2031,8 @@@ static int __init omap_hsmmc_probe(stru
        if (res == NULL || irq < 0)
                return -ENXIO;
  
 +      res->start += pdata->reg_offset;
 +      res->end += pdata->reg_offset;
        res = request_mem_region(res->start, res->end - res->start + 1,
                                                        pdev->name);
        if (res == NULL)
  
        /* Since we do only SG emulation, we can have as many segs
         * as we want. */
-       mmc->max_phys_segs = 1024;
-       mmc->max_hw_segs = 1024;
+       mmc->max_segs = 1024;
  
        mmc->max_blk_size = 512;       /* Block Length at max can be 1024 */
        mmc->max_blk_count = 0xFFFF;    /* No. of Blocks is 16 bits */
        mmc->caps |= MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED |
                     MMC_CAP_WAIT_WHILE_BUSY | MMC_CAP_ERASE;
  
 -      switch (mmc_slot(host).wires) {
 -      case 8:
 -              mmc->caps |= MMC_CAP_8_BIT_DATA;
 -              /* Fall through */
 -      case 4:
 +      mmc->caps |= mmc_slot(host).caps;
 +      if (mmc->caps & MMC_CAP_8_BIT_DATA)
                mmc->caps |= MMC_CAP_4_BIT_DATA;
 -              break;
 -      case 1:
 -              /* Nothing to crib here */
 -      case 0:
 -              /* Assuming nothing was given by board, Core use's 1-Bit */
 -              break;
 -      default:
 -              /* Completely unexpected.. Core goes with 1-Bit Width */
 -              dev_crit(mmc_dev(host->mmc), "Invalid width %d\n used!"
 -                      "using 1 instead\n", mmc_slot(host).wires);
 -      }
  
        if (mmc_slot(host).nonremovable)
                mmc->caps |= MMC_CAP_NONREMOVABLE;
diff --combined include/linux/pci_ids.h
index b4c3d1b500370bc7d96f4ac7ed9ec092f5f608a9,1196d429f18209a8e5c7b010a224bedc78159315..30d91838a19892f953749c6628458fa4fdf91d3e
  
  #define PCI_VENDOR_ID_ANIGMA          0x1051
  #define PCI_DEVICE_ID_ANIGMA_MC145575 0x0100
 -  
 +
  #define PCI_VENDOR_ID_EFAR            0x1055
  #define PCI_DEVICE_ID_EFAR_SLC90E66_1 0x9130
  #define PCI_DEVICE_ID_EFAR_SLC90E66_3 0x9463
  
  #define PCI_VENDOR_ID_ZIATECH         0x1138
  #define PCI_DEVICE_ID_ZIATECH_5550_HC 0x5550
 - 
 +
  
  #define PCI_VENDOR_ID_SYSKONNECT      0x1148
  #define PCI_DEVICE_ID_SYSKONNECT_TR   0x4200
  #define PCI_DEVICE_ID_RP8OCTA         0x0005
  #define PCI_DEVICE_ID_RP8J            0x0006
  #define PCI_DEVICE_ID_RP4J            0x0007
 -#define PCI_DEVICE_ID_RP8SNI          0x0008  
 -#define PCI_DEVICE_ID_RP16SNI         0x0009  
 +#define PCI_DEVICE_ID_RP8SNI          0x0008
 +#define PCI_DEVICE_ID_RP16SNI         0x0009
  #define PCI_DEVICE_ID_RPP4            0x000A
  #define PCI_DEVICE_ID_RPP8            0x000B
  #define PCI_DEVICE_ID_RP4M            0x000D
  #define PCI_DEVICE_ID_URP8INTF                0x0802
  #define PCI_DEVICE_ID_URP16INTF               0x0803
  #define PCI_DEVICE_ID_URP8OCTA                0x0805
 -#define PCI_DEVICE_ID_UPCI_RM3_8PORT  0x080C       
 +#define PCI_DEVICE_ID_UPCI_RM3_8PORT  0x080C
  #define PCI_DEVICE_ID_UPCI_RM3_4PORT  0x080D
 -#define PCI_DEVICE_ID_CRP16INTF               0x0903       
 +#define PCI_DEVICE_ID_CRP16INTF               0x0903
  
  #define PCI_VENDOR_ID_CYCLADES                0x120e
  #define PCI_DEVICE_ID_CYCLOM_Y_Lo     0x0100
  #define PCI_DEVICE_ID_RASTEL_2PORT    0x2000
  
  #define PCI_VENDOR_ID_ZOLTRIX         0x15b0
 -#define PCI_DEVICE_ID_ZOLTRIX_2BD0    0x2bd0 
 +#define PCI_DEVICE_ID_ZOLTRIX_2BD0    0x2bd0
  
  #define PCI_VENDOR_ID_MELLANOX                0x15b3
  #define PCI_DEVICE_ID_MELLANOX_TAVOR  0x5a44
  #define PCI_VENDOR_ID_ARIMA           0x161f
  
  #define PCI_VENDOR_ID_BROCADE         0x1657
 +#define PCI_DEVICE_ID_BROCADE_CT      0x0014
 +#define PCI_DEVICE_ID_BROCADE_FC_8G1P 0x0017
 +#define PCI_DEVICE_ID_BROCADE_CT_FC   0x0021
  
  #define PCI_VENDOR_ID_SIBYTE          0x166d
  #define PCI_DEVICE_ID_BCM1250_PCI     0x0001
  
  #define PCI_VENDOR_ID_SILAN           0x1904
  
 +#define PCI_VENDOR_ID_RENESAS         0x1912
 +#define PCI_DEVICE_ID_RENESAS_SH7781  0x0001
 +#define PCI_DEVICE_ID_RENESAS_SH7780  0x0002
 +#define PCI_DEVICE_ID_RENESAS_SH7763  0x0004
 +#define PCI_DEVICE_ID_RENESAS_SH7785  0x0007
 +#define PCI_DEVICE_ID_RENESAS_SH7786  0x0010
 +
  #define PCI_VENDOR_ID_TDI               0x192E
  #define PCI_DEVICE_ID_TDI_EHCI          0x0101
  
  #define PCI_DEVICE_ID_INTEL_82375     0x0482
  #define PCI_DEVICE_ID_INTEL_82424     0x0483
  #define PCI_DEVICE_ID_INTEL_82378     0x0484
+ #define PCI_DEVICE_ID_INTEL_MRST_SD0  0x0807
+ #define PCI_DEVICE_ID_INTEL_MRST_SD1  0x0808
+ #define PCI_DEVICE_ID_INTEL_MFD_SD    0x0820
+ #define PCI_DEVICE_ID_INTEL_MFD_SDIO1 0x0821
+ #define PCI_DEVICE_ID_INTEL_MFD_SDIO2 0x0822
+ #define PCI_DEVICE_ID_INTEL_MFD_EMMC0 0x0823
+ #define PCI_DEVICE_ID_INTEL_MFD_EMMC1 0x0824
  #define PCI_DEVICE_ID_INTEL_I960      0x0960
  #define PCI_DEVICE_ID_INTEL_I960RM    0x0962
  #define PCI_DEVICE_ID_INTEL_8257X_SOL 0x1062
  #define PCI_DEVICE_ID_INTEL_82815_MC  0x1130
  #define PCI_DEVICE_ID_INTEL_82815_CGC 0x1132
  #define PCI_DEVICE_ID_INTEL_82092AA_0 0x1221
 -#define PCI_DEVICE_ID_INTEL_7505_0    0x2550  
 +#define PCI_DEVICE_ID_INTEL_7505_0    0x2550
  #define PCI_DEVICE_ID_INTEL_7205_0    0x255d
  #define PCI_DEVICE_ID_INTEL_82437     0x122d
  #define PCI_DEVICE_ID_INTEL_82371FB_0 0x122e
  #define PCI_DEVICE_ID_INTEL_MCH_PC    0x3599
  #define PCI_DEVICE_ID_INTEL_MCH_PC1   0x359a
  #define PCI_DEVICE_ID_INTEL_E7525_MCH 0x359e
 +#define PCI_DEVICE_ID_INTEL_I7300_MCH_ERR 0x360c
 +#define PCI_DEVICE_ID_INTEL_I7300_MCH_FB0 0x360f
 +#define PCI_DEVICE_ID_INTEL_I7300_MCH_FB1 0x3610
  #define PCI_DEVICE_ID_INTEL_IOAT_CNB  0x360b
  #define PCI_DEVICE_ID_INTEL_FBD_CNB   0x360c
  #define PCI_DEVICE_ID_INTEL_IOAT_JSF0 0x3710