[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: PBG4 2.6.9 sound module config



On Mon, Oct 25, 2004 at 06:15:38PM +0200, Pander wrote:
> The sound on my PowerBook G4 was working quit oke until I upgraded to 
> from 2.6.8.1 to 2.6.9. Think there is something wrong with the loading 
> of the modules.
What exactly is the problem. Can you try:

diff -ubw --exclude='*.orig' --exclude='*.o' --exclude='*.ko' --exclude='*.cmd' --exclude='*.o' --exclude=CVS/ --exclude=.svn -Naur linux-2.6.9-rc2.orig/sound/ppc/pmac.c linux-2.6.9-rc2/sound/ppc/pmac.c
--- linux-2.6.9-rc2.orig/sound/ppc/pmac.c	2004-09-15 09:24:29.000000000 +0200
+++ linux-2.6.9-rc2/sound/ppc/pmac.c	2004-09-21 16:58:38.966902040 +0200
@@ -50,8 +50,8 @@
 	44100, 29400, 22050, 17640, 14700, 11025, 8820, 7350
 };
 /* fixed frequency table for tumbler */
-static int tumbler_freqs[1] = {
-	44100
+static int tumbler_freqs[2] = {
+	48000, 44100
 };
 
 /*
@@ -488,12 +488,14 @@
 	snd_pcm_runtime_t *runtime = subs->runtime;
 	int i, j, fflags;
 	static int typical_freqs[] = {
+		48000,
 		44100,
 		22050,
 		11025,
 		0,
 	};
 	static int typical_freq_flags[] = {
+		SNDRV_PCM_RATE_48000,
 		SNDRV_PCM_RATE_44100,
 		SNDRV_PCM_RATE_22050,
 		SNDRV_PCM_RATE_11025,
@@ -647,7 +649,7 @@
 
 	pcm->private_data = chip;
 	pcm->private_free = pmac_pcm_free;
-	pcm->info_flags = SNDRV_PCM_INFO_JOINT_DUPLEX;
+	pcm->info_flags = 0;
 	strcpy(pcm->name, chip->card->shortname);
 	chip->pcm = pcm;
 
diff -ubw --exclude='*.orig' --exclude='*.o' --exclude='*.ko' --exclude='*.cmd' --exclude='*.o' --exclude=CVS/ --exclude=.svn -Naur linux-2.6.9-rc2.orig/sound/ppc/tumbler.c linux-2.6.9-rc2/sound/ppc/tumbler.c
--- linux-2.6.9-rc2.orig/sound/ppc/tumbler.c	2004-09-15 09:24:29.000000000 +0200
+++ linux-2.6.9-rc2/sound/ppc/tumbler.c	2004-09-21 16:58:38.970901432 +0200
@@ -762,6 +762,12 @@
 	DEFINE_MONO("Tone Control - Treble", treble),
 	DEFINE_MONO("PCM Playback Volume", pcm),
 	{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+	  .name = "DRC Switch",
+	  .info = snd_pmac_boolean_mono_info,
+	  .get = tumbler_get_drc_switch,
+	  .put = tumbler_put_drc_switch
+	},
+	{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
 	  .name = "DRC Range",
 	  .info = tumbler_info_drc_value,
 	  .get = tumbler_get_drc_value,
@@ -788,6 +794,12 @@
 	DEFINE_SNAPPER_MONO("Tone Control - Bass", bass),
 	DEFINE_SNAPPER_MONO("Tone Control - Treble", treble),
 	{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+	  .name = "DRC Switch",
+	  .info = snd_pmac_boolean_mono_info,
+	  .get = tumbler_get_drc_switch,
+	  .put = tumbler_put_drc_switch
+	},
+	{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
 	  .name = "DRC Range",
 	  .info = tumbler_info_drc_value,
 	  .get = tumbler_get_drc_value,
@@ -817,14 +829,6 @@
 	.put = tumbler_put_mute_switch,
 	.private_value = TUMBLER_MUTE_AMP,
 };
-static snd_kcontrol_new_t tumbler_drc_sw __initdata = {
-	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
-	.name = "DRC Switch",
-	.info = snd_pmac_boolean_mono_info,
-	.get = tumbler_get_drc_switch,
-	.put = tumbler_put_drc_switch
-};
-
 
 #ifdef PMAC_SUPPORT_AUTOMUTE
 /*
@@ -846,29 +850,6 @@
 	}
 }
 
-static struct work_struct device_change;
-
-static void
-device_change_handler(void *self)
-{
-	pmac_t *chip = (pmac_t*) self;
-	pmac_tumbler_t *mix;
-
-	if (!chip)
-		return;
-
-	mix = chip->mixer_data;
-
-	/* first set the DRC so the speaker do not explode -ReneR */
-	if (chip->model == PMAC_TUMBLER)
-		tumbler_set_drc(mix);
-	else
-		snapper_set_drc(mix);
-
-	/* reset the master volume so the correct amplification is applied */
-	tumbler_set_master_volume(mix);
-}
-
 static void tumbler_update_automute(pmac_t *chip, int do_notify)
 {
 	if (chip->auto_mute) {
@@ -878,25 +859,14 @@
 			/* mute speaker */
 			check_mute(chip, &mix->amp_mute, 1, do_notify, chip->speaker_sw_ctl);
 			check_mute(chip, &mix->hp_mute, 0, do_notify, chip->master_sw_ctl);
-			mix->drc_enable = 0;
-
 		} else {
 			/* unmute speaker */
 			check_mute(chip, &mix->amp_mute, 0, do_notify, chip->speaker_sw_ctl);
 			check_mute(chip, &mix->hp_mute, 1, do_notify, chip->master_sw_ctl);
-			mix->drc_enable = 1;
 		}
-		if (do_notify) {
+		if (do_notify)
 			snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
 				       &chip->hp_detect_ctl->id);
-			snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
-			               &chip->drc_sw_ctl->id);
-		}
-
-		/* finally we need to schedule an update of the mixer values
-		   (master and DRC are enough for now) -ReneR */
-		schedule_work(&device_change);
-
 	}
 }
 #endif /* PMAC_SUPPORT_AUTOMUTE */
@@ -1147,17 +1117,11 @@
 	chip->speaker_sw_ctl = snd_ctl_new1(&tumbler_speaker_sw, chip);
 	if ((err = snd_ctl_add(chip->card, chip->speaker_sw_ctl)) < 0)
 		return err;
-	chip->drc_sw_ctl = snd_ctl_new1(&tumbler_drc_sw, chip);
-	if ((err = snd_ctl_add(chip->card, chip->drc_sw_ctl)) < 0)
-		return err;
-
 
 #ifdef CONFIG_PMAC_PBOOK
 	chip->resume = tumbler_resume;
 #endif
 
-	INIT_WORK(&device_change, device_change_handler, (void *)chip);
-
 #ifdef PMAC_SUPPORT_AUTOMUTE
 	if (mix->headphone_irq >=0 && (err = snd_pmac_add_automute(chip)) < 0)
 		return err;

It reverts some of the recent changes which broke volume adjustment on
my pbook.
 -- Guido



Reply to: