[alsa-devel] ALSA become "Segmentation fault" on current linus tree

Takashi Iwai tiwai at suse.de
Tue Jul 5 08:33:51 CEST 2011


At Tue, 05 Jul 2011 15:29:39 +0900,
kuninori.morimoto.gx at renesas.com wrote:
> 
> 
> Dear Takashi
> 
> > So, driver name setup seems screwing up.
> > What shows /proc/asound/cards?  It contains also the driver string.
> 
> Current /proc/asound/cards is
> 
> ----------------------------------
> # cat /proc/asound/cards
>  0 [AK4643         ]: FSI2A (AK4643) - FSI2A (AK4643)
>                       FSI2A (AK4643)
>  1 [HDMI           ]: FSI2B (SH MOBIL - FSI2B (SH MOBILE HDMI)
>                       FSI2B (SH MOBILE HDMI)
> ----------------------------------
> 
> Ohh my...
> If I modified like this, it start works
> 
> ----------------------------------
> # cat /proc/asound/cards                                                        
>  0 [FSI2A          ]: FSI2A - FSI2A                                             
>                       FSI2A                                                     
>  1 [FSI2B          ]: FSI2B - FSI2B                                             
>                       FSI2B             
> ----------------------------------
> 
> Should it be short name ?

For the compatible behavior, we can keep it empty like the patch
below.  It wasn't set in the earlier versions.

Alternatively, driver name can be deduced from shortname by replacing
invalid characters.  In general, it shouldn't contain space letters and
special letters like parentheses.

But, driver_name should override if defined, and ASoC stuff has worked
well without driver name setup, we can keep it empty as default, I guess.


thanks,

Takashi

---
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index d08abf4..954e3b7 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -1420,8 +1420,9 @@ static void snd_soc_instantiate_card(struct snd_soc_card *card)
 		 "%s", card->name);
 	snprintf(card->snd_card->longname, sizeof(card->snd_card->longname),
 		 "%s", card->long_name ? card->long_name : card->name);
-	snprintf(card->snd_card->driver, sizeof(card->snd_card->driver),
-		 "%s", card->driver_name ? card->driver_name : card->name);
+	if (card->driver_name)
+		snprintf(card->snd_card->driver, sizeof(card->snd_card->driver),
+			 "%s", card->driver_name);
 
 	if (card->late_probe) {
 		ret = card->late_probe(card);


More information about the Alsa-devel mailing list