1. 24 9月, 2007 9 次提交
    • D
      MMC core learns about SPI · af517150
      David Brownell 提交于
      Teach the MMC/SD/SDIO core about using SPI mode.
      
       - Use mmc_host_is_spi() so enumeration works through SPI signaling
         and protocols, not just the native versions.
      
       - Provide the SPI response type flags with each request issued,
         including requests from the new lock/unlock code.
      
       - Understand that cmd->resp[0] and mmc_get_status() results for SPI
         return different values than for "native" MMC/SD protocol; this
         affects resetting, checking card lock status, and some others.
      
       - Understand that some commands act a bit differently ... notably:
           * OP_COND command doesn't return the OCR
           * APP_CMD status doesn't have an R1_APP_CMD analogue
      
      Those changes required some new and updated primitives:
      
       - Provide utilities to access two SPI-only requests, and one
         request that wasn't previously needed:
           * mmc_spi_read_ocr() ... SPI only
           * mmc_spi_set_crc() ... SPI only (override by module parm)
           * mmc_send_cid() ... for use without broadcast mode
      
       - Updated internal routines:
           * Previous mmc_send_csd() modified into mmc_send_cxd_native();
             it uses native "R2" responses, which include 16 bytes of data.
           * Previous mmc_send_ext_csd() becomes new mmc_send_cxd_data()
             helper for command-and-data access
           * Bugfix to that mmc_send_cxd_data() code:  dma-to-stack is
             unsafe/nonportable, so kmalloc a bounce buffer instead.
      
       - Modified mmc_send_ext_csd() now uses mmc_send_cxd_data() helper
      
       - Modified mmc_send_csd(), and new mmc_spi_send_cid(), routines use
         those helper routines based on whether they're native or SPI
      
      The newest categories of cards supported by the MMC stack aren't expected
      to work yet with SPI:  MMC or SD cards with over 4GB data, and SDIO.
      All those cards support SPI mode, so eventually they should work too.
      Signed-off-by: NDavid Brownell <dbrownell@users.sourceforge.net>
      Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
      af517150
    • P
      mmc: increase power up delay · f9996aee
      Pierre Ossman 提交于
      Increase delay for power up in order to support some slower boards.
      
      Also add some comments about why the delays are there.
      Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
      f9996aee
    • P
      mmc: replace BUG_ON with WARN_ON · d84075c8
      Pierre Ossman 提交于
      Replace all cases of BUG_ON with WARN_ON where there is a chance
      (with varying degrees of slim) that the kernel can continue without
      incidence.
      Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
      d84075c8
    • P
      mmc: fix sdio timeout calculation · e6f918bf
      Pierre Ossman 提交于
      SDIO doesn't have a CSD so it uses different timeout values than
      SD memory.
      Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
      e6f918bf
    • P
      mmc: fix incorrect divisor in debug output · ce252edd
      Pierre Ossman 提交于
      Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
      ce252edd
    • N
      sdio: allow for mmc_claim_host to be aborted · 2342f332
      Nicolas Pitre 提交于
      It is sometimes necessary to give up on trying to claim the host lock,
      especially if that happens in a thread that has to be stopped.
      
      While at it, fix the description for mmc_claim_host() which was wrong.
      Signed-off-by: NNicolas Pitre <npitre@mvista.com>
      Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
      2342f332
    • N
      mmc: initialize mmc subsystem with subsys_initcall() · 26074962
      Nicolas Pitre 提交于
      The problem is that the sdio_bus must be registered before any SDIO
      drivers are registered against it otherwise the kernel sulks.  Because
      the sdio_bus registration happens through module_init (equivalent to
      device_initcall), then any SDIO
      drivers linked before the SDIO core code in the kernel will be initialized
      first.
      
      Upcoming SDIO function drivers are likely to be located outside the
      drivers/mmc directory as it is common practice to group drivers according
      to their function rather than the bus they use.  SDIO drivers are therefore
      likely to appear at random location in the kernel link.
      
      To make sure the sdio_bus is always initialized before any SDIO drivers,
      let's move the MMC init to the subsys_initcall level.
      Signed-off-by: NNicolas Pitre <npitre@mvista.com>
      Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
      26074962
    • P
      mmc: basic SDIO device model · e29a7d73
      Pierre Ossman 提交于
      Add the sdio bus type and basic device handling.
      Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
      e29a7d73
    • P
      mmc: detect SDIO cards · 5c4e6f13
      Pierre Ossman 提交于
      Really basic init sequence for SDIO cards.
      Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
      5c4e6f13
  2. 23 9月, 2007 2 次提交
  3. 26 7月, 2007 4 次提交
  4. 10 7月, 2007 3 次提交
  5. 10 5月, 2007 1 次提交
  6. 09 5月, 2007 1 次提交
  7. 01 5月, 2007 12 次提交
  8. 06 3月, 2007 1 次提交
  9. 05 2月, 2007 5 次提交
    • P
      mmc: Graceful fallback for fancy features · ae06eaf9
      Pierre Ossman 提交于
      MMC high-speed, wide bus support and SD high-speed
      are functions that aren't critical for correct
      operation of the card. As such, they shouldn't mark
      the card as bad or dead when there is a failure
      activating these features.
      
      This is needed in particular on some really stupid
      hardware (e.g. Winbond's) where not all data transfer
      commands are supported.
      Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
      ae06eaf9
    • P
      mmc: Allow host drivers to specify max block count · 55db890a
      Pierre Ossman 提交于
      Many controllers have an upper limit on the number of blocks that can be
      transferred in one request. Allow the host drivers to specify this and make
      sure we avoid hitting this limit.
      
      Also change the max_sectors field to avoid confusion. This makes it map
      less directly to the block layer limits, but as they didn't apply directly
      on MMC cards anyway, this isn't a great loss.
      Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
      55db890a
    • P
      mmc: Allow host drivers to specify a max block size · fe4a3c7a
      Pierre Ossman 提交于
      Most controllers have an upper limit on the block size. Allow the host
      drivers to specify this and make sure we avoid hitting this limit.
      Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
      fe4a3c7a
    • P
      mmc: Add support for SDHC cards · fba68bd2
      Philip Langdale 提交于
      Thanks to the generous donation of an SDHC card by John Gilmore, and
      the surprisingly enlightened decision by the SD Card Association to
      publish useful specs, I've been able to bash out support for SDHC. The
      changes are not too profound:
      
      i) Add a card flag indicating the card uses block level addressing and
      check it in the block driver. As we never took advantage of byte-level
      addressing, this simply involves skipping the block -> byte
      translation when sending commands.
      
      ii) The layout of the CSD is changed - a set of fields are discarded
      to make space for a larger C_SIZE. We did not reference any of the
      discarded fields except those related to the C_SIZE.
      
      iii) Read and write timeouts are fixed values and not calculated from
      CSD values.
      
      iv) Before invoking SEND_APP_OP_COND, we must invoke the new
      SEND_IF_COND to inform the card we support SDHC.
      Signed-off-by: NPhilipl Langdale <philipl@overt.org>
      Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
      fba68bd2
    • P
      mmc: replace host->card_busy · f22ee4ed
      Pierre Ossman 提交于
      As card_busy was only used to indicate if the host was exclusively
      claimed and not really used to identify a particular card, replacing
      it with just a boolean makes things a lot more easily understandable.
      Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
      f22ee4ed
  10. 02 12月, 2006 2 次提交
    • P
      mmc: Support for high speed SD cards · 7ccd266e
      Pierre Ossman 提交于
      Modern SD cards support a clock speed of 50 MHz. Make sure we test for
      this capability and do the song and dance required to activate it.
      
      Activating high speed support actually modifies the TRAN_SPEED field
      of the CSD. But as the spec says that the cards must report 50 MHz,
      we might as well skip re-reading the CSD.
      Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
      7ccd266e
    • P
      mmc: Fix mmc_delay() function · 73778120
      Pierre Ossman 提交于
      Several fixes for mmc_delay():
      
       * Repair if-clause that was supposed to detect sub-hz delays.
       * Change yield() to cond_resched() as yield() no longer has the
         semantics we desire.
       * mmc_delay() is used to guarantee protocol delays, so we cannot
         return early (i.e. use _interruptable).
      
      Based on patch by Amol Lad.
      Signed-off-by: NPierre Ossman <drzeus@drzeus.cx>
      73778120