mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 06:12:08 +00:00
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);
|
||||
list_for_each_entry(ts, &ti->slave_active_head, active_list)
|
||||
if (ts->ccallback)
|
||||
ts->ccallback(ti, event + 100, &tstamp, resolution);
|
||||
ts->ccallback(ts, event + 100, &tstamp, resolution);
|
||||
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);
|
||||
return -EBUSY;
|
||||
}
|
||||
if (timeri->timer)
|
||||
spin_lock(&timeri->timer->lock);
|
||||
timeri->flags &= ~SNDRV_TIMER_IFLG_RUNNING;
|
||||
list_del_init(&timeri->ack_list);
|
||||
list_del_init(&timeri->active_list);
|
||||
if (timeri->timer)
|
||||
spin_unlock(&timeri->timer->lock);
|
||||
spin_unlock_irqrestore(&slave_active_lock, flags);
|
||||
goto __end;
|
||||
}
|
||||
@ -1929,6 +1933,7 @@ static ssize_t snd_timer_user_read(struct file *file, char __user *buffer,
|
||||
{
|
||||
struct snd_timer_user *tu;
|
||||
long result = 0, unit;
|
||||
int qhead;
|
||||
int err = 0;
|
||||
|
||||
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) {
|
||||
err = -EAGAIN;
|
||||
break;
|
||||
goto _error;
|
||||
}
|
||||
|
||||
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) {
|
||||
err = -ENODEV;
|
||||
break;
|
||||
goto _error;
|
||||
}
|
||||
if (signal_pending(current)) {
|
||||
err = -ERESTARTSYS;
|
||||
break;
|
||||
goto _error;
|
||||
}
|
||||
}
|
||||
|
||||
qhead = tu->qhead++;
|
||||
tu->qhead %= tu->queue_size;
|
||||
spin_unlock_irq(&tu->qlock);
|
||||
if (err < 0)
|
||||
goto _error;
|
||||
|
||||
if (tu->tread) {
|
||||
if (copy_to_user(buffer, &tu->tqueue[tu->qhead++],
|
||||
sizeof(struct snd_timer_tread))) {
|
||||
if (copy_to_user(buffer, &tu->tqueue[qhead],
|
||||
sizeof(struct snd_timer_tread)))
|
||||
err = -EFAULT;
|
||||
goto _error;
|
||||
}
|
||||
} else {
|
||||
if (copy_to_user(buffer, &tu->queue[tu->qhead++],
|
||||
sizeof(struct snd_timer_read))) {
|
||||
if (copy_to_user(buffer, &tu->queue[qhead],
|
||||
sizeof(struct snd_timer_read)))
|
||||
err = -EFAULT;
|
||||
goto _error;
|
||||
}
|
||||
}
|
||||
|
||||
tu->qhead %= tu->queue_size;
|
||||
|
||||
result += unit;
|
||||
buffer += unit;
|
||||
|
||||
spin_lock_irq(&tu->qlock);
|
||||
tu->qused--;
|
||||
if (err < 0)
|
||||
goto _error;
|
||||
result += unit;
|
||||
buffer += unit;
|
||||
}
|
||||
spin_unlock_irq(&tu->qlock);
|
||||
_error:
|
||||
spin_unlock_irq(&tu->qlock);
|
||||
return result > 0 ? result : err;
|
||||
}
|
||||
|
||||
|
@ -63,7 +63,7 @@ struct amdtp_dot {
|
||||
#define BYTE_PER_SAMPLE (4)
|
||||
#define MAGIC_DOT_BYTE (2)
|
||||
#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
|
||||
|
@ -230,6 +230,7 @@ int snd_tscm_transaction_register(struct snd_tscm *tscm)
|
||||
return err;
|
||||
error:
|
||||
fw_core_remove_address_handler(&tscm->async_handler);
|
||||
tscm->async_handler.callback_data = NULL;
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -276,6 +277,9 @@ void snd_tscm_transaction_unregister(struct snd_tscm *tscm)
|
||||
__be32 reg;
|
||||
unsigned int i;
|
||||
|
||||
if (tscm->async_handler.callback_data == NULL)
|
||||
return;
|
||||
|
||||
/* Turn off FireWire LED. */
|
||||
reg = cpu_to_be32(0x0000008e);
|
||||
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);
|
||||
|
||||
fw_core_remove_address_handler(&tscm->async_handler);
|
||||
tscm->async_handler.callback_data = NULL;
|
||||
|
||||
for (i = 0; i < TSCM_MIDI_OUT_PORT_MAX; 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,
|
||||
.midi_capture_ports = 4,
|
||||
.midi_playback_ports = 4,
|
||||
.is_controller = true,
|
||||
},
|
||||
{
|
||||
.name = "FW-1082",
|
||||
@ -31,9 +30,16 @@ static struct snd_tscm_spec model_specs[] = {
|
||||
.pcm_playback_analog_channels = 2,
|
||||
.midi_capture_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)
|
||||
|
@ -39,7 +39,6 @@ struct snd_tscm_spec {
|
||||
unsigned int pcm_playback_analog_channels;
|
||||
unsigned int midi_capture_ports;
|
||||
unsigned int midi_playback_ports;
|
||||
bool is_controller;
|
||||
};
|
||||
|
||||
#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];
|
||||
u8 running_status[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
|
||||
|
@ -4028,9 +4028,9 @@ static void pin_power_callback(struct hda_codec *codec,
|
||||
struct hda_jack_callback *jack,
|
||||
bool on)
|
||||
{
|
||||
if (jack && jack->tbl->nid)
|
||||
if (jack && jack->nid)
|
||||
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 */
|
||||
|
@ -259,7 +259,7 @@ snd_hda_jack_detect_enable_callback(struct hda_codec *codec, hda_nid_t nid,
|
||||
if (!callback)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
callback->func = func;
|
||||
callback->tbl = jack;
|
||||
callback->nid = jack->nid;
|
||||
callback->next = jack->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 *);
|
||||
|
||||
struct hda_jack_callback {
|
||||
struct hda_jack_tbl *tbl;
|
||||
hda_nid_t nid;
|
||||
hda_jack_callback_fn func;
|
||||
unsigned int private_data; /* arbitrary data */
|
||||
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)
|
||||
{
|
||||
struct ca0132_spec *spec = codec->spec;
|
||||
struct hda_jack_tbl *tbl;
|
||||
|
||||
/* Delay enabling the HP amp, to let the mic-detection
|
||||
* state machine run.
|
||||
*/
|
||||
cancel_delayed_work_sync(&spec->unsol_hp_work);
|
||||
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)
|
||||
|
@ -448,7 +448,8 @@ static int hdmi_eld_ctl_get(struct snd_kcontrol *kcontrol,
|
||||
eld = &per_pin->sink_eld;
|
||||
|
||||
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);
|
||||
snd_BUG();
|
||||
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,
|
||||
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)
|
||||
|
@ -282,7 +282,7 @@ static void alc_update_knob_master(struct hda_codec *codec,
|
||||
uctl = kzalloc(sizeof(*uctl), GFP_KERNEL);
|
||||
if (!uctl)
|
||||
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);
|
||||
val &= HDA_AMP_VOLMASK;
|
||||
uctl->value.integer.value[0] = val;
|
||||
@ -1787,7 +1787,6 @@ enum {
|
||||
ALC882_FIXUP_NO_PRIMARY_HP,
|
||||
ALC887_FIXUP_ASUS_BASS,
|
||||
ALC887_FIXUP_BASS_CHMAP,
|
||||
ALC882_FIXUP_DISABLE_AAMIX,
|
||||
};
|
||||
|
||||
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,
|
||||
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[] = {
|
||||
[ALC882_FIXUP_ABIT_AW9D_MAX] = {
|
||||
@ -2188,10 +2185,6 @@ static const struct hda_fixup alc882_fixups[] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.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[] = {
|
||||
@ -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, 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, 0x9044, "Sony VAIO AiO", ALC882_FIXUP_NO_PRIMARY_HP),
|
||||
|
||||
/* All Apple entries are in codec SSIDs */
|
||||
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_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, 0xa182, "Gigabyte Z170X-UD3", ALC882_FIXUP_DISABLE_AAMIX),
|
||||
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(0x161f, 0x2054, "Medion laptop", ALC883_FIXUP_EAPD),
|
||||
|
@ -493,9 +493,9 @@ static void jack_update_power(struct hda_codec *codec,
|
||||
if (!spec->num_pwrs)
|
||||
return;
|
||||
|
||||
if (jack && jack->tbl->nid) {
|
||||
stac_toggle_power_map(codec, jack->tbl->nid,
|
||||
snd_hda_jack_detect(codec, jack->tbl->nid),
|
||||
if (jack && jack->nid) {
|
||||
stac_toggle_power_map(codec, jack->nid,
|
||||
snd_hda_jack_detect(codec, jack->nid),
|
||||
true);
|
||||
return;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user