Commit e6826ef1 authored by Takashi Iwai's avatar Takashi Iwai

Merge branch 'for-linus' into for-next

parents 4945f1fd be3bb823
...@@ -1207,6 +1207,11 @@ static int snd_ctl_elem_add(struct snd_ctl_file *file, ...@@ -1207,6 +1207,11 @@ static int snd_ctl_elem_add(struct snd_ctl_file *file,
struct user_element *ue; struct user_element *ue;
int err; int err;
if (!*info->id.name)
return -EINVAL;
if (strnlen(info->id.name, sizeof(info->id.name)) >= sizeof(info->id.name))
return -EINVAL;
/* Delete a control to replace them if needed. */ /* Delete a control to replace them if needed. */
if (replace) { if (replace) {
info->id.numid = 0; info->id.numid = 0;
......
...@@ -298,24 +298,24 @@ ...@@ -298,24 +298,24 @@
*/ */
#define RX_ISOCHRONOUS 0x008 #define RX_ISOCHRONOUS 0x008
/*
* Index of first quadlet to be interpreted; read/write. If > 0, that many
* quadlets at the beginning of each data block will be ignored, and all the
* audio and MIDI quadlets will follow.
*/
#define RX_SEQ_START 0x00c
/* /*
* The number of audio channels; read-only. There will be one quadlet per * The number of audio channels; read-only. There will be one quadlet per
* channel. * channel.
*/ */
#define RX_NUMBER_AUDIO 0x00c #define RX_NUMBER_AUDIO 0x010
/* /*
* The number of MIDI ports, 0-8; read-only. If > 0, there will be one * The number of MIDI ports, 0-8; read-only. If > 0, there will be one
* additional quadlet in each data block, following the audio quadlets. * additional quadlet in each data block, following the audio quadlets.
*/ */
#define RX_NUMBER_MIDI 0x010 #define RX_NUMBER_MIDI 0x014
/*
* Index of first quadlet to be interpreted; read/write. If > 0, that many
* quadlets at the beginning of each data block will be ignored, and all the
* audio and MIDI quadlets will follow.
*/
#define RX_SEQ_START 0x014
/* /*
* Names of all audio channels; read-only. Quadlets are byte-swapped. Names * Names of all audio channels; read-only. Quadlets are byte-swapped. Names
......
...@@ -99,9 +99,9 @@ static void dice_proc_read(struct snd_info_entry *entry, ...@@ -99,9 +99,9 @@ static void dice_proc_read(struct snd_info_entry *entry,
} tx; } tx;
struct { struct {
u32 iso; u32 iso;
u32 seq_start;
u32 number_audio; u32 number_audio;
u32 number_midi; u32 number_midi;
u32 seq_start;
char names[RX_NAMES_SIZE]; char names[RX_NAMES_SIZE];
u32 ac3_caps; u32 ac3_caps;
u32 ac3_enable; u32 ac3_enable;
...@@ -204,10 +204,10 @@ static void dice_proc_read(struct snd_info_entry *entry, ...@@ -204,10 +204,10 @@ static void dice_proc_read(struct snd_info_entry *entry,
break; break;
snd_iprintf(buffer, "rx %u:\n", stream); snd_iprintf(buffer, "rx %u:\n", stream);
snd_iprintf(buffer, " iso channel: %d\n", (int)buf.rx.iso); snd_iprintf(buffer, " iso channel: %d\n", (int)buf.rx.iso);
snd_iprintf(buffer, " sequence start: %u\n", buf.rx.seq_start);
snd_iprintf(buffer, " audio channels: %u\n", snd_iprintf(buffer, " audio channels: %u\n",
buf.rx.number_audio); buf.rx.number_audio);
snd_iprintf(buffer, " midi ports: %u\n", buf.rx.number_midi); snd_iprintf(buffer, " midi ports: %u\n", buf.rx.number_midi);
snd_iprintf(buffer, " sequence start: %u\n", buf.rx.seq_start);
if (quadlets >= 68) { if (quadlets >= 68) {
dice_proc_fixup_string(buf.rx.names, RX_NAMES_SIZE); dice_proc_fixup_string(buf.rx.names, RX_NAMES_SIZE);
snd_iprintf(buffer, " names: %s\n", buf.rx.names); snd_iprintf(buffer, " names: %s\n", buf.rx.names);
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
int fw_iso_resources_init(struct fw_iso_resources *r, struct fw_unit *unit) int fw_iso_resources_init(struct fw_iso_resources *r, struct fw_unit *unit)
{ {
r->channels_mask = ~0uLL; r->channels_mask = ~0uLL;
r->unit = fw_unit_get(unit); r->unit = unit;
mutex_init(&r->mutex); mutex_init(&r->mutex);
r->allocated = false; r->allocated = false;
...@@ -42,7 +42,6 @@ void fw_iso_resources_destroy(struct fw_iso_resources *r) ...@@ -42,7 +42,6 @@ void fw_iso_resources_destroy(struct fw_iso_resources *r)
{ {
WARN_ON(r->allocated); WARN_ON(r->allocated);
mutex_destroy(&r->mutex); mutex_destroy(&r->mutex);
fw_unit_put(r->unit);
} }
EXPORT_SYMBOL(fw_iso_resources_destroy); EXPORT_SYMBOL(fw_iso_resources_destroy);
......
...@@ -223,6 +223,7 @@ enum { ...@@ -223,6 +223,7 @@ enum {
CXT_PINCFG_LENOVO_TP410, CXT_PINCFG_LENOVO_TP410,
CXT_PINCFG_LEMOTE_A1004, CXT_PINCFG_LEMOTE_A1004,
CXT_PINCFG_LEMOTE_A1205, CXT_PINCFG_LEMOTE_A1205,
CXT_PINCFG_COMPAQ_CQ60,
CXT_FIXUP_STEREO_DMIC, CXT_FIXUP_STEREO_DMIC,
CXT_FIXUP_INC_MIC_BOOST, CXT_FIXUP_INC_MIC_BOOST,
CXT_FIXUP_HEADPHONE_MIC_PIN, CXT_FIXUP_HEADPHONE_MIC_PIN,
...@@ -660,6 +661,15 @@ static const struct hda_fixup cxt_fixups[] = { ...@@ -660,6 +661,15 @@ static const struct hda_fixup cxt_fixups[] = {
.type = HDA_FIXUP_PINS, .type = HDA_FIXUP_PINS,
.v.pins = cxt_pincfg_lemote, .v.pins = cxt_pincfg_lemote,
}, },
[CXT_PINCFG_COMPAQ_CQ60] = {
.type = HDA_FIXUP_PINS,
.v.pins = (const struct hda_pintbl[]) {
/* 0x17 was falsely set up as a mic, it should 0x1d */
{ 0x17, 0x400001f0 },
{ 0x1d, 0x97a70120 },
{ }
}
},
[CXT_FIXUP_STEREO_DMIC] = { [CXT_FIXUP_STEREO_DMIC] = {
.type = HDA_FIXUP_FUNC, .type = HDA_FIXUP_FUNC,
.v.func = cxt_fixup_stereo_dmic, .v.func = cxt_fixup_stereo_dmic,
...@@ -769,6 +779,7 @@ static const struct hda_model_fixup cxt5047_fixup_models[] = { ...@@ -769,6 +779,7 @@ static const struct hda_model_fixup cxt5047_fixup_models[] = {
}; };
static const struct snd_pci_quirk cxt5051_fixups[] = { static const struct snd_pci_quirk cxt5051_fixups[] = {
SND_PCI_QUIRK(0x103c, 0x360b, "Compaq CQ60", CXT_PINCFG_COMPAQ_CQ60),
SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo X200", CXT_PINCFG_LENOVO_X200), SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo X200", CXT_PINCFG_LENOVO_X200),
{} {}
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment