Patch by Humdinger:

Changed various labels in audio drivers to sentence case. This is
case-audio-drivers.diff from #5169.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35045 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Stephan Aßmus
2010-01-13 11:23:12 +00:00
parent 3e6fa229d8
commit ab496a4be8
15 changed files with 654 additions and 654 deletions
+3 -3
View File
@@ -982,13 +982,13 @@ const ac97_source_info source_info[] = {
{ "Recording", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO|B_MIX_RECORDMUX, 100, AC97_RECORD_GAIN, 0x8000, 4, 0, 1, 0, 0.0, 22.5, 1.5 },
{ "Master", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 101, AC97_MASTER_VOLUME, 0x8000, 5, 0, 1, 1,-46.5, 0.0, 1.5 },
//{ "Bass/Treble", B_MIX_GAIN|B_MIX_STEREO, 102, AC97_MASTER_TONE, 0x0f0f, 4, 0, 1, 1,-12.0, 10.5, 1.5 },
//{ "Aux Out", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 103, AC97_AUX_OUT_VOLUME, 0x8000, 5, 0, 1, 1,-46.5, 0.0, 1.5 },
{ "PCM Out", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 104, AC97_PCM_OUT_VOLUME, 0x8808, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
//{ "Aux out", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 103, AC97_AUX_OUT_VOLUME, 0x8000, 5, 0, 1, 1,-46.5, 0.0, 1.5 },
{ "PCM out", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 104, AC97_PCM_OUT_VOLUME, 0x8808, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
{ "CD", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 105, AC97_CD_VOLUME, 0x8808, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
{ "Aux In", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 106, AC97_AUX_IN_VOLUME, 0x8808, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
{ "TAD", B_MIX_GAIN|B_MIX_MUTE|B_MIX_MONO, 107, AC97_PHONE_VOLUME, 0x8008, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
{ "Mic", B_MIX_GAIN|B_MIX_MUTE|B_MIX_MONO|B_MIX_MICBOOST, 108, AC97_MIC_VOLUME, 0x8008, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
{ "Line In", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 109, AC97_LINE_IN_VOLUME, 0x8808, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
{ "Line in", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 109, AC97_LINE_IN_VOLUME, 0x8808, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
//{ "Center/Lfe", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 111, AC97_CENTER_LFE_VOLUME, 0x8080, 5, 0, 1, 1,-46.5, 0.0, 1.5 },
{ "Center/Lfe" /* should be "Surround" but no */, B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 110, AC97_SURR_VOLUME, 0x8080, 5, 0, 1, 1,-46.5, 0.0, 1.5 }
};
@@ -7,24 +7,24 @@
* Copyright (c) 2002, Marcus Overhagen <[email protected]>
*
* All rights reserved.
* Redistribution and use in source and binary forms, with or without modification,
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
@@ -45,13 +45,13 @@
#include "io.h"
static void
static void
auich_ac97_get_mix(void *card, const void *cookie, int32 type, float *values) {
auich_dev *dev = (auich_dev*)card;
ac97_source_info *info = (ac97_source_info *)cookie;
uint16 value, mask;
float gain;
switch(type) {
case B_MIX_GAIN:
value = auich_codec_read(&dev->config, info->reg);
@@ -63,7 +63,7 @@ auich_ac97_get_mix(void *card, const void *cookie, int32 type, float *values) {
values[0] = info->max_gain - gain;
else
values[0] = gain - info->min_gain;
mask = ((1 << (info->bits + 1)) - 1);
gain = (value & mask) * info->granularity;
if (info->polarity == 1)
@@ -104,26 +104,26 @@ auich_ac97_get_mix(void *card, const void *cookie, int32 type, float *values) {
}
static void
static void
auich_ac97_set_mix(void *card, const void *cookie, int32 type, float *values) {
auich_dev *dev = (auich_dev*)card;
ac97_source_info *info = (ac97_source_info *)cookie;
uint16 value, mask;
float gain;
switch(type) {
case B_MIX_GAIN:
value = auich_codec_read(&dev->config, info->reg);
if (info->type & B_MIX_STEREO) {
mask = ((1 << (info->bits + 1)) - 1) << 8;
value &= ~mask;
if (info->polarity == 1)
gain = info->max_gain - values[0];
else
gain = values[0] - info->min_gain;
value |= ((uint16)(gain / info->granularity) << 8) & mask;
mask = ((1 << (info->bits + 1)) - 1);
value &= ~mask;
if (info->polarity == 1)
@@ -178,7 +178,7 @@ auich_ac97_set_mix(void *card, const void *cookie, int32 type, float *values) {
static int32
auich_create_group_control(multi_dev *multi, int32 *index, int32 parent,
auich_create_group_control(multi_dev *multi, int32 *index, int32 parent,
int32 string, const char* name) {
int32 i = *index;
(*index)++;
@@ -189,7 +189,7 @@ auich_create_group_control(multi_dev *multi, int32 *index, int32 parent,
multi->controls[i].mix_control.string = string;
if (name)
strcpy(multi->controls[i].mix_control.name, name);
return multi->controls[i].mix_control.id;
}
@@ -201,17 +201,17 @@ auich_create_controls_list(multi_dev *multi)
const ac97_source_info *info;
/* AC97 Mixer */
parent = auich_create_group_control(multi, &index, 0, 0, "AC97 Mixer");
parent = auich_create_group_control(multi, &index, 0, 0, "AC97 mixer");
count = source_info_size;
//Note that we ignore first item in source_info
//It's for recording, but do match this with ac97.c's source_info
for (i = 1; i < count ; i++) {
info = &source_info[i];
PRINT(("name : %s\n", info->name));
parent2 = auich_create_group_control(multi, &index, parent, 0, info->name);
if (info->type & B_MIX_GAIN) {
if (info->type & B_MIX_MUTE) {
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
@@ -225,7 +225,7 @@ auich_create_controls_list(multi_dev *multi)
multi->controls[index].set = &auich_ac97_set_mix;
index++;
}
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_GAIN;
multi->controls[index].mix_control.master = EMU_MULTI_CONTROL_MASTERID;
@@ -240,7 +240,7 @@ auich_create_controls_list(multi_dev *multi)
multi->controls[index].set = &auich_ac97_set_mix;
id = multi->controls[index].mix_control.id;
index++;
if (info->type & B_MIX_STEREO) {
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_GAIN;
@@ -256,7 +256,7 @@ auich_create_controls_list(multi_dev *multi)
multi->controls[index].set = &auich_ac97_set_mix;
index++;
}
if (info->type & B_MIX_MICBOOST) {
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_ENABLE;
@@ -274,12 +274,12 @@ auich_create_controls_list(multi_dev *multi)
/* AC97 Record */
parent = auich_create_group_control(multi, &index, 0, 0, "Recording");
info = &source_info[0];
PRINT(("name : %s\n", info->name));
parent2 = auich_create_group_control(multi, &index, parent, 0, info->name);
if (info->type & B_MIX_GAIN) {
if (info->type & B_MIX_MUTE) {
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
@@ -293,7 +293,7 @@ auich_create_controls_list(multi_dev *multi)
multi->controls[index].set = &auich_ac97_set_mix;
index++;
}
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_GAIN;
multi->controls[index].mix_control.master = EMU_MULTI_CONTROL_MASTERID;
@@ -308,7 +308,7 @@ auich_create_controls_list(multi_dev *multi)
multi->controls[index].set = &auich_ac97_set_mix;
id = multi->controls[index].mix_control.id;
index++;
if (info->type & B_MIX_STEREO) {
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_GAIN;
@@ -324,19 +324,19 @@ auich_create_controls_list(multi_dev *multi)
multi->controls[index].set = &auich_ac97_set_mix;
index++;
}
if (info->type & B_MIX_RECORDMUX) {
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX;
multi->controls[index].mix_control.parent = parent2;
strcpy(multi->controls[index].mix_control.name, "Record Mux");
strcpy(multi->controls[index].mix_control.name, "Record mux");
multi->controls[index].cookie = info;
multi->controls[index].type = B_MIX_MUX;
multi->controls[index].get = &auich_ac97_get_mix;
multi->controls[index].set = &auich_ac97_set_mix;
parent3 = multi->controls[index].mix_control.id;
index++;
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
multi->controls[index].mix_control.parent = parent3;
@@ -345,22 +345,22 @@ auich_create_controls_list(multi_dev *multi)
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
multi->controls[index].mix_control.parent = parent3;
strcpy(multi->controls[index].mix_control.name, "CD In");
strcpy(multi->controls[index].mix_control.name, "CD in");
index++;
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
multi->controls[index].mix_control.parent = parent3;
strcpy(multi->controls[index].mix_control.name, "Video In");
strcpy(multi->controls[index].mix_control.name, "Video in");
index++;
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
multi->controls[index].mix_control.parent = parent3;
strcpy(multi->controls[index].mix_control.name, "Aux In");
strcpy(multi->controls[index].mix_control.name, "Aux in");
index++;
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
multi->controls[index].mix_control.parent = parent3;
strcpy(multi->controls[index].mix_control.name, "Line In");
strcpy(multi->controls[index].mix_control.name, "Line in");
index++;
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
@@ -378,15 +378,15 @@ auich_create_controls_list(multi_dev *multi)
strcpy(multi->controls[index].mix_control.name, "TAD");
index++;
}
}
}
multi->control_count = index;
PRINT(("multi->control_count %lu\n", multi->control_count));
return B_OK;
}
static status_t
static status_t
auich_get_mix(auich_dev *card, multi_mix_value_info * mmvi)
{
int32 i, id;
@@ -398,7 +398,7 @@ auich_get_mix(auich_dev *card, multi_mix_value_info * mmvi)
continue;
}
control = &card->multi.controls[id];
if (control->mix_control.flags & B_MULTI_MIX_GAIN) {
if (control->get) {
float values[2];
@@ -407,15 +407,15 @@ auich_get_mix(auich_dev *card, multi_mix_value_info * mmvi)
mmvi->values[i].u.gain = values[0];
else
mmvi->values[i].u.gain = values[1];
}
}
}
if (control->mix_control.flags & B_MULTI_MIX_ENABLE && control->get) {
float values[1];
control->get(card, control->cookie, control->type, values);
mmvi->values[i].u.enable = (values[0] == 1.0);
}
if (control->mix_control.flags & B_MULTI_MIX_MUX && control->get) {
float values[1];
control->get(card, control->cookie, control->type, values);
@@ -426,7 +426,7 @@ auich_get_mix(auich_dev *card, multi_mix_value_info * mmvi)
}
static status_t
static status_t
auich_set_mix(auich_dev *card, multi_mix_value_info * mmvi)
{
int32 i, id;
@@ -438,7 +438,7 @@ auich_set_mix(auich_dev *card, multi_mix_value_info * mmvi)
continue;
}
control = &card->multi.controls[id];
if (control->mix_control.flags & B_MULTI_MIX_GAIN) {
multi_mixer_control *control2 = NULL;
if (i+1<mmvi->item_count) {
@@ -461,27 +461,27 @@ auich_set_mix(auich_dev *card, multi_mix_value_info * mmvi)
values[0] = mmvi->values[i].u.gain;
else
values[1] = mmvi->values[i].u.gain;
if (control2 && control2->mix_control.master != EMU_MULTI_CONTROL_MASTERID)
values[1] = mmvi->values[i+1].u.gain;
control->set(card, control->cookie, control->type, values);
}
if (control2)
i++;
i++;
}
if (control->mix_control.flags & B_MULTI_MIX_ENABLE && control->set) {
float values[1];
values[0] = mmvi->values[i].u.enable ? 1.0 : 0.0;
control->set(card, control->cookie, control->type, values);
}
if (control->mix_control.flags & B_MULTI_MIX_MUX && control->set) {
float values[1];
values[0] = (float)mmvi->values[i].u.mux;
control->set(card, control->cookie, control->type, values);
}
@@ -490,35 +490,35 @@ auich_set_mix(auich_dev *card, multi_mix_value_info * mmvi)
}
static status_t
static status_t
auich_list_mix_controls(auich_dev *card, multi_mix_control_info * mmci)
{
multi_mix_control *mmc;
int32 i;
mmc = mmci->controls;
if (mmci->control_count < 24)
return B_ERROR;
if (auich_create_controls_list(&card->multi) < B_OK)
return B_ERROR;
for (i = 0; i < card->multi.control_count; i++) {
mmc[i] = card->multi.controls[i].mix_control;
}
mmci->control_count = card->multi.control_count;
mmci->control_count = card->multi.control_count;
return B_OK;
}
static status_t
static status_t
auich_list_mix_connections(auich_dev *card, multi_mix_connection_info * data)
{
return B_ERROR;
}
static status_t
static status_t
auich_list_mix_channels(auich_dev *card, multi_mix_channel_info *data)
{
return B_ERROR;
@@ -571,21 +571,21 @@ auich_create_channels_list(multi_dev *multi)
B_CHANNEL_CENTER,
B_CHANNEL_SUB
};
chans = multi->chans;
index = 0;
for (mode=AUICH_USE_PLAY; mode!=-1;
for (mode=AUICH_USE_PLAY; mode!=-1;
mode = (mode == AUICH_USE_PLAY) ? AUICH_USE_RECORD : -1) {
LIST_FOREACH(stream, &((auich_dev*)multi->card)->streams, next) {
if ((stream->use & mode) == 0)
continue;
if (stream->channels == 2)
designations = B_CHANNEL_STEREO_BUS;
else
designations = B_CHANNEL_SURROUND_BUS;
for (i = 0; i < stream->channels; i++) {
chans[index].channel_id = index;
chans[index].kind = (mode == AUICH_USE_PLAY) ? B_MULTI_OUTPUT_CHANNEL : B_MULTI_INPUT_CHANNEL;
@@ -594,49 +594,49 @@ auich_create_channels_list(multi_dev *multi)
index++;
}
}
if (mode==AUICH_USE_PLAY) {
multi->output_channel_count = index;
} else {
multi->input_channel_count = index - multi->output_channel_count;
}
}
chans[index].channel_id = index;
chans[index].kind = B_MULTI_OUTPUT_BUS;
chans[index].designations = B_CHANNEL_LEFT | B_CHANNEL_STEREO_BUS;
chans[index].connectors = B_CHANNEL_MINI_JACK_STEREO;
index++;
chans[index].channel_id = index;
chans[index].kind = B_MULTI_OUTPUT_BUS;
chans[index].designations = B_CHANNEL_RIGHT | B_CHANNEL_STEREO_BUS;
chans[index].connectors = B_CHANNEL_MINI_JACK_STEREO;
index++;
multi->output_bus_channel_count = index - multi->output_channel_count
multi->output_bus_channel_count = index - multi->output_channel_count
- multi->input_channel_count;
chans[index].channel_id = index;
chans[index].kind = B_MULTI_INPUT_BUS;
chans[index].designations = B_CHANNEL_LEFT | B_CHANNEL_STEREO_BUS;
chans[index].connectors = B_CHANNEL_MINI_JACK_STEREO;
index++;
chans[index].channel_id = index;
chans[index].kind = B_MULTI_INPUT_BUS;
chans[index].designations = B_CHANNEL_RIGHT | B_CHANNEL_STEREO_BUS;
chans[index].connectors = B_CHANNEL_MINI_JACK_STEREO;
index++;
multi->input_bus_channel_count = index - multi->output_channel_count
multi->input_bus_channel_count = index - multi->output_channel_count
- multi->input_channel_count - multi->output_bus_channel_count;
multi->aux_bus_channel_count = 0;
}
static status_t
static status_t
auich_get_description(auich_dev *card, multi_description *data)
{
uint32 size;
@@ -658,7 +658,7 @@ auich_get_description(auich_dev *card, multi_description *data)
strncpy(data->friendly_name, FRIENDLY_NAME_AMD, 32);
break;
}
strcpy(data->vendor_info, AUTHOR);
/*data->output_channel_count = 6;
@@ -666,21 +666,21 @@ auich_get_description(auich_dev *card, multi_description *data)
data->output_bus_channel_count = 2;
data->input_bus_channel_count = 2;
data->aux_bus_channel_count = 0;*/
data->output_channel_count = card->multi.output_channel_count;
data->input_channel_count = card->multi.input_channel_count;
data->output_bus_channel_count = card->multi.output_bus_channel_count;
data->input_bus_channel_count = card->multi.input_bus_channel_count;
data->aux_bus_channel_count = card->multi.aux_bus_channel_count;
size = card->multi.output_channel_count + card->multi.input_channel_count
+ card->multi.output_bus_channel_count + card->multi.input_bus_channel_count
+ card->multi.aux_bus_channel_count;
// for each channel, starting with the first output channel,
// then the second, third..., followed by the first input
// for each channel, starting with the first output channel,
// then the second, third..., followed by the first input
// channel, second, third, ..., followed by output bus
// channels and input bus channels and finally auxillary channels,
// channels and input bus channels and finally auxillary channels,
LOG(("request_channel_count = %d\n",data->request_channel_count));
if (data->request_channel_count >= size) {
@@ -708,7 +708,7 @@ auich_get_description(auich_dev *card, multi_description *data)
}
static status_t
static status_t
auich_get_enabled_channels(auich_dev *card, multi_channel_enable *data)
{
B_SET_CHANNEL(data->enable_bits, 0, true);
@@ -726,7 +726,7 @@ auich_get_enabled_channels(auich_dev *card, multi_channel_enable *data)
}
static status_t
static status_t
auich_set_enabled_channels(auich_dev *card, multi_channel_enable *data)
{
PRINT(("set_enabled_channels 0 : %s\n", B_TEST_CHANNEL(data->enable_bits, 0) ? "enabled": "disabled"));
@@ -737,14 +737,14 @@ auich_set_enabled_channels(auich_dev *card, multi_channel_enable *data)
}
static status_t
static status_t
auich_get_global_format(auich_dev *card, multi_format_info *data)
{
data->output_latency = 0;
data->input_latency = 0;
data->timecode_kind = 0;
switch (current_settings.sample_rate) {
case 48000:
case 48000:
data->input.rate = data->output.rate = B_SR_48000;
data->input.cvsr = data->output.cvsr = 48000;
break;
@@ -758,11 +758,11 @@ auich_get_global_format(auich_dev *card, multi_format_info *data)
}
static status_t
static status_t
auich_get_buffers(auich_dev *card, multi_buffer_list *data)
{
uint8 i, j, pchannels, rchannels, bufcount;
LOG(("flags = %#x\n",data->flags));
LOG(("request_playback_buffers = %#x\n",data->request_playback_buffers));
LOG(("request_playback_channels = %#x\n",data->request_playback_channels));
@@ -770,10 +770,10 @@ auich_get_buffers(auich_dev *card, multi_buffer_list *data)
LOG(("request_record_buffers = %#x\n",data->request_record_buffers));
LOG(("request_record_channels = %#x\n",data->request_record_channels));
LOG(("request_record_buffer_size = %#x\n",data->request_record_buffer_size));
pchannels = card->pstream->channels;
rchannels = card->rstream->channels;
if (data->request_playback_buffers < current_settings.buffer_count ||
data->request_playback_channels < (pchannels) ||
data->request_record_buffers < current_settings.buffer_count ||
@@ -782,10 +782,10 @@ auich_get_buffers(auich_dev *card, multi_buffer_list *data)
}
ASSERT(current_settings.buffer_count == 2);
data->flags = B_MULTI_BUFFER_PLAYBACK | B_MULTI_BUFFER_RECORD; // XXX ???
// data->flags = 0;
data->return_playback_buffers = current_settings.buffer_count; /* playback_buffers[b][] */
data->return_playback_channels = pchannels; /* playback_buffers[][c] */
data->return_playback_buffer_size = current_settings.buffer_frames; /* frames */
@@ -796,24 +796,24 @@ auich_get_buffers(auich_dev *card, multi_buffer_list *data)
for (i = 0; i < bufcount; i++)
for (j=0; j<pchannels; j++)
auich_stream_get_nth_buffer(card->pstream, j, i,
auich_stream_get_nth_buffer(card->pstream, j, i,
&data->playback_buffers[i][j].base,
&data->playback_buffers[i][j].stride);
data->return_record_buffers = current_settings.buffer_count;
data->return_record_channels = rchannels;
data->return_record_buffer_size = current_settings.buffer_frames; /* frames */
bufcount = current_settings.buffer_count;
if (bufcount > data->request_record_buffers)
bufcount = data->request_record_buffers;
for (i = 0; i < bufcount; i++)
for (j=0; j<rchannels; j++)
auich_stream_get_nth_buffer(card->rstream, j, i,
auich_stream_get_nth_buffer(card->rstream, j, i,
&data->record_buffers[i][j].base,
&data->record_buffers[i][j].stride);
return B_OK;
}
@@ -823,17 +823,17 @@ auich_play_inth(void* inthparams)
{
auich_stream *stream = (auich_stream *)inthparams;
//int32 count;
acquire_spinlock(&slock);
stream->real_time = system_time();
stream->frames_count += current_settings.buffer_frames;
stream->buffer_cycle = (stream->trigblk
stream->buffer_cycle = (stream->trigblk
+ stream->blkmod - 1) % stream->blkmod;
stream->update_needed = true;
release_spinlock(&slock);
TRACE(("auich_play_inth : cycle : %d\n", stream->buffer_cycle));
//get_sem_count(stream->card->buffer_ready_sem, &count);
//if (count <= 0)
release_sem_etc(stream->card->buffer_ready_sem, 1, B_DO_NOT_RESCHEDULE);
@@ -845,30 +845,30 @@ auich_record_inth(void* inthparams)
{
auich_stream *stream = (auich_stream *)inthparams;
//int32 count;
acquire_spinlock(&slock);
stream->real_time = system_time();
stream->frames_count += current_settings.buffer_frames;
stream->buffer_cycle = (stream->trigblk
stream->buffer_cycle = (stream->trigblk
+ stream->blkmod - 1) % stream->blkmod;
stream->update_needed = true;
release_spinlock(&slock);
TRACE(("auich_record_inth : cycle : %d\n", stream->buffer_cycle));
//get_sem_count(stream->card->buffer_ready_sem, &count);
//if (count <= 0)
release_sem_etc(stream->card->buffer_ready_sem, 1, B_DO_NOT_RESCHEDULE);
}
static status_t
static status_t
auich_buffer_exchange(auich_dev *card, multi_buffer_info *data)
{
cpu_status status;
auich_stream *pstream, *rstream;
multi_buffer_info buffer_info;
#ifdef __HAIKU__
if (user_memcpy(&buffer_info, data, sizeof(buffer_info)) < B_OK)
return B_BAD_ADDRESS;
@@ -877,48 +877,48 @@ auich_buffer_exchange(auich_dev *card, multi_buffer_info *data)
#endif
buffer_info.flags = B_MULTI_BUFFER_PLAYBACK | B_MULTI_BUFFER_RECORD;
if (!(card->pstream->state & AUICH_STATE_STARTED))
auich_stream_start(card->pstream, auich_play_inth, card->pstream);
if (!(card->rstream->state & AUICH_STATE_STARTED))
auich_stream_start(card->rstream, auich_record_inth, card->rstream);
if (acquire_sem_etc(card->buffer_ready_sem, 1, B_RELATIVE_TIMEOUT | B_CAN_INTERRUPT, 50000)
== B_TIMED_OUT) {
LOG(("buffer_exchange timeout ff\n"));
}
status = lock();
LIST_FOREACH(pstream, &card->streams, next) {
if ((pstream->use & AUICH_USE_PLAY) == 0 ||
if ((pstream->use & AUICH_USE_PLAY) == 0 ||
(pstream->state & AUICH_STATE_STARTED) == 0)
continue;
if (pstream->update_needed)
if (pstream->update_needed)
break;
}
LIST_FOREACH(rstream, &card->streams, next) {
if ((rstream->use & AUICH_USE_RECORD) == 0 ||
(rstream->state & AUICH_STATE_STARTED) == 0)
continue;
if (rstream->update_needed)
if (rstream->update_needed)
break;
}
if (!pstream)
pstream = card->pstream;
if (!rstream)
rstream = card->rstream;
/* do playback */
buffer_info.playback_buffer_cycle = pstream->buffer_cycle;
buffer_info.played_real_time = pstream->real_time;
buffer_info.played_frames_count = pstream->frames_count;
buffer_info._reserved_0 = pstream->first_channel;
pstream->update_needed = false;
/* do record */
buffer_info.record_buffer_cycle = rstream->buffer_cycle;
buffer_info.recorded_frames_count = rstream->frames_count;
@@ -933,13 +933,13 @@ auich_buffer_exchange(auich_dev *card, multi_buffer_info *data)
#else
memcpy(data, &buffer_info, sizeof(buffer_info));
#endif
//TRACE(("buffer_exchange ended\n"));
return B_OK;
}
static status_t
static status_t
auich_buffer_force_stop(auich_dev *card)
{
//auich_voice_halt(card->pvoice);
@@ -947,13 +947,13 @@ auich_buffer_force_stop(auich_dev *card)
}
static status_t
static status_t
auich_multi_control(void *cookie, uint32 op, void *data, size_t length)
{
auich_dev *card = (auich_dev *)cookie;
switch (op) {
case B_MULTI_GET_DESCRIPTION:
case B_MULTI_GET_DESCRIPTION:
LOG(("B_MULTI_GET_DESCRIPTION\n"));
return auich_get_description(card, (multi_description *)data);
case B_MULTI_GET_EVENT_INFO:
@@ -976,7 +976,7 @@ auich_multi_control(void *cookie, uint32 op, void *data, size_t length)
return auich_get_global_format(card, (multi_format_info *)data);
case B_MULTI_SET_GLOBAL_FORMAT:
LOG(("B_MULTI_SET_GLOBAL_FORMAT\n"));
return B_OK; /* XXX BUG! we *MUST* return B_OK, returning B_ERROR will prevent
return B_OK; /* XXX BUG! we *MUST* return B_OK, returning B_ERROR will prevent
* BeOS to accept the format returned in B_MULTI_GET_GLOBAL_FORMAT
*/
case B_MULTI_GET_CHANNEL_FORMATS:
@@ -1047,33 +1047,33 @@ auich_open(const char *name, uint32 flags, void** cookie)
auich_dev *card = NULL;
void *settings_handle;
int ix;
LOG(("open()\n"));
for (ix=0; ix<num_cards; ix++) {
if (!strcmp(cards[ix].name, name)) {
card = &cards[ix];
}
}
if (card == NULL) {
LOG(("open() card not found %s\n", name));
for (ix=0; ix<num_cards; ix++) {
LOG(("open() card available %s\n", cards[ix].name));
LOG(("open() card available %s\n", cards[ix].name));
}
return B_ERROR;
}
LOG(("open() got card\n"));
if (card->pstream !=NULL)
return B_ERROR;
if (card->rstream !=NULL)
return B_ERROR;
*cookie = card;
card->multi.card = card;
// get driver settings
settings_handle = load_driver_settings(AUICH_SETTINGS);
if (settings_handle != NULL) {
@@ -1083,42 +1083,42 @@ auich_open(const char *name, uint32 flags, void** cookie)
item = get_driver_parameter (settings_handle, "sample_rate", "48000", "48000");
value = strtoul (item, &end, 0);
if (*end == '\0')
if (*end == '\0')
current_settings.sample_rate = value;
item = get_driver_parameter (settings_handle, "buffer_frames", "256", "256");
value = strtoul (item, &end, 0);
if (*end == '\0')
if (*end == '\0')
current_settings.buffer_frames = value;
item = get_driver_parameter (settings_handle, "buffer_count", "4", "4");
value = strtoul (item, &end, 0);
if (*end == '\0')
if (*end == '\0')
current_settings.buffer_count = value;
unload_driver_settings(settings_handle);
}
LOG(("stream_new\n"));
card->rstream = auich_stream_new(card, AUICH_USE_RECORD, current_settings.buffer_frames, current_settings.buffer_count);
card->pstream = auich_stream_new(card, AUICH_USE_PLAY, current_settings.buffer_frames, current_settings.buffer_count);
card->buffer_ready_sem = create_sem(0, "pbuffer ready");
LOG(("stream_setaudio\n"));
auich_stream_set_audioparms(card->pstream, 2, true, current_settings.sample_rate);
auich_stream_set_audioparms(card->rstream, 2, true, current_settings.sample_rate);
card->pstream->first_channel = 0;
card->rstream->first_channel = 2;
auich_stream_commit_parms(card->pstream);
auich_stream_commit_parms(card->rstream);
auich_create_channels_list(&card->multi);
return B_OK;
}
@@ -1128,7 +1128,7 @@ auich_close(void* cookie)
{
//auich_dev *card = cookie;
LOG(("close()\n"));
return B_OK;
}
@@ -1139,21 +1139,21 @@ auich_free(void* cookie)
auich_dev *card = cookie;
auich_stream *stream;
LOG(("free()\n"));
if (card->buffer_ready_sem > B_OK)
delete_sem(card->buffer_ready_sem);
LIST_FOREACH(stream, &card->streams, next) {
auich_stream_halt(stream);
}
while (!LIST_EMPTY(&card->streams)) {
auich_stream_delete(LIST_FIRST(&card->streams));
}
card->pstream = NULL;
card->rstream = NULL;
return B_OK;
}
@@ -7,24 +7,24 @@
* Copyright (c) 2002, Marcus Overhagen <marcus@overhagen.de>
*
* All rights reserved.
* Redistribution and use in source and binary forms, with or without modification,
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
@@ -43,13 +43,13 @@
#include "util.h"
#include "io.h"
static void
static void
auvia_ac97_get_mix(void *card, const void *cookie, int32 type, float *values) {
auvia_dev *dev = (auvia_dev*)card;
ac97_source_info *info = (ac97_source_info *)cookie;
uint16 value, mask;
float gain;
switch(type) {
case B_MIX_GAIN:
value = auvia_codec_read(&dev->config, info->reg);
@@ -61,7 +61,7 @@ auvia_ac97_get_mix(void *card, const void *cookie, int32 type, float *values) {
values[0] = info->max_gain - gain;
else
values[0] = gain - info->min_gain;
mask = ((1 << (info->bits + 1)) - 1);
gain = (value & mask) * info->granularity;
if(info->polarity == 1)
@@ -101,26 +101,26 @@ auvia_ac97_get_mix(void *card, const void *cookie, int32 type, float *values) {
}
}
static void
static void
auvia_ac97_set_mix(void *card, const void *cookie, int32 type, float *values) {
auvia_dev *dev = (auvia_dev*)card;
ac97_source_info *info = (ac97_source_info *)cookie;
uint16 value, mask;
float gain;
switch(type) {
case B_MIX_GAIN:
value = auvia_codec_read(&dev->config, info->reg);
if(info->type & B_MIX_STEREO) {
mask = ((1 << (info->bits + 1)) - 1) << 8;
value &= ~mask;
if(info->polarity == 1)
gain = info->max_gain - values[0];
else
gain = values[0] - info->min_gain;
value |= ((uint16)(gain / info->granularity) << 8) & mask;
mask = ((1 << (info->bits + 1)) - 1);
value &= ~mask;
if(info->polarity == 1)
@@ -174,7 +174,7 @@ auvia_ac97_set_mix(void *card, const void *cookie, int32 type, float *values) {
}
static int32
auvia_create_group_control(multi_dev *multi, int32 *index, int32 parent,
auvia_create_group_control(multi_dev *multi, int32 *index, int32 parent,
int32 string, const char* name) {
int32 i = *index;
(*index)++;
@@ -185,7 +185,7 @@ auvia_create_group_control(multi_dev *multi, int32 *index, int32 parent,
multi->controls[i].mix_control.string = string;
if(name)
strcpy(multi->controls[i].mix_control.name, name);
return multi->controls[i].mix_control.id;
}
@@ -195,15 +195,15 @@ auvia_create_controls_list(multi_dev *multi)
uint32 i = 0, index = 0, count, id, parent, parent2, parent3;
auvia_dev *card = (auvia_dev*)multi->card;
const ac97_source_info *info;
parent = auvia_create_group_control(multi, &index, 0, 0, "Record");
/* AC97 Record */
info = &source_info[0];
PRINT(("name : %s\n", info->name));
parent2 = auvia_create_group_control(multi, &index, parent, 0, info->name);
if(info->type & B_MIX_GAIN) {
if(info->type & B_MIX_MUTE) {
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
@@ -217,7 +217,7 @@ auvia_create_controls_list(multi_dev *multi)
multi->controls[index].set = &auvia_ac97_set_mix;
index++;
}
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_GAIN;
multi->controls[index].mix_control.master = EMU_MULTI_CONTROL_MASTERID;
@@ -232,7 +232,7 @@ auvia_create_controls_list(multi_dev *multi)
multi->controls[index].set = &auvia_ac97_set_mix;
id = multi->controls[index].mix_control.id;
index++;
if(info->type & B_MIX_STEREO) {
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_GAIN;
@@ -248,19 +248,19 @@ auvia_create_controls_list(multi_dev *multi)
multi->controls[index].set = &auvia_ac97_set_mix;
index++;
}
if(info->type & B_MIX_RECORDMUX) {
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX;
multi->controls[index].mix_control.parent = parent2;
strcpy(multi->controls[index].mix_control.name, "Record Mux");
strcpy(multi->controls[index].mix_control.name, "Record mux");
multi->controls[index].cookie = info;
multi->controls[index].type = B_MIX_MUX;
multi->controls[index].get = &auvia_ac97_get_mix;
multi->controls[index].set = &auvia_ac97_set_mix;
parent3 = multi->controls[index].mix_control.id;
index++;
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
multi->controls[index].mix_control.parent = parent3;
@@ -269,22 +269,22 @@ auvia_create_controls_list(multi_dev *multi)
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
multi->controls[index].mix_control.parent = parent3;
strcpy(multi->controls[index].mix_control.name, "CD In");
strcpy(multi->controls[index].mix_control.name, "CD in");
index++;
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
multi->controls[index].mix_control.parent = parent3;
strcpy(multi->controls[index].mix_control.name, "Video In");
strcpy(multi->controls[index].mix_control.name, "Video in");
index++;
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
multi->controls[index].mix_control.parent = parent3;
strcpy(multi->controls[index].mix_control.name, "Aux In");
strcpy(multi->controls[index].mix_control.name, "Aux in");
index++;
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
multi->controls[index].mix_control.parent = parent3;
strcpy(multi->controls[index].mix_control.name, "Line In");
strcpy(multi->controls[index].mix_control.name, "Line in");
index++;
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
@@ -302,19 +302,19 @@ auvia_create_controls_list(multi_dev *multi)
strcpy(multi->controls[index].mix_control.name, "TAD");
index++;
}
}
parent = auvia_create_group_control(multi, &index, 0, 0, "AC97 Mixer");
}
parent = auvia_create_group_control(multi, &index, 0, 0, "AC97 mixer");
count = source_info_size;
count--;
count--;
for(i = 1; i < count ; i++) {
info = &source_info[i];
PRINT(("name : %s\n", info->name));
parent2 = auvia_create_group_control(multi, &index, parent, 0, info->name);
if(info->type & B_MIX_GAIN) {
if(info->type & B_MIX_MUTE) {
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
@@ -328,7 +328,7 @@ auvia_create_controls_list(multi_dev *multi)
multi->controls[index].set = &auvia_ac97_set_mix;
index++;
}
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_GAIN;
multi->controls[index].mix_control.master = EMU_MULTI_CONTROL_MASTERID;
@@ -343,7 +343,7 @@ auvia_create_controls_list(multi_dev *multi)
multi->controls[index].set = &auvia_ac97_set_mix;
id = multi->controls[index].mix_control.id;
index++;
if(info->type & B_MIX_STEREO) {
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_GAIN;
@@ -359,14 +359,14 @@ auvia_create_controls_list(multi_dev *multi)
multi->controls[index].set = &auvia_ac97_set_mix;
index++;
}
}
}
}
parent = auvia_create_group_control(multi, &index, 0, S_SETUP, NULL);
/* AC97 20db Boost Mic */
info = &source_info[6];
if(info->type & B_MIX_GAIN && info->type & B_MIX_MICBOOST) {
multi->controls[index].mix_control.id = EMU_MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_ENABLE;
@@ -379,13 +379,13 @@ auvia_create_controls_list(multi_dev *multi)
multi->controls[index].set = &auvia_ac97_set_mix;
index++;
}
multi->control_count = index;
PRINT(("multi->control_count %lu\n", multi->control_count));
return B_OK;
}
static status_t
static status_t
auvia_get_mix(auvia_dev *card, multi_mix_value_info * mmvi)
{
int32 i, id;
@@ -397,7 +397,7 @@ auvia_get_mix(auvia_dev *card, multi_mix_value_info * mmvi)
continue;
}
control = &card->multi.controls[id];
if(control->mix_control.flags & B_MULTI_MIX_GAIN) {
if(control->get) {
float values[2];
@@ -406,15 +406,15 @@ auvia_get_mix(auvia_dev *card, multi_mix_value_info * mmvi)
mmvi->values[i].u.gain = values[0];
else
mmvi->values[i].u.gain = values[1];
}
}
}
if(control->mix_control.flags & B_MULTI_MIX_ENABLE && control->get) {
float values[1];
control->get(card, control->cookie, control->type, values);
mmvi->values[i].u.enable = (values[0] == 1.0);
}
if(control->mix_control.flags & B_MULTI_MIX_MUX && control->get) {
float values[1];
control->get(card, control->cookie, control->type, values);
@@ -424,7 +424,7 @@ auvia_get_mix(auvia_dev *card, multi_mix_value_info * mmvi)
return B_OK;
}
static status_t
static status_t
auvia_set_mix(auvia_dev *card, multi_mix_value_info * mmvi)
{
int32 i, id;
@@ -436,7 +436,7 @@ auvia_set_mix(auvia_dev *card, multi_mix_value_info * mmvi)
continue;
}
control = &card->multi.controls[id];
if(control->mix_control.flags & B_MULTI_MIX_GAIN) {
multi_mixer_control *control2 = NULL;
if(i+1<mmvi->item_count) {
@@ -459,27 +459,27 @@ auvia_set_mix(auvia_dev *card, multi_mix_value_info * mmvi)
values[0] = mmvi->values[i].u.gain;
else
values[1] = mmvi->values[i].u.gain;
if(control2 && control2->mix_control.master != EMU_MULTI_CONTROL_MASTERID)
values[1] = mmvi->values[i+1].u.gain;
control->set(card, control->cookie, control->type, values);
}
if(control2)
i++;
i++;
}
if(control->mix_control.flags & B_MULTI_MIX_ENABLE && control->set) {
float values[1];
values[0] = mmvi->values[i].u.enable ? 1.0 : 0.0;
control->set(card, control->cookie, control->type, values);
}
if(control->mix_control.flags & B_MULTI_MIX_MUX && control->set) {
float values[1];
values[0] = (float)mmvi->values[i].u.mux;
control->set(card, control->cookie, control->type, values);
}
@@ -487,33 +487,33 @@ auvia_set_mix(auvia_dev *card, multi_mix_value_info * mmvi)
return B_OK;
}
static status_t
static status_t
auvia_list_mix_controls(auvia_dev *card, multi_mix_control_info * mmci)
{
multi_mix_control *mmc;
int32 i;
mmc = mmci->controls;
if(mmci->control_count < 24)
return B_ERROR;
if(auvia_create_controls_list(&card->multi) < B_OK)
return B_ERROR;
for(i = 0; i < card->multi.control_count; i++) {
mmc[i] = card->multi.controls[i].mix_control;
}
mmci->control_count = card->multi.control_count;
mmci->control_count = card->multi.control_count;
return B_OK;
}
static status_t
static status_t
auvia_list_mix_connections(auvia_dev *card, multi_mix_connection_info * data)
{
return B_ERROR;
}
static status_t
static status_t
auvia_list_mix_channels(auvia_dev *card, multi_mix_channel_info *data)
{
return B_ERROR;
@@ -566,21 +566,21 @@ auvia_create_channels_list(multi_dev *multi)
B_CHANNEL_CENTER,
B_CHANNEL_SUB
};
chans = multi->chans;
index = 0;
for(mode=AUVIA_USE_PLAY; mode!=-1;
for(mode=AUVIA_USE_PLAY; mode!=-1;
mode = (mode == AUVIA_USE_PLAY) ? AUVIA_USE_RECORD : -1) {
LIST_FOREACH(stream, &((auvia_dev*)multi->card)->streams, next) {
if ((stream->use & mode) == 0)
continue;
if(stream->channels == 2)
designations = B_CHANNEL_STEREO_BUS;
else
designations = B_CHANNEL_SURROUND_BUS;
for(i = 0; i < stream->channels; i++) {
chans[index].channel_id = index;
chans[index].kind = (mode == AUVIA_USE_PLAY) ? B_MULTI_OUTPUT_CHANNEL : B_MULTI_INPUT_CHANNEL;
@@ -589,49 +589,49 @@ auvia_create_channels_list(multi_dev *multi)
index++;
}
}
if(mode==AUVIA_USE_PLAY) {
multi->output_channel_count = index;
} else {
multi->input_channel_count = index - multi->output_channel_count;
}
}
chans[index].channel_id = index;
chans[index].kind = B_MULTI_OUTPUT_BUS;
chans[index].designations = B_CHANNEL_LEFT | B_CHANNEL_STEREO_BUS;
chans[index].connectors = B_CHANNEL_MINI_JACK_STEREO;
index++;
chans[index].channel_id = index;
chans[index].kind = B_MULTI_OUTPUT_BUS;
chans[index].designations = B_CHANNEL_RIGHT | B_CHANNEL_STEREO_BUS;
chans[index].connectors = B_CHANNEL_MINI_JACK_STEREO;
index++;
multi->output_bus_channel_count = index - multi->output_channel_count
multi->output_bus_channel_count = index - multi->output_channel_count
- multi->input_channel_count;
chans[index].channel_id = index;
chans[index].kind = B_MULTI_INPUT_BUS;
chans[index].designations = B_CHANNEL_LEFT | B_CHANNEL_STEREO_BUS;
chans[index].connectors = B_CHANNEL_MINI_JACK_STEREO;
index++;
chans[index].channel_id = index;
chans[index].kind = B_MULTI_INPUT_BUS;
chans[index].designations = B_CHANNEL_RIGHT | B_CHANNEL_STEREO_BUS;
chans[index].connectors = B_CHANNEL_MINI_JACK_STEREO;
index++;
multi->input_bus_channel_count = index - multi->output_channel_count
multi->input_bus_channel_count = index - multi->output_channel_count
- multi->input_channel_count - multi->output_bus_channel_count;
multi->aux_bus_channel_count = 0;
}
static status_t
static status_t
auvia_get_description(auvia_dev *card, multi_description *data)
{
uint32 size;
@@ -672,21 +672,21 @@ auvia_get_description(auvia_dev *card, multi_description *data)
data->output_bus_channel_count = 2;
data->input_bus_channel_count = 2;
data->aux_bus_channel_count = 0;*/
data->output_channel_count = card->multi.output_channel_count;
data->input_channel_count = card->multi.input_channel_count;
data->output_bus_channel_count = card->multi.output_bus_channel_count;
data->input_bus_channel_count = card->multi.input_bus_channel_count;
data->aux_bus_channel_count = card->multi.aux_bus_channel_count;
size = card->multi.output_channel_count + card->multi.input_channel_count
+ card->multi.output_bus_channel_count + card->multi.input_bus_channel_count
+ card->multi.aux_bus_channel_count;
// for each channel, starting with the first output channel,
// then the second, third..., followed by the first input
// for each channel, starting with the first output channel,
// then the second, third..., followed by the first input
// channel, second, third, ..., followed by output bus
// channels and input bus channels and finally auxillary channels,
// channels and input bus channels and finally auxillary channels,
LOG(("request_channel_count = %d\n",data->request_channel_count));
if (data->request_channel_count >= size) {
@@ -714,7 +714,7 @@ auvia_get_description(auvia_dev *card, multi_description *data)
return B_OK;
}
static status_t
static status_t
auvia_get_enabled_channels(auvia_dev *card, multi_channel_enable *data)
{
B_SET_CHANNEL(data->enable_bits, 0, true);
@@ -731,7 +731,7 @@ auvia_get_enabled_channels(auvia_dev *card, multi_channel_enable *data)
return B_OK;
}
static status_t
static status_t
auvia_set_enabled_channels(auvia_dev *card, multi_channel_enable *data)
{
PRINT(("set_enabled_channels 0 : %s\n", B_TEST_CHANNEL(data->enable_bits, 0) ? "enabled": "disabled"));
@@ -741,7 +741,7 @@ auvia_set_enabled_channels(auvia_dev *card, multi_channel_enable *data)
return B_OK;
}
static status_t
static status_t
auvia_get_global_format(auvia_dev *card, multi_format_info *data)
{
data->output_latency = 0;
@@ -762,11 +762,11 @@ auvia_get_global_format(auvia_dev *card, multi_format_info *data)
return B_OK;
}
static status_t
static status_t
auvia_get_buffers(auvia_dev *card, multi_buffer_list *data)
{
uint32 i, j, pchannels, rchannels;
LOG(("flags = %#x\n",data->flags));
LOG(("request_playback_buffers = %#x\n",data->request_playback_buffers));
LOG(("request_playback_channels = %#x\n",data->request_playback_channels));
@@ -774,10 +774,10 @@ auvia_get_buffers(auvia_dev *card, multi_buffer_list *data)
LOG(("request_record_buffers = %#x\n",data->request_record_buffers));
LOG(("request_record_channels = %#x\n",data->request_record_channels));
LOG(("request_record_buffer_size = %#x\n",data->request_record_buffer_size));
pchannels = card->pstream->channels;
rchannels = card->rstream->channels;
if (data->request_playback_buffers < BUFFER_COUNT ||
data->request_playback_channels < (pchannels) ||
data->request_record_buffers < BUFFER_COUNT ||
@@ -786,30 +786,30 @@ auvia_get_buffers(auvia_dev *card, multi_buffer_list *data)
}
ASSERT(BUFFER_COUNT == 2);
data->flags = B_MULTI_BUFFER_PLAYBACK | B_MULTI_BUFFER_RECORD; // XXX ???
// data->flags = 0;
data->return_playback_buffers = BUFFER_COUNT; /* playback_buffers[b][] */
data->return_playback_channels = pchannels; /* playback_buffers[][c] */
data->return_playback_buffer_size = BUFFER_FRAMES; /* frames */
for(i = 0; i < BUFFER_COUNT; i++)
for(j=0; j<pchannels; j++)
auvia_stream_get_nth_buffer(card->pstream, j, i,
auvia_stream_get_nth_buffer(card->pstream, j, i,
&data->playback_buffers[i][j].base,
&data->playback_buffers[i][j].stride);
data->return_record_buffers = BUFFER_COUNT;
data->return_record_channels = rchannels;
data->return_record_buffer_size = BUFFER_FRAMES; /* frames */
for(i = 0; i < BUFFER_COUNT; i++)
for(j=0; j<rchannels; j++)
auvia_stream_get_nth_buffer(card->rstream, j, i,
auvia_stream_get_nth_buffer(card->rstream, j, i,
&data->record_buffers[i][j].base,
&data->record_buffers[i][j].stride);
return B_OK;
}
@@ -819,17 +819,17 @@ auvia_play_inth(void* inthparams)
{
auvia_stream *stream = (auvia_stream *)inthparams;
//int32 count;
//TRACE(("auvia_play_inth\n"));
acquire_spinlock(&slock);
stream->real_time = system_time();
stream->frames_count += BUFFER_FRAMES;
stream->buffer_cycle = (stream->trigblk
stream->buffer_cycle = (stream->trigblk
+ stream->blkmod -1) % stream->blkmod;
stream->update_needed = true;
release_spinlock(&slock);
//get_sem_count(stream->card->buffer_ready_sem, &count);
//if (count <= 0)
release_sem_etc(stream->card->buffer_ready_sem, 1, B_DO_NOT_RESCHEDULE);
@@ -840,29 +840,29 @@ auvia_record_inth(void* inthparams)
{
auvia_stream *stream = (auvia_stream *)inthparams;
//int32 count;
//TRACE(("auvia_record_inth\n"));
acquire_spinlock(&slock);
stream->real_time = system_time();
stream->frames_count += BUFFER_FRAMES;
stream->buffer_cycle = (stream->trigblk
stream->buffer_cycle = (stream->trigblk
+ stream->blkmod -1) % stream->blkmod;
stream->update_needed = true;
release_spinlock(&slock);
//get_sem_count(stream->card->buffer_ready_sem, &count);
//if (count <= 0)
release_sem_etc(stream->card->buffer_ready_sem, 1, B_DO_NOT_RESCHEDULE);
}
static status_t
static status_t
auvia_buffer_exchange(auvia_dev *card, multi_buffer_info *data)
{
cpu_status status;
auvia_stream *pstream, *rstream;
multi_buffer_info buffer_info;
#ifdef __HAIKU__
if (user_memcpy(&buffer_info, data, sizeof(buffer_info)) < B_OK)
return B_BAD_ADDRESS;
@@ -871,10 +871,10 @@ auvia_buffer_exchange(auvia_dev *card, multi_buffer_info *data)
#endif
buffer_info.flags = B_MULTI_BUFFER_PLAYBACK | B_MULTI_BUFFER_RECORD;
if (!(card->pstream->state & AUVIA_STATE_STARTED))
auvia_stream_start(card->pstream, auvia_play_inth, card->pstream);
if (!(card->rstream->state & AUVIA_STATE_STARTED))
auvia_stream_start(card->rstream, auvia_record_inth, card->rstream);
@@ -882,37 +882,37 @@ auvia_buffer_exchange(auvia_dev *card, multi_buffer_info *data)
== B_TIMED_OUT) {
LOG(("buffer_exchange timeout ff\n"));
}
status = lock();
LIST_FOREACH(pstream, &card->streams, next) {
if ((pstream->use & AUVIA_USE_PLAY) == 0 ||
if ((pstream->use & AUVIA_USE_PLAY) == 0 ||
(pstream->state & AUVIA_STATE_STARTED) == 0)
continue;
if(pstream->update_needed)
if(pstream->update_needed)
break;
}
LIST_FOREACH(rstream, &card->streams, next) {
if ((rstream->use & AUVIA_USE_RECORD) == 0 ||
(rstream->state & AUVIA_STATE_STARTED) == 0)
continue;
if(rstream->update_needed)
if(rstream->update_needed)
break;
}
if(!pstream)
pstream = card->pstream;
if(!rstream)
rstream = card->rstream;
/* do playback */
buffer_info.playback_buffer_cycle = pstream->buffer_cycle;
buffer_info.played_real_time = pstream->real_time;
buffer_info.played_frames_count = pstream->frames_count;
buffer_info._reserved_0 = pstream->first_channel;
pstream->update_needed = false;
/* do record */
buffer_info.record_buffer_cycle = rstream->buffer_cycle;
buffer_info.recorded_frames_count = rstream->frames_count;
@@ -932,20 +932,20 @@ auvia_buffer_exchange(auvia_dev *card, multi_buffer_info *data)
return B_OK;
}
static status_t
static status_t
auvia_buffer_force_stop(auvia_dev *card)
{
//auvia_voice_halt(card->pvoice);
return B_OK;
}
static status_t
static status_t
auvia_multi_control(void *cookie, uint32 op, void *data, size_t length)
{
auvia_dev *card = (auvia_dev *)cookie;
switch (op) {
case B_MULTI_GET_DESCRIPTION:
case B_MULTI_GET_DESCRIPTION:
LOG(("B_MULTI_GET_DESCRIPTION\n"));
return auvia_get_description(card, (multi_description *)data);
case B_MULTI_GET_EVENT_INFO:
@@ -968,7 +968,7 @@ auvia_multi_control(void *cookie, uint32 op, void *data, size_t length)
return auvia_get_global_format(card, (multi_format_info *)data);
case B_MULTI_SET_GLOBAL_FORMAT:
LOG(("B_MULTI_SET_GLOBAL_FORMAT\n"));
return B_OK; /* XXX BUG! we *MUST* return B_OK, returning B_ERROR will prevent
return B_OK; /* XXX BUG! we *MUST* return B_OK, returning B_ERROR will prevent
* BeOS to accept the format returned in B_MULTI_GET_GLOBAL_FORMAT
*/
case B_MULTI_GET_CHANNEL_FORMATS:
@@ -1037,53 +1037,53 @@ auvia_open(const char *name, uint32 flags, void** cookie)
{
auvia_dev *card = NULL;
int ix;
LOG(("open()\n"));
for (ix=0; ix<num_cards; ix++) {
if (!strcmp(cards[ix].name, name)) {
card = &cards[ix];
}
}
if(card == NULL) {
LOG(("open() card not found %s\n", name));
for (ix=0; ix<num_cards; ix++) {
LOG(("open() card available %s\n", cards[ix].name));
LOG(("open() card available %s\n", cards[ix].name));
}
return B_ERROR;
}
LOG(("open() got card\n"));
if(card->pstream !=NULL)
return B_ERROR;
if(card->rstream !=NULL)
return B_ERROR;
*cookie = card;
card->multi.card = card;
LOG(("stream_new\n"));
card->rstream = auvia_stream_new(card, AUVIA_USE_RECORD, BUFFER_FRAMES, BUFFER_COUNT);
card->pstream = auvia_stream_new(card, AUVIA_USE_PLAY, BUFFER_FRAMES, BUFFER_COUNT);
card->buffer_ready_sem = create_sem(0, "pbuffer ready");
LOG(("stream_setaudio\n"));
auvia_stream_set_audioparms(card->pstream, 2, true, 48000);
auvia_stream_set_audioparms(card->rstream, 2, true, 48000);
card->pstream->first_channel = 0;
card->rstream->first_channel = 2;
auvia_stream_commit_parms(card->pstream);
auvia_stream_commit_parms(card->rstream);
auvia_create_channels_list(&card->multi);
return B_OK;
}
@@ -1092,7 +1092,7 @@ auvia_close(void* cookie)
{
//auvia_dev *card = cookie;
LOG(("close()\n"));
return B_OK;
}
@@ -1102,21 +1102,21 @@ auvia_free(void* cookie)
auvia_dev *card = cookie;
auvia_stream *stream;
LOG(("free()\n"));
if (card->buffer_ready_sem > B_OK)
delete_sem(card->buffer_ready_sem);
LIST_FOREACH(stream, &card->streams, next) {
auvia_stream_halt(stream);
}
while(!LIST_EMPTY(&card->streams)) {
auvia_stream_delete(LIST_FIRST(&card->streams));
}
card->pstream = NULL;
card->rstream = NULL;
return B_OK;
}
@@ -185,12 +185,12 @@ set_global_format(geode_controller* controller, multi_format_info* data)
}
static void
static void
geode_ac97_get_mix(geode_controller *controller, const void *cookie, int32 type, float *values) {
ac97_source_info *info = (ac97_source_info *)cookie;
uint16 value, mask;
float gain;
switch(type) {
case B_MIX_GAIN:
value = ac97_reg_cached_read(controller->ac97, info->reg);
@@ -202,7 +202,7 @@ geode_ac97_get_mix(geode_controller *controller, const void *cookie, int32 type,
values[0] = info->max_gain - gain;
else
values[0] = gain - info->min_gain;
mask = ((1 << (info->bits + 1)) - 1);
gain = (value & mask) * info->granularity;
if (info->polarity == 1)
@@ -243,25 +243,25 @@ geode_ac97_get_mix(geode_controller *controller, const void *cookie, int32 type,
}
static void
static void
geode_ac97_set_mix(geode_controller *controller, const void *cookie, int32 type, float *values) {
ac97_source_info *info = (ac97_source_info *)cookie;
uint16 value, mask;
float gain;
switch(type) {
case B_MIX_GAIN:
value = ac97_reg_cached_read(controller->ac97, info->reg);
if (info->type & B_MIX_STEREO) {
mask = ((1 << (info->bits + 1)) - 1) << 8;
value &= ~mask;
if (info->polarity == 1)
gain = info->max_gain - values[0];
else
gain = values[0] - info->min_gain;
value |= ((uint16)(gain / info->granularity) << 8) & mask;
mask = ((1 << (info->bits + 1)) - 1);
value &= ~mask;
if (info->polarity == 1)
@@ -316,7 +316,7 @@ geode_ac97_set_mix(geode_controller *controller, const void *cookie, int32 type,
static int32
create_group_control(geode_multi *multi, uint32 *index, uint32 parent,
create_group_control(geode_multi *multi, uint32 *index, uint32 parent,
strind_id string, const char* name) {
int32 i = *index;
(*index)++;
@@ -327,7 +327,7 @@ create_group_control(geode_multi *multi, uint32 *index, uint32 parent,
multi->controls[i].mix_control.string = string;
if (name)
strcpy(multi->controls[i].mix_control.name, name);
return multi->controls[i].mix_control.id;
}
@@ -339,17 +339,17 @@ create_controls_list(geode_multi *multi)
const ac97_source_info *info;
/* AC97 Mixer */
parent = create_group_control(multi, &index, 0, S_null, "AC97 Mixer");
parent = create_group_control(multi, &index, 0, S_null, "AC97 mixer");
count = source_info_size;
//Note that we ignore first item in source_info
//It's for recording, but do match this with ac97.c's source_info
for (i = 1; i < count ; i++) {
info = &source_info[i];
TRACE("name : %s\n", info->name);
parent2 = create_group_control(multi, &index, parent, S_null, info->name);
if (info->type & B_MIX_GAIN) {
if (info->type & B_MIX_MUTE) {
multi->controls[index].mix_control.id = MULTI_CONTROL_FIRSTID + index;
@@ -363,7 +363,7 @@ create_controls_list(geode_multi *multi)
multi->controls[index].set = &geode_ac97_set_mix;
index++;
}
multi->controls[index].mix_control.id = MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_GAIN;
multi->controls[index].mix_control.master = MULTI_CONTROL_MASTERID;
@@ -378,7 +378,7 @@ create_controls_list(geode_multi *multi)
multi->controls[index].set = &geode_ac97_set_mix;
id = multi->controls[index].mix_control.id;
index++;
if (info->type & B_MIX_STEREO) {
multi->controls[index].mix_control.id = MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_GAIN;
@@ -394,7 +394,7 @@ create_controls_list(geode_multi *multi)
multi->controls[index].set = &geode_ac97_set_mix;
index++;
}
if (info->type & B_MIX_MICBOOST) {
multi->controls[index].mix_control.id = MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_ENABLE;
@@ -412,12 +412,12 @@ create_controls_list(geode_multi *multi)
/* AC97 Record */
parent = create_group_control(multi, &index, 0, S_null, "Recording");
info = &source_info[0];
TRACE("name : %s\n", info->name);
parent2 = create_group_control(multi, &index, parent, S_null, info->name);
if (info->type & B_MIX_GAIN) {
if (info->type & B_MIX_MUTE) {
multi->controls[index].mix_control.id = MULTI_CONTROL_FIRSTID + index;
@@ -431,7 +431,7 @@ create_controls_list(geode_multi *multi)
multi->controls[index].set = &geode_ac97_set_mix;
index++;
}
multi->controls[index].mix_control.id = MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_GAIN;
multi->controls[index].mix_control.master = MULTI_CONTROL_MASTERID;
@@ -446,7 +446,7 @@ create_controls_list(geode_multi *multi)
multi->controls[index].set = &geode_ac97_set_mix;
id = multi->controls[index].mix_control.id;
index++;
if (info->type & B_MIX_STEREO) {
multi->controls[index].mix_control.id = MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_GAIN;
@@ -462,19 +462,19 @@ create_controls_list(geode_multi *multi)
multi->controls[index].set = &geode_ac97_set_mix;
index++;
}
if (info->type & B_MIX_RECORDMUX) {
multi->controls[index].mix_control.id = MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX;
multi->controls[index].mix_control.parent = parent2;
strcpy(multi->controls[index].mix_control.name, "Record Mux");
strcpy(multi->controls[index].mix_control.name, "Record mux");
multi->controls[index].cookie = info;
multi->controls[index].type = B_MIX_MUX;
multi->controls[index].get = &geode_ac97_get_mix;
multi->controls[index].set = &geode_ac97_set_mix;
parent3 = multi->controls[index].mix_control.id;
index++;
multi->controls[index].mix_control.id = MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
multi->controls[index].mix_control.parent = parent3;
@@ -483,22 +483,22 @@ create_controls_list(geode_multi *multi)
multi->controls[index].mix_control.id = MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
multi->controls[index].mix_control.parent = parent3;
strcpy(multi->controls[index].mix_control.name, "CD In");
strcpy(multi->controls[index].mix_control.name, "CD in");
index++;
multi->controls[index].mix_control.id = MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
multi->controls[index].mix_control.parent = parent3;
strcpy(multi->controls[index].mix_control.name, "Video In");
strcpy(multi->controls[index].mix_control.name, "Video in");
index++;
multi->controls[index].mix_control.id = MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
multi->controls[index].mix_control.parent = parent3;
strcpy(multi->controls[index].mix_control.name, "Aux In");
strcpy(multi->controls[index].mix_control.name, "Aux in");
index++;
multi->controls[index].mix_control.id = MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
multi->controls[index].mix_control.parent = parent3;
strcpy(multi->controls[index].mix_control.name, "Line In");
strcpy(multi->controls[index].mix_control.name, "Line in");
index++;
multi->controls[index].mix_control.id = MULTI_CONTROL_FIRSTID + index;
multi->controls[index].mix_control.flags = B_MULTI_MIX_MUX_VALUE;
@@ -516,8 +516,8 @@ create_controls_list(geode_multi *multi)
strcpy(multi->controls[index].mix_control.name, "TAD");
index++;
}
}
}
multi->control_count = index;
TRACE("multi->control_count %lu\n", multi->control_count);
return B_OK;
@@ -530,14 +530,14 @@ list_mix_controls(geode_controller* controller, multi_mix_control_info* mmci)
multi_mix_control* mmc = mmci->controls;
if (mmci->control_count < 24)
return B_ERROR;
if (create_controls_list(controller->multi) < B_OK)
return B_ERROR;
for (uint32 i = 0; i < controller->multi->control_count; i++) {
mmc[i] = controller->multi->controls[i].mix_control;
}
mmci->control_count = controller->multi->control_count;
mmci->control_count = controller->multi->control_count;
return B_OK;
}
@@ -558,7 +558,7 @@ list_mix_channels(geode_controller* controller, multi_mix_channel_info *data)
}
static status_t
static status_t
get_mix(geode_controller *controller, multi_mix_value_info * mmvi)
{
for (int32 i = 0; i < mmvi->item_count; i++) {
@@ -568,7 +568,7 @@ get_mix(geode_controller *controller, multi_mix_value_info * mmvi)
continue;
}
multi_mixer_control *control = &controller->multi->controls[id];
if (control->mix_control.flags & B_MULTI_MIX_GAIN) {
if (control->get) {
float values[2];
@@ -577,15 +577,15 @@ get_mix(geode_controller *controller, multi_mix_value_info * mmvi)
mmvi->values[i].gain = values[0];
else
mmvi->values[i].gain = values[1];
}
}
}
if (control->mix_control.flags & B_MULTI_MIX_ENABLE && control->get) {
float values[1];
control->get(controller, control->cookie, control->type, values);
mmvi->values[i].enable = (values[0] == 1.0);
}
if (control->mix_control.flags & B_MULTI_MIX_MUX && control->get) {
float values[1];
control->get(controller, control->cookie, control->type, values);
@@ -596,7 +596,7 @@ get_mix(geode_controller *controller, multi_mix_value_info * mmvi)
}
static status_t
static status_t
set_mix(geode_controller *controller, multi_mix_value_info * mmvi)
{
geode_multi *multi = controller->multi;
@@ -607,7 +607,7 @@ set_mix(geode_controller *controller, multi_mix_value_info * mmvi)
continue;
}
multi_mixer_control *control = &multi->controls[id];
if (control->mix_control.flags & B_MULTI_MIX_GAIN) {
multi_mixer_control *control2 = NULL;
if (i+1<mmvi->item_count) {
@@ -630,27 +630,27 @@ set_mix(geode_controller *controller, multi_mix_value_info * mmvi)
values[0] = mmvi->values[i].gain;
else
values[1] = mmvi->values[i].gain;
if (control2 && control2->mix_control.master != MULTI_CONTROL_MASTERID)
values[1] = mmvi->values[i+1].gain;
control->set(controller, control->cookie, control->type, values);
}
if (control2)
i++;
i++;
}
if (control->mix_control.flags & B_MULTI_MIX_ENABLE && control->set) {
float values[1];
values[0] = mmvi->values[i].enable ? 1.0 : 0.0;
control->set(controller, control->cookie, control->type, values);
}
if (control->mix_control.flags & B_MULTI_MIX_MUX && control->set) {
float values[1];
values[0] = (float)mmvi->values[i].mux;
control->set(controller, control->cookie, control->type, values);
}
@@ -673,7 +673,7 @@ get_buffers(geode_controller* controller, multi_buffer_list* data)
data->return_playback_buffers = data->request_playback_buffers;
data->return_playback_channels = data->request_playback_channels;
data->return_playback_buffer_size = data->request_playback_buffer_size;
data->return_playback_buffer_size = data->request_playback_buffer_size;
data->return_record_buffers = data->request_record_buffers;
data->return_record_channels = data->request_record_channels;
data->return_record_buffer_size = data->request_record_buffer_size;
@@ -776,7 +776,7 @@ buffer_exchange(geode_controller* controller, multi_buffer_info* data)
cpu_status status;
status_t err;
multi_buffer_info buffer_info;
if (controller->playback_stream == NULL)
return B_ERROR;
@@ -828,7 +828,7 @@ buffer_exchange(geode_controller* controller, multi_buffer_info* data)
#else
memcpy(data, &buffer_info, sizeof(buffer_info));
#endif
debug_buffers_exchanged++;
if (((debug_buffers_exchanged % 100) == 1) && (debug_buffers_exchanged < 1111)) {
dprintf("%s: %d buffers processed\n", __func__, debug_buffers_exchanged);
@@ -846,8 +846,8 @@ buffer_force_stop(geode_controller* controller)
}
if (controller->record_stream != NULL) {
geode_stream_stop(controller->record_stream);
}
}
return B_OK;
}
@@ -910,7 +910,7 @@ multi_audio_control(geode_controller* controller, uint32 op, void* arg, size_t l
return get_mix(controller, (multi_mix_value_info *)arg);
case B_MULTI_SET_MIX:
return set_mix(controller, (multi_mix_value_info *)arg);
case B_MULTI_GET_BUFFERS:
return get_buffers(controller, (multi_buffer_list*)arg);
@@ -8,7 +8,7 @@ Please read the readme file first!
It contains recovery instructions, which you will need if your computer crashes, freezes or fails to start.
Do you really want to install the ICH AC97 driver now?" "No" "Yes"`
Do you really want to install the ICH AC97 driver now?" "No" "Yes"`
if [ $answer == "No" ]
@@ -30,7 +30,7 @@ pci_id_table_t ichaudio_id_table[] = {
{ 0x1022, 0x7445, -1, -1, -1, -1, -1, "AMD AMD768 AC97 audio" },
{ 0x1103, 0x0004, -1, -1, -1, -1, -1, "Highpoint HPT372 RAID" },
{ 0x1095, 0x3112, -1, -1, -1, -1, -1, "Silicon Image SATA Si3112" },
{ 0x8086, 0x244b, -1, -1, -1, -1, -1, "Intel IDE Controller" },
{ 0x8086, 0x244b, -1, -1, -1, -1, -1, "Intel IDE controller" },
{ 0x8979, 0x6456, -1, -1, -1, -1, -1, "does not exist" },
{ /* empty = end */}
};
@@ -43,11 +43,11 @@ typedef struct {
} mux_info;
const mux_info the_muxes[] = {
{ 0, 1, 1, 7, 5, 0xe0, "Sampling Input" },
{ 0, -1, 0, 1, 4, 0x10, "Mic +20dB Selection" },
{ 0x2a, -1, 0, 1, 0, 0x01, "MIDI Output To Synth" },
{ 0x2a, -1, 0, 1, 1, 0x02, "MIDI Input To Synth" },
{ 0x2a, -1, 0, 1, 2, 0x04, "MIDI Output To Port" },
{ 0, 1, 1, 7, 5, 0xe0, "Sampling input" },
{ 0, -1, 0, 1, 4, 0x10, "Mic +20dB selection" },
{ 0x2a, -1, 0, 1, 0, 0x01, "MIDI output to synth" },
{ 0x2a, -1, 0, 1, 1, 0x02, "MIDI input to synth" },
{ 0x2a, -1, 0, 1, 2, 0x04, "MIDI output to port" },
};
static const uchar unmap_input[] = {
@@ -42,7 +42,7 @@
const char * stereo_enhancement_technique[] =
{
"No 3D Stereo Enhancement",
"No 3D stereo enhancement",
"Analog Devices",
"Creative Technology",
"National Semiconductor",
@@ -278,13 +278,13 @@ const ac97_source_info source_info[] = {
{ "Record", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO|B_MIX_RECORDMUX, 100, AC97_RECORD_GAIN, 0x8000, 4, 0, 1, 0, 0.0, 22.5, 1.5 },
{ "Master", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 101, AC97_MASTER_VOLUME, 0x8000, 5, 0, 1, 1,-46.5, 0.0, 1.5 },
//{ "Bass/Trebble", B_MIX_GAIN|B_MIX_STEREO, 102, AC97_MASTER_TONE, 0x0f0f, 4, 0, 1, 1,-12.0, 10.5, 1.5 },
//{ "Aux Out", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 103, AC97_AUX_OUT_VOLUME, 0x8000, 5, 0, 1, 1,-46.5, 0.0, 1.5 },
{ "PCM Out", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 104, AC97_PCM_OUT_VOLUME, 0x8808, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
//{ "Aux out", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 103, AC97_AUX_OUT_VOLUME, 0x8000, 5, 0, 1, 1,-46.5, 0.0, 1.5 },
{ "PCM out", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 104, AC97_PCM_OUT_VOLUME, 0x8808, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
{ "CD", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 105, AC97_CD_VOLUME, 0x8808, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
{ "Aux In", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 106, AC97_AUX_IN_VOLUME, 0x8808, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
{ "Aux in", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 106, AC97_AUX_IN_VOLUME, 0x8808, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
{ "TAD", B_MIX_GAIN|B_MIX_MUTE|B_MIX_MONO, 107, AC97_PHONE_VOLUME, 0x8008, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
{ "Mic", B_MIX_GAIN|B_MIX_MUTE|B_MIX_MONO|B_MIX_MICBOOST, 108, AC97_MIC_VOLUME, 0x8008, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
{ "Line In", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 109, AC97_LINE_IN_VOLUME, 0x8808, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
{ "Line in", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 109, AC97_LINE_IN_VOLUME, 0x8808, 5, 0, 1, 1,-34.5, 12.0, 1.5 },
//{ "Center/Lfe", B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 111, AC97_CENTER_LFE_VOLUME, 0x8080, 5, 0, 1, 1,-46.5, 0.0, 1.5 },
{ "Center/Lfe" /* should be "Surround" but no */, B_MIX_GAIN|B_MIX_MUTE|B_MIX_STEREO, 110, AC97_SURROUND_VOLUME, 0x8080, 5, 0, 1, 1,-46.5, 0.0, 1.5 }
};
File diff suppressed because it is too large Load Diff
@@ -55,15 +55,15 @@ static const char* kPortConnector[] = {
};
static const char* kDefaultDevice[] = {
"Line Out", "Speaker", "HP Out", "CD", "SPDIF out", "Digital Other Out",
"Modem Line Side", "Modem Hand Side", "Line In", "AUX", "Mic In",
"Telephony", "SPDIF In", "Digital Other In", "Reserved", "Other"
"Line out", "Speaker", "HP out", "CD", "SPDIF out", "Digital other out",
"Modem line side", "Modem hand side", "Line in", "AUX", "Mic in",
"Telephony", "SPDIF in", "Digital other in", "Reserved", "Other"
};
static const char* kConnectionType[] = {
"N/A", "1/8\"", "1/4\"", "ATAPI internal", "RCA", "Optical",
"Other Digital", "Other Analog", "Multichannel Analog (DIN)",
"XLR/Professional", "RJ-11 (Modem)", "Combination", "-", "-", "-", "Other"
"Other digital", "Other analog", "Multichannel analog (DIN)",
"XLR/Professional", "RJ-11 (modem)", "Combination", "-", "-", "-", "Other"
};
static const char* kJackColor[] = {
@@ -77,23 +77,23 @@ get_widget_type_name(hda_widget_type type)
{
switch (type) {
case WT_AUDIO_OUTPUT:
return "Audio Output";
return "Audio output";
case WT_AUDIO_INPUT:
return "Audio Input";
return "Audio input";
case WT_AUDIO_MIXER:
return "Audio Mixer";
return "Audio mixer";
case WT_AUDIO_SELECTOR:
return "Audio Selector";
return "Audio selector";
case WT_PIN_COMPLEX:
return "Pin Complex";
return "Pin complex";
case WT_POWER:
return "Power";
case WT_VOLUME_KNOB:
return "Volume Knob";
return "Volume knob";
case WT_BEEP_GENERATOR:
return "Beep Generator";
return "Beep generator";
case WT_VENDOR_DEFINED:
return "Vendor Defined";
return "Vendor defined";
default:
return "Unknown";
}
@@ -158,17 +158,17 @@ dump_widget_audio_capabilities(uint32 capabilities)
uint32 flag;
const char* name;
} kFlags[] = {
{AUDIO_CAP_LEFT_RIGHT_SWAP, "L-R Swap"},
{AUDIO_CAP_LEFT_RIGHT_SWAP, "L-R swap"},
{AUDIO_CAP_POWER_CONTROL, "Power"},
{AUDIO_CAP_DIGITAL, "Digital"},
{AUDIO_CAP_CONNECTION_LIST, "Conn. List"},
{AUDIO_CAP_UNSOLICITED_RESPONSES, "Unsol. Responses"},
{AUDIO_CAP_PROCESSING_CONTROLS, "Proc Widget"},
{AUDIO_CAP_CONNECTION_LIST, "Conn. list"},
{AUDIO_CAP_UNSOLICITED_RESPONSES, "Unsol. responses"},
{AUDIO_CAP_PROCESSING_CONTROLS, "Proc widget"},
{AUDIO_CAP_STRIPE, "Stripe"},
{AUDIO_CAP_FORMAT_OVERRIDE, "Format Override"},
{AUDIO_CAP_AMPLIFIER_OVERRIDE, "Amplifier Override"},
{AUDIO_CAP_OUTPUT_AMPLIFIER, "Out Amplifier"},
{AUDIO_CAP_INPUT_AMPLIFIER, "In Amplifier"},
{AUDIO_CAP_FORMAT_OVERRIDE, "Format override"},
{AUDIO_CAP_AMPLIFIER_OVERRIDE, "Amplifier override"},
{AUDIO_CAP_OUTPUT_AMPLIFIER, "Out amplifier"},
{AUDIO_CAP_INPUT_AMPLIFIER, "In amplifier"},
{AUDIO_CAP_STEREO, "Stereo"},
};
@@ -1,5 +1,5 @@
/*
* Copyright 2007-2008, Haiku, Inc. All Rights Reserved.
* Copyright 2007-2009, Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
@@ -224,13 +224,13 @@ hda_find_multi_custom_string(hda_widget& widget, char* custom, uint32 size)
const char* device = NULL;
switch (CONF_DEFAULT_DEVICE(widget.d.pin.config)) {
case PIN_DEV_LINE_IN:
device = "Line In";
device = "Line in";
case PIN_DEV_LINE_OUT:
if (device == NULL)
device = "Line Out";
device = "Line out";
case PIN_DEV_MIC_IN:
if (device == NULL)
device = "Mic In";
device = "Mic in";
switch (CONF_DEFAULT_COLOR(widget.d.pin.config)) {
case 1:
device = "Rear";
@@ -239,7 +239,7 @@ hda_find_multi_custom_string(hda_widget& widget, char* custom, uint32 size)
device = "Side";
break;
case 3:
device = "Line In";
device = "Line in";
break;
case 4:
device = "Front";
@@ -248,15 +248,15 @@ hda_find_multi_custom_string(hda_widget& widget, char* custom, uint32 size)
device = "Center/Sub";
break;
case 9:
device = "Mic In";
device = "Mic in";
break;
}
break;
case PIN_DEV_SPDIF_IN:
device = "SPDIF In";
device = "SPDIF in";
break;
case PIN_DEV_SPDIF_OUT:
device = "SPDIF Out";
device = "SPDIF out";
break;
case PIN_DEV_CD:
device = "CD";
@@ -131,7 +131,7 @@ ice1712_get_description(ice1712 *card, multi_description *data)
strncpy(data->friendly_name, "VX 442", 32);
break;
default:
strncpy(data->friendly_name, "Unknow Device", 32);
strncpy(data->friendly_name, "Unknow device", 32);
break;
}
@@ -1,5 +1,5 @@
/*
* Copyright 2007 Haiku Inc. All rights reserved.
* Copyright 2007-2009, Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
@@ -51,7 +51,7 @@ get_description(void* cookie, multi_description* data)
data->interface_version = B_CURRENT_INTERFACE_VERSION;
data->interface_minimum = B_CURRENT_INTERFACE_VERSION;
strcpy(data->friendly_name,"Virtual Audio (null_audio)");
strcpy(data->friendly_name,"Virtual audio (null_audio)");
strcpy(data->vendor_info,"Host/Haiku");
data->output_channel_count = 2;
+62 -62
View File
@@ -2,7 +2,7 @@
* This file is a part of SiS 7018 BeOS driver project.
* Copyright (c) 2002-2003 by Siarzuk Zharski <imker@gmx.li>
* Portional Copyright (c) 1999 Cameron Grant <gandalf@vilnya.demon.co.uk>
*
*
* This file may be used under the terms of the BSD License
* See the file "License" for details.
*/
@@ -69,7 +69,7 @@ static struct ac97_codecid
};
static char *ac97enhancement[] = {
"no 3D Stereo Enhancement",
"No 3D Stereo Enhancement",
"Analog Devices Phat Stereo",
"Creative Stereo Enhancement",
"National Semi 3D Stereo Enhancement",
@@ -139,7 +139,7 @@ int ac97read(sis7018_dev *dev, int regno)
int i, j, reg, rw;
if(b_trace_ac97)
TRACE(" ac97read: regno=%x\n", regno);
switch (dev->type->ids.chip_id){
case SPA_PCI_ID:
reg=SPA_REG_CODECRD;
@@ -151,7 +151,7 @@ int ac97read(sis7018_dev *dev, int regno)
else
reg=TDX_REG_CODECRD;
rw=TDX_CDC_RWSTAT;
break;
break;
case TDX_PCI_ID:
case xDX_PCI_ID:
reg=TDX_REG_CODECRD;
@@ -165,7 +165,7 @@ int ac97read(sis7018_dev *dev, int regno)
TRACE("ac97read defaulted !!!\n");
return ENODEV;
}
cp = disable_interrupts();
acquire_spinlock(&dev->hardware);
@@ -183,18 +183,18 @@ int ac97read(sis7018_dev *dev, int regno)
c2 = hw_read(dev, 0xc8, 4);
}
}
}
}
if(dev->type->ids.chip_id != ALI_PCI_ID || i > 0){
hw_write(dev, reg, regno | rw, 4);
j=rw;
for (i=TR_TIMEOUT_CDC; (i > 0) && (j & rw); i--){
for (i=TR_TIMEOUT_CDC; (i > 0) && (j & rw); i--){
j=hw_read(dev, reg, 4);
}
}
release_spinlock(&dev->hardware);
restore_interrupts(cp);
if (i == 0)
TRACE_ALWAYS("ac97 codec timeout during read of register %x\n", regno);
if(b_trace_ac97)
@@ -206,10 +206,10 @@ status_t ac97write(sis7018_dev *dev, int regno, uint32 data)
{
cpu_status cp;
int i, j, reg, rw;
if(b_trace_ac97)
TRACE("\nac97write: regno=%x, data=%lx\n", regno, data);
switch (dev->type->ids.chip_id){
case SPA_PCI_ID:
reg=SPA_REG_CODECWR;
@@ -229,11 +229,11 @@ status_t ac97write(sis7018_dev *dev, int regno, uint32 data)
TRACE("ac97write defaulted !!!");
return ENODEV;
}
regno &= 0x7f;
if(b_trace_ac97)
TRACE("ac97write: reg %x was %x\n", regno, ac97read(dev, regno));
cp = disable_interrupts();
acquire_spinlock(&dev->hardware);
j=rw;
@@ -248,7 +248,7 @@ status_t ac97write(sis7018_dev *dev, int regno, uint32 data)
for (i = TR_TIMEOUT_CDC; (i > 0) && (c1 == c2); i--)
c2 = hw_read(dev, 0xc8, 4);
}
}
}
if(dev->type->ids.chip_id != ALI_PCI_ID || i > 0){
for(i=TR_TIMEOUT_CDC; (i>0) && (j & rw); i--){
j=hw_read(dev, reg, 4);
@@ -279,7 +279,7 @@ status_t ac97init(sis7018_dev *card)
/* old manner
err |= ac97write(card, AC97_REG_POWER, 0);
err |= ac97write(card, AC97_REG_RESET, 0);
err |= ac97write(card, AC97_MIX_PCM, 0x707);
err |= ac97write(card, AC97_MIX_BEEP, 0x06);
err |= ac97write(card, AC97_MIX_MIC, 0x8000);
@@ -287,7 +287,7 @@ status_t ac97init(sis7018_dev *card)
err |= ac97write(card, AC97_MIX_PHONES, 0x707);
*/
//BSD init manner
//BSD init manner
err |= ac97write(card, AC97_REG_POWER, 0x0000);
err |= ac97write(card, AC97_REG_RESET, 0);
snooze(100000);
@@ -337,15 +337,15 @@ status_t ac97init(sis7018_dev *card)
TRACE("ac97 codec initializatin error\n");
}
}
TRACE("ac97 codec features:\n");
for (i = 0; i < 10; i++)
if (caps & (1 << i))
TRACE("> %s\n", ac97feature[i]);
TRACE("> %s\n", ac97enhancement[se]);
TRACE("\n");
extcaps = 0;
extid = 0;
extstat = 0;
@@ -364,14 +364,14 @@ status_t ac97init(sis7018_dev *card)
for (i = 0; i < 14; i++)
if (extcaps & (1 << i))
TRACE("> %s\n", ac97extfeature[i]);
TRACE("\n");
TRACE("\n");
}
if ((ac97read(card, AC97_REG_POWER) & 2) == 0)
TRACE("ac97 codec reports dac not ready\n");
// some addition
reg = ac97read(card, AC97_MIX_MASTER);
err |= ac97write(card, AC97_MIX_MASTER, 0x3f3f);
if(0x3f3f == ac97read(card, AC97_MIX_MASTER)){
@@ -379,7 +379,7 @@ status_t ac97init(sis7018_dev *card)
card->ac97.wide_main_gain = true;
}
err |= ac97write(card, AC97_MIX_MASTER, reg);
// BSD manner
err |= ac97write(card, AC97_MIX_PCM, 0x707);
// err |= ac97write(card, AC97_MIX_BEEP, 0x06);
@@ -398,12 +398,12 @@ status_t ac97get_params(sis7018_dev *dev, sound_setup *sound)
{
uint16 reg = 0;
int main_gain_multiplier = dev->ac97.wide_main_gain ? 1 : 2;
sound->sample_rate = kHz_48_0;
sound->dither_enable = false;
sound->output_boost = 0;
sound->highpass_enable = 0;
reg=ac97read(dev, AC97_MIX_MONO);
sound->mono_gain = (char)reg;
sound->mono_mute = (char)(reg & AC97_MUTE) ? 1 : 0;
@@ -415,7 +415,7 @@ status_t ac97get_params(sis7018_dev *dev, sound_setup *sound)
case 0: sound->right.adc_source = mic; break;
default: sound->right.adc_source = loopback; break;
}
switch ((reg >> 8) & 0x07){
case 4: sound->left.adc_source = line; break;
case 3: sound->left.adc_source = aux1; break;
@@ -426,38 +426,38 @@ status_t ac97get_params(sis7018_dev *dev, sound_setup *sound)
reg = ac97read(dev, AC97_MIX_MIC);
sound->loop_attn = (reg & 0x1f)*2;
sound->loop_enable = (reg & AC97_MUTE) ? 0 : 1;
sound->left.mic_gain_enable =
sound->left.mic_gain_enable =
sound->right.mic_gain_enable = (reg >> 6) & 0x01;
reg = ac97read(dev, AC97_MIX_RGAIN);
sound->left.adc_gain = (reg >> 0x8) & 0xf;
sound->right.adc_gain = reg & 0xf;
reg = ac97read(dev, AC97_MIX_CD);
sound->left.aux1_mix_gain = ((reg >> 8) & 0x1f);
sound->right.aux1_mix_gain = (reg & 0x1f);
sound->left.aux1_mix_mute =
sound->left.aux1_mix_mute =
sound->right.aux1_mix_mute = (reg & AC97_MUTE) ? 1 : 0;
reg = ac97read(dev, AC97_MIX_AUX);
sound->left.aux2_mix_gain = ((reg >> 8) & 0x1f);
sound->right.aux2_mix_gain = (reg & 0x1f);
sound->left.aux2_mix_mute =
sound->left.aux2_mix_mute =
sound->right.aux2_mix_mute = (reg & AC97_MUTE) ? 1 : 0;
reg = ac97read(dev, AC97_MIX_LINE);
sound->left.line_mix_gain = ((reg >> 8) & 0x1f);
sound->right.line_mix_gain = (reg & 0x1f);
sound->left.line_mix_mute =
sound->left.line_mix_mute =
sound->right.line_mix_mute = (reg & AC97_MUTE) ? 1 : 0;
reg = ac97read(dev, AC97_MIX_MASTER);
sound->left.dac_attn = ((reg >> 8) & 0x1f) * main_gain_multiplier;
sound->right.dac_attn = (reg & 0x1f) * main_gain_multiplier;
sound->left.dac_mute =
sound->right.dac_mute = (reg & AC97_MUTE) ? 1 : 0;
sound->left.dac_mute =
sound->right.dac_mute = (reg & AC97_MUTE) ? 1 : 0;
return B_OK;
}
@@ -498,30 +498,30 @@ status_t ac97set_params(sis7018_dev *dev, sound_setup * sound)
sound->output_boost = 0;
sound->highpass_enable = 0;
reg = sound->mono_gain | ((sound->mono_mute) ? AC97_MUTE : 0);
reg = sound->mono_gain | ((sound->mono_mute) ? AC97_MUTE : 0);
err |= ac97write(dev, AC97_MIX_MONO, reg);
reg = sound->loop_attn / 2;
reg |= ((sound->left.mic_gain_enable || sound->right.mic_gain_enable) ? 0x01 : 0x00) << 6;
reg |= (sound->loop_enable) ? 0 : AC97_MUTE;
reg |= (sound->loop_enable) ? 0 : AC97_MUTE;
err |= ac97write(dev, AC97_MIX_MIC, reg);
reg = 0;
switch(sound->left.adc_source){
case line: reg = 4; break;
case aux1: reg = 3; break;
case mic: reg = 0; break;
default: reg = 0; break;
default: reg = 0; break;
}
reg <<= 8;
switch(sound->right.adc_source){
case line: reg |= 4; break;
case aux1: reg |= 3; break;
case mic: reg |= 0; break;
default: reg |= 0; break;
default: reg |= 0; break;
}
err |= ac97write(dev, AC97_REG_RECSEL, reg);
reg = (sound->left.adc_gain) << 8;
@@ -530,25 +530,25 @@ status_t ac97set_params(sis7018_dev *dev, sound_setup * sound)
reg = (sound->left.aux1_mix_gain) << 0x08;
reg |= sound->right.aux1_mix_gain;
reg |= (sound->left.aux1_mix_mute || sound->right.aux1_mix_mute) ? AC97_MUTE : 0 ;
reg |= (sound->left.aux1_mix_mute || sound->right.aux1_mix_mute) ? AC97_MUTE : 0 ;
err |= ac97write(dev, AC97_MIX_CD, reg);
reg = (sound->left.aux2_mix_gain) << 0x08;
reg |= sound->right.aux2_mix_gain;
reg |= (sound->left.aux2_mix_mute || sound->right.aux2_mix_mute) ? AC97_MUTE : 0 ;
reg |= (sound->left.aux2_mix_mute || sound->right.aux2_mix_mute) ? AC97_MUTE : 0 ;
err |= ac97write(dev, AC97_MIX_AUX, reg);
reg = (sound->left.line_mix_gain) << 0x08;
reg |= sound->right.line_mix_gain;
reg |= (sound->left.line_mix_mute || sound->right.line_mix_mute) ? AC97_MUTE : 0 ;
reg |= (sound->left.line_mix_mute || sound->right.line_mix_mute) ? AC97_MUTE : 0 ;
err |= ac97write(dev, AC97_MIX_LINE, reg);
reg = ((sound->left.dac_attn) / main_gain_divider) << 0x08;
reg |= (sound->right.dac_attn) / main_gain_divider;
reg |= (sound->left.dac_mute || sound->right.dac_mute) ? AC97_MUTE : 0 ;
reg |= (sound->left.dac_mute || sound->right.dac_mute) ? AC97_MUTE : 0 ;
err |= ac97write(dev, AC97_MIX_MASTER, reg);
return err;
return err;
}
status_t ac97init_default(sis7018_dev *dev, bool bOn)
@@ -578,20 +578,20 @@ status_t ac97init_CS4299(sis7018_dev *dev, bool bOn)
static struct
{
int16 reg;
char name[DEVNAME];
char name[DEVNAME];
} ac97_regs[]=
{
{AC97_REG_RESET, "Reset"}, {AC97_MIX_MASTER, "Master Volume"},
{AC97_MIX_PHONES, "AUX Out volume"}, {AC97_MIX_MONO, "Mono Volume"},
{AC97_MIX_TONE, "Master Tone"}, {AC97_MIX_BEEP, "PC Beep"},
{AC97_MIX_PHONE, "Phone volume"}, {AC97_MIX_MIC, "Mio Volume"},
{AC97_MIX_LINE, "Line In Volume"}, {AC97_MIX_CD, "CD Volume"},
{AC97_MIX_VIDEO, "Video Volume"}, {AC97_MIX_AUX, "AUX In Volume"},
{AC97_MIX_PCM, "PCM Out Volume"}, {AC97_REG_RECSEL, "Record Select"},
{AC97_MIX_RGAIN, "Record Gain"}, {AC97_MIX_MGAIN, "Record Gain Mio"},
{AC97_REG_GEN, "General Purpose"}, {AC97_REG_3D, "3D Control"},
{0x24, "Audio Int & Paging"}, {AC97_REG_POWER, "Powerdown Ctrl/Stat"},
{AC97_REG_ID1, "Vendor ID1"}, {AC97_REG_ID2, "VendorID 2"},
{AC97_REG_RESET, "Reset"}, {AC97_MIX_MASTER, "Master volume"},
{AC97_MIX_PHONES, "AUX out volume"}, {AC97_MIX_MONO, "Mono volume"},
{AC97_MIX_TONE, "Master tone"}, {AC97_MIX_BEEP, "PC beep"},
{AC97_MIX_PHONE, "Phone volume"}, {AC97_MIX_MIC, "Mic volume"},
{AC97_MIX_LINE, "Line in volume"}, {AC97_MIX_CD, "CD volume"},
{AC97_MIX_VIDEO, "Video volume"}, {AC97_MIX_AUX, "AUX in volume"},
{AC97_MIX_PCM, "PCM out volume"}, {AC97_REG_RECSEL, "Record select"},
{AC97_MIX_RGAIN, "Record gain"}, {AC97_MIX_MGAIN, "Record gain Mic"},
{AC97_REG_GEN, "General purpose"}, {AC97_REG_3D, "3D control"},
{0x24, "Audio int & paging"}, {AC97_REG_POWER, "Powerdown ctrl/stat"},
{AC97_REG_ID1, "VendorID 1"}, {AC97_REG_ID2, "VendorID 2"},
};
void ac97dump(int card_id)
@@ -1685,11 +1685,11 @@ AudioMixer::UpdateParameterWeb()
MixerOutput *out;
char buf[50];
top = web->MakeGroup("Gain Controls");
top = web->MakeGroup("Gain controls");
out = fCore->Output();
group = top->MakeGroup("");
group->MakeNullParameter(PARAM_STR1(0), B_MEDIA_RAW_AUDIO, "Master Output", B_WEB_BUFFER_INPUT);
group->MakeNullParameter(PARAM_STR1(0), B_MEDIA_RAW_AUDIO, "Master output", B_WEB_BUFFER_INPUT);
if (!out) {
group->MakeNullParameter(PARAM_STR2(0), B_MEDIA_RAW_AUDIO, "not connected", B_GENERIC);
} else {
@@ -1704,7 +1704,7 @@ AudioMixer::UpdateParameterWeb()
group->MakeContinuousParameter(PARAM_GAIN(0), B_MEDIA_RAW_AUDIO, "Gain", B_MASTER_GAIN, "dB", DB_MIN, DB_MAX, 0.1)
->SetChannelCount(out->GetOutputChannelCount());
}
group->MakeNullParameter(PARAM_STR3(0), B_MEDIA_RAW_AUDIO, "To Output", B_WEB_BUFFER_OUTPUT);
group->MakeNullParameter(PARAM_STR3(0), B_MEDIA_RAW_AUDIO, "To output", B_WEB_BUFFER_OUTPUT);
}
for (int i = 0; (in = fCore->Input(i)); i++) {
@@ -1737,16 +1737,16 @@ AudioMixer::UpdateParameterWeb()
->SetChannelCount(in->GetMixerChannelCount());
}
}
group->MakeNullParameter(PARAM_STR3(in->ID()), B_MEDIA_RAW_AUDIO, "To Master", B_WEB_BUFFER_OUTPUT);
group->MakeNullParameter(PARAM_STR3(in->ID()), B_MEDIA_RAW_AUDIO, "To master", B_WEB_BUFFER_OUTPUT);
}
if (fCore->Settings()->AllowOutputChannelRemapping()) {
top = web->MakeGroup("Output Mapping"); // top level group
top = web->MakeGroup("Output mapping"); // top level group
outputchannels = top->MakeGroup("");
outputchannels->MakeNullParameter(PARAM_STR4(0), B_MEDIA_RAW_AUDIO, "Output Channel Sources", B_GENERIC);
outputchannels->MakeNullParameter(PARAM_STR4(0), B_MEDIA_RAW_AUDIO, "Output channel sources", B_GENERIC);
group = outputchannels->MakeGroup("");
group->MakeNullParameter(PARAM_STR5(0), B_MEDIA_RAW_AUDIO, "Master Output", B_GENERIC);
group->MakeNullParameter(PARAM_STR5(0), B_MEDIA_RAW_AUDIO, "Master output", B_GENERIC);
group = group->MakeGroup("");
if (!out) {
group->MakeNullParameter(PARAM_STR6(0), B_MEDIA_RAW_AUDIO, "not connected", B_GENERIC);
@@ -1771,9 +1771,9 @@ AudioMixer::UpdateParameterWeb()
}
if (fCore->Settings()->AllowInputChannelRemapping()) {
top = web->MakeGroup("Input Mapping"); // top level group
top = web->MakeGroup("Input mapping"); // top level group
inputchannels = top->MakeGroup("");
inputchannels->MakeNullParameter(PARAM_STR7(0), B_MEDIA_RAW_AUDIO, "Input Channel Destinations", B_GENERIC);
inputchannels->MakeNullParameter(PARAM_STR7(0), B_MEDIA_RAW_AUDIO, "Input channel destinations", B_GENERIC);
for (int i = 0; (in = fCore->Input(i)); i++) {
group = inputchannels->MakeGroup("");