Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
17b89c80
Commit
17b89c80
authored
May 06, 2019
by
Takashi Iwai
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-linus' into for-next
Signed-off-by:
Takashi Iwai
<
tiwai@suse.de
>
parents
78ff2afc
3887c26c
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
103 additions
and
51 deletions
+103
-51
sound/core/info.c
sound/core/info.c
+10
-2
sound/core/init.c
sound/core/init.c
+9
-9
sound/pci/hda/patch_realtek.c
sound/pci/hda/patch_realtek.c
+19
-0
sound/usb/line6/driver.c
sound/usb/line6/driver.c
+35
-25
sound/usb/line6/podhd.c
sound/usb/line6/podhd.c
+12
-9
sound/usb/line6/toneport.c
sound/usb/line6/toneport.c
+18
-6
No files found.
sound/core/info.c
View file @
17b89c80
...
...
@@ -713,8 +713,11 @@ snd_info_create_entry(const char *name, struct snd_info_entry *parent,
INIT_LIST_HEAD
(
&
entry
->
list
);
entry
->
parent
=
parent
;
entry
->
module
=
module
;
if
(
parent
)
if
(
parent
)
{
mutex_lock
(
&
parent
->
access
);
list_add_tail
(
&
entry
->
list
,
&
parent
->
children
);
mutex_unlock
(
&
parent
->
access
);
}
return
entry
;
}
...
...
@@ -792,7 +795,12 @@ void snd_info_free_entry(struct snd_info_entry * entry)
list_for_each_entry_safe
(
p
,
n
,
&
entry
->
children
,
list
)
snd_info_free_entry
(
p
);
list_del
(
&
entry
->
list
);
p
=
entry
->
parent
;
if
(
p
)
{
mutex_lock
(
&
p
->
access
);
list_del
(
&
entry
->
list
);
mutex_unlock
(
&
p
->
access
);
}
kfree
(
entry
->
name
);
if
(
entry
->
private_free
)
entry
->
private_free
(
entry
);
...
...
sound/core/init.c
View file @
17b89c80
...
...
@@ -401,14 +401,7 @@ int snd_card_disconnect(struct snd_card *card)
card
->
shutdown
=
1
;
spin_unlock
(
&
card
->
files_lock
);
/* phase 1: disable fops (user space) operations for ALSA API */
mutex_lock
(
&
snd_card_mutex
);
snd_cards
[
card
->
number
]
=
NULL
;
clear_bit
(
card
->
number
,
snd_cards_lock
);
mutex_unlock
(
&
snd_card_mutex
);
/* phase 2: replace file->f_op with special dummy operations */
/* replace file->f_op with special dummy operations */
spin_lock
(
&
card
->
files_lock
);
list_for_each_entry
(
mfile
,
&
card
->
files_list
,
list
)
{
/* it's critical part, use endless loop */
...
...
@@ -424,7 +417,7 @@ int snd_card_disconnect(struct snd_card *card)
}
spin_unlock
(
&
card
->
files_lock
);
/*
phase 3:
notify all connected devices about disconnection */
/* notify all connected devices about disconnection */
/* at this point, they cannot respond to any calls except release() */
#if IS_ENABLED(CONFIG_SND_MIXER_OSS)
...
...
@@ -440,6 +433,13 @@ int snd_card_disconnect(struct snd_card *card)
device_del
(
&
card
->
card_dev
);
card
->
registered
=
false
;
}
/* disable fops (user space) operations for ALSA API */
mutex_lock
(
&
snd_card_mutex
);
snd_cards
[
card
->
number
]
=
NULL
;
clear_bit
(
card
->
number
,
snd_cards_lock
);
mutex_unlock
(
&
snd_card_mutex
);
#ifdef CONFIG_PM
wake_up
(
&
card
->
power_sleep
);
#endif
...
...
sound/pci/hda/patch_realtek.c
View file @
17b89c80
...
...
@@ -5449,6 +5449,8 @@ static void alc274_fixup_bind_dacs(struct hda_codec *codec,
return
;
spec
->
gen
.
preferred_dacs
=
preferred_pairs
;
spec
->
gen
.
auto_mute_via_amp
=
1
;
codec
->
power_save_node
=
0
;
}
/* The DAC of NID 0x3 will introduce click/pop noise on headphones, so invalidate it */
...
...
@@ -7265,6 +7267,12 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
{
0x12
,
0x90a60140
},
{
0x14
,
0x90170150
},
{
0x21
,
0x02211020
}),
SND_HDA_PIN_QUIRK
(
0x10ec0236
,
0x1028
,
"Dell"
,
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
{
0x21
,
0x02211020
}),
SND_HDA_PIN_QUIRK
(
0x10ec0236
,
0x1028
,
"Dell"
,
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
{
0x12
,
0x40000000
},
{
0x14
,
0x90170110
},
{
0x21
,
0x02211020
}),
SND_HDA_PIN_QUIRK
(
0x10ec0255
,
0x1028
,
"Dell"
,
ALC255_FIXUP_DELL2_MIC_NO_PRESENCE
,
{
0x14
,
0x90170110
},
{
0x21
,
0x02211020
}),
...
...
@@ -7375,6 +7383,10 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
{
0x21
,
0x0221101f
}),
SND_HDA_PIN_QUIRK
(
0x10ec0256
,
0x1028
,
"Dell"
,
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
ALC256_STANDARD_PINS
),
SND_HDA_PIN_QUIRK
(
0x10ec0256
,
0x1028
,
"Dell"
,
ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
,
{
0x14
,
0x90170110
},
{
0x1b
,
0x01011020
},
{
0x21
,
0x0221101f
}),
SND_HDA_PIN_QUIRK
(
0x10ec0256
,
0x1043
,
"ASUS"
,
ALC256_FIXUP_ASUS_MIC
,
{
0x14
,
0x90170110
},
{
0x1b
,
0x90a70130
},
...
...
@@ -7534,6 +7546,13 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
{
0x12
,
0x90a60130
},
{
0x17
,
0x90170110
},
{
0x21
,
0x04211020
}),
SND_HDA_PIN_QUIRK
(
0x10ec0295
,
0x1043
,
"ASUS"
,
ALC294_FIXUP_ASUS_SPK
,
{
0x12
,
0x90a60130
},
{
0x17
,
0x90170110
},
{
0x21
,
0x03211020
}),
SND_HDA_PIN_QUIRK
(
0x10ec0295
,
0x1028
,
"Dell"
,
ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
,
{
0x14
,
0x90170110
},
{
0x21
,
0x04211020
}),
SND_HDA_PIN_QUIRK
(
0x10ec0295
,
0x1028
,
"Dell"
,
ALC269_FIXUP_DELL1_MIC_NO_PRESENCE
,
ALC295_STANDARD_PINS
,
{
0x17
,
0x21014020
},
...
...
sound/usb/line6/driver.c
View file @
17b89c80
...
...
@@ -351,12 +351,16 @@ int line6_read_data(struct usb_line6 *line6, unsigned address, void *data,
{
struct
usb_device
*
usbdev
=
line6
->
usbdev
;
int
ret
;
unsigned
char
len
;
unsigned
char
*
len
;
unsigned
count
;
if
(
address
>
0xffff
||
datalen
>
0xff
)
return
-
EINVAL
;
len
=
kmalloc
(
sizeof
(
*
len
),
GFP_KERNEL
);
if
(
!
len
)
return
-
ENOMEM
;
/* query the serial number: */
ret
=
usb_control_msg
(
usbdev
,
usb_sndctrlpipe
(
usbdev
,
0
),
0x67
,
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
|
USB_DIR_OUT
,
...
...
@@ -365,7 +369,7 @@ int line6_read_data(struct usb_line6 *line6, unsigned address, void *data,
if
(
ret
<
0
)
{
dev_err
(
line6
->
ifcdev
,
"read request failed (error %d)
\n
"
,
ret
);
return
re
t
;
goto
exi
t
;
}
/* Wait for data length. We'll get 0xff until length arrives. */
...
...
@@ -375,28 +379,29 @@ int line6_read_data(struct usb_line6 *line6, unsigned address, void *data,
ret
=
usb_control_msg
(
usbdev
,
usb_rcvctrlpipe
(
usbdev
,
0
),
0x67
,
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
|
USB_DIR_IN
,
0x0012
,
0x0000
,
&
len
,
1
,
0x0012
,
0x0000
,
len
,
1
,
LINE6_TIMEOUT
*
HZ
);
if
(
ret
<
0
)
{
dev_err
(
line6
->
ifcdev
,
"receive length failed (error %d)
\n
"
,
ret
);
return
re
t
;
goto
exi
t
;
}
if
(
len
!=
0xff
)
if
(
*
len
!=
0xff
)
break
;
}
if
(
len
==
0xff
)
{
ret
=
-
EIO
;
if
(
*
len
==
0xff
)
{
dev_err
(
line6
->
ifcdev
,
"read failed after %d retries
\n
"
,
count
);
return
-
EIO
;
}
else
if
(
len
!=
datalen
)
{
goto
exit
;
}
else
if
(
*
len
!=
datalen
)
{
/* should be equal or something went wrong */
dev_err
(
line6
->
ifcdev
,
"length mismatch (expected %d, got %d)
\n
"
,
(
int
)
datalen
,
(
int
)
len
);
return
-
EIO
;
(
int
)
datalen
,
(
int
)
*
len
);
goto
exit
;
}
/* receive the result: */
...
...
@@ -405,12 +410,12 @@ int line6_read_data(struct usb_line6 *line6, unsigned address, void *data,
0x0013
,
0x0000
,
data
,
datalen
,
LINE6_TIMEOUT
*
HZ
);
if
(
ret
<
0
)
{
if
(
ret
<
0
)
dev_err
(
line6
->
ifcdev
,
"read failed (error %d)
\n
"
,
ret
);
return
ret
;
}
return
0
;
exit:
kfree
(
len
);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
line6_read_data
);
...
...
@@ -422,12 +427,16 @@ int line6_write_data(struct usb_line6 *line6, unsigned address, void *data,
{
struct
usb_device
*
usbdev
=
line6
->
usbdev
;
int
ret
;
unsigned
char
status
;
unsigned
char
*
status
;
int
count
;
if
(
address
>
0xffff
||
datalen
>
0xffff
)
return
-
EINVAL
;
status
=
kmalloc
(
sizeof
(
*
status
),
GFP_KERNEL
);
if
(
!
status
)
return
-
ENOMEM
;
ret
=
usb_control_msg
(
usbdev
,
usb_sndctrlpipe
(
usbdev
,
0
),
0x67
,
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
|
USB_DIR_OUT
,
0x0022
,
address
,
data
,
datalen
,
...
...
@@ -436,7 +445,7 @@ int line6_write_data(struct usb_line6 *line6, unsigned address, void *data,
if
(
ret
<
0
)
{
dev_err
(
line6
->
ifcdev
,
"write request failed (error %d)
\n
"
,
ret
);
return
re
t
;
goto
exi
t
;
}
for
(
count
=
0
;
count
<
LINE6_READ_WRITE_MAX_RETRIES
;
count
++
)
{
...
...
@@ -447,28 +456,29 @@ int line6_write_data(struct usb_line6 *line6, unsigned address, void *data,
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
|
USB_DIR_IN
,
0x0012
,
0x0000
,
&
status
,
1
,
LINE6_TIMEOUT
*
HZ
);
status
,
1
,
LINE6_TIMEOUT
*
HZ
);
if
(
ret
<
0
)
{
dev_err
(
line6
->
ifcdev
,
"receiving status failed (error %d)
\n
"
,
ret
);
return
re
t
;
goto
exi
t
;
}
if
(
status
!=
0xff
)
if
(
*
status
!=
0xff
)
break
;
}
if
(
status
==
0xff
)
{
if
(
*
status
==
0xff
)
{
dev_err
(
line6
->
ifcdev
,
"write failed after %d retries
\n
"
,
count
);
ret
urn
-
EIO
;
}
else
if
(
status
!=
0
)
{
ret
=
-
EIO
;
}
else
if
(
*
status
!=
0
)
{
dev_err
(
line6
->
ifcdev
,
"write failed (error %d)
\n
"
,
ret
);
ret
urn
-
EIO
;
ret
=
-
EIO
;
}
return
0
;
exit:
kfree
(
status
);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
line6_write_data
);
...
...
sound/usb/line6/podhd.c
View file @
17b89c80
...
...
@@ -225,28 +225,32 @@ static void podhd_startup_start_workqueue(struct timer_list *t)
static
int
podhd_dev_start
(
struct
usb_line6_podhd
*
pod
)
{
int
ret
;
u8
init_bytes
[
8
]
;
u8
*
init_bytes
;
int
i
;
struct
usb_device
*
usbdev
=
pod
->
line6
.
usbdev
;
init_bytes
=
kmalloc
(
8
,
GFP_KERNEL
);
if
(
!
init_bytes
)
return
-
ENOMEM
;
ret
=
usb_control_msg
(
usbdev
,
usb_sndctrlpipe
(
usbdev
,
0
),
0x67
,
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
|
USB_DIR_OUT
,
0x11
,
0
,
NULL
,
0
,
LINE6_TIMEOUT
*
HZ
);
if
(
ret
<
0
)
{
dev_err
(
pod
->
line6
.
ifcdev
,
"read request failed (error %d)
\n
"
,
ret
);
return
re
t
;
goto
exi
t
;
}
/* NOTE: looks like some kind of ping message */
ret
=
usb_control_msg
(
usbdev
,
usb_rcvctrlpipe
(
usbdev
,
0
),
0x67
,
USB_TYPE_VENDOR
|
USB_RECIP_DEVICE
|
USB_DIR_IN
,
0x11
,
0x0
,
&
init_bytes
,
3
,
LINE6_TIMEOUT
*
HZ
);
init_bytes
,
3
,
LINE6_TIMEOUT
*
HZ
);
if
(
ret
<
0
)
{
dev_err
(
pod
->
line6
.
ifcdev
,
"receive length failed (error %d)
\n
"
,
ret
);
return
re
t
;
goto
exi
t
;
}
pod
->
firmware_version
=
...
...
@@ -255,7 +259,7 @@ static int podhd_dev_start(struct usb_line6_podhd *pod)
for
(
i
=
0
;
i
<=
16
;
i
++
)
{
ret
=
line6_read_data
(
&
pod
->
line6
,
0xf000
+
0x08
*
i
,
init_bytes
,
8
);
if
(
ret
<
0
)
return
re
t
;
goto
exi
t
;
}
ret
=
usb_control_msg
(
usbdev
,
usb_sndctrlpipe
(
usbdev
,
0
),
...
...
@@ -263,10 +267,9 @@ static int podhd_dev_start(struct usb_line6_podhd *pod)
USB_TYPE_STANDARD
|
USB_RECIP_DEVICE
|
USB_DIR_OUT
,
1
,
0
,
NULL
,
0
,
LINE6_TIMEOUT
*
HZ
);
if
(
ret
<
0
)
return
ret
;
return
0
;
exit:
kfree
(
init_bytes
);
return
ret
;
}
static
void
podhd_startup_workqueue
(
struct
work_struct
*
work
)
...
...
sound/usb/line6/toneport.c
View file @
17b89c80
...
...
@@ -365,16 +365,21 @@ static bool toneport_has_source_select(struct usb_line6_toneport *toneport)
/*
Setup Toneport device.
*/
static
void
toneport_setup
(
struct
usb_line6_toneport
*
toneport
)
static
int
toneport_setup
(
struct
usb_line6_toneport
*
toneport
)
{
u32
ticks
;
u32
*
ticks
;
struct
usb_line6
*
line6
=
&
toneport
->
line6
;
struct
usb_device
*
usbdev
=
line6
->
usbdev
;
ticks
=
kmalloc
(
sizeof
(
*
ticks
),
GFP_KERNEL
);
if
(
!
ticks
)
return
-
ENOMEM
;
/* sync time on device with host: */
/* note: 32-bit timestamps overflow in year 2106 */
ticks
=
(
u32
)
ktime_get_real_seconds
();
line6_write_data
(
line6
,
0x80c6
,
&
ticks
,
4
);
*
ticks
=
(
u32
)
ktime_get_real_seconds
();
line6_write_data
(
line6
,
0x80c6
,
ticks
,
4
);
kfree
(
ticks
);
/* enable device: */
toneport_send_cmd
(
usbdev
,
0x0301
,
0x0000
);
...
...
@@ -389,6 +394,7 @@ static void toneport_setup(struct usb_line6_toneport *toneport)
toneport_update_led
(
toneport
);
mod_timer
(
&
toneport
->
timer
,
jiffies
+
TONEPORT_PCM_DELAY
*
HZ
);
return
0
;
}
/*
...
...
@@ -451,7 +457,9 @@ static int toneport_init(struct usb_line6 *line6,
return
err
;
}
toneport_setup
(
toneport
);
err
=
toneport_setup
(
toneport
);
if
(
err
)
return
err
;
/* register audio system: */
return
snd_card_register
(
line6
->
card
);
...
...
@@ -463,7 +471,11 @@ static int toneport_init(struct usb_line6 *line6,
*/
static
int
toneport_reset_resume
(
struct
usb_interface
*
interface
)
{
toneport_setup
(
usb_get_intfdata
(
interface
));
int
err
;
err
=
toneport_setup
(
usb_get_intfdata
(
interface
));
if
(
err
)
return
err
;
return
line6_resume
(
interface
);
}
#endif
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment