Author: pebender
Date: Tue Jun 16 21:25:11 2009
New Revision: 4959

Added:
     
trunk/gar-minimyth/script/kernel-2.6.30/alsa-driver/files/alsa-driver-1.0.20-nvidia_hdmi_8channel.patch
     
trunk/gar-minimyth/script/kernel-2.6.30/alsa-driver/files/alsa-driver-1.0.20-quirk.patch
Removed:
     
trunk/gar-minimyth/script/kernel-2.6.30/alsa-driver/files/alsa-driver-1.0.20.patch
Modified:
    trunk/gar-minimyth/script/kernel-2.6.30/alsa-driver/Makefile
    trunk/gar-minimyth/script/kernel-2.6.30/alsa-driver/checksums

Log:
- Added 8 channel audio patch to ALSA.
- Removed some bogus entries that I had patched into ALSA.



Modified: trunk/gar-minimyth/script/kernel-2.6.30/alsa-driver/Makefile
==============================================================================
--- trunk/gar-minimyth/script/kernel-2.6.30/alsa-driver/Makefile        
(original)
+++ trunk/gar-minimyth/script/kernel-2.6.30/alsa-driver/Makefile        Tue Jun 
16  
21:25:11 2009
@@ -4,7 +4,7 @@
  MASTER_SITES  = ftp://ftp.alsa-project.org/pub/driver/
  MASTER_SITES += ftp://ftp.alsa-project.org/pub/testing/
  DISTFILES = $(DISTNAME).tar.bz2
-PATCHFILES = $(DISTNAME).patch
+PATCHFILES = $(DISTNAME)-nvidia_hdmi_8channel.patch $(DISTNAME)-quirk.patch
  LICENSE = LGPL2_1

  DESCRIPTION =

Modified: trunk/gar-minimyth/script/kernel-2.6.30/alsa-driver/checksums
==============================================================================
--- trunk/gar-minimyth/script/kernel-2.6.30/alsa-driver/checksums       
(original)
+++ trunk/gar-minimyth/script/kernel-2.6.30/alsa-driver/checksums       Tue Jun 
 
16 21:25:11 2009
@@ -1,2 +1,3 @@
  19764c0b0b9bae43eba4395a4a0b4b14  download/alsa-driver-1.0.20.tar.bz2
-23a8d477281812df3ca25d8c4bf3ed70  download/alsa-driver-1.0.20.patch
+671b72ce93bc2b371b27963862d90a75   
download/alsa-driver-1.0.20-nvidia_hdmi_8channel.patch
+c256988f28f70b1880b0aa4271ddc258  download/alsa-driver-1.0.20-quirk.patch

Added:  
trunk/gar-minimyth/script/kernel-2.6.30/alsa-driver/files/alsa-driver-1.0.20-nvidia_hdmi_8channel.patch
==============================================================================
--- (empty file)
+++  
trunk/gar-minimyth/script/kernel-2.6.30/alsa-driver/files/alsa-driver-1.0.20-nvidia_hdmi_8channel.patch
  
