From 0f0fba63735d7a82b711cf8f3a9036775bd3a4ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Tue, 20 May 2008 17:07:50 +0000 Subject: [PATCH] wait for codec reset before attaching the codec git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25574 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../kernel/drivers/audio/ac97/auich/auich.c | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/add-ons/kernel/drivers/audio/ac97/auich/auich.c b/src/add-ons/kernel/drivers/audio/ac97/auich/auich.c index babc07e948..6aba1e99e2 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/auich/auich.c +++ b/src/add-ons/kernel/drivers/audio/ac97/auich/auich.c @@ -604,6 +604,7 @@ auich_setup(auich_dev * card) status_t err = B_OK; status_t rv; unsigned char cmd; + int i; PRINT(("auich_setup(%p)\n", card)); @@ -663,18 +664,25 @@ auich_setup(auich_dev * card) if ((rv & CNT_COLD) == 0) { LOG(("cold reset failed\n")); } - + + for (i = 0; i < 500; i++) { + rv = auich_reg_read_32(&card->config, AUICH_REG_GLOB_STA); + if (rv & STA_S0CR) + break; + snooze(1000); + } + + if (!(rv & STA_S0CR)) { /* reset failure */ + /* It never return STA_S0CR in some cases */ + PRINT(("reset failure\n")); + } + /* attach the codec */ PRINT(("codec attach\n")); ac97_attach(&card->config.ac97, (codec_reg_read)auich_codec_read, (codec_reg_write)auich_codec_write, &card->config, card->config.subvendor_id, card->config.subsystem_id); - rv = auich_reg_read_32(&card->config, AUICH_REG_GLOB_STA); - if (!(rv & STA_S0CR)) { /* reset failure */ - /* It never return STA_S0CR in some cases */ - PRINT(("reset failure\n")); - } /* Print capabilities though there are no supports for now */ if ((rv & STA_SAMPLE_CAP) == STA_POM20) { LOG(("20 bit precision support\n"));