REDO: [PATCH 1/1] [Jaunty SRU] ALSA: hdsp - poll for iobox

Stefan Bader stefan.bader at canonical.com
Fri Jun 19 15:37:33 BST 2009


Brad Figg wrote:
> From: Tim Blechmann <tim at klingt.org>
> 
> sleeping for 2 seconds before checking for the iobox is not enough
> on some systems.
> this patch increases the timeout, but polls the card during that
> time. it thus speeds up the module loading when the card has already
> been initialized, while being more robust on systems, which require
> a higher timeout than the predefined 2 seconds.
> 
> BugLink: https://bugs.launchpad.net/bugs/363003
> 
> Signed-off-by: Tim Blechmann <tim at klingt.org>
> Signed-off-by: Takashi Iwai <tiwai at suse.de>
> (cherry picked from commit e588ed8304f76cbb396ee85e657a58990298a675)
> 
> Signed-off-by: Brad Figg <brad.figg at canonical.com>
> ---
>  sound/pci/rme9652/hdsp.c |   29 +++++++++++++++++++++++++----
>  1 files changed, 25 insertions(+), 4 deletions(-)
> 
> diff --git a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c
> index 736246f..911ad38 100644
> --- a/sound/pci/rme9652/hdsp.c
> +++ b/sound/pci/rme9652/hdsp.c
> @@ -653,7 +653,6 @@ static unsigned int hdsp_read(struct hdsp *hdsp, int reg)
>  
>  static int hdsp_check_for_iobox (struct hdsp *hdsp)
>  {
> -
>  	if (hdsp->io_type == H9652 || hdsp->io_type == H9632) return 0;
>  	if (hdsp_read (hdsp, HDSP_statusRegister) & HDSP_ConfigError) {
>  		snd_printk ("Hammerfall-DSP: no Digiface or Multiface connected!\n");
> @@ -661,7 +660,29 @@ static int hdsp_check_for_iobox (struct hdsp *hdsp)
>  		return -EIO;
>  	}
>  	return 0;
> +}
>  
> +static int hdsp_wait_for_iobox(struct hdsp *hdsp, unsigned int loops,
> +			       unsigned int delay)
> +{
> +	unsigned int i;
> +
> +	if (hdsp->io_type == H9652 || hdsp->io_type == H9632)
> +		return 0;
> +
> +	for (i = 0; i != loops; ++i) {
> +		if (hdsp_read(hdsp, HDSP_statusRegister) & HDSP_ConfigError)
> +			msleep(delay);
> +		else {
> +			snd_printd("Hammerfall-DSP: iobox found after %ums!\n",
> +				   i * delay);
> +			return 0;
> +		}
> +	}
> +
> +	snd_printk("Hammerfall-DSP: no Digiface or Multiface connected!\n");
> +	hdsp->state &= ~HDSP_FirmwareLoaded;
> +	return -EIO;
>  }
>  
>  static int snd_hdsp_load_firmware_from_cache(struct hdsp *hdsp) {
> @@ -5055,10 +5076,10 @@ static int __devinit snd_hdsp_create(struct snd_card *card,
>  		return err;
>  	
>  	if (!is_9652 && !is_9632) {
> -		/* we wait 2 seconds to let freshly inserted cardbus cards do their hardware init */
> -		ssleep(2);
> +		/* we wait a maximum of 10 seconds to let freshly
> +		 * inserted cardbus cards do their hardware init */
> +		err = hdsp_wait_for_iobox(hdsp, 1000, 10);
>  
> -		err = hdsp_check_for_iobox(hdsp);
>  		if (err < 0)
>  			return err;
>  
Applied

-- 

When all other means of communication fail, try words!





More information about the kernel-team mailing list