REDO: [PATCH 1/1] [Jaunty SRU] ALSA: hdsp - poll for iobox
Stefan Bader
stefan.bader at canonical.com
Fri Jun 19 14:37:33 UTC 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