Skip to content

Commit af143e7

Browse files
committed
Merge remote-tracking branch 'takashi/for-next' into sound/upstream-20260211
2 parents 9f16d96 + dd03dd6 commit af143e7

65 files changed

Lines changed: 1933 additions & 622 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

include/sound/seq_device.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ struct snd_seq_device {
4343
* Typically, call snd_device_free(dev->card, dev->driver_data)
4444
*/
4545
struct snd_seq_driver {
46+
int (*probe)(struct snd_seq_device *dev);
47+
void (*remove)(struct snd_seq_device *dev);
4648
struct device_driver driver;
4749
char *id;
4850
int argsize;

sound/core/compress_offload.c

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -514,12 +514,12 @@ static int
514514
snd_compr_get_codec_caps(struct snd_compr_stream *stream, unsigned long arg)
515515
{
516516
int retval;
517-
struct snd_compr_codec_caps *caps __free(kfree) = NULL;
518517

519518
if (!stream->ops->get_codec_caps)
520519
return -ENXIO;
521520

522-
caps = kzalloc(sizeof(*caps), GFP_KERNEL);
521+
struct snd_compr_codec_caps *caps __free(kfree) =
522+
kzalloc(sizeof(*caps), GFP_KERNEL);
523523
if (!caps)
524524
return -ENOMEM;
525525

@@ -647,15 +647,16 @@ snd_compress_check_input(struct snd_compr_stream *stream, struct snd_compr_param
647647
static int
648648
snd_compr_set_params(struct snd_compr_stream *stream, unsigned long arg)
649649
{
650-
struct snd_compr_params *params __free(kfree) = NULL;
651650
int retval;
652651

653652
if (stream->runtime->state == SNDRV_PCM_STATE_OPEN || stream->next_track) {
654653
/*
655654
* we should allow parameter change only when stream has been
656655
* opened not in other cases
657656
*/
658-
params = memdup_user((void __user *)arg, sizeof(*params));
657+
struct snd_compr_params *params __free(kfree) =
658+
memdup_user((void __user *)arg, sizeof(*params));
659+
659660
if (IS_ERR(params))
660661
return PTR_ERR(params);
661662

@@ -687,13 +688,13 @@ snd_compr_set_params(struct snd_compr_stream *stream, unsigned long arg)
687688
static int
688689
snd_compr_get_params(struct snd_compr_stream *stream, unsigned long arg)
689690
{
690-
struct snd_codec *params __free(kfree) = NULL;
691691
int retval;
692692

693693
if (!stream->ops->get_params)
694694
return -EBADFD;
695695

696-
params = kzalloc(sizeof(*params), GFP_KERNEL);
696+
struct snd_codec *params __free(kfree) =
697+
kzalloc(sizeof(*params), GFP_KERNEL);
697698
if (!params)
698699
return -ENOMEM;
699700
retval = stream->ops->get_params(stream, params);
@@ -1104,12 +1105,13 @@ static int snd_compr_task_new(struct snd_compr_stream *stream, struct snd_compr_
11041105

11051106
static int snd_compr_task_create(struct snd_compr_stream *stream, unsigned long arg)
11061107
{
1107-
struct snd_compr_task *task __free(kfree) = NULL;
11081108
int retval;
11091109

11101110
if (stream->runtime->state != SNDRV_PCM_STATE_SETUP)
11111111
return -EPERM;
1112-
task = memdup_user((void __user *)arg, sizeof(*task));
1112+
1113+
struct snd_compr_task *task __free(kfree) =
1114+
memdup_user((void __user *)arg, sizeof(*task));
11131115
if (IS_ERR(task))
11141116
return PTR_ERR(task);
11151117
retval = snd_compr_task_new(stream, task);
@@ -1165,12 +1167,13 @@ static int snd_compr_task_start(struct snd_compr_stream *stream, struct snd_comp
11651167

11661168
static int snd_compr_task_start_ioctl(struct snd_compr_stream *stream, unsigned long arg)
11671169
{
1168-
struct snd_compr_task *task __free(kfree) = NULL;
11691170
int retval;
11701171

11711172
if (stream->runtime->state != SNDRV_PCM_STATE_SETUP)
11721173
return -EPERM;
1173-
task = memdup_user((void __user *)arg, sizeof(*task));
1174+
1175+
struct snd_compr_task *task __free(kfree) =
1176+
memdup_user((void __user *)arg, sizeof(*task));
11741177
if (IS_ERR(task))
11751178
return PTR_ERR(task);
11761179
retval = snd_compr_task_start(stream, task);
@@ -1256,12 +1259,13 @@ static int snd_compr_task_status(struct snd_compr_stream *stream,
12561259

12571260
static int snd_compr_task_status_ioctl(struct snd_compr_stream *stream, unsigned long arg)
12581261
{
1259-
struct snd_compr_task_status *status __free(kfree) = NULL;
12601262
int retval;
12611263

12621264
if (stream->runtime->state != SNDRV_PCM_STATE_SETUP)
12631265
return -EPERM;
1264-
status = memdup_user((void __user *)arg, sizeof(*status));
1266+
1267+
struct snd_compr_task_status *status __free(kfree) =
1268+
memdup_user((void __user *)arg, sizeof(*status));
12651269
if (IS_ERR(status))
12661270
return PTR_ERR(status);
12671271
retval = snd_compr_task_status(stream, status);

sound/core/control.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -867,9 +867,9 @@ EXPORT_SYMBOL(snd_ctl_find_id);
867867
static int snd_ctl_card_info(struct snd_card *card, struct snd_ctl_file * ctl,
868868
unsigned int cmd, void __user *arg)
869869
{
870-
struct snd_ctl_card_info *info __free(kfree) = NULL;
870+
struct snd_ctl_card_info *info __free(kfree) =
871+
kzalloc(sizeof(*info), GFP_KERNEL);
871872

872-
info = kzalloc(sizeof(*info), GFP_KERNEL);
873873
if (! info)
874874
return -ENOMEM;
875875
scoped_guard(rwsem_read, &snd_ioctl_rwsem) {
@@ -1244,10 +1244,10 @@ static int snd_ctl_elem_read(struct snd_card *card,
12441244
static int snd_ctl_elem_read_user(struct snd_card *card,
12451245
struct snd_ctl_elem_value __user *_control)
12461246
{
1247-
struct snd_ctl_elem_value *control __free(kfree) = NULL;
12481247
int result;
1248+
struct snd_ctl_elem_value *control __free(kfree) =
1249+
memdup_user(_control, sizeof(*control));
12491250

1250-
control = memdup_user(_control, sizeof(*control));
12511251
if (IS_ERR(control))
12521252
return PTR_ERR(control);
12531253

@@ -1320,11 +1320,11 @@ static int snd_ctl_elem_write(struct snd_card *card, struct snd_ctl_file *file,
13201320
static int snd_ctl_elem_write_user(struct snd_ctl_file *file,
13211321
struct snd_ctl_elem_value __user *_control)
13221322
{
1323-
struct snd_ctl_elem_value *control __free(kfree) = NULL;
13241323
struct snd_card *card;
13251324
int result;
1325+
struct snd_ctl_elem_value *control __free(kfree) =
1326+
memdup_user(_control, sizeof(*control));
13261327

1327-
control = memdup_user(_control, sizeof(*control));
13281328
if (IS_ERR(control))
13291329
return PTR_ERR(control);
13301330

sound/core/control_compat.c

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,10 @@ static int snd_ctl_elem_info_compat(struct snd_ctl_file *ctl,
8080
struct snd_ctl_elem_info32 __user *data32)
8181
{
8282
struct snd_card *card = ctl->card;
83-
struct snd_ctl_elem_info *data __free(kfree) = NULL;
8483
int err;
84+
struct snd_ctl_elem_info *data __free(kfree) =
85+
kzalloc(sizeof(*data), GFP_KERNEL);
8586

86-
data = kzalloc(sizeof(*data), GFP_KERNEL);
8787
if (! data)
8888
return -ENOMEM;
8989

@@ -169,14 +169,15 @@ static int get_ctl_type(struct snd_card *card, struct snd_ctl_elem_id *id,
169169
int *countp)
170170
{
171171
struct snd_kcontrol *kctl;
172-
struct snd_ctl_elem_info *info __free(kfree) = NULL;
173172
int err;
174173

175174
guard(rwsem_read)(&card->controls_rwsem);
176175
kctl = snd_ctl_find_id(card, id);
177176
if (!kctl)
178177
return -ENOENT;
179-
info = kzalloc(sizeof(*info), GFP_KERNEL);
178+
179+
struct snd_ctl_elem_info *info __free(kfree) =
180+
kzalloc(sizeof(*info), GFP_KERNEL);
180181
if (info == NULL)
181182
return -ENOMEM;
182183
info->id = *id;
@@ -280,10 +281,10 @@ static int copy_ctl_value_to_user(void __user *userdata,
280281
static int __ctl_elem_read_user(struct snd_card *card,
281282
void __user *userdata, void __user *valuep)
282283
{
283-
struct snd_ctl_elem_value *data __free(kfree) = NULL;
284284
int err, type, count;
285+
struct snd_ctl_elem_value *data __free(kfree) =
286+
kzalloc(sizeof(*data), GFP_KERNEL);
285287

286-
data = kzalloc(sizeof(*data), GFP_KERNEL);
287288
if (data == NULL)
288289
return -ENOMEM;
289290

@@ -314,11 +315,11 @@ static int ctl_elem_read_user(struct snd_card *card,
314315
static int __ctl_elem_write_user(struct snd_ctl_file *file,
315316
void __user *userdata, void __user *valuep)
316317
{
317-
struct snd_ctl_elem_value *data __free(kfree) = NULL;
318318
struct snd_card *card = file->card;
319319
int err, type, count;
320+
struct snd_ctl_elem_value *data __free(kfree) =
321+
kzalloc(sizeof(*data), GFP_KERNEL);
320322

321-
data = kzalloc(sizeof(*data), GFP_KERNEL);
322323
if (data == NULL)
323324
return -ENOMEM;
324325

@@ -378,9 +379,9 @@ static int snd_ctl_elem_add_compat(struct snd_ctl_file *file,
378379
struct snd_ctl_elem_info32 __user *data32,
379380
int replace)
380381
{
381-
struct snd_ctl_elem_info *data __free(kfree) = NULL;
382+
struct snd_ctl_elem_info *data __free(kfree) =
383+
kzalloc(sizeof(*data), GFP_KERNEL);
382384

383-
data = kzalloc(sizeof(*data), GFP_KERNEL);
384385
if (! data)
385386
return -ENOMEM;
386387

sound/core/control_led.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -245,12 +245,12 @@ DEFINE_FREE(snd_card_unref, struct snd_card *, if (_T) snd_card_unref(_T))
245245
static int snd_ctl_led_set_id(int card_number, struct snd_ctl_elem_id *id,
246246
unsigned int group, bool set)
247247
{
248-
struct snd_card *card __free(snd_card_unref) = NULL;
249248
struct snd_kcontrol *kctl;
250249
struct snd_kcontrol_volatile *vd;
251250
unsigned int ioff, access, new_access;
251+
struct snd_card *card __free(snd_card_unref) =
252+
snd_card_ref(card_number);
252253

253-
card = snd_card_ref(card_number);
254254
if (!card)
255255
return -ENXIO;
256256
guard(rwsem_write)(&card->controls_rwsem);
@@ -302,13 +302,13 @@ static void snd_ctl_led_clean(struct snd_card *card)
302302

303303
static int snd_ctl_led_reset(int card_number, unsigned int group)
304304
{
305-
struct snd_card *card __free(snd_card_unref) = NULL;
306305
struct snd_ctl_led_ctl *lctl, *_lctl;
307306
struct snd_ctl_led *led;
308307
struct snd_kcontrol_volatile *vd;
309308
bool change = false;
309+
struct snd_card *card __free(snd_card_unref) =
310+
snd_card_ref(card_number);
310311

311-
card = snd_card_ref(card_number);
312312
if (!card)
313313
return -ENXIO;
314314

@@ -598,11 +598,11 @@ static ssize_t list_show(struct device *dev,
598598
struct device_attribute *attr, char *buf)
599599
{
600600
struct snd_ctl_led_card *led_card = container_of(dev, struct snd_ctl_led_card, dev);
601-
struct snd_card *card __free(snd_card_unref) = NULL;
602601
struct snd_ctl_led_ctl *lctl;
603602
size_t l = 0;
603+
struct snd_card *card __free(snd_card_unref) =
604+
snd_card_ref(led_card->number);
604605

605-
card = snd_card_ref(led_card->number);
606606
if (!card)
607607
return -ENXIO;
608608
guard(rwsem_read)(&card->controls_rwsem);

sound/core/ctljack.c

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#include <linux/kernel.h>
99
#include <linux/export.h>
10+
#include <linux/string.h>
1011
#include <sound/core.h>
1112
#include <sound/control.h>
1213

@@ -46,17 +47,20 @@ static int get_available_index(struct snd_card *card, const char *name)
4647
return sid.index;
4748
}
4849

49-
static void jack_kctl_name_gen(char *name, const char *src_name, int size)
50+
static void jack_kctl_name_gen(char *name, const char *src_name, size_t size)
5051
{
5152
size_t count = strlen(src_name);
52-
bool need_cat = true;
53+
const char *suf = " Jack";
54+
size_t suf_len = strlen(suf);
55+
bool append_suf = true;
5356

54-
/* remove redundant " Jack" from src_name */
55-
if (count >= 5)
56-
need_cat = strncmp(&src_name[count - 5], " Jack", 5) ? true : false;
57-
58-
snprintf(name, size, need_cat ? "%s Jack" : "%s", src_name);
57+
if (count >= suf_len)
58+
append_suf = strncmp(&src_name[count - suf_len], suf, suf_len) != 0;
5959

60+
if (append_suf)
61+
snprintf(name, size, "%s%s", src_name, suf);
62+
else
63+
strscpy(name, src_name, size);
6064
}
6165

6266
struct snd_kcontrol *

0 commit comments

Comments
 (0)