• Adrian Hunter's avatar
    mmc: host: Add facility to support re-tuning · dfa13ebb
    Adrian Hunter authored
    Currently, there is core support for tuning during
    initialization. There can also be a need to re-tune
    periodically (e.g. sdhci) or to re-tune after the
    host controller is powered off (e.g. after PM
    runtime suspend / resume) or to re-tune in response
    to CRC errors.
    
    The main requirements for re-tuning are:
      - ability to enable / disable re-tuning
      - ability to flag that re-tuning is needed
      - ability to re-tune before any request
      - ability to hold off re-tuning if the card is busy
      - ability to hold off re-tuning if re-tuning is in
      progress
      - ability to run a re-tuning timer
    
    To support those requirements 7 members are added to struct
    mmc_host:
    
      unsigned int		can_retune:1;	/* re-tuning can be used */
      unsigned int		doing_retune:1;	/* re-tuning in progress */
      unsigned int		retune_now:1;   /* do re-tuning at next req */
      int			need_retune;	/* re-tuning is needed */
      int			hold_retune;	/* hold off re-tuning */
      unsigned int		retune_period;  /* re-tuning period in secs */
      struct timer_list	retune_timer;	/* for periodic re-tuning */
    
    need_retune is an integer so it can be set without needing
    synchronization. hold_retune is a integer to allow nesting.
    
    Various simple functions are provided to set / clear those
    variables.
    
    Subsequent patches take those functions into use.
    Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    dfa13ebb
host.c 17.5 KB