[alsa-devel] [PATCH 044/112] ALSA: hda - More generic auto-mic switching for Realtek codecs
FF
lgperson at 126.com
Thu Jan 17 03:47:08 CET 2013
Hello!
where is the trace_hda_send_cmd function source code?I can not find it in the path of alsa-kernel\pci\hda\hda_code.c and linux kenerl.
Thank you!
/*
* Compose a 32bit command word to be sent to the HD-audio controller
*/
static inline unsigned int
make_codec_cmd(struct hda_codec *codec, hda_nid_t nid, int direct,
unsigned int verb, unsigned int parm)
{
u32 val;
if ((codec->addr & ~0xf) || (direct & ~1) || (nid & ~0x7f) ||
(verb & ~0xfff) || (parm & ~0xffff)) {
printk(KERN_ERR "hda-codec: out of range cmd %x:%x:%x:%x:%x\n",
codec->addr, direct, nid, verb, parm);
return ~0;
}
val = (u32)codec->addr << 28;
val |= (u32)direct << 27;
val |= (u32)nid << 20;
val |= verb << 8;
val |= parm;
return val;
}
/*
* Send and receive a verb
*/
static int codec_exec_verb(struct hda_codec *codec, unsigned int cmd,
unsigned int *res)
{
struct hda_bus *bus = codec->bus;
int err;
if (cmd == ~0)
return -1;
if (res)
*res = -1;
again:
snd_hda_power_up(codec);
mutex_lock(&bus->cmd_mutex);
trace_hda_send_cmd(codec, cmd);
err = bus->ops.command(bus, cmd);
if (!err && res) {
*res = bus->ops.get_response(bus, codec->addr);
trace_hda_get_response(codec, *res);
}
mutex_unlock(&bus->cmd_mutex);
snd_hda_power_down(codec);
if (res && *res == -1 && bus->rirb_error) {
if (bus->response_reset) {
snd_printd("hda_codec: resetting BUS due to "
"fatal communication error\n");
trace_hda_bus_reset(bus);
bus->ops.bus_reset(bus);
}
goto again;
}
/* clear reset-flag when the communication gets recovered */
if (!err)
bus->response_reset = 0;
return err;
}
At 2013-01-10 23:08:52,"Takashi Iwai" <tiwai at suse.de> wrote:
>At Thu, 10 Jan 2013 08:41:13 +0800,
>Raymond Yau wrote:
>>
>> >
>> > This patch extends the capability of the auto-mic feature.
>> > Instead of limiting the automatic input-source selection only to the
>> > mics (internal, external and dock mics), allow it for generic inputs,
>> > e.g. switching between the rear line-in and the front mic.
>> >
>> > The logic is to check the attribute and location of input pins, and
>> > enable the automatic selection feature only if all such pins are in
>> > different locations (e.g. internal, front, rear, etc) and line-in or
>> > mic pins. That is, if multiple input pins are assigned to a single
>> > location, the feature isn't enabled because we don't know the
>> > priority.
>> >
>> > (You may wonder why this restriction doesn't exist for the headphone
>> > automute. The reason is that the output case is different from the
>> > input: the input source is an exclusive selection while the output
>> > can be multiplexed.)
>> >
>> > Note that, for avoiding regressions, the line-in auto switching
>> > feature isn't activated as default. It has to be set explicitly via
>> > spec->line_in_auto_switch flag in a fixup code.
>>
>> Is this feature automatically disabled when rear Mic or line in Jack is
>> retasked as output ?
>>
>> Does it mean that multi channel capture will not be implemented since it is
>> conflict with both dynamic adc switching and auto Mic selection ?
>
>The recent jack detection codes (at least the code in
>test/hda-gen-parser branch) checks the direction of the pinctl.
>If a multi-io pin is configured as output, the mic autoswitch will
>ignore this pin. Vice versa for the auto-mute and headphone-as-mic
>case.
>
>
>Takashi
More information about the Alsa-devel
mailing list