[Haiku-commits] r33047 - haiku/trunk/src/add-ons/kernel/drivers/audio/hda
korli at mail.berlios.de
korli at mail.berlios.de
Fri Sep 11 00:55:06 CEST 2009
Author: korli
Date: 2009-09-11 00:55:02 +0200 (Fri, 11 Sep 2009)
New Revision: 33047
ViewCVS: http://svn.berlios.de/viewcvs/haiku?rev=33047&view=rev
Modified:
haiku/trunk/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp
Log:
try to align the offset to be more compliant
Modified: haiku/trunk/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp
===================================================================
--- haiku/trunk/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp 2009-09-10 22:03:37 UTC (rev 33046)
+++ haiku/trunk/src/add-ons/kernel/drivers/audio/hda/hda_controller.cpp 2009-09-10 22:55:02 UTC (rev 33047)
@@ -119,13 +119,6 @@
stream->frames_count += stream->buffer_length;
stream->buffer_cycle = position / bufferSize;
- // playback interrupts come early, offsets don't work on non intel
- // TODO find out why
- if (stream->type == STREAM_PLAYBACK
- && stream->controller->pci_info.vendor_id != INTEL_VENDORID) {
- stream->buffer_cycle++;
- }
-
release_spinlock(&stream->lock);
release_sem_etc(controller->buffer_ready_sem, 1, B_DO_NOT_RESCHEDULE);
@@ -563,13 +556,18 @@
// TODO check on other vendors, see in stream_handle_interrupt()
// Tested only on Intel ICH8
uint32 offset = 0;
- if (stream->type == STREAM_PLAYBACK && stream->controller->pci_info.vendor_id == INTEL_VENDORID) {
- if (stream->sample_size == 2)
- offset = 6;
- else if (stream->sample_size > 2)
- offset = 8;
+ if (stream->type == STREAM_PLAYBACK) {
+ if (stream->controller->pci_info.vendor_id == INTEL_VENDORID) {
+ if (stream->sample_size == 2)
+ offset = 3;
+ else if (stream->sample_size > 2)
+ offset = 4;
+ } else {
+ offset = 11;
+ }
+ offset *= 64;
+ offset = ALIGN(offset, 128);
}
- offset *= 32;
/* Calculate size of buffer (aligned to 128 bytes) */
bufferSize = stream->sample_size * stream->num_channels
More information about the Haiku-commits
mailing list