Tue Jun 16 21:25:11 2009
@@ -0,0 +1,359 @@
+diff -Naur alsa-driver-1.0.20-old/alsa-kernel/pci/hda/patch_nvhdmi.c  
alsa-driver-1.0.20-new/alsa-kernel/pci/hda/patch_nvhdmi.c
+--- alsa-driver-1.0.20-old/alsa-kernel/pci/hda/patch_nvhdmi.c  2009-05-06  
00:06:04.000000000 -0700
++++ alsa-driver-1.0.20-new/alsa-kernel/pci/hda/patch_nvhdmi.c  2009-06-16  
12:13:37.000000000 -0700
+@@ -35,9 +35,28 @@
+       struct hda_pcm pcm_rec;
+ };
+
++#define Nv_VERB_SET_Channel_Allocation          0xF79
++#define Nv_VERB_SET_Info_Frame_Checksum         0xF7A
++#define Nv_VERB_SET_Audio_Protection_On         0xF98
++#define Nv_VERB_SET_Audio_Protection_Off        0xF99
++
++#define Nv_Master_Convert_nid   0x04
++#define Nv_Master_Pin_nid       0x05
++
++static hda_nid_t nvhdmi_convert_nids[4] = {
++      /*front, rear, clfe, rear_surr */
++      0x6, 0x8, 0xa, 0xc,
++};
++
+ static struct hda_verb nvhdmi_basic_init[] = {
++      /* set audio protect on */
++      { 0x1, Nv_VERB_SET_Audio_Protection_On, 0x1},
+       /* enable digital output on pin widget */
+-      { 0x05, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT },
++      { 0x5, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT | 0x5 },
++      { 0x7, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT | 0x5 },
++      { 0x9, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT | 0x5 },
++      { 0xb, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT | 0x5 },
++      { 0xd, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT | 0x5 },
+       {} /* terminator */
+ };
+
+@@ -66,48 +85,221 @@
+  * Digital out
+  */
+ static int nvhdmi_dig_playback_pcm_open(struct hda_pcm_stream *hinfo,
+-                                   struct hda_codec *codec,
+-                                   struct snd_pcm_substream *substream)
++                                      struct hda_codec *codec,
++                                      struct snd_pcm_substream *substream)
+ {
+       struct nvhdmi_spec *spec = codec->spec;
+       return snd_hda_multi_out_dig_open(codec, &spec->multiout);
+ }
+
+-static int nvhdmi_dig_playback_pcm_close(struct hda_pcm_stream *hinfo,
+-                                    struct hda_codec *codec,
+-                                    struct snd_pcm_substream *substream)
++static int nvhdmi_dig_playback_pcm_close_8ch(struct hda_pcm_stream *hinfo,
++                                      struct hda_codec *codec,
++                                      struct snd_pcm_substream *substream)
++{
++      struct nvhdmi_spec *spec = codec->spec;
++      int i;
++
++      snd_hda_codec_write(codec, Nv_Master_Convert_nid,
++                      0, AC_VERB_SET_CHANNEL_STREAMID, 0);
++      for (i = 0; i < 4; i++) {
++              /* set the stream id */
++              snd_hda_codec_write(codec, nvhdmi_convert_nids[i], 0,
++                              AC_VERB_SET_CHANNEL_STREAMID, 0);
++              /* set the stream format */
++              snd_hda_codec_write(codec, nvhdmi_convert_nids[i], 0,
++                              AC_VERB_SET_STREAM_FORMAT, 0);
++      }
++
++      return snd_hda_multi_out_dig_close(codec, &spec->multiout);
++}
++
++static int nvhdmi_dig_playback_pcm_close_2ch(struct hda_pcm_stream *hinfo,
++                                      struct hda_codec *codec,
++                                      struct snd_pcm_substream *substream)
+ {
+       struct nvhdmi_spec *spec = codec->spec;
+       return snd_hda_multi_out_dig_close(codec, &spec->multiout);
+ }
+
+-static int nvhdmi_dig_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
+-                                          struct hda_codec *codec,
+-                                          unsigned int stream_tag,
+-                                          unsigned int format,
+-                                          struct snd_pcm_substream *substream)
++static int nvhdmi_dig_playback_pcm_prepare_8ch(struct hda_pcm_stream  
*hinfo,
++                                      struct hda_codec *codec,
++                                      unsigned int stream_tag,
++                                      unsigned int format,
++                                      struct snd_pcm_substream *substream)
++{
++      int chs;
++      unsigned int dataDCC1, dataDCC2, chan, chanmask, channel_id;
++      int i;
++
++      mutex_lock(&codec->spdif_mutex);
++
++      chs = substream->runtime->channels;
++      chan = chs ? (chs - 1) : 1;
++
++      switch (chs) {
++      default:
++      case 0:
++      case 2:
++              chanmask = 0x00;
++              break;
++      case 4:
++              chanmask = 0x08;
++              break;
++      case 6:
++              chanmask = 0x0b;
++              break;
++      case 8:
++              chanmask = 0x13;
++              break;
++      }
++      dataDCC1 = AC_DIG1_ENABLE | AC_DIG1_COPYRIGHT;
++      dataDCC2 = 0x2;
++
++      /* set the Audio InforFrame Channel Allocation */
++      snd_hda_codec_write(codec, 0x1, 0,
++                      Nv_VERB_SET_Channel_Allocation, chanmask);
++
++      /* turn off SPDIF once; otherwise the IEC958 bits won't be updated */
++      if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE))
++              snd_hda_codec_write(codec,
++                              Nv_Master_Convert_nid,
++                              0,
++                              AC_VERB_SET_DIGI_CONVERT_1,
++                              codec->spdif_ctls & ~AC_DIG1_ENABLE & 0xff);
++
++      /* set the stream id */
++      snd_hda_codec_write(codec, Nv_Master_Convert_nid, 0,
++                      AC_VERB_SET_CHANNEL_STREAMID, (stream_tag << 4) | 0x0);
++
++      /* set the stream format */
++      snd_hda_codec_write(codec, Nv_Master_Convert_nid, 0,
++                      AC_VERB_SET_STREAM_FORMAT, format);
++
++      /* turn on again (if needed) */
++      /* enable and set the channel status audio/data flag */
++      if (codec->spdif_status_reset && (codec->spdif_ctls & AC_DIG1_ENABLE)) {
++              snd_hda_codec_write(codec,
++                              Nv_Master_Convert_nid,
++                              0,
++                              AC_VERB_SET_DIGI_CONVERT_1,
++                              codec->spdif_ctls & 0xff);
++              snd_hda_codec_write(codec,
++                              Nv_Master_Convert_nid,
++                              0,
++                              AC_VERB_SET_DIGI_CONVERT_2, dataDCC2);
++      }
++
++      for (i = 0; i < 4; i++) {
++              if (chs == 2)
++                      channel_id = 0;
++              else
++                      channel_id = i * 2;
++
++              /* turn off SPDIF once;
++               *otherwise the IEC958 bits won't be updated
++               */
++              if (codec->spdif_status_reset &&
++              (codec->spdif_ctls & AC_DIG1_ENABLE))
++                      snd_hda_codec_write(codec,
++                              nvhdmi_convert_nids[i],
++                              0,
++                              AC_VERB_SET_DIGI_CONVERT_1,
++                              codec->spdif_ctls & ~AC_DIG1_ENABLE & 0xff);
++              /* set the stream id */
++              snd_hda_codec_write(codec,
++                              nvhdmi_convert_nids[i],
++                              0,
++                              AC_VERB_SET_CHANNEL_STREAMID,
++                              (stream_tag << 4) | channel_id);
++              /* set the stream format */
++              snd_hda_codec_write(codec,
++                              nvhdmi_convert_nids[i],
++                              0,
++                              AC_VERB_SET_STREAM_FORMAT,
++                              format);
++              /* turn on again (if needed) */
++              /* enable and set the channel status audio/data flag */
++              if (codec->spdif_status_reset &&
++              (codec->spdif_ctls & AC_DIG1_ENABLE)) {
++                      snd_hda_codec_write(codec,
++                                      nvhdmi_convert_nids[i],
++                                      0,
++                                      AC_VERB_SET_DIGI_CONVERT_1,
++                                      codec->spdif_ctls & 0xff);
++                      snd_hda_codec_write(codec,
++                                      nvhdmi_convert_nids[i],
++                                      0,
++                                      AC_VERB_SET_DIGI_CONVERT_2, dataDCC2);
++              }
++      }
++
++      /* set the Audio Info Frame Checksum */
++      snd_hda_codec_write(codec, 0x1, 0,
++                      Nv_VERB_SET_Info_Frame_Checksum,
++                      (0x71 - chan - chanmask));
++
++      mutex_unlock(&codec->spdif_mutex);
++      return 0;
++}
++
++static int nvhdmi_dig_playback_pcm_prepare_2ch(struct hda_pcm_stream  
*hinfo,
++                                      struct hda_codec *codec,
++                                      unsigned int stream_tag,
++                                      unsigned int format,
++                                      struct snd_pcm_substream *substream)
+ {
+       struct nvhdmi_spec *spec = codec->spec;
+       return snd_hda_multi_out_dig_prepare(codec, &spec->multiout, stream_tag,
+-                                           format, substream);
++                                      format, substream);
+ }
+
+-static struct hda_pcm_stream nvhdmi_pcm_digital_playback = {
++static struct hda_pcm_stream nvhdmi_pcm_digital_playback_8ch = {
++      .substreams = 1,
++      .channels_min = 2,
++      .channels_max = 8,
++      .nid = Nv_Master_Convert_nid,
++      .rates = SNDRV_PCM_RATE_48000,
++      .maxbps = 16,
++      .formats = SNDRV_PCM_FMTBIT_S16_LE,
++      .ops = {
++              .open = nvhdmi_dig_playback_pcm_open,
++              .close = nvhdmi_dig_playback_pcm_close_8ch,
++              .prepare = nvhdmi_dig_playback_pcm_prepare_8ch
++      },
++};
++
++static struct hda_pcm_stream nvhdmi_pcm_digital_playback_2ch = {
+       .substreams = 1,
+       .channels_min = 2,
+       .channels_max = 2,
+-      .nid = 0x4, /* NID to query formats and rates and setup streams */
++      .nid = Nv_Master_Convert_nid,
+       .rates = SNDRV_PCM_RATE_48000,
+       .maxbps = 16,
+       .formats = SNDRV_PCM_FMTBIT_S16_LE,
+       .ops = {
+               .open = nvhdmi_dig_playback_pcm_open,
+-              .close = nvhdmi_dig_playback_pcm_close,
+-              .prepare = nvhdmi_dig_playback_pcm_prepare
++              .close = nvhdmi_dig_playback_pcm_close_2ch,
++              .prepare = nvhdmi_dig_playback_pcm_prepare_2ch
+       },
+ };
+
+-static int nvhdmi_build_pcms(struct hda_codec *codec)
++static int nvhdmi_build_pcms_8ch(struct hda_codec *codec)
++{
++      struct nvhdmi_spec *spec = codec->spec;
++      struct hda_pcm *info = &spec->pcm_rec;
++
++      codec->num_pcms = 1;
++      codec->pcm_info = info;
++
++      info->name = "NVIDIA HDMI";
++      info->pcm_type = HDA_PCM_TYPE_HDMI;
++      info->stream[SNDRV_PCM_STREAM_PLAYBACK]
++                                      = nvhdmi_pcm_digital_playback_8ch;
++
++      return 0;
++}
++
++static int nvhdmi_build_pcms_2ch(struct hda_codec *codec)
+ {
+       struct nvhdmi_spec *spec = codec->spec;
+       struct hda_pcm *info = &spec->pcm_rec;
+@@ -117,7 +309,8 @@
+
+       info->name = "NVIDIA HDMI";
+       info->pcm_type = HDA_PCM_TYPE_HDMI;
+-      info->stream[SNDRV_PCM_STREAM_PLAYBACK] = nvhdmi_pcm_digital_playback;
++      info->stream[SNDRV_PCM_STREAM_PLAYBACK]
++                                      = nvhdmi_pcm_digital_playback_2ch;
+
+       return 0;
+ }
+@@ -127,14 +320,40 @@
+       kfree(codec->spec);
+ }
+
+-static struct hda_codec_ops nvhdmi_patch_ops = {
++static struct hda_codec_ops nvhdmi_patch_ops_8ch = {
++      .build_controls = nvhdmi_build_controls,
++      .build_pcms = nvhdmi_build_pcms_8ch,
++      .init = nvhdmi_init,
++      .free = nvhdmi_free,
++};
++
++static struct hda_codec_ops nvhdmi_patch_ops_2ch = {
+       .build_controls = nvhdmi_build_controls,
+-      .build_pcms = nvhdmi_build_pcms,
++      .build_pcms = nvhdmi_build_pcms_2ch,
+       .init = nvhdmi_init,
+       .free = nvhdmi_free,
+ };
+
+-static int patch_nvhdmi(struct hda_codec *codec)
++static int patch_nvhdmi_8ch(struct hda_codec *codec)
++{
++      struct nvhdmi_spec *spec;
++
++      spec = kzalloc(sizeof(*spec), GFP_KERNEL);
++      if (spec == NULL)
++              return -ENOMEM;
++
++      codec->spec = spec;
++
++      spec->multiout.num_dacs = 0;  /* no analog */
++      spec->multiout.max_channels = 8;
++      spec->multiout.dig_out_nid = Nv_Master_Convert_nid;
++
++      codec->patch_ops = nvhdmi_patch_ops_8ch;
++
++      return 0;
++}
++
++static int patch_nvhdmi_2ch(struct hda_codec *codec)
+ {
+       struct nvhdmi_spec *spec;
+
+@@ -144,13 +363,11 @@
+
+       codec->spec = spec;
+
+-      spec->multiout.num_dacs = 0;      /* no analog */
++      spec->multiout.num_dacs = 0;  /* no analog */
+       spec->multiout.max_channels = 2;
+-      spec->multiout.dig_out_nid = 0x4; /* NID for copying analog to digital,
+-                                         * seems to be unused in pure-digital
+-                                         * case. */
++      spec->multiout.dig_out_nid = Nv_Master_Convert_nid;
+
+-      codec->patch_ops = nvhdmi_patch_ops;
++      codec->patch_ops = nvhdmi_patch_ops_2ch;
+
+       return 0;
+ }
+@@ -159,11 +376,11 @@
+  * patch entries
+  */
+ static struct hda_codec_preset snd_hda_preset_nvhdmi[] = {
+-      { .id = 0x10de0002, .name = "MCP78 HDMI", .patch = patch_nvhdmi },
+-      { .id = 0x10de0006, .name = "MCP78 HDMI", .patch = patch_nvhdmi },
+-      { .id = 0x10de0007, .name = "MCP7A HDMI", .patch = patch_nvhdmi },
+-      { .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi },
+-      { .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi },
++      { .id = 0x10de0002, .name = "MCP78 HDMI", .patch = patch_nvhdmi_8ch },
++      { .id = 0x10de0006, .name = "MCP78 HDMI", .patch = patch_nvhdmi_8ch },
++      { .id = 0x10de0007, .name = "MCP7A HDMI", .patch = patch_nvhdmi_8ch },
++      { .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi_2ch },
++      { .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi_2ch },
+       {} /* terminator */
+ };
+

Added:  
trunk/gar-minimyth/script/kernel-2.6.30/alsa-driver/files/alsa-driver-1.0.20-quirk.patch
==============================================================================
--- (empty file)
+++  
trunk/gar-minimyth/script/kernel-2.6.30/alsa-driver/files/alsa-driver-1.0.20-quirk.patch
         
Tue Jun 16 21:25:11 2009
@@ -0,0 +1,25 @@
+diff -Naur alsa-driver-1.0.20-old/alsa-kernel/pci/hda/patch_analog.c  
alsa-driver-1.0.20-new/alsa-kernel/pci/hda/patch_analog.c
+--- alsa-driver-1.0.20-old/alsa-kernel/pci/hda/patch_analog.c  2009-06-16  
12:13:26.000000000 -0700
++++ alsa-driver-1.0.20-new/alsa-kernel/pci/hda/patch_analog.c  2009-06-16  
12:15:26.000000000 -0700
+@@ -2949,7 +2949,10 @@
+       SND_PCI_QUIRK(0x1043, 0x81ec, "Asus P5B-DLX", AD1988_6STACK_DIG),
+       SND_PCI_QUIRK(0x1043, 0x81f6, "Asus M2N-SLI", AD1988_6STACK_DIG),
+       SND_PCI_QUIRK(0x1043, 0x8277, "Asus P5K-E/WIFI-AP", AD1988_6STACK_DIG),
++      SND_PCI_QUIRK(0x1043, 0x829F, "Asus M3N78-VM", AD1988_6STACK_DIG),
++      SND_PCI_QUIRK(0x1043, 0x82fe, "Asus M3N78-EM / P5N7A-VM",  
AD1988_6STACK_DIG),
+       SND_PCI_QUIRK(0x1043, 0x8311, "Asus P5Q-Premium/Pro", 
AD1988_6STACK_DIG),
++      SND_PCI_QUIRK(0x1043, 0x8345, "Asus M3N78-VM", AD1988_6STACK_DIG),
+       {}
+ };
+
+diff -Naur alsa-driver-1.0.20-old/alsa-kernel/pci/hda/patch_realtek.c  
alsa-driver-1.0.20-new/alsa-kernel/pci/hda/patch_realtek.c
+--- alsa-driver-1.0.20-old/alsa-kernel/pci/hda/patch_realtek.c 2009-06-16  
12:13:26.000000000 -0700
++++ alsa-driver-1.0.20-new/alsa-kernel/pci/hda/patch_realtek.c 2009-06-16  
12:15:26.000000000 -0700
+@@ -8704,6 +8704,7 @@
+       SND_PCI_QUIRK(0x103c, 0x2a72, "HP Educ.ar", ALC888_3ST_HP),
+       SND_PCI_QUIRK(0x1043, 0x1873, "Asus M90V", ALC888_ASUS_M90V),
+       SND_PCI_QUIRK(0x1043, 0x8249, "Asus M2A-VM HDMI", ALC883_3ST_6ch_DIG),
++      SND_PCI_QUIRK(0x1043, 0x8290, "Asus M2N-VM DVI", ALC883_3ST_6ch_DIG),
+       SND_PCI_QUIRK(0x1043, 0x8284, "Asus Z37E", ALC883_6ST_DIG),
+       SND_PCI_QUIRK(0x1043, 0x82fe, "Asus P5Q-EM HDMI", ALC1200_ASUS_P5Q),
+       SND_PCI_QUIRK(0x1043, 0x835f, "Asus Eee 1601", ALC888_ASUS_EEE1601),

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"minimyth-commits" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/minimyth-commits?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to