mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
Merge branch 'for-linus' into for-next
Back-merge of 4.15-rc development branch for further development of USB-audio stuff. Signed-off-by: Takashi Iwai <[email protected]>
This commit is contained in:
commit
50947fb04f
7 changed files with 83 additions and 18 deletions
|
|
@ -204,6 +204,10 @@ static int snd_usb_copy_string_desc(struct mixer_build *state,
|
|||
int index, char *buf, int maxlen)
|
||||
{
|
||||
int len = usb_string(state->chip->dev, index, buf, maxlen - 1);
|
||||
|
||||
if (len < 0)
|
||||
return 0;
|
||||
|
||||
buf[len] = 0;
|
||||
return len;
|
||||
}
|
||||
|
|
@ -2169,19 +2173,25 @@ static int parse_audio_selector_unit(struct mixer_build *state, int unitid,
|
|||
kctl->private_value = (unsigned long)namelist;
|
||||
kctl->private_free = usb_mixer_selector_elem_free;
|
||||
|
||||
nameid = uac_selector_unit_iSelector(desc);
|
||||
/* check the static mapping table at first */
|
||||
len = check_mapped_name(map, kctl->id.name, sizeof(kctl->id.name));
|
||||
if (len)
|
||||
;
|
||||
else if (nameid)
|
||||
snd_usb_copy_string_desc(state, nameid, kctl->id.name,
|
||||
sizeof(kctl->id.name));
|
||||
else {
|
||||
len = get_term_name(state, &state->oterm,
|
||||
if (!len) {
|
||||
/* no mapping ? */
|
||||
/* if iSelector is given, use it */
|
||||
nameid = uac_selector_unit_iSelector(desc);
|
||||
if (nameid)
|
||||
len = snd_usb_copy_string_desc(state, nameid,
|
||||
kctl->id.name,
|
||||
sizeof(kctl->id.name));
|
||||
/* ... or pick up the terminal name at next */
|
||||
if (!len)
|
||||
len = get_term_name(state, &state->oterm,
|
||||
kctl->id.name, sizeof(kctl->id.name), 0);
|
||||
/* ... or use the fixed string "USB" as the last resort */
|
||||
if (!len)
|
||||
strlcpy(kctl->id.name, "USB", sizeof(kctl->id.name));
|
||||
|
||||
/* and add the proper suffix */
|
||||
if (desc->bDescriptorSubtype == UAC2_CLOCK_SELECTOR)
|
||||
append_ctl_name(kctl, " Clock Source");
|
||||
else if ((state->oterm.type & 0xff00) == 0x0100)
|
||||
|
|
|
|||
|
|
@ -1166,10 +1166,11 @@ static bool is_marantz_denon_dac(unsigned int id)
|
|||
/* TEAC UD-501/UD-503/NT-503 USB DACs need a vendor cmd to switch
|
||||
* between PCM/DOP and native DSD mode
|
||||
*/
|
||||
static bool is_teac_50X_dac(unsigned int id)
|
||||
static bool is_teac_dsd_dac(unsigned int id)
|
||||
{
|
||||
switch (id) {
|
||||
case USB_ID(0x0644, 0x8043): /* TEAC UD-501/UD-503/NT-503 */
|
||||
case USB_ID(0x0644, 0x8044): /* Esoteric D-05X */
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
@ -1202,7 +1203,7 @@ int snd_usb_select_mode_quirk(struct snd_usb_substream *subs,
|
|||
break;
|
||||
}
|
||||
mdelay(20);
|
||||
} else if (is_teac_50X_dac(subs->stream->chip->usb_id)) {
|
||||
} else if (is_teac_dsd_dac(subs->stream->chip->usb_id)) {
|
||||
/* Vendor mode switch cmd is required. */
|
||||
switch (fmt->altsetting) {
|
||||
case 3: /* DSD mode (DSD_U32) requested */
|
||||
|
|
@ -1392,7 +1393,7 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
|
|||
}
|
||||
|
||||
/* TEAC devices with USB DAC functionality */
|
||||
if (is_teac_50X_dac(chip->usb_id)) {
|
||||
if (is_teac_dsd_dac(chip->usb_id)) {
|
||||
if (fp->altsetting == 3)
|
||||
return SNDRV_PCM_FMTBIT_DSD_U32_BE;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue