summaryrefslogtreecommitdiff
path: root/sys/dev/pci
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/pci')
-rw-r--r--sys/dev/pci/azalia.c140
-rw-r--r--sys/dev/pci/azalia.h16
-rw-r--r--sys/dev/pci/azalia_codec.c182
3 files changed, 154 insertions, 184 deletions
diff --git a/sys/dev/pci/azalia.c b/sys/dev/pci/azalia.c
index 148b3f93b9e..8c1b7a6516b 100644
--- a/sys/dev/pci/azalia.c
+++ b/sys/dev/pci/azalia.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: azalia.c,v 1.135 2009/05/29 21:16:37 jakemsr Exp $ */
+/* $OpenBSD: azalia.c,v 1.136 2009/05/31 02:57:51 jakemsr Exp $ */
/* $NetBSD: azalia.c,v 1.20 2006/05/07 08:31:44 kent Exp $ */
/*-
@@ -200,8 +200,6 @@ int azalia_codec_init(codec_t *);
int azalia_codec_delete(codec_t *);
void azalia_codec_add_bits(codec_t *, int, uint32_t, int);
void azalia_codec_add_format(codec_t *, int, int, uint32_t, int32_t);
-int azalia_codec_comresp(const codec_t *, nid_t, uint32_t,
- uint32_t, uint32_t *);
int azalia_codec_connect_stream(codec_t *, int, uint16_t, int);
int azalia_codec_disconnect_stream(codec_t *, int);
void azalia_codec_print_audiofunc(const codec_t *);
@@ -719,7 +717,7 @@ azalia_attach_intr(struct device *self)
if (i != az->codecno) {
if (codec->audiofunc < 0)
continue;
- codec->comresp(codec, codec->audiofunc,
+ azalia_comresp(codec, codec->audiofunc,
CORB_SET_POWER_STATE, CORB_PS_D3, NULL);
DELAY(100);
azalia_codec_delete(codec);
@@ -1063,8 +1061,7 @@ azalia_rirb_kick_unsol_events(azalia_t *az)
DPRINTF(("%s: codec#=%d tag=%d\n", __func__, i, tag));
az->unsolq_rp++;
az->unsolq_rp %= UNSOLQ_SIZE;
- if (codec->unsol_event != NULL)
- codec->unsol_event(codec, tag);
+ azalia_unsol_event(codec, tag);
}
az->unsolq_kick = FALSE;
}
@@ -1163,14 +1160,13 @@ azalia_codec_init(codec_t *this)
uint32_t rev, id, result;
int err, addr, n, i;
- this->comresp = azalia_codec_comresp;
addr = this->address;
/* codec vendor/device/revision */
- err = this->comresp(this, CORB_NID_ROOT, CORB_GET_PARAMETER,
+ err = azalia_comresp(this, CORB_NID_ROOT, CORB_GET_PARAMETER,
COP_REVISION_ID, &rev);
if (err)
return err;
- err = this->comresp(this, CORB_NID_ROOT, CORB_GET_PARAMETER,
+ err = azalia_comresp(this, CORB_NID_ROOT, CORB_GET_PARAMETER,
COP_VENDOR_ID, &id);
if (err)
return err;
@@ -1184,7 +1180,7 @@ azalia_codec_init(codec_t *this)
COP_RID_MAJ(rev), COP_RID_MIN(rev)));
/* identify function nodes */
- err = this->comresp(this, CORB_NID_ROOT, CORB_GET_PARAMETER,
+ err = azalia_comresp(this, CORB_NID_ROOT, CORB_GET_PARAMETER,
COP_SUBORDINATE_NODE_COUNT, &result);
if (err)
return err;
@@ -1200,7 +1196,7 @@ azalia_codec_init(codec_t *this)
XNAME(this->az), n, this->nfunctions));
this->audiofunc = -1;
for (i = 0; i < this->nfunctions; i++) {
- err = this->comresp(this, n + i, CORB_GET_PARAMETER,
+ err = azalia_comresp(this, n + i, CORB_GET_PARAMETER,
COP_FUNCTION_GROUP_TYPE, &result);
if (err)
continue;
@@ -1213,20 +1209,20 @@ azalia_codec_init(codec_t *this)
if (this->audiofunc < 0) {
DPRINTF(("%s: codec[%d]: No audio function groups\n",
XNAME(this->az), addr));
- this->comresp(this, this->audiofunc, CORB_SET_POWER_STATE,
+ azalia_comresp(this, this->audiofunc, CORB_SET_POWER_STATE,
CORB_PS_D3, &result);
DELAY(100);
return -1;
}
/* power the audio function */
- this->comresp(this, this->audiofunc, CORB_SET_POWER_STATE,
+ azalia_comresp(this, this->audiofunc, CORB_SET_POWER_STATE,
CORB_PS_D0, &result);
DELAY(100);
/* check widgets in the audio function */
- err = this->comresp(this, this->audiofunc,
- CORB_GET_PARAMETER, COP_SUBORDINATE_NODE_COUNT, &result);
+ err = azalia_comresp(this, this->audiofunc, CORB_GET_PARAMETER,
+ COP_SUBORDINATE_NODE_COUNT, &result);
if (err)
return err;
DPRINTF(("%s: There are %d widgets in the audio function.\n",
@@ -1244,16 +1240,16 @@ azalia_codec_init(codec_t *this)
}
/* query the base parameters */
- this->comresp(this, this->audiofunc, CORB_GET_PARAMETER,
+ azalia_comresp(this, this->audiofunc, CORB_GET_PARAMETER,
COP_STREAM_FORMATS, &result);
this->w[this->audiofunc].d.audio.encodings = result;
- this->comresp(this, this->audiofunc, CORB_GET_PARAMETER,
+ azalia_comresp(this, this->audiofunc, CORB_GET_PARAMETER,
COP_PCM, &result);
this->w[this->audiofunc].d.audio.bits_rates = result;
- this->comresp(this, this->audiofunc, CORB_GET_PARAMETER,
+ azalia_comresp(this, this->audiofunc, CORB_GET_PARAMETER,
COP_INPUT_AMPCAP, &result);
this->w[this->audiofunc].inamp_cap = result;
- this->comresp(this, this->audiofunc, CORB_GET_PARAMETER,
+ azalia_comresp(this, this->audiofunc, CORB_GET_PARAMETER,
COP_OUTPUT_AMPCAP, &result);
this->w[this->audiofunc].outamp_cap = result;
@@ -1338,7 +1334,7 @@ azalia_codec_init(codec_t *this)
!(this->w[i].d.pin.cap & COP_PINCAP_PRESENCE))
break;
/* check override bit */
- err = this->comresp(this, i,
+ err = azalia_comresp(this, i,
CORB_GET_CONFIGURATION_DEFAULT, 0, &result);
if (err)
break;
@@ -1381,7 +1377,7 @@ azalia_codec_init(codec_t *this)
if (err)
return err;
- err = this->init_dacgroup(this);
+ err = azalia_init_dacgroup(this);
if (err)
return err;
@@ -1405,7 +1401,7 @@ azalia_codec_init(codec_t *this)
return err;
}
- err = this->mixer_init(this);
+ err = azalia_mixer_init(this);
if (err)
return err;
@@ -1485,7 +1481,7 @@ azalia_codec_select_micadc(codec_t *this)
}
if (i >= w->nconnections)
return(-1);
- err = this->comresp(this, w->nid,
+ err = azalia_comresp(this, w->nid,
CORB_SET_CONNECTION_SELECT_CONTROL, i, 0);
if (err)
return(err);
@@ -1772,7 +1768,7 @@ azalia_codec_select_dacs(codec_t *this)
break;
}
if (j < w->nconnections && conv != -1) {
- err = this->comresp(this, w->nid,
+ err = azalia_comresp(this, w->nid,
CORB_SET_CONNECTION_SELECT_CONTROL, j, 0);
if (err)
return(err);
@@ -1855,7 +1851,7 @@ azalia_codec_select_spkrdac(codec_t *this)
}
}
if (conn != -1) {
- err = this->comresp(this, w->nid,
+ err = azalia_comresp(this, w->nid,
CORB_SET_CONNECTION_SELECT_CONTROL, conn, 0);
if (err)
return(err);
@@ -2030,7 +2026,7 @@ azalia_codec_init_volgroups(codec_t *this)
if (w->type == COP_AWTYPE_BEEP_GENERATOR) {
continue;
} else if (w->type == COP_AWTYPE_PIN_COMPLEX) {
- err = this->comresp(this, w->nid,
+ err = azalia_comresp(this, w->nid,
CORB_GET_PIN_WIDGET_CONTROL, 0, &result);
if (!err && (result & CORB_PWC_OUTPUT))
this->playvols.cur |= (1 << i);
@@ -2054,7 +2050,7 @@ azalia_codec_init_volgroups(codec_t *this)
if (w->type == COP_AWTYPE_BEEP_GENERATOR)
continue;
if (w->type == COP_AWTYPE_PIN_COMPLEX) {
- err = this->comresp(this, w->nid,
+ err = azalia_comresp(this, w->nid,
CORB_GET_PIN_WIDGET_CONTROL, 0, &result);
if (!err && (result & CORB_PWC_OUTPUT))
this->playvols.cur |= (1 << i);
@@ -2121,7 +2117,7 @@ azalia_codec_init_volgroups(codec_t *this)
continue;
if ((cap & COP_AMPCAP_MUTE) && COP_AMPCAP_NUMSTEPS(cap)) {
if (w->type == COP_AWTYPE_PIN_COMPLEX) {
- err = this->comresp(this, w->nid,
+ err = azalia_comresp(this, w->nid,
CORB_GET_PIN_WIDGET_CONTROL, 0, &result);
if (!err && !(result & CORB_PWC_OUTPUT))
this->recvols.cur |= (1 << i);
@@ -2140,7 +2136,7 @@ azalia_codec_init_volgroups(codec_t *this)
if (w->mixer_class != AZ_CLASS_RECORD)
continue;
if (w->type == COP_AWTYPE_PIN_COMPLEX) {
- err = this->comresp(this, w->nid,
+ err = azalia_comresp(this, w->nid,
CORB_GET_PIN_WIDGET_CONTROL, 0, &result);
if (!err && !(result & CORB_PWC_OUTPUT))
this->recvols.cur |= (1 << i);
@@ -2158,8 +2154,7 @@ azalia_codec_init_volgroups(codec_t *this)
int
azalia_codec_delete(codec_t *this)
{
- if (this->mixer_delete != NULL)
- this->mixer_delete(this);
+ azalia_mixer_delete(this);
if (this->formats != NULL) {
free(this->formats, M_DEVBUF);
@@ -2382,7 +2377,7 @@ azalia_codec_add_format(codec_t *this, int chan, int prec, uint32_t rates,
}
int
-azalia_codec_comresp(const codec_t *codec, nid_t nid, uint32_t control,
+azalia_comresp(const codec_t *codec, nid_t nid, uint32_t control,
uint32_t param, uint32_t* result)
{
int err, s;
@@ -2434,14 +2429,14 @@ azalia_codec_connect_stream(codec_t *this, int dir, uint16_t fmt, int number)
w->nid, stream_chan & ~(number << 4)));
}
- err = this->comresp(this, w->nid,
- CORB_SET_CONVERTER_FORMAT, fmt, NULL);
+ err = azalia_comresp(this, w->nid, CORB_SET_CONVERTER_FORMAT,
+ fmt, NULL);
if (err) {
DPRINTF(("%s: nid %2.2x fmt %2.2x: %d\n",
__func__, w->nid, fmt, err));
break;
}
- err = this->comresp(this, w->nid,
+ err = azalia_comresp(this, w->nid,
CORB_SET_CONVERTER_STREAM_CHANNEL, stream_chan, NULL);
if (err) {
DPRINTF(("%s: nid %2.2x chan %d: %d\n",
@@ -2450,7 +2445,7 @@ azalia_codec_connect_stream(codec_t *this, int dir, uint16_t fmt, int number)
}
if (w->widgetcap & COP_AWCAP_DIGITAL) {
- err = this->comresp(this, w->nid,
+ err = azalia_comresp(this, w->nid,
CORB_GET_DIGITAL_CONTROL, 0, &digital);
if (err) {
DPRINTF(("%s: nid %2.2x get digital: %d\n",
@@ -2458,7 +2453,7 @@ azalia_codec_connect_stream(codec_t *this, int dir, uint16_t fmt, int number)
break;
}
digital = (digital & 0xff) | CORB_DCC_DIGEN;
- err = this->comresp(this, w->nid,
+ err = azalia_comresp(this, w->nid,
CORB_SET_DIGITAL_CONTROL_L, digital, NULL);
if (err) {
DPRINTF(("%s: nid %2.2x set digital: %d\n",
@@ -2486,13 +2481,15 @@ azalia_codec_disconnect_stream(codec_t *this, int dir)
group = &this->dacs.groups[this->dacs.cur];
for (i = 0; i < group->nconv; i++) {
nid = group->conv[i];
- this->comresp(this, nid, CORB_SET_CONVERTER_STREAM_CHANNEL,
+ azalia_comresp(this, nid, CORB_SET_CONVERTER_STREAM_CHANNEL,
0, NULL); /* stream#0 */
if (this->w[nid].widgetcap & COP_AWCAP_DIGITAL) {
/* disable S/PDIF */
- this->comresp(this, nid, CORB_GET_DIGITAL_CONTROL, 0, &v);
+ azalia_comresp(this, nid, CORB_GET_DIGITAL_CONTROL,
+ 0, &v);
v = (v & ~CORB_DCC_DIGEN) & 0xff;
- this->comresp(this, nid, CORB_SET_DIGITAL_CONTROL_L, v, NULL);
+ azalia_comresp(this, nid, CORB_SET_DIGITAL_CONTROL_L,
+ v, NULL);
}
}
return 0;
@@ -2508,7 +2505,7 @@ azalia_widget_init(widget_t *this, const codec_t *codec, nid_t nid)
uint32_t result;
int err;
- err = codec->comresp(codec, nid, CORB_GET_PARAMETER,
+ err = azalia_comresp(codec, nid, CORB_GET_PARAMETER,
COP_AUDIO_WIDGET_CAP, &result);
if (err)
return err;
@@ -2516,8 +2513,8 @@ azalia_widget_init(widget_t *this, const codec_t *codec, nid_t nid)
this->widgetcap = result;
this->type = COP_AWCAP_TYPE(result);
if (this->widgetcap & COP_AWCAP_POWER) {
- codec->comresp(codec, nid, CORB_SET_POWER_STATE,
- CORB_PS_D0, &result);
+ azalia_comresp(codec, nid, CORB_SET_POWER_STATE, CORB_PS_D0,
+ &result);
DELAY(100);
}
@@ -2535,7 +2532,7 @@ azalia_widget_init(widget_t *this, const codec_t *codec, nid_t nid)
azalia_widget_init_pin(this, codec);
break;
case COP_AWTYPE_VOLUME_KNOB:
- err = codec->comresp(codec, this->nid, CORB_GET_PARAMETER,
+ err = azalia_comresp(codec, this->nid, CORB_GET_PARAMETER,
COP_VOLUME_KNOB_CAPABILITIES, &result);
if (err)
return err;
@@ -2549,14 +2546,14 @@ azalia_widget_init(widget_t *this, const codec_t *codec, nid_t nid)
/* amplifier information */
if (this->widgetcap & COP_AWCAP_INAMP) {
if (this->widgetcap & COP_AWCAP_AMPOV)
- codec->comresp(codec, nid, CORB_GET_PARAMETER,
+ azalia_comresp(codec, nid, CORB_GET_PARAMETER,
COP_INPUT_AMPCAP, &this->inamp_cap);
else
this->inamp_cap = codec->w[codec->audiofunc].inamp_cap;
}
if (this->widgetcap & COP_AWCAP_OUTAMP) {
if (this->widgetcap & COP_AWCAP_AMPOV)
- codec->comresp(codec, nid, CORB_GET_PARAMETER,
+ azalia_comresp(codec, nid, CORB_GET_PARAMETER,
COP_OUTPUT_AMPCAP, &this->outamp_cap);
else
this->outamp_cap = codec->w[codec->audiofunc].outamp_cap;
@@ -2793,8 +2790,8 @@ azalia_widget_init_audio(widget_t *this, const codec_t *codec)
/* check audio format */
if (this->widgetcap & COP_AWCAP_FORMATOV) {
- err = codec->comresp(codec, this->nid,
- CORB_GET_PARAMETER, COP_STREAM_FORMATS, &result);
+ err = azalia_comresp(codec, this->nid, CORB_GET_PARAMETER,
+ COP_STREAM_FORMATS, &result);
if (err)
return err;
this->d.audio.encodings = result;
@@ -2810,8 +2807,8 @@ azalia_widget_init_audio(widget_t *this, const codec_t *codec)
XNAME(codec->az), this->name, result);
return -1;
}
- err = codec->comresp(codec, this->nid, CORB_GET_PARAMETER,
- COP_PCM, &result);
+ err = azalia_comresp(codec, this->nid,
+ CORB_GET_PARAMETER, COP_PCM, &result);
if (err)
return err;
this->d.audio.bits_rates = result;
@@ -2831,7 +2828,7 @@ azalia_widget_init_pin(widget_t *this, const codec_t *codec)
uint32_t result, dir;
int err;
- err = codec->comresp(codec, this->nid, CORB_GET_CONFIGURATION_DEFAULT,
+ err = azalia_comresp(codec, this->nid, CORB_GET_CONFIGURATION_DEFAULT,
0, &result);
if (err)
return err;
@@ -2841,7 +2838,7 @@ azalia_widget_init_pin(widget_t *this, const codec_t *codec)
this->d.pin.color = CORB_CD_COLOR(result);
this->d.pin.device = CORB_CD_DEVICE(result);
- err = codec->comresp(codec, this->nid, CORB_GET_PARAMETER,
+ err = azalia_comresp(codec, this->nid, CORB_GET_PARAMETER,
COP_PINCAP, &result);
if (err)
return err;
@@ -2871,18 +2868,18 @@ azalia_widget_init_pin(widget_t *this, const codec_t *codec)
dir |= CORB_PWC_VREF_50;
}
- codec->comresp(codec, this->nid, CORB_SET_PIN_WIDGET_CONTROL,
+ azalia_comresp(codec, this->nid, CORB_SET_PIN_WIDGET_CONTROL,
dir, NULL);
if (this->d.pin.cap & COP_PINCAP_EAPD) {
- err = codec->comresp(codec, this->nid, CORB_GET_EAPD_BTL_ENABLE,
- 0, &result);
+ err = azalia_comresp(codec, this->nid,
+ CORB_GET_EAPD_BTL_ENABLE, 0, &result);
if (err)
return err;
result &= 0xff;
result |= CORB_EAPD_EAPD;
- err = codec->comresp(codec, this->nid, CORB_SET_EAPD_BTL_ENABLE,
- result, &result);
+ err = azalia_comresp(codec, this->nid,
+ CORB_SET_EAPD_BTL_ENABLE, result, &result);
if (err)
return err;
}
@@ -2906,7 +2903,7 @@ azalia_widget_init_connection(widget_t *this, const codec_t *codec)
if ((this->widgetcap & COP_AWCAP_CONNLIST) == 0)
return 0;
- err = codec->comresp(codec, this->nid, CORB_GET_PARAMETER,
+ err = azalia_comresp(codec, this->nid, CORB_GET_PARAMETER,
COP_CONNECTION_LIST_LENGTH, &result);
if (err)
return err;
@@ -2926,7 +2923,7 @@ azalia_widget_init_connection(widget_t *this, const codec_t *codec)
return ENOMEM;
}
for (i = 0; i < length;) {
- err = codec->comresp(codec, this->nid,
+ err = azalia_comresp(codec, this->nid,
CORB_GET_CONNECTION_LIST_ENTRY, i, &result);
if (err)
return err;
@@ -2945,7 +2942,7 @@ azalia_widget_init_connection(widget_t *this, const codec_t *codec)
}
}
if (length > 0) {
- err = codec->comresp(codec, this->nid,
+ err = azalia_comresp(codec, this->nid,
CORB_GET_CONNECTION_SELECT_CONTROL, 0, &result);
if (err)
return err;
@@ -3036,7 +3033,7 @@ azalia_codec_print_audiofunc(const codec_t *this)
DPRINTF(("\toutamp: mute=%u size=%u steps=%u offset=%u\n",
(result & COP_AMPCAP_MUTE) != 0, COP_AMPCAP_STEPSIZE(result),
COP_AMPCAP_NUMSTEPS(result), COP_AMPCAP_OFFSET(result)));
- this->comresp(this, this->audiofunc, CORB_GET_PARAMETER,
+ azalia_comresp(this, this->audiofunc, CORB_GET_PARAMETER,
COP_GPIO_COUNT, &result);
DPRINTF(("\tgpio: wake=%u unsol=%u gpis=%u gpos=%u gpios=%u\n",
(result & COP_GPIO_WAKE) != 0, (result & COP_GPIO_UNSOL) != 0,
@@ -3646,12 +3643,21 @@ azalia_set_port(void *v, mixer_ctrl_t *mc)
{
azalia_t *az;
codec_t *co;
+ const mixer_item_t *m;
+
+ if (mc->type == AUDIO_MIXER_CLASS)
+ return 0; /* nothing to do */
az = v;
co = &az->codecs[az->codecno];
if (mc->dev < 0 || mc->dev >= co->nmixers)
return EINVAL;
- return co->set_port(co, mc);
+
+ m = &co->mixers[mc->dev];
+ if (mc->type != m->devinfo.type)
+ return EINVAL;
+
+ return azalia_generic_mixer_set(co, m->nid, m->target, mc);
}
int
@@ -3659,12 +3665,20 @@ azalia_get_port(void *v, mixer_ctrl_t *mc)
{
azalia_t *az;
codec_t *co;
+ const mixer_item_t *m;
+
+ if (mc->type == AUDIO_MIXER_CLASS)
+ return 0; /* nothing to do */
az = v;
co = &az->codecs[az->codecno];
if (mc->dev < 0 || mc->dev >= co->nmixers)
return EINVAL;
- return co->get_port(co, mc);
+
+ m = &co->mixers[mc->dev];
+ mc->type = m->devinfo.type;
+
+ return azalia_generic_mixer_get(co, m->nid, m->target, mc);
}
int
diff --git a/sys/dev/pci/azalia.h b/sys/dev/pci/azalia.h
index efd5f17541b..fd3467ef503 100644
--- a/sys/dev/pci/azalia.h
+++ b/sys/dev/pci/azalia.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: azalia.h,v 1.48 2009/05/29 21:16:37 jakemsr Exp $ */
+/* $OpenBSD: azalia.h,v 1.49 2009/05/31 02:57:51 jakemsr Exp $ */
/* $NetBSD: azalia.h,v 1.6 2006/01/16 14:15:26 kent Exp $ */
/*-
@@ -633,12 +633,6 @@ struct io_pin {
typedef struct codec_t {
int (*comresp)(const struct codec_t *, nid_t, uint32_t, uint32_t, uint32_t *);
- int (*init_dacgroup)(struct codec_t *);
- int (*mixer_init)(struct codec_t *);
- int (*mixer_delete)(struct codec_t *);
- int (*set_port)(struct codec_t *, mixer_ctrl_t *);
- int (*get_port)(struct codec_t *, mixer_ctrl_t *);
- int (*unsol_event)(struct codec_t *, int);
struct azalia_t *az;
uint32_t vid; /* codec vendor/device ID */
@@ -712,3 +706,11 @@ int azalia_widget_enabled(const codec_t *, nid_t);
int azalia_codec_gpio_quirks(codec_t *);
int azalia_codec_widget_quirks(codec_t *, nid_t);
int azalia_codec_fnode(codec_t *, nid_t, int, int);
+
+int azalia_init_dacgroup(codec_t *);
+int azalia_mixer_init(codec_t *);
+int azalia_mixer_delete(codec_t *);
+int azalia_unsol_event(codec_t *, int);
+int azalia_comresp(const codec_t *, nid_t, uint32_t, uint32_t, uint32_t *);
+int azalia_generic_mixer_get(const codec_t *, nid_t, int, mixer_ctrl_t *);
+int azalia_generic_mixer_set(codec_t *, nid_t, int, const mixer_ctrl_t *);
diff --git a/sys/dev/pci/azalia_codec.c b/sys/dev/pci/azalia_codec.c
index dec4f4d1e00..a10b02a8929 100644
--- a/sys/dev/pci/azalia_codec.c
+++ b/sys/dev/pci/azalia_codec.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: azalia_codec.c,v 1.128 2009/05/31 02:12:54 jakemsr Exp $ */
+/* $OpenBSD: azalia_codec.c,v 1.129 2009/05/31 02:57:51 jakemsr Exp $ */
/* $NetBSD: azalia_codec.c,v 1.8 2006/05/10 11:17:27 kent Exp $ */
/*-
@@ -40,25 +40,16 @@
#define XNAME(co) (((struct device *)co->az)->dv_xname)
#define MIXER_DELTA(n) (AUDIO_MAX_GAIN / (n))
-int azalia_generic_codec_init_dacgroup(codec_t *);
int azalia_generic_codec_add_convgroup(codec_t *, convgroupset_t *,
struct io_pin *, int, nid_t *, int, uint32_t, uint32_t);
-int azalia_generic_unsol(codec_t *, int);
-
-int azalia_generic_mixer_init(codec_t *);
int azalia_generic_mixer_fix_indexes(codec_t *);
int azalia_generic_mixer_default(codec_t *);
-int azalia_generic_mixer_delete(codec_t *);
int azalia_generic_mixer_ensure_capacity(codec_t *, size_t);
-int azalia_generic_mixer_get(const codec_t *, nid_t, int, mixer_ctrl_t *);
-int azalia_generic_mixer_set(codec_t *, nid_t, int, const mixer_ctrl_t *);
u_char azalia_generic_mixer_from_device_value
(const codec_t *, nid_t, int, uint32_t );
uint32_t azalia_generic_mixer_to_device_value
(const codec_t *, nid_t, int, u_char);
-int azalia_generic_set_port(codec_t *, mixer_ctrl_t *);
-int azalia_generic_get_port(codec_t *, mixer_ctrl_t *);
void azalia_devinfo_offon(mixer_devinfo_t *);
void azalia_pin_config_ov(widget_t *, int, int);
@@ -72,12 +63,6 @@ azalia_codec_init_vtbl(codec_t *this)
* We can refer this->vid and this->subid.
*/
this->name = NULL;
- this->init_dacgroup = azalia_generic_codec_init_dacgroup;
- this->mixer_init = azalia_generic_mixer_init;
- this->mixer_delete = azalia_generic_mixer_delete;
- this->set_port = azalia_generic_set_port;
- this->get_port = azalia_generic_get_port;
- this->unsol_event = azalia_generic_unsol;
this->qrks = AZ_QRK_NONE;
switch (this->vid) {
case 0x10ec0260:
@@ -366,7 +351,7 @@ azalia_widget_enabled(const codec_t *this, nid_t nid)
}
int
-azalia_generic_codec_init_dacgroup(codec_t *this)
+azalia_init_dacgroup(codec_t *this)
{
this->dacs.ngroups = 0;
if (this->na_dacs > 0)
@@ -516,7 +501,7 @@ azalia_codec_fnode(codec_t *this, nid_t node, int index, int depth)
}
int
-azalia_generic_unsol(codec_t *this, int tag)
+azalia_unsol_event(codec_t *this, int tag)
{
mixer_ctrl_t mc;
uint32_t result;
@@ -531,11 +516,11 @@ azalia_generic_unsol(codec_t *this, int tag)
for (i = 0; err == 0 && i < this->nsense_pins; i++) {
if (!(this->spkr_muters & (1 << i)))
continue;
- err = this->comresp(this, this->sense_pins[i],
+ err = azalia_comresp(this, this->sense_pins[i],
CORB_GET_PIN_WIDGET_CONTROL, 0, &result);
if (err || !(result & CORB_PWC_OUTPUT))
continue;
- err = this->comresp(this, this->sense_pins[i],
+ err = azalia_comresp(this, this->sense_pins[i],
CORB_GET_PIN_SENSE, 0, &result);
if (!err && (result & CORB_PS_PRESENCE))
vol = 1;
@@ -564,7 +549,7 @@ azalia_generic_unsol(codec_t *this, int tag)
case AZ_TAG_PLAYVOL:
if (this->playvols.master == this->audiofunc)
return EINVAL;
- err = this->comresp(this, this->playvols.master,
+ err = azalia_comresp(this, this->playvols.master,
CORB_GET_VOLUME_KNOB, 0, &result);
if (err)
return err;
@@ -609,7 +594,7 @@ azalia_generic_unsol(codec_t *this, int tag)
* ---------------------------------------------------------------- */
int
-azalia_generic_mixer_init(codec_t *this)
+azalia_mixer_init(codec_t *this)
{
/*
* pin "<color>%2.2x"
@@ -1321,13 +1306,13 @@ azalia_generic_mixer_default(codec_t *this)
/* turn on jack sense unsolicited responses */
for (i = 0; i < this->nsense_pins; i++) {
if (this->spkr_muters & (1 << i)) {
- this->comresp(this, this->sense_pins[i],
+ azalia_comresp(this, this->sense_pins[i],
CORB_SET_UNSOLICITED_RESPONSE,
CORB_UNSOL_ENABLE | AZ_TAG_SPKR, NULL);
}
}
- if (this->spkr_muters != 0 && this->unsol_event != NULL)
- this->unsol_event(this, AZ_TAG_SPKR);
+ if (this->spkr_muters != 0)
+ azalia_unsol_event(this, AZ_TAG_SPKR);
/* get default value for play group master */
for (i = 0; i < this->playvols.nslaves; i++) {
@@ -1371,7 +1356,7 @@ azalia_generic_mixer_default(codec_t *this)
if (this->playvols.master != this->audiofunc) {
w = &this->w[this->playvols.master];
- err = this->comresp(this, w->nid, CORB_GET_VOLUME_KNOB,
+ err = azalia_comresp(this, w->nid, CORB_GET_VOLUME_KNOB,
0, &result);
if (err)
return err;
@@ -1382,14 +1367,14 @@ azalia_generic_mixer_default(codec_t *this)
/* indirect mode */
result &= ~(CORB_VKNOB_DIRECT);
- err = this->comresp(this, w->nid, CORB_SET_VOLUME_KNOB,
+ err = azalia_comresp(this, w->nid, CORB_SET_VOLUME_KNOB,
result, NULL);
if (err)
return err;
/* enable unsolicited responses */
result = CORB_UNSOL_ENABLE | AZ_TAG_PLAYVOL;
- err = this->comresp(this, w->nid,
+ err = azalia_comresp(this, w->nid,
CORB_SET_UNSOLICITED_RESPONSE, result, NULL);
if (err)
return err;
@@ -1399,7 +1384,7 @@ azalia_generic_mixer_default(codec_t *this)
}
int
-azalia_generic_mixer_delete(codec_t *this)
+azalia_mixer_delete(codec_t *this)
{
if (this->mixers != NULL) {
free(this->mixers, M_DEVBUF);
@@ -1421,7 +1406,7 @@ azalia_generic_mixer_get(const codec_t *this, nid_t nid, int target,
/* inamp mute */
if (IS_MI_TARGET_INAMP(target) && mc->type == AUDIO_MIXER_ENUM) {
- err = this->comresp(this, nid, CORB_GET_AMPLIFIER_GAIN_MUTE,
+ err = azalia_comresp(this, nid, CORB_GET_AMPLIFIER_GAIN_MUTE,
CORB_GAGM_INPUT | CORB_GAGM_LEFT |
MI_TARGET_INAMP(target), &result);
if (err)
@@ -1431,7 +1416,7 @@ azalia_generic_mixer_get(const codec_t *this, nid_t nid, int target,
/* inamp gain */
else if (IS_MI_TARGET_INAMP(target) && mc->type == AUDIO_MIXER_VALUE) {
- err = this->comresp(this, nid, CORB_GET_AMPLIFIER_GAIN_MUTE,
+ err = azalia_comresp(this, nid, CORB_GET_AMPLIFIER_GAIN_MUTE,
CORB_GAGM_INPUT | CORB_GAGM_LEFT |
MI_TARGET_INAMP(target), &result);
if (err)
@@ -1450,7 +1435,7 @@ azalia_generic_mixer_get(const codec_t *this, nid_t nid, int target,
n = nid;
mc->un.value.num_channels = WIDGET_CHANNELS(&this->w[n]);
if (mc->un.value.num_channels == 2) {
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_GET_AMPLIFIER_GAIN_MUTE, CORB_GAGM_INPUT |
CORB_GAGM_RIGHT | MI_TARGET_INAMP(target),
&result);
@@ -1463,7 +1448,7 @@ azalia_generic_mixer_get(const codec_t *this, nid_t nid, int target,
/* outamp mute */
else if (target == MI_TARGET_OUTAMP && mc->type == AUDIO_MIXER_ENUM) {
- err = this->comresp(this, nid, CORB_GET_AMPLIFIER_GAIN_MUTE,
+ err = azalia_comresp(this, nid, CORB_GET_AMPLIFIER_GAIN_MUTE,
CORB_GAGM_OUTPUT | CORB_GAGM_LEFT | 0, &result);
if (err)
return err;
@@ -1472,7 +1457,7 @@ azalia_generic_mixer_get(const codec_t *this, nid_t nid, int target,
/* outamp gain */
else if (target == MI_TARGET_OUTAMP && mc->type == AUDIO_MIXER_VALUE) {
- err = this->comresp(this, nid, CORB_GET_AMPLIFIER_GAIN_MUTE,
+ err = azalia_comresp(this, nid, CORB_GET_AMPLIFIER_GAIN_MUTE,
CORB_GAGM_OUTPUT | CORB_GAGM_LEFT | 0, &result);
if (err)
return err;
@@ -1480,7 +1465,7 @@ azalia_generic_mixer_get(const codec_t *this, nid_t nid, int target,
nid, target, CORB_GAGM_GAIN(result));
mc->un.value.num_channels = WIDGET_CHANNELS(&this->w[nid]);
if (mc->un.value.num_channels == 2) {
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_GET_AMPLIFIER_GAIN_MUTE,
CORB_GAGM_OUTPUT | CORB_GAGM_RIGHT | 0, &result);
if (err)
@@ -1492,7 +1477,7 @@ azalia_generic_mixer_get(const codec_t *this, nid_t nid, int target,
/* selection */
else if (target == MI_TARGET_CONNLIST) {
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_GET_CONNECTION_SELECT_CONTROL, 0, &result);
if (err)
return err;
@@ -1506,7 +1491,7 @@ azalia_generic_mixer_get(const codec_t *this, nid_t nid, int target,
/* pin I/O */
else if (target == MI_TARGET_PINDIR) {
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_GET_PIN_WIDGET_CONTROL, 0, &result);
if (err)
return err;
@@ -1534,7 +1519,7 @@ azalia_generic_mixer_get(const codec_t *this, nid_t nid, int target,
/* pin headphone-boost */
else if (target == MI_TARGET_PINBOOST) {
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_GET_PIN_WIDGET_CONTROL, 0, &result);
if (err)
return err;
@@ -1553,13 +1538,13 @@ azalia_generic_mixer_get(const codec_t *this, nid_t nid, int target,
/* S/PDIF */
else if (target == MI_TARGET_SPDIF) {
- err = this->comresp(this, nid, CORB_GET_DIGITAL_CONTROL,
+ err = azalia_comresp(this, nid, CORB_GET_DIGITAL_CONTROL,
0, &result);
if (err)
return err;
mc->un.mask = result & 0xff & ~(CORB_DCC_DIGEN | CORB_DCC_NAUDIO);
} else if (target == MI_TARGET_SPDIF_CC) {
- err = this->comresp(this, nid, CORB_GET_DIGITAL_CONTROL,
+ err = azalia_comresp(this, nid, CORB_GET_DIGITAL_CONTROL,
0, &result);
if (err)
return err;
@@ -1569,8 +1554,8 @@ azalia_generic_mixer_get(const codec_t *this, nid_t nid, int target,
/* EAPD */
else if (target == MI_TARGET_EAPD) {
- err = this->comresp(this, nid,
- CORB_GET_EAPD_BTL_ENABLE, 0, &result);
+ err = azalia_comresp(this, nid, CORB_GET_EAPD_BTL_ENABLE,
+ 0, &result);
if (err)
return err;
mc->un.ord = result & CORB_EAPD_EAPD ? 1 : 0;
@@ -1578,7 +1563,7 @@ azalia_generic_mixer_get(const codec_t *this, nid_t nid, int target,
/* sense pin */
else if (target == MI_TARGET_PINSENSE) {
- err = this->comresp(this, nid, CORB_GET_PIN_SENSE,
+ err = azalia_comresp(this, nid, CORB_GET_PIN_SENSE,
0, &result);
if (err)
return err;
@@ -1598,7 +1583,7 @@ azalia_generic_mixer_get(const codec_t *this, nid_t nid, int target,
for (i = 0; i < w->nconnections; i++) {
if (!azalia_widget_enabled(this, w->connections[i]))
continue;
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_GET_AMPLIFIER_GAIN_MUTE,
CORB_GAGM_INPUT | CORB_GAGM_LEFT |
MI_TARGET_INAMP(i), &result);
@@ -1691,7 +1676,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
/* inamp mute */
if (IS_MI_TARGET_INAMP(target) && mc->type == AUDIO_MIXER_ENUM) {
/* We have to set stereo mute separately to keep each gain value. */
- err = this->comresp(this, nid, CORB_GET_AMPLIFIER_GAIN_MUTE,
+ err = azalia_comresp(this, nid, CORB_GET_AMPLIFIER_GAIN_MUTE,
CORB_GAGM_INPUT | CORB_GAGM_LEFT |
MI_TARGET_INAMP(target), &result);
if (err)
@@ -1701,12 +1686,12 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
CORB_GAGM_GAIN(result);
if (mc->un.ord)
value |= CORB_AGM_MUTE;
- err = this->comresp(this, nid, CORB_SET_AMPLIFIER_GAIN_MUTE,
+ err = azalia_comresp(this, nid, CORB_SET_AMPLIFIER_GAIN_MUTE,
value, &result);
if (err)
return err;
if (WIDGET_CHANNELS(&this->w[nid]) == 2) {
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_GET_AMPLIFIER_GAIN_MUTE, CORB_GAGM_INPUT |
CORB_GAGM_RIGHT | MI_TARGET_INAMP(target),
&result);
@@ -1717,7 +1702,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
CORB_GAGM_GAIN(result);
if (mc->un.ord)
value |= CORB_AGM_MUTE;
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_SET_AMPLIFIER_GAIN_MUTE, value, &result);
if (err)
return err;
@@ -1728,7 +1713,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
else if (IS_MI_TARGET_INAMP(target) && mc->type == AUDIO_MIXER_VALUE) {
if (mc->un.value.num_channels < 1)
return EINVAL;
- err = this->comresp(this, nid, CORB_GET_AMPLIFIER_GAIN_MUTE,
+ err = azalia_comresp(this, nid, CORB_GET_AMPLIFIER_GAIN_MUTE,
CORB_GAGM_INPUT | CORB_GAGM_LEFT |
MI_TARGET_INAMP(target), &result);
if (err)
@@ -1739,13 +1724,13 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
(target << CORB_AGM_INDEX_SHIFT) |
(result & CORB_GAGM_MUTE ? CORB_AGM_MUTE : 0) |
(value & CORB_AGM_GAIN_MASK);
- err = this->comresp(this, nid, CORB_SET_AMPLIFIER_GAIN_MUTE,
+ err = azalia_comresp(this, nid, CORB_SET_AMPLIFIER_GAIN_MUTE,
value, &result);
if (err)
return err;
if (mc->un.value.num_channels >= 2 &&
WIDGET_CHANNELS(&this->w[nid]) == 2) {
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_GET_AMPLIFIER_GAIN_MUTE, CORB_GAGM_INPUT |
CORB_GAGM_RIGHT | MI_TARGET_INAMP(target),
&result);
@@ -1757,7 +1742,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
(target << CORB_AGM_INDEX_SHIFT) |
(result & CORB_GAGM_MUTE ? CORB_AGM_MUTE : 0) |
(value & CORB_AGM_GAIN_MASK);
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_SET_AMPLIFIER_GAIN_MUTE, value, &result);
if (err)
return err;
@@ -1766,19 +1751,19 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
/* outamp mute */
else if (target == MI_TARGET_OUTAMP && mc->type == AUDIO_MIXER_ENUM) {
- err = this->comresp(this, nid, CORB_GET_AMPLIFIER_GAIN_MUTE,
+ err = azalia_comresp(this, nid, CORB_GET_AMPLIFIER_GAIN_MUTE,
CORB_GAGM_OUTPUT | CORB_GAGM_LEFT, &result);
if (err)
return err;
value = CORB_AGM_OUTPUT | CORB_AGM_LEFT | CORB_GAGM_GAIN(result);
if (mc->un.ord)
value |= CORB_AGM_MUTE;
- err = this->comresp(this, nid, CORB_SET_AMPLIFIER_GAIN_MUTE,
+ err = azalia_comresp(this, nid, CORB_SET_AMPLIFIER_GAIN_MUTE,
value, &result);
if (err)
return err;
if (WIDGET_CHANNELS(&this->w[nid]) == 2) {
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_GET_AMPLIFIER_GAIN_MUTE,
CORB_GAGM_OUTPUT | CORB_GAGM_RIGHT, &result);
if (err)
@@ -1787,7 +1772,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
CORB_GAGM_GAIN(result);
if (mc->un.ord)
value |= CORB_AGM_MUTE;
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_SET_AMPLIFIER_GAIN_MUTE, value, &result);
if (err)
return err;
@@ -1798,7 +1783,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
else if (target == MI_TARGET_OUTAMP && mc->type == AUDIO_MIXER_VALUE) {
if (mc->un.value.num_channels < 1)
return EINVAL;
- err = this->comresp(this, nid, CORB_GET_AMPLIFIER_GAIN_MUTE,
+ err = azalia_comresp(this, nid, CORB_GET_AMPLIFIER_GAIN_MUTE,
CORB_GAGM_OUTPUT | CORB_GAGM_LEFT, &result);
if (err)
return err;
@@ -1807,13 +1792,13 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
value = CORB_AGM_OUTPUT | CORB_AGM_LEFT |
(result & CORB_GAGM_MUTE ? CORB_AGM_MUTE : 0) |
(value & CORB_AGM_GAIN_MASK);
- err = this->comresp(this, nid, CORB_SET_AMPLIFIER_GAIN_MUTE,
+ err = azalia_comresp(this, nid, CORB_SET_AMPLIFIER_GAIN_MUTE,
value, &result);
if (err)
return err;
if (mc->un.value.num_channels >= 2 &&
WIDGET_CHANNELS(&this->w[nid]) == 2) {
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_GET_AMPLIFIER_GAIN_MUTE, CORB_GAGM_OUTPUT |
CORB_GAGM_RIGHT, &result);
if (err)
@@ -1823,7 +1808,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
value = CORB_AGM_OUTPUT | CORB_AGM_RIGHT |
(result & CORB_GAGM_MUTE ? CORB_AGM_MUTE : 0) |
(value & CORB_AGM_GAIN_MASK);
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_SET_AMPLIFIER_GAIN_MUTE, value, &result);
if (err)
return err;
@@ -1837,7 +1822,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
!azalia_widget_enabled(this,
this->w[nid].connections[mc->un.ord]))
return EINVAL;
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_SET_CONNECTION_SELECT_CONTROL, mc->un.ord, &result);
if (err)
return err;
@@ -1846,7 +1831,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
/* pin I/O */
else if (target == MI_TARGET_PINDIR) {
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_GET_PIN_WIDGET_CONTROL, 0, &result);
if (err)
return err;
@@ -1871,7 +1856,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
if (mc->un.ord == 6)
value |= CORB_PWC_VREF_100;
}
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_SET_PIN_WIDGET_CONTROL, value, &result);
if (err)
return err;
@@ -1884,8 +1869,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
break;
}
if (i < this->nsense_pins) {
- if (this->unsol_event != NULL)
- this->unsol_event(this, AZ_TAG_SPKR);
+ azalia_unsol_event(this, AZ_TAG_SPKR);
}
}
@@ -1893,7 +1877,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
else if (target == MI_TARGET_PINBOOST) {
if (mc->un.ord >= 2)
return EINVAL;
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_GET_PIN_WIDGET_CONTROL, 0, &result);
if (err)
return err;
@@ -1902,7 +1886,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
} else {
result |= CORB_PWC_HEADPHONE;
}
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_SET_PIN_WIDGET_CONTROL, result, &result);
if (err)
return err;
@@ -1936,11 +1920,11 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
/* S/PDIF */
else if (target == MI_TARGET_SPDIF) {
- err = this->comresp(this, nid, CORB_GET_DIGITAL_CONTROL,
+ err = azalia_comresp(this, nid, CORB_GET_DIGITAL_CONTROL,
0, &result);
result &= CORB_DCC_DIGEN | CORB_DCC_NAUDIO;
result |= mc->un.mask & 0xff & ~CORB_DCC_DIGEN;
- err = this->comresp(this, nid, CORB_SET_DIGITAL_CONTROL_L,
+ err = azalia_comresp(this, nid, CORB_SET_DIGITAL_CONTROL_L,
result, NULL);
if (err)
return err;
@@ -1949,7 +1933,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
return EINVAL;
if (mc->un.value.level[0] > 127)
return EINVAL;
- err = this->comresp(this, nid, CORB_SET_DIGITAL_CONTROL_H,
+ err = azalia_comresp(this, nid, CORB_SET_DIGITAL_CONTROL_H,
mc->un.value.level[0], NULL);
if (err)
return err;
@@ -1959,7 +1943,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
else if (target == MI_TARGET_EAPD) {
if (mc->un.ord >= 2)
return EINVAL;
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_GET_EAPD_BTL_ENABLE, 0, &result);
if (err)
return err;
@@ -1969,7 +1953,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
} else {
result |= CORB_EAPD_EAPD;
}
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_SET_EAPD_BTL_ENABLE, result, &result);
if (err)
return err;
@@ -1994,7 +1978,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
/* We have to set stereo mute separately
* to keep each gain value.
*/
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_GET_AMPLIFIER_GAIN_MUTE,
CORB_GAGM_INPUT | CORB_GAGM_LEFT |
MI_TARGET_INAMP(i), &result);
@@ -2005,13 +1989,13 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
CORB_GAGM_GAIN(result);
if ((mc->un.mask & (1 << i)) == 0)
value |= CORB_AGM_MUTE;
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_SET_AMPLIFIER_GAIN_MUTE, value, &result);
if (err)
return err;
if (WIDGET_CHANNELS(w) == 2) {
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_GET_AMPLIFIER_GAIN_MUTE,
CORB_GAGM_INPUT | CORB_GAGM_RIGHT |
MI_TARGET_INAMP(i), &result);
@@ -2022,7 +2006,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
CORB_GAGM_GAIN(result);
if ((mc->un.mask & (1 << i)) == 0)
value |= CORB_AGM_MUTE;
- err = this->comresp(this, nid,
+ err = azalia_comresp(this, nid,
CORB_SET_AMPLIFIER_GAIN_MUTE,
value, &result);
if (err)
@@ -2039,8 +2023,7 @@ azalia_generic_mixer_set(codec_t *this, nid_t nid, int target,
if (nid == this->speaker) {
this->spkr_muters = mc->un.mask;
- if (this->unsol_event != NULL)
- this->unsol_event(this, AZ_TAG_SPKR);
+ azalia_unsol_event(this, AZ_TAG_SPKR);
} else {
DPRINTF(("%s: invalid senseset nid\n"));
return EINVAL;
@@ -2240,51 +2223,22 @@ azalia_generic_mixer_to_device_value(const codec_t *this, nid_t nid, int target,
}
int
-azalia_generic_set_port(codec_t *this, mixer_ctrl_t *mc)
-{
- const mixer_item_t *m;
-
- if (mc->dev >= this->nmixers)
- return ENXIO;
- m = &this->mixers[mc->dev];
- if (mc->type != m->devinfo.type)
- return EINVAL;
- if (mc->type == AUDIO_MIXER_CLASS)
- return 0; /* nothing to do */
- return azalia_generic_mixer_set(this, m->nid, m->target, mc);
-}
-
-int
-azalia_generic_get_port(codec_t *this, mixer_ctrl_t *mc)
-{
- const mixer_item_t *m;
-
- if (mc->dev >= this->nmixers)
- return ENXIO;
- m = &this->mixers[mc->dev];
- mc->type = m->devinfo.type;
- if (mc->type == AUDIO_MIXER_CLASS)
- return 0; /* nothing to do */
- return azalia_generic_mixer_get(this, m->nid, m->target, mc);
-}
-
-int
azalia_gpio_unmute(codec_t *this, int pin)
{
uint32_t data, mask, dir;
- this->comresp(this, this->audiofunc, CORB_GET_GPIO_DATA, 0, &data);
- this->comresp(this, this->audiofunc, CORB_GET_GPIO_ENABLE_MASK, 0, &mask);
- this->comresp(this, this->audiofunc, CORB_GET_GPIO_DIRECTION, 0, &dir);
+ azalia_comresp(this, this->audiofunc, CORB_GET_GPIO_DATA, 0, &data);
+ azalia_comresp(this, this->audiofunc, CORB_GET_GPIO_ENABLE_MASK, 0, &mask);
+ azalia_comresp(this, this->audiofunc, CORB_GET_GPIO_DIRECTION, 0, &dir);
data |= 1 << pin;
mask |= 1 << pin;
dir |= 1 << pin;
- this->comresp(this, this->audiofunc, CORB_SET_GPIO_ENABLE_MASK, mask, NULL);
- this->comresp(this, this->audiofunc, CORB_SET_GPIO_DIRECTION, dir, NULL);
+ azalia_comresp(this, this->audiofunc, CORB_SET_GPIO_ENABLE_MASK, mask, NULL);
+ azalia_comresp(this, this->audiofunc, CORB_SET_GPIO_DIRECTION, dir, NULL);
DELAY(1000);
- this->comresp(this, this->audiofunc, CORB_SET_GPIO_DATA, data, NULL);
+ azalia_comresp(this, this->audiofunc, CORB_SET_GPIO_DATA, data, NULL);
return 0;
}
@@ -2317,7 +2271,7 @@ int
azalia_codec_gpio_quirks(codec_t *this)
{
if (this->qrks & AZ_QRK_GPIO_POL_0) {
- this->comresp(this, this->audiofunc,
+ azalia_comresp(this, this->audiofunc,
CORB_SET_GPIO_POLARITY, 0, NULL);
}
if (this->qrks & AZ_QRK_GPIO_UNMUTE_0) {