]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge branch 'topic/misc' into for-next
authorTakashi Iwai <tiwai@suse.de>
Mon, 19 Jul 2010 15:42:31 +0000 (17:42 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 19 Jul 2010 15:42:31 +0000 (17:42 +0200)
sound/core/pcm_lib.c
sound/pci/hda/hda_codec.c
sound/pci/hda/hda_codec.h
sound/pci/hda/hda_proc.c

index bcf95d3ff5c70b8f19616c925fed8306845a60a3..e23e0e7ab26f9ff5f02204ca62422a14cc674e5e 100644 (file)
@@ -67,6 +67,8 @@ void snd_pcm_playback_silence(struct snd_pcm_substream *substream, snd_pcm_ufram
        } else {
                if (new_hw_ptr == ULONG_MAX) {  /* initialization */
                        snd_pcm_sframes_t avail = snd_pcm_playback_hw_avail(runtime);
+                       if (avail > runtime->buffer_size)
+                               avail = runtime->buffer_size;
                        runtime->silence_filled = avail > 0 ? avail : 0;
                        runtime->silence_start = (runtime->status->hw_ptr +
                                                  runtime->silence_filled) %
index 501cbc411a834b339a55b48074a7ed250f002c5a..073b0993b59e3339426dc5af65ba09de6260139b 100644 (file)
@@ -730,15 +730,17 @@ static void /*__devinit*/ setup_fg_nodes(struct hda_codec *codec)
        total_nodes = snd_hda_get_sub_nodes(codec, AC_NODE_ROOT, &nid);
        for (i = 0; i < total_nodes; i++, nid++) {
                function_id = snd_hda_param_read(codec, nid,
-                                               AC_PAR_FUNCTION_TYPE) & 0xff;
+                                               AC_PAR_FUNCTION_TYPE);
                switch (function_id) {
                case AC_GRP_AUDIO_FUNCTION:
                        codec->afg = nid;
-                       codec->function_id = function_id;
+                       codec->afg_function_id = function_id & 0xff;
+                       codec->afg_unsol = (function_id >> 8) & 1;
                        break;
                case AC_GRP_MODEM_FUNCTION:
                        codec->mfg = nid;
-                       codec->function_id = function_id;
+                       codec->mfg_function_id = function_id & 0xff;
+                       codec->mfg_unsol = (function_id >> 8) & 1;
                        break;
                default:
                        break;
index 5991d14e1ec08a7c4ad23fdd4e1628d6bba90331..a115c0c5ea5f95c6ae209d85b2f9b35b55d77c88 100644 (file)
@@ -760,7 +760,10 @@ struct hda_codec {
        hda_nid_t mfg;  /* MFG node id */
 
        /* ids */
-       u32 function_id;
+       u8 afg_function_id;
+       u8 mfg_function_id;
+       u8 afg_unsol;
+       u8 mfg_unsol;
        u32 vendor_id;
        u32 subsystem_id;
        u32 revision_id;
index f97d35de66c41b2e9f276ce5fec037aedde27985..f025200f2a62466fdec6a86ffbe8ae18e0ad6c15 100644 (file)
@@ -557,7 +557,12 @@ static void print_codec_info(struct snd_info_entry *entry,
        else
                snd_iprintf(buffer, "Not Set\n");
        snd_iprintf(buffer, "Address: %d\n", codec->addr);
-       snd_iprintf(buffer, "Function Id: 0x%x\n", codec->function_id);
+       if (codec->afg)
+               snd_iprintf(buffer, "AFG Function Id: 0x%x (unsol %u)\n",
+                       codec->afg_function_id, codec->afg_unsol);
+       if (codec->mfg)
+               snd_iprintf(buffer, "MFG Function Id: 0x%x (unsol %u)\n",
+                       codec->mfg_function_id, codec->mfg_unsol);
        snd_iprintf(buffer, "Vendor Id: 0x%08x\n", codec->vendor_id);
        snd_iprintf(buffer, "Subsystem Id: 0x%08x\n", codec->subsystem_id);
        snd_iprintf(buffer, "Revision Id: 0x%x\n", codec->revision_id);