Merge master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa
* master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa: [ALSA] Don't reject O_RDWR at opening PCM OSS with read/write-only device [ALSA] snd-emu10k1: Implement support for Audigy 2 ZS [SB0353] [ALSA] add MAINTAINERS entry for snd-aoa [ALSA] aoa: platform function gpio: ignore errors from functions that don't exist [ALSA] make snd-powermac load even when it can't bind the device [ALSA] aoa: fix toonie codec [ALSA] aoa: feature gpio layer: fix IRQ access [ALSA] Conversions from kmalloc+memset to k(z|c)alloc [ALSA] snd-emu10k1: Fixes ALSA bug#2190
This commit is contained in:
commit
a05ef8bfdc
18 changed files with 62 additions and 47 deletions
|
@ -298,6 +298,13 @@ L: info-linux@geode.amd.com
|
||||||
W: http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html
|
W: http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
||||||
|
AOA (Apple Onboard Audio) ALSA DRIVER
|
||||||
|
P: Johannes Berg
|
||||||
|
M: johannes@sipsolutions.net
|
||||||
|
L: linuxppc-dev@ozlabs.org
|
||||||
|
L: alsa-devel@alsa-project.org
|
||||||
|
S: Maintained
|
||||||
|
|
||||||
APM DRIVER
|
APM DRIVER
|
||||||
P: Stephen Rothwell
|
P: Stephen Rothwell
|
||||||
M: sfr@canb.auug.org.au
|
M: sfr@canb.auug.org.au
|
||||||
|
|
|
@ -51,6 +51,13 @@ static struct transfer_info toonie_transfers[] = {
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int toonie_usable(struct codec_info_item *cii,
|
||||||
|
struct transfer_info *ti,
|
||||||
|
struct transfer_info *out)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
static int toonie_suspend(struct codec_info_item *cii, pm_message_t state)
|
static int toonie_suspend(struct codec_info_item *cii, pm_message_t state)
|
||||||
{
|
{
|
||||||
|
@ -69,6 +76,7 @@ static struct codec_info toonie_codec_info = {
|
||||||
.sysclock_factor = 256,
|
.sysclock_factor = 256,
|
||||||
.bus_factor = 64,
|
.bus_factor = 64,
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
|
.usable = toonie_usable,
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
.suspend = toonie_suspend,
|
.suspend = toonie_suspend,
|
||||||
.resume = toonie_resume,
|
.resume = toonie_resume,
|
||||||
|
@ -79,19 +87,20 @@ static int toonie_init_codec(struct aoa_codec *codec)
|
||||||
{
|
{
|
||||||
struct toonie *toonie = codec_to_toonie(codec);
|
struct toonie *toonie = codec_to_toonie(codec);
|
||||||
|
|
||||||
|
/* nothing connected? what a joke! */
|
||||||
|
if (toonie->codec.connected != 1)
|
||||||
|
return -ENOTCONN;
|
||||||
|
|
||||||
if (aoa_snd_device_new(SNDRV_DEV_LOWLEVEL, toonie, &ops)) {
|
if (aoa_snd_device_new(SNDRV_DEV_LOWLEVEL, toonie, &ops)) {
|
||||||
printk(KERN_ERR PFX "failed to create toonie snd device!\n");
|
printk(KERN_ERR PFX "failed to create toonie snd device!\n");
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* nothing connected? what a joke! */
|
|
||||||
if (toonie->codec.connected != 1)
|
|
||||||
return -ENOTCONN;
|
|
||||||
|
|
||||||
if (toonie->codec.soundbus_dev->attach_codec(toonie->codec.soundbus_dev,
|
if (toonie->codec.soundbus_dev->attach_codec(toonie->codec.soundbus_dev,
|
||||||
aoa_get_card(),
|
aoa_get_card(),
|
||||||
&toonie_codec_info, toonie)) {
|
&toonie_codec_info, toonie)) {
|
||||||
printk(KERN_ERR PFX "error creating toonie pcm\n");
|
printk(KERN_ERR PFX "error creating toonie pcm\n");
|
||||||
|
snd_device_free(aoa_get_card(), toonie);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -112,7 +112,10 @@ static struct device_node *get_gpio(char *name,
|
||||||
|
|
||||||
static void get_irq(struct device_node * np, int *irqptr)
|
static void get_irq(struct device_node * np, int *irqptr)
|
||||||
{
|
{
|
||||||
|
if (np)
|
||||||
*irqptr = irq_of_parse_and_map(np, 0);
|
*irqptr = irq_of_parse_and_map(np, 0);
|
||||||
|
else
|
||||||
|
*irqptr = NO_IRQ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 0x4 is outenable, 0x1 is out, thus 4 or 5 */
|
/* 0x4 is outenable, 0x1 is out, thus 4 or 5 */
|
||||||
|
@ -322,7 +325,7 @@ static int ftr_set_notify(struct gpio_runtime *rt,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (irq == -1)
|
if (irq == NO_IRQ)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
mutex_lock(¬if->mutex);
|
mutex_lock(¬if->mutex);
|
||||||
|
|
|
@ -18,7 +18,7 @@ static void pmf_gpio_set_##name(struct gpio_runtime *rt, int on)\
|
||||||
\
|
\
|
||||||
if (unlikely(!rt)) return; \
|
if (unlikely(!rt)) return; \
|
||||||
rc = pmf_call_function(rt->node, #name "-mute", &args); \
|
rc = pmf_call_function(rt->node, #name "-mute", &args); \
|
||||||
if (rc) \
|
if (rc && rc != -ENODEV) \
|
||||||
printk(KERN_WARNING "pmf_gpio_set_" #name \
|
printk(KERN_WARNING "pmf_gpio_set_" #name \
|
||||||
" failed, rc: %d\n", rc); \
|
" failed, rc: %d\n", rc); \
|
||||||
rt->implementation_private &= ~(1<<bit); \
|
rt->implementation_private &= ~(1<<bit); \
|
||||||
|
|
|
@ -988,13 +988,12 @@ static int snd_mixer_oss_build_input(struct snd_mixer_oss *mixer, struct snd_mix
|
||||||
if (ptr->index == 0 && (kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0)) != NULL) {
|
if (ptr->index == 0 && (kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0)) != NULL) {
|
||||||
struct snd_ctl_elem_info *uinfo;
|
struct snd_ctl_elem_info *uinfo;
|
||||||
|
|
||||||
uinfo = kmalloc(sizeof(*uinfo), GFP_KERNEL);
|
uinfo = kzalloc(sizeof(*uinfo), GFP_KERNEL);
|
||||||
if (! uinfo) {
|
if (! uinfo) {
|
||||||
up_read(&mixer->card->controls_rwsem);
|
up_read(&mixer->card->controls_rwsem);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(uinfo, 0, sizeof(*uinfo));
|
|
||||||
if (kctl->info(kctl, uinfo)) {
|
if (kctl->info(kctl, uinfo)) {
|
||||||
up_read(&mixer->card->controls_rwsem);
|
up_read(&mixer->card->controls_rwsem);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -2228,6 +2228,8 @@ static int snd_pcm_oss_open_file(struct file *file,
|
||||||
for (idx = 0; idx < 2; idx++) {
|
for (idx = 0; idx < 2; idx++) {
|
||||||
if (setup[idx].disable)
|
if (setup[idx].disable)
|
||||||
continue;
|
continue;
|
||||||
|
if (! pcm->streams[idx].substream_count)
|
||||||
|
continue; /* no matching substream */
|
||||||
if (idx == SNDRV_PCM_STREAM_PLAYBACK) {
|
if (idx == SNDRV_PCM_STREAM_PLAYBACK) {
|
||||||
if (! (f_mode & FMODE_WRITE))
|
if (! (f_mode & FMODE_WRITE))
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -372,10 +372,9 @@ static struct ops_list * create_driver(char *id)
|
||||||
{
|
{
|
||||||
struct ops_list *ops;
|
struct ops_list *ops;
|
||||||
|
|
||||||
ops = kmalloc(sizeof(*ops), GFP_KERNEL);
|
ops = kzalloc(sizeof(*ops), GFP_KERNEL);
|
||||||
if (ops == NULL)
|
if (ops == NULL)
|
||||||
return ops;
|
return ops;
|
||||||
memset(ops, 0, sizeof(*ops));
|
|
||||||
|
|
||||||
/* set up driver entry */
|
/* set up driver entry */
|
||||||
strlcpy(ops->id, id, sizeof(ops->id));
|
strlcpy(ops->id, id, sizeof(ops->id));
|
||||||
|
|
|
@ -68,21 +68,18 @@ void *snd_malloc_sgbuf_pages(struct device *device,
|
||||||
|
|
||||||
dmab->area = NULL;
|
dmab->area = NULL;
|
||||||
dmab->addr = 0;
|
dmab->addr = 0;
|
||||||
dmab->private_data = sgbuf = kmalloc(sizeof(*sgbuf), GFP_KERNEL);
|
dmab->private_data = sgbuf = kzalloc(sizeof(*sgbuf), GFP_KERNEL);
|
||||||
if (! sgbuf)
|
if (! sgbuf)
|
||||||
return NULL;
|
return NULL;
|
||||||
memset(sgbuf, 0, sizeof(*sgbuf));
|
|
||||||
sgbuf->dev = device;
|
sgbuf->dev = device;
|
||||||
pages = snd_sgbuf_aligned_pages(size);
|
pages = snd_sgbuf_aligned_pages(size);
|
||||||
sgbuf->tblsize = sgbuf_align_table(pages);
|
sgbuf->tblsize = sgbuf_align_table(pages);
|
||||||
sgbuf->table = kmalloc(sizeof(*sgbuf->table) * sgbuf->tblsize, GFP_KERNEL);
|
sgbuf->table = kcalloc(sgbuf->tblsize, sizeof(*sgbuf->table), GFP_KERNEL);
|
||||||
if (! sgbuf->table)
|
if (! sgbuf->table)
|
||||||
goto _failed;
|
goto _failed;
|
||||||
memset(sgbuf->table, 0, sizeof(*sgbuf->table) * sgbuf->tblsize);
|
sgbuf->page_table = kcalloc(sgbuf->tblsize, sizeof(*sgbuf->page_table), GFP_KERNEL);
|
||||||
sgbuf->page_table = kmalloc(sizeof(*sgbuf->page_table) * sgbuf->tblsize, GFP_KERNEL);
|
|
||||||
if (! sgbuf->page_table)
|
if (! sgbuf->page_table)
|
||||||
goto _failed;
|
goto _failed;
|
||||||
memset(sgbuf->page_table, 0, sizeof(*sgbuf->page_table) * sgbuf->tblsize);
|
|
||||||
|
|
||||||
/* allocate each page */
|
/* allocate each page */
|
||||||
for (i = 0; i < pages; i++) {
|
for (i = 0; i < pages; i++) {
|
||||||
|
|
|
@ -1252,18 +1252,15 @@ static int vx_init_audio_io(struct vx_core *chip)
|
||||||
chip->audio_info = rmh.Stat[1];
|
chip->audio_info = rmh.Stat[1];
|
||||||
|
|
||||||
/* allocate pipes */
|
/* allocate pipes */
|
||||||
chip->playback_pipes = kmalloc(sizeof(struct vx_pipe *) * chip->audio_outs, GFP_KERNEL);
|
chip->playback_pipes = kcalloc(chip->audio_outs, sizeof(struct vx_pipe *), GFP_KERNEL);
|
||||||
if (!chip->playback_pipes)
|
if (!chip->playback_pipes)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
chip->capture_pipes = kmalloc(sizeof(struct vx_pipe *) * chip->audio_ins, GFP_KERNEL);
|
chip->capture_pipes = kcalloc(chip->audio_ins, sizeof(struct vx_pipe *), GFP_KERNEL);
|
||||||
if (!chip->capture_pipes) {
|
if (!chip->capture_pipes) {
|
||||||
kfree(chip->playback_pipes);
|
kfree(chip->playback_pipes);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(chip->playback_pipes, 0, sizeof(struct vx_pipe *) * chip->audio_outs);
|
|
||||||
memset(chip->capture_pipes, 0, sizeof(struct vx_pipe *) * chip->audio_ins);
|
|
||||||
|
|
||||||
preferred = chip->ibl.size;
|
preferred = chip->ibl.size;
|
||||||
chip->ibl.size = 0;
|
chip->ibl.size = 0;
|
||||||
vx_set_ibl(chip, &chip->ibl); /* query the info */
|
vx_set_ibl(chip, &chip->ibl); /* query the info */
|
||||||
|
|
|
@ -236,9 +236,9 @@ static int pcm_open(struct snd_pcm_substream *substream,
|
||||||
chip = snd_pcm_substream_chip(substream);
|
chip = snd_pcm_substream_chip(substream);
|
||||||
runtime = substream->runtime;
|
runtime = substream->runtime;
|
||||||
|
|
||||||
if (!(pipe = kmalloc(sizeof(struct audiopipe), GFP_KERNEL)))
|
pipe = kzalloc(sizeof(struct audiopipe), GFP_KERNEL);
|
||||||
|
if (!pipe)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
memset(pipe, 0, sizeof(struct audiopipe));
|
|
||||||
pipe->index = -1; /* Not configured yet */
|
pipe->index = -1; /* Not configured yet */
|
||||||
|
|
||||||
/* Set up hw capabilities and contraints */
|
/* Set up hw capabilities and contraints */
|
||||||
|
|
|
@ -936,6 +936,17 @@ static struct snd_emu_chip_details emu_chip_details[] = {
|
||||||
.ca0151_chip = 1,
|
.ca0151_chip = 1,
|
||||||
.spk71 = 1,
|
.spk71 = 1,
|
||||||
.spdif_bug = 1} ,
|
.spdif_bug = 1} ,
|
||||||
|
/* Dell OEM/Creative Labs Audigy 2 ZS */
|
||||||
|
/* See ALSA bug#1365 */
|
||||||
|
{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10031102,
|
||||||
|
.driver = "Audigy2", .name = "Audigy 2 ZS [SB0353]",
|
||||||
|
.id = "Audigy2",
|
||||||
|
.emu10k2_chip = 1,
|
||||||
|
.ca0102_chip = 1,
|
||||||
|
.ca0151_chip = 1,
|
||||||
|
.spk71 = 1,
|
||||||
|
.spdif_bug = 1,
|
||||||
|
.ac97_chip = 1} ,
|
||||||
{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10021102,
|
{.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10021102,
|
||||||
.driver = "Audigy2", .name = "Audigy 2 Platinum [SB0240P]",
|
.driver = "Audigy2", .name = "Audigy 2 Platinum [SB0240P]",
|
||||||
.id = "Audigy2",
|
.id = "Audigy2",
|
||||||
|
|
|
@ -37,9 +37,13 @@ irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
||||||
int handled = 0;
|
int handled = 0;
|
||||||
|
|
||||||
while ((status = inl(emu->port + IPR)) != 0) {
|
while ((status = inl(emu->port + IPR)) != 0) {
|
||||||
//printk("emu10k1 irq - status = 0x%x\n", status);
|
//snd_printk(KERN_INFO "emu10k1 irq - status = 0x%x\n", status);
|
||||||
orig_status = status;
|
orig_status = status;
|
||||||
handled = 1;
|
handled = 1;
|
||||||
|
if ((status & 0xffffffff) == 0xffffffff) {
|
||||||
|
snd_printk(KERN_INFO "snd-emu10k1: Suspected sound card removal\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
if (status & IPR_PCIERROR) {
|
if (status & IPR_PCIERROR) {
|
||||||
snd_printk(KERN_ERR "interrupt: PCI error\n");
|
snd_printk(KERN_ERR "interrupt: PCI error\n");
|
||||||
snd_emu10k1_intr_disable(emu, INTE_PCIERRORENABLE);
|
snd_emu10k1_intr_disable(emu, INTE_PCIERRORENABLE);
|
||||||
|
|
|
@ -801,11 +801,10 @@ snd_pmac_awacs_init(struct snd_pmac *chip)
|
||||||
chip->revision = (in_le32(&chip->awacs->codec_stat) >> 12) & 0xf;
|
chip->revision = (in_le32(&chip->awacs->codec_stat) >> 12) & 0xf;
|
||||||
#ifdef PMAC_AMP_AVAIL
|
#ifdef PMAC_AMP_AVAIL
|
||||||
if (chip->revision == 3 && chip->has_iic && CHECK_CUDA_AMP()) {
|
if (chip->revision == 3 && chip->has_iic && CHECK_CUDA_AMP()) {
|
||||||
struct awacs_amp *amp = kmalloc(sizeof(*amp), GFP_KERNEL);
|
struct awacs_amp *amp = kzalloc(sizeof(*amp), GFP_KERNEL);
|
||||||
if (! amp)
|
if (! amp)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
chip->mixer_data = amp;
|
chip->mixer_data = amp;
|
||||||
memset(amp, 0, sizeof(*amp));
|
|
||||||
chip->mixer_free = awacs_amp_free;
|
chip->mixer_free = awacs_amp_free;
|
||||||
awacs_amp_set_vol(amp, 0, 63, 63, 0); /* mute and zero vol */
|
awacs_amp_set_vol(amp, 0, 63, 63, 0); /* mute and zero vol */
|
||||||
awacs_amp_set_vol(amp, 1, 63, 63, 0);
|
awacs_amp_set_vol(amp, 1, 63, 63, 0);
|
||||||
|
|
|
@ -258,10 +258,9 @@ int __init snd_pmac_daca_init(struct snd_pmac *chip)
|
||||||
request_module("i2c-powermac");
|
request_module("i2c-powermac");
|
||||||
#endif /* CONFIG_KMOD */
|
#endif /* CONFIG_KMOD */
|
||||||
|
|
||||||
mix = kmalloc(sizeof(*mix), GFP_KERNEL);
|
mix = kzalloc(sizeof(*mix), GFP_KERNEL);
|
||||||
if (! mix)
|
if (! mix)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
memset(mix, 0, sizeof(*mix));
|
|
||||||
chip->mixer_data = mix;
|
chip->mixer_data = mix;
|
||||||
chip->mixer_free = daca_cleanup;
|
chip->mixer_free = daca_cleanup;
|
||||||
mix->amp_on = 1; /* default on */
|
mix->amp_on = 1; /* default on */
|
||||||
|
|
|
@ -64,11 +64,10 @@ static int keywest_attach_adapter(struct i2c_adapter *adapter)
|
||||||
if (strncmp(i2c_device_name(adapter), "mac-io", 6))
|
if (strncmp(i2c_device_name(adapter), "mac-io", 6))
|
||||||
return 0; /* ignored */
|
return 0; /* ignored */
|
||||||
|
|
||||||
new_client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
|
new_client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
|
||||||
if (! new_client)
|
if (! new_client)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
memset(new_client, 0, sizeof(*new_client));
|
|
||||||
new_client->addr = keywest_ctx->addr;
|
new_client->addr = keywest_ctx->addr;
|
||||||
i2c_set_clientdata(new_client, keywest_ctx);
|
i2c_set_clientdata(new_client, keywest_ctx);
|
||||||
new_client->adapter = adapter;
|
new_client->adapter = adapter;
|
||||||
|
|
|
@ -181,20 +181,13 @@ static int __init alsa_card_pmac_init(void)
|
||||||
if ((err = platform_driver_register(&snd_pmac_driver)) < 0)
|
if ((err = platform_driver_register(&snd_pmac_driver)) < 0)
|
||||||
return err;
|
return err;
|
||||||
device = platform_device_register_simple(SND_PMAC_DRIVER, -1, NULL, 0);
|
device = platform_device_register_simple(SND_PMAC_DRIVER, -1, NULL, 0);
|
||||||
if (!IS_ERR(device)) {
|
|
||||||
if (platform_get_drvdata(device))
|
|
||||||
return 0;
|
return 0;
|
||||||
platform_device_unregister(device);
|
|
||||||
err = -ENODEV;
|
|
||||||
} else
|
|
||||||
err = PTR_ERR(device);
|
|
||||||
platform_driver_unregister(&snd_pmac_driver);
|
|
||||||
return err;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __exit alsa_card_pmac_exit(void)
|
static void __exit alsa_card_pmac_exit(void)
|
||||||
{
|
{
|
||||||
|
if (!IS_ERR(device))
|
||||||
platform_device_unregister(device);
|
platform_device_unregister(device);
|
||||||
platform_driver_unregister(&snd_pmac_driver);
|
platform_driver_unregister(&snd_pmac_driver);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1316,10 +1316,9 @@ int __init snd_pmac_tumbler_init(struct snd_pmac *chip)
|
||||||
request_module("i2c-powermac");
|
request_module("i2c-powermac");
|
||||||
#endif /* CONFIG_KMOD */
|
#endif /* CONFIG_KMOD */
|
||||||
|
|
||||||
mix = kmalloc(sizeof(*mix), GFP_KERNEL);
|
mix = kzalloc(sizeof(*mix), GFP_KERNEL);
|
||||||
if (! mix)
|
if (! mix)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
memset(mix, 0, sizeof(*mix));
|
|
||||||
mix->headphone_irq = -1;
|
mix->headphone_irq = -1;
|
||||||
|
|
||||||
chip->mixer_data = mix;
|
chip->mixer_data = mix;
|
||||||
|
|
|
@ -2260,10 +2260,9 @@ static int add_audio_endpoint(struct snd_usb_audio *chip, int stream, struct aud
|
||||||
}
|
}
|
||||||
|
|
||||||
/* create a new pcm */
|
/* create a new pcm */
|
||||||
as = kmalloc(sizeof(*as), GFP_KERNEL);
|
as = kzalloc(sizeof(*as), GFP_KERNEL);
|
||||||
if (! as)
|
if (! as)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
memset(as, 0, sizeof(*as));
|
|
||||||
as->pcm_index = chip->pcm_devs;
|
as->pcm_index = chip->pcm_devs;
|
||||||
as->chip = chip;
|
as->chip = chip;
|
||||||
as->fmt_type = fp->fmt_type;
|
as->fmt_type = fp->fmt_type;
|
||||||
|
@ -2633,13 +2632,12 @@ static int parse_audio_endpoints(struct snd_usb_audio *chip, int iface_no)
|
||||||
csep = NULL;
|
csep = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
fp = kmalloc(sizeof(*fp), GFP_KERNEL);
|
fp = kzalloc(sizeof(*fp), GFP_KERNEL);
|
||||||
if (! fp) {
|
if (! fp) {
|
||||||
snd_printk(KERN_ERR "cannot malloc\n");
|
snd_printk(KERN_ERR "cannot malloc\n");
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
memset(fp, 0, sizeof(*fp));
|
|
||||||
fp->iface = iface_no;
|
fp->iface = iface_no;
|
||||||
fp->altsetting = altno;
|
fp->altsetting = altno;
|
||||||
fp->altset_idx = i;
|
fp->altset_idx = i;
|
||||||
|
|
Loading…
Reference in a new issue