mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
ALSA: hda - explicitly set buffer-align flag for Nvidia controllers
It turned out that Nvidial (HDMI) controllers require the buffer alignment. Thus it's better to mark it requiring the alignment, so that we can switch to non-aligned behavior as default in future. Also, change the module paramter to be bint, in order to let user overriding the default value. Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
633544a8e2
commit
7bfe059e38
1 changed files with 15 additions and 6 deletions
|
@ -121,8 +121,8 @@ module_param(power_save_controller, bool, 0644);
|
|||
MODULE_PARM_DESC(power_save_controller, "Reset controller in power save mode.");
|
||||
#endif
|
||||
|
||||
static bool align_buffer_size = 1;
|
||||
module_param(align_buffer_size, bool, 0644);
|
||||
static int align_buffer_size = -1;
|
||||
module_param(align_buffer_size, bint, 0644);
|
||||
MODULE_PARM_DESC(align_buffer_size,
|
||||
"Force buffer and period sizes to be multiple of 128 bytes.");
|
||||
|
||||
|
@ -515,6 +515,7 @@ enum {
|
|||
#define AZX_DCAPS_SYNC_WRITE (1 << 19) /* sync each cmd write */
|
||||
#define AZX_DCAPS_OLD_SSYNC (1 << 20) /* Old SSYNC reg for ICH */
|
||||
#define AZX_DCAPS_BUFSIZE (1 << 21) /* no buffer size alignment */
|
||||
#define AZX_DCAPS_ALIGN_BUFSIZE (1 << 22) /* buffer size alignment */
|
||||
|
||||
/* quirks for ATI SB / AMD Hudson */
|
||||
#define AZX_DCAPS_PRESET_ATI_SB \
|
||||
|
@ -527,7 +528,8 @@ enum {
|
|||
|
||||
/* quirks for Nvidia */
|
||||
#define AZX_DCAPS_PRESET_NVIDIA \
|
||||
(AZX_DCAPS_NVIDIA_SNOOP | AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI)
|
||||
(AZX_DCAPS_NVIDIA_SNOOP | AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI |\
|
||||
AZX_DCAPS_ALIGN_BUFSIZE)
|
||||
|
||||
static char *driver_short_names[] __devinitdata = {
|
||||
[AZX_DRIVER_ICH] = "HDA Intel",
|
||||
|
@ -2774,9 +2776,16 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci,
|
|||
}
|
||||
|
||||
/* disable buffer size rounding to 128-byte multiples if supported */
|
||||
chip->align_buffer_size = align_buffer_size;
|
||||
if (chip->driver_caps & AZX_DCAPS_BUFSIZE)
|
||||
chip->align_buffer_size = 0;
|
||||
if (align_buffer_size >= 0)
|
||||
chip->align_buffer_size = !!align_buffer_size;
|
||||
else {
|
||||
if (chip->driver_caps & AZX_DCAPS_BUFSIZE)
|
||||
chip->align_buffer_size = 0;
|
||||
else if (chip->driver_caps & AZX_DCAPS_ALIGN_BUFSIZE)
|
||||
chip->align_buffer_size = 1;
|
||||
else
|
||||
chip->align_buffer_size = 1;
|
||||
}
|
||||
|
||||
/* allow 64bit DMA address if supported by H/W */
|
||||
if ((gcap & ICH6_GCAP_64OK) && !pci_set_dma_mask(pci, DMA_BIT_MASK(64)))
|
||||
|
|
Loading…
Reference in a new issue