On Sat, 2003-01-11 at 06:59, Everett Coleman II wrote: > Hello all, > I have a titanium powerbook g4 667, and i'm using bitkeeper > 2.4.21-pre2. Sometimes when i open it up from sleep the sound goes > crazy. It sort of sounds like an high frequency pitch or something. > I wanted to know if anybody else is experiencing this and how to fix > it...
I think I fixed that in my bk tree, I will update the rsync to 2.4.20-ben2 with that fix soon. Patch enclosed for those who want to test. -- Benjamin Herrenschmidt <[EMAIL PROTECTED]>
# This is a BitKeeper generated patch for the following project: # Project Name: Linux 2.4 for PowerPC # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet 1.759 -> 1.760 # drivers/sound/dmasound/tas3004.c 1.5 -> 1.6 # drivers/sound/dmasound/tas3001c.c 1.10 -> 1.11 # drivers/sound/dmasound/dmasound_awacs.c 1.29 -> 1.30 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 03/01/09 [EMAIL PROTECTED] 1.760 # dmasound: # Mute all outputs and hold chip reset during sleep, then do a # full chip reset on wakeup on TAS 3001c & 3004 hw # -------------------------------------------- # diff -Nru a/drivers/sound/dmasound/dmasound_awacs.c b/drivers/sound/dmasound/dmasound_awacs.c --- a/drivers/sound/dmasound/dmasound_awacs.c Sat Jan 11 11:21:29 2003 +++ b/drivers/sound/dmasound/dmasound_awacs.c Sat Jan 11 11:21:29 2003 @@ -1425,10 +1425,18 @@ /* stop rx - if going - a bit of a daft user... but */ out_le32(&awacs_rxdma->control, (RUN|WAKE|FLUSH << 16)); /* deny interrupts */ + if (awacs) + disable_irq(awacs_irq); + disable_irq(awacs_tx_irq); + disable_irq(awacs_rx_irq); + /* Chip specific sleep code */ switch (awacs_revision) { case AWACS_TUMBLER: case AWACS_SNAPPER: + write_audio_gpio(gpio_headphone_mute, gpio_headphone_mute_pol); + write_audio_gpio(gpio_amp_mute, gpio_amp_mute_pol); tas_enter_sleep(); + write_audio_gpio(gpio_audio_reset, gpio_audio_reset_pol); break ; case AWACS_DACA: daca_enter_sleep(); @@ -1441,10 +1449,6 @@ out_le32(&awacs->control, 0x11) ; break ; } - if (awacs) - disable_irq(awacs_irq); - disable_irq(awacs_tx_irq); - disable_irq(awacs_rx_irq); /* Disable sound clock */ pmac_call_feature(PMAC_FTR_SOUND_CHIP_ENABLE, awacs_node, 0, 0); /* According to Darwin, we do that after turning off the sound @@ -1473,8 +1477,14 @@ switch (awacs_revision) { case AWACS_TUMBLER: case AWACS_SNAPPER: - headphone_intr(0,0,0); + write_audio_gpio(gpio_headphone_mute, gpio_headphone_mute_pol); + write_audio_gpio(gpio_amp_mute, gpio_amp_mute_pol); + write_audio_gpio(gpio_audio_reset, gpio_audio_reset_pol); + wait_ms(100); + write_audio_gpio(gpio_audio_reset, !gpio_audio_reset_pol); + wait_ms(150); tas_leave_sleep(); /* Stub for now */ + headphone_intr(0,0,0); break; case AWACS_DACA: wait_ms(10); /* Check this !!! */ diff -Nru a/drivers/sound/dmasound/tas3001c.c b/drivers/sound/dmasound/tas3001c.c --- a/drivers/sound/dmasound/tas3001c.c Sat Jan 11 11:21:29 2003 +++ b/drivers/sound/dmasound/tas3001c.c Sat Jan 11 11:21:29 2003 @@ -292,9 +292,16 @@ static int tas3001c_leave_sleep(struct tas3001c_data_t *self) { + unsigned char mcr = (1<<6)+(2<<4)+(2<<2); + if (!self) return -1; + /* Make sure something answers on the i2c bus */ + if (tas3001c_write_register(self, TAS3001C_REG_MCR, &mcr, + WRITE_NORMAL|FORCE_WRITE) < 0) + return -1; + tas3001c_fast_load(self, 1); (void)tas3001c_sync_register(self,TAS3001C_REG_RIGHT_BIQUAD0); @@ -755,10 +762,9 @@ static int tas3001c_init_mixer(struct tas3001c_data_t *self) { - /* Make sure something answers on the i2c bus - */ - char mcr = (1<<6)+(2<<4)+(2<<2); + unsigned char mcr = (1<<6)+(2<<4)+(2<<2); + /* Make sure something answers on the i2c bus */ if (tas3001c_write_register(self, TAS3001C_REG_MCR, &mcr, WRITE_NORMAL|FORCE_WRITE) < 0) return -1; diff -Nru a/drivers/sound/dmasound/tas3004.c b/drivers/sound/dmasound/tas3004.c --- a/drivers/sound/dmasound/tas3004.c Sat Jan 11 11:21:29 2003 +++ b/drivers/sound/dmasound/tas3004.c Sat Jan 11 11:21:29 2003 @@ -471,9 +471,16 @@ static int tas3004_leave_sleep(struct tas3004_data_t *self) { + unsigned char mcr = (1<<6)+(2<<4)+(2<<2); + if (!self) return -1; + /* Make sure something answers on the i2c bus */ + if (tas3004_write_register(self, TAS3004_REG_MCR, &mcr, + WRITE_NORMAL | FORCE_WRITE) < 0) + return -1; + tas3004_fast_load(self, 1); (void)tas3004_sync_register(self,TAS3004_REG_RIGHT_BIQUAD0); @@ -1027,10 +1034,9 @@ static int tas3004_init_mixer(struct tas3004_data_t *self) { - /* Make sure something answers on the i2c bus - */ - char mcr = (1<<6)+(2<<4)+(2<<2); + unsigned char mcr = (1<<6)+(2<<4)+(2<<2); + /* Make sure something answers on the i2c bus */ if (tas3004_write_register(self, TAS3004_REG_MCR, &mcr, WRITE_NORMAL | FORCE_WRITE) < 0) return -1;