Merge branch 'for-linus' into for-next
This commit is contained in:
commit
9b88daa513
|
@ -422,7 +422,7 @@ static void snd_timer_notify1(struct snd_timer_instance *ti, int event)
|
||||||
spin_lock_irqsave(&timer->lock, flags);
|
spin_lock_irqsave(&timer->lock, flags);
|
||||||
list_for_each_entry(ts, &ti->slave_active_head, active_list)
|
list_for_each_entry(ts, &ti->slave_active_head, active_list)
|
||||||
if (ts->ccallback)
|
if (ts->ccallback)
|
||||||
ts->ccallback(ti, event + 100, &tstamp, resolution);
|
ts->ccallback(ts, event + 100, &tstamp, resolution);
|
||||||
spin_unlock_irqrestore(&timer->lock, flags);
|
spin_unlock_irqrestore(&timer->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -518,9 +518,13 @@ static int _snd_timer_stop(struct snd_timer_instance *timeri, int event)
|
||||||
spin_unlock_irqrestore(&slave_active_lock, flags);
|
spin_unlock_irqrestore(&slave_active_lock, flags);
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
|
if (timeri->timer)
|
||||||
|
spin_lock(&timeri->timer->lock);
|
||||||
timeri->flags &= ~SNDRV_TIMER_IFLG_RUNNING;
|
timeri->flags &= ~SNDRV_TIMER_IFLG_RUNNING;
|
||||||
list_del_init(&timeri->ack_list);
|
list_del_init(&timeri->ack_list);
|
||||||
list_del_init(&timeri->active_list);
|
list_del_init(&timeri->active_list);
|
||||||
|
if (timeri->timer)
|
||||||
|
spin_unlock(&timeri->timer->lock);
|
||||||
spin_unlock_irqrestore(&slave_active_lock, flags);
|
spin_unlock_irqrestore(&slave_active_lock, flags);
|
||||||
goto __end;
|
goto __end;
|
||||||
}
|
}
|
||||||
|
@ -1929,6 +1933,7 @@ static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
|
||||||
{
|
{
|
||||||
struct snd_timer_user *tu;
|
struct snd_timer_user *tu;
|
||||||
long result = 0, unit;
|
long result = 0, unit;
|
||||||
|
int qhead;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
|
|
||||||
tu = file->private_data;
|
tu = file->private_data;
|
||||||
|
@ -1940,7 +1945,7 @@ static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
|
||||||
|
|
||||||
if ((file->f_flags & O_NONBLOCK) != 0 || result > 0) {
|
if ((file->f_flags & O_NONBLOCK) != 0 || result > 0) {
|
||||||
err = -EAGAIN;
|
err = -EAGAIN;
|
||||||
break;
|
goto _error;
|
||||||
}
|
}
|
||||||
|
|
||||||
set_current_state(TASK_INTERRUPTIBLE);
|
set_current_state(TASK_INTERRUPTIBLE);
|
||||||
|
@ -1955,42 +1960,37 @@ static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
|
||||||
|
|
||||||
if (tu->disconnected) {
|
if (tu->disconnected) {
|
||||||
err = -ENODEV;
|
err = -ENODEV;
|
||||||
break;
|
goto _error;
|
||||||
}
|
}
|
||||||
if (signal_pending(current)) {
|
if (signal_pending(current)) {
|
||||||
err = -ERESTARTSYS;
|
err = -ERESTARTSYS;
|
||||||
break;
|
goto _error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qhead = tu->qhead++;
|
||||||
|
tu->qhead %= tu->queue_size;
|
||||||
spin_unlock_irq(&tu->qlock);
|
spin_unlock_irq(&tu->qlock);
|
||||||
if (err < 0)
|
|
||||||
goto _error;
|
|
||||||
|
|
||||||
if (tu->tread) {
|
if (tu->tread) {
|
||||||
if (copy_to_user(buffer, &tu->tqueue[tu->qhead++],
|
if (copy_to_user(buffer, &tu->tqueue[qhead],
|
||||||
sizeof(struct snd_timer_tread))) {
|
sizeof(struct snd_timer_tread)))
|
||||||
err = -EFAULT;
|
err = -EFAULT;
|
||||||
goto _error;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (copy_to_user(buffer, &tu->queue[tu->qhead++],
|
if (copy_to_user(buffer, &tu->queue[qhead],
|
||||||
sizeof(struct snd_timer_read))) {
|
sizeof(struct snd_timer_read)))
|
||||||
err = -EFAULT;
|
err = -EFAULT;
|
||||||
goto _error;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
tu->qhead %= tu->queue_size;
|
|
||||||
|
|
||||||
result += unit;
|
|
||||||
buffer += unit;
|
|
||||||
|
|
||||||
spin_lock_irq(&tu->qlock);
|
spin_lock_irq(&tu->qlock);
|
||||||
tu->qused--;
|
tu->qused--;
|
||||||
|
if (err < 0)
|
||||||
|
goto _error;
|
||||||
|
result += unit;
|
||||||
|
buffer += unit;
|
||||||
}
|
}
|
||||||
spin_unlock_irq(&tu->qlock);
|
|
||||||
_error:
|
_error:
|
||||||
|
spin_unlock_irq(&tu->qlock);
|
||||||
return result > 0 ? result : err;
|
return result > 0 ? result : err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ struct amdtp_dot {
|
||||||
#define BYTE_PER_SAMPLE (4)
|
#define BYTE_PER_SAMPLE (4)
|
||||||
#define MAGIC_DOT_BYTE (2)
|
#define MAGIC_DOT_BYTE (2)
|
||||||
#define MAGIC_BYTE_OFF(x) (((x) * BYTE_PER_SAMPLE) + MAGIC_DOT_BYTE)
|
#define MAGIC_BYTE_OFF(x) (((x) * BYTE_PER_SAMPLE) + MAGIC_DOT_BYTE)
|
||||||
static const u8 dot_scrt(const u8 idx, const unsigned int off)
|
static u8 dot_scrt(const u8 idx, const unsigned int off)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* the length of the added pattern only depends on the lower nibble
|
* the length of the added pattern only depends on the lower nibble
|
||||||
|
|
|
@ -230,6 +230,7 @@ int snd_tscm_transaction_register(struct snd_tscm *tscm)
|
||||||
return err;
|
return err;
|
||||||
error:
|
error:
|
||||||
fw_core_remove_address_handler(&tscm->async_handler);
|
fw_core_remove_address_handler(&tscm->async_handler);
|
||||||
|
tscm->async_handler.callback_data = NULL;
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -276,6 +277,9 @@ void snd_tscm_transaction_unregister(struct snd_tscm *tscm)
|
||||||
__be32 reg;
|
__be32 reg;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
|
if (tscm->async_handler.callback_data == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
/* Turn off FireWire LED. */
|
/* Turn off FireWire LED. */
|
||||||
reg = cpu_to_be32(0x0000008e);
|
reg = cpu_to_be32(0x0000008e);
|
||||||
snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST,
|
snd_fw_transaction(tscm->unit, TCODE_WRITE_QUADLET_REQUEST,
|
||||||
|
@ -297,6 +301,8 @@ void snd_tscm_transaction_unregister(struct snd_tscm *tscm)
|
||||||
®, sizeof(reg), 0);
|
®, sizeof(reg), 0);
|
||||||
|
|
||||||
fw_core_remove_address_handler(&tscm->async_handler);
|
fw_core_remove_address_handler(&tscm->async_handler);
|
||||||
|
tscm->async_handler.callback_data = NULL;
|
||||||
|
|
||||||
for (i = 0; i < TSCM_MIDI_OUT_PORT_MAX; i++)
|
for (i = 0; i < TSCM_MIDI_OUT_PORT_MAX; i++)
|
||||||
snd_fw_async_midi_port_destroy(&tscm->out_ports[i]);
|
snd_fw_async_midi_port_destroy(&tscm->out_ports[i]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,6 @@ static struct snd_tscm_spec model_specs[] = {
|
||||||
.pcm_playback_analog_channels = 8,
|
.pcm_playback_analog_channels = 8,
|
||||||
.midi_capture_ports = 4,
|
.midi_capture_ports = 4,
|
||||||
.midi_playback_ports = 4,
|
.midi_playback_ports = 4,
|
||||||
.is_controller = true,
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
.name = "FW-1082",
|
.name = "FW-1082",
|
||||||
|
@ -31,9 +30,16 @@ static struct snd_tscm_spec model_specs[] = {
|
||||||
.pcm_playback_analog_channels = 2,
|
.pcm_playback_analog_channels = 2,
|
||||||
.midi_capture_ports = 2,
|
.midi_capture_ports = 2,
|
||||||
.midi_playback_ports = 2,
|
.midi_playback_ports = 2,
|
||||||
.is_controller = true,
|
|
||||||
},
|
},
|
||||||
/* FW-1804 may be supported. */
|
{
|
||||||
|
.name = "FW-1804",
|
||||||
|
.has_adat = true,
|
||||||
|
.has_spdif = true,
|
||||||
|
.pcm_capture_analog_channels = 8,
|
||||||
|
.pcm_playback_analog_channels = 2,
|
||||||
|
.midi_capture_ports = 2,
|
||||||
|
.midi_playback_ports = 4,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static int identify_model(struct snd_tscm *tscm)
|
static int identify_model(struct snd_tscm *tscm)
|
||||||
|
|
|
@ -39,7 +39,6 @@ struct snd_tscm_spec {
|
||||||
unsigned int pcm_playback_analog_channels;
|
unsigned int pcm_playback_analog_channels;
|
||||||
unsigned int midi_capture_ports;
|
unsigned int midi_capture_ports;
|
||||||
unsigned int midi_playback_ports;
|
unsigned int midi_playback_ports;
|
||||||
bool is_controller;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TSCM_MIDI_IN_PORT_MAX 4
|
#define TSCM_MIDI_IN_PORT_MAX 4
|
||||||
|
@ -72,9 +71,6 @@ struct snd_tscm {
|
||||||
struct snd_fw_async_midi_port out_ports[TSCM_MIDI_OUT_PORT_MAX];
|
struct snd_fw_async_midi_port out_ports[TSCM_MIDI_OUT_PORT_MAX];
|
||||||
u8 running_status[TSCM_MIDI_OUT_PORT_MAX];
|
u8 running_status[TSCM_MIDI_OUT_PORT_MAX];
|
||||||
bool on_sysex[TSCM_MIDI_OUT_PORT_MAX];
|
bool on_sysex[TSCM_MIDI_OUT_PORT_MAX];
|
||||||
|
|
||||||
/* For control messages. */
|
|
||||||
struct snd_firewire_tascam_status *status;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define TSCM_ADDR_BASE 0xffff00000000ull
|
#define TSCM_ADDR_BASE 0xffff00000000ull
|
||||||
|
|
|
@ -4028,9 +4028,9 @@ static void pin_power_callback(struct hda_codec *codec,
|
||||||
struct hda_jack_callback *jack,
|
struct hda_jack_callback *jack,
|
||||||
bool on)
|
bool on)
|
||||||
{
|
{
|
||||||
if (jack && jack->tbl->nid)
|
if (jack && jack->nid)
|
||||||
sync_power_state_change(codec,
|
sync_power_state_change(codec,
|
||||||
set_pin_power_jack(codec, jack->tbl->nid, on));
|
set_pin_power_jack(codec, jack->nid, on));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* callback only doing power up -- called at first */
|
/* callback only doing power up -- called at first */
|
||||||
|
|
|
@ -259,7 +259,7 @@ snd_hda_jack_detect_enable_callback(struct hda_codec *codec, hda_nid_t nid,
|
||||||
if (!callback)
|
if (!callback)
|
||||||
return ERR_PTR(-ENOMEM);
|
return ERR_PTR(-ENOMEM);
|
||||||
callback->func = func;
|
callback->func = func;
|
||||||
callback->tbl = jack;
|
callback->nid = jack->nid;
|
||||||
callback->next = jack->callback;
|
callback->next = jack->callback;
|
||||||
jack->callback = callback;
|
jack->callback = callback;
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ struct hda_jack_callback;
|
||||||
typedef void (*hda_jack_callback_fn) (struct hda_codec *, struct hda_jack_callback *);
|
typedef void (*hda_jack_callback_fn) (struct hda_codec *, struct hda_jack_callback *);
|
||||||
|
|
||||||
struct hda_jack_callback {
|
struct hda_jack_callback {
|
||||||
struct hda_jack_tbl *tbl;
|
hda_nid_t nid;
|
||||||
hda_jack_callback_fn func;
|
hda_jack_callback_fn func;
|
||||||
unsigned int private_data; /* arbitrary data */
|
unsigned int private_data; /* arbitrary data */
|
||||||
struct hda_jack_callback *next;
|
struct hda_jack_callback *next;
|
||||||
|
|
|
@ -4427,13 +4427,16 @@ static void ca0132_process_dsp_response(struct hda_codec *codec,
|
||||||
static void hp_callback(struct hda_codec *codec, struct hda_jack_callback *cb)
|
static void hp_callback(struct hda_codec *codec, struct hda_jack_callback *cb)
|
||||||
{
|
{
|
||||||
struct ca0132_spec *spec = codec->spec;
|
struct ca0132_spec *spec = codec->spec;
|
||||||
|
struct hda_jack_tbl *tbl;
|
||||||
|
|
||||||
/* Delay enabling the HP amp, to let the mic-detection
|
/* Delay enabling the HP amp, to let the mic-detection
|
||||||
* state machine run.
|
* state machine run.
|
||||||
*/
|
*/
|
||||||
cancel_delayed_work_sync(&spec->unsol_hp_work);
|
cancel_delayed_work_sync(&spec->unsol_hp_work);
|
||||||
schedule_delayed_work(&spec->unsol_hp_work, msecs_to_jiffies(500));
|
schedule_delayed_work(&spec->unsol_hp_work, msecs_to_jiffies(500));
|
||||||
cb->tbl->block_report = 1;
|
tbl = snd_hda_jack_tbl_get(codec, cb->nid);
|
||||||
|
if (tbl)
|
||||||
|
tbl->block_report = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void amic_callback(struct hda_codec *codec, struct hda_jack_callback *cb)
|
static void amic_callback(struct hda_codec *codec, struct hda_jack_callback *cb)
|
||||||
|
|
|
@ -448,7 +448,8 @@ static int hdmi_eld_ctl_get(struct snd_kcontrol *kcontrol,
|
||||||
eld = &per_pin->sink_eld;
|
eld = &per_pin->sink_eld;
|
||||||
|
|
||||||
mutex_lock(&per_pin->lock);
|
mutex_lock(&per_pin->lock);
|
||||||
if (eld->eld_size > ARRAY_SIZE(ucontrol->value.bytes.data)) {
|
if (eld->eld_size > ARRAY_SIZE(ucontrol->value.bytes.data) ||
|
||||||
|
eld->eld_size > ELD_MAX_SIZE) {
|
||||||
mutex_unlock(&per_pin->lock);
|
mutex_unlock(&per_pin->lock);
|
||||||
snd_BUG();
|
snd_BUG();
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -1193,7 +1194,7 @@ static void check_presence_and_report(struct hda_codec *codec, hda_nid_t nid)
|
||||||
static void jack_callback(struct hda_codec *codec,
|
static void jack_callback(struct hda_codec *codec,
|
||||||
struct hda_jack_callback *jack)
|
struct hda_jack_callback *jack)
|
||||||
{
|
{
|
||||||
check_presence_and_report(codec, jack->tbl->nid);
|
check_presence_and_report(codec, jack->nid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hdmi_intrinsic_event(struct hda_codec *codec, unsigned int res)
|
static void hdmi_intrinsic_event(struct hda_codec *codec, unsigned int res)
|
||||||
|
|
|
@ -282,7 +282,7 @@ static void alc_update_knob_master(struct hda_codec *codec,
|
||||||
uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
|
uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
|
||||||
if (!uctl)
|
if (!uctl)
|
||||||
return;
|
return;
|
||||||
val = snd_hda_codec_read(codec, jack->tbl->nid, 0,
|
val = snd_hda_codec_read(codec, jack->nid, 0,
|
||||||
AC_VERB_GET_VOLUME_KNOB_CONTROL, 0);
|
AC_VERB_GET_VOLUME_KNOB_CONTROL, 0);
|
||||||
val &= HDA_AMP_VOLMASK;
|
val &= HDA_AMP_VOLMASK;
|
||||||
uctl->value.integer.value[0] = val;
|
uctl->value.integer.value[0] = val;
|
||||||
|
@ -1787,7 +1787,6 @@ enum {
|
||||||
ALC882_FIXUP_NO_PRIMARY_HP,
|
ALC882_FIXUP_NO_PRIMARY_HP,
|
||||||
ALC887_FIXUP_ASUS_BASS,
|
ALC887_FIXUP_ASUS_BASS,
|
||||||
ALC887_FIXUP_BASS_CHMAP,
|
ALC887_FIXUP_BASS_CHMAP,
|
||||||
ALC882_FIXUP_DISABLE_AAMIX,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void alc889_fixup_coef(struct hda_codec *codec,
|
static void alc889_fixup_coef(struct hda_codec *codec,
|
||||||
|
@ -1949,8 +1948,6 @@ static void alc882_fixup_no_primary_hp(struct hda_codec *codec,
|
||||||
|
|
||||||
static void alc_fixup_bass_chmap(struct hda_codec *codec,
|
static void alc_fixup_bass_chmap(struct hda_codec *codec,
|
||||||
const struct hda_fixup *fix, int action);
|
const struct hda_fixup *fix, int action);
|
||||||
static void alc_fixup_disable_aamix(struct hda_codec *codec,
|
|
||||||
const struct hda_fixup *fix, int action);
|
|
||||||
|
|
||||||
static const struct hda_fixup alc882_fixups[] = {
|
static const struct hda_fixup alc882_fixups[] = {
|
||||||
[ALC882_FIXUP_ABIT_AW9D_MAX] = {
|
[ALC882_FIXUP_ABIT_AW9D_MAX] = {
|
||||||
|
@ -2188,10 +2185,6 @@ static const struct hda_fixup alc882_fixups[] = {
|
||||||
.type = HDA_FIXUP_FUNC,
|
.type = HDA_FIXUP_FUNC,
|
||||||
.v.func = alc_fixup_bass_chmap,
|
.v.func = alc_fixup_bass_chmap,
|
||||||
},
|
},
|
||||||
[ALC882_FIXUP_DISABLE_AAMIX] = {
|
|
||||||
.type = HDA_FIXUP_FUNC,
|
|
||||||
.v.func = alc_fixup_disable_aamix,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct snd_pci_quirk alc882_fixup_tbl[] = {
|
static const struct snd_pci_quirk alc882_fixup_tbl[] = {
|
||||||
|
@ -2230,6 +2223,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x104d, 0x9047, "Sony Vaio TT", ALC889_FIXUP_VAIO_TT),
|
SND_PCI_QUIRK(0x104d, 0x9047, "Sony Vaio TT", ALC889_FIXUP_VAIO_TT),
|
||||||
SND_PCI_QUIRK(0x104d, 0x905a, "Sony Vaio Z", ALC882_FIXUP_NO_PRIMARY_HP),
|
SND_PCI_QUIRK(0x104d, 0x905a, "Sony Vaio Z", ALC882_FIXUP_NO_PRIMARY_HP),
|
||||||
SND_PCI_QUIRK(0x104d, 0x9043, "Sony Vaio VGC-LN51JGB", ALC882_FIXUP_NO_PRIMARY_HP),
|
SND_PCI_QUIRK(0x104d, 0x9043, "Sony Vaio VGC-LN51JGB", ALC882_FIXUP_NO_PRIMARY_HP),
|
||||||
|
SND_PCI_QUIRK(0x104d, 0x9044, "Sony VAIO AiO", ALC882_FIXUP_NO_PRIMARY_HP),
|
||||||
|
|
||||||
/* All Apple entries are in codec SSIDs */
|
/* All Apple entries are in codec SSIDs */
|
||||||
SND_PCI_QUIRK(0x106b, 0x00a0, "MacBookPro 3,1", ALC889_FIXUP_MBP_VREF),
|
SND_PCI_QUIRK(0x106b, 0x00a0, "MacBookPro 3,1", ALC889_FIXUP_MBP_VREF),
|
||||||
|
@ -2259,7 +2253,6 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
|
||||||
SND_PCI_QUIRK(0x1462, 0x7350, "MSI-7350", ALC889_FIXUP_CD),
|
SND_PCI_QUIRK(0x1462, 0x7350, "MSI-7350", ALC889_FIXUP_CD),
|
||||||
SND_PCI_QUIRK_VENDOR(0x1462, "MSI", ALC882_FIXUP_GPIO3),
|
SND_PCI_QUIRK_VENDOR(0x1462, "MSI", ALC882_FIXUP_GPIO3),
|
||||||
SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte EP45-DS3/Z87X-UD3H", ALC889_FIXUP_FRONT_HP_NO_PRESENCE),
|
SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte EP45-DS3/Z87X-UD3H", ALC889_FIXUP_FRONT_HP_NO_PRESENCE),
|
||||||
SND_PCI_QUIRK(0x1458, 0xa182, "Gigabyte Z170X-UD3", ALC882_FIXUP_DISABLE_AAMIX),
|
|
||||||
SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX),
|
SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX),
|
||||||
SND_PCI_QUIRK_VENDOR(0x1558, "Clevo laptop", ALC882_FIXUP_EAPD),
|
SND_PCI_QUIRK_VENDOR(0x1558, "Clevo laptop", ALC882_FIXUP_EAPD),
|
||||||
SND_PCI_QUIRK(0x161f, 0x2054, "Medion laptop", ALC883_FIXUP_EAPD),
|
SND_PCI_QUIRK(0x161f, 0x2054, "Medion laptop", ALC883_FIXUP_EAPD),
|
||||||
|
|
|
@ -493,9 +493,9 @@ static void jack_update_power(struct hda_codec *codec,
|
||||||
if (!spec->num_pwrs)
|
if (!spec->num_pwrs)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (jack && jack->tbl->nid) {
|
if (jack && jack->nid) {
|
||||||
stac_toggle_power_map(codec, jack->tbl->nid,
|
stac_toggle_power_map(codec, jack->nid,
|
||||||
snd_hda_jack_detect(codec, jack->tbl->nid),
|
snd_hda_jack_detect(codec, jack->nid),
|
||||||
true);
|
true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue