aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-08-06 12:11:57 -0400
committerLinus Torvalds <torvalds@g5.osdl.org>2006-08-06 12:11:57 -0400
commita05ef8bfdc03c5061f44d91826caa855b0aae481 (patch)
tree296a086ddb55bd47dc0ff9bea2623a43ed009bba
parentcb3f1e7b835f6fe0fc09574381fe54daf6600001 (diff)
parent6cb53e7ed77d429531afa8d822d59909f953a771 (diff)
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
-rw-r--r--MAINTAINERS7
-rw-r--r--sound/aoa/codecs/snd-aoa-codec-toonie.c17
-rw-r--r--sound/aoa/core/snd-aoa-gpio-feature.c7
-rw-r--r--sound/aoa/core/snd-aoa-gpio-pmf.c2
-rw-r--r--sound/core/oss/mixer_oss.c3
-rw-r--r--sound/core/oss/pcm_oss.c2
-rw-r--r--sound/core/seq/seq_device.c3
-rw-r--r--sound/core/sgbuf.c9
-rw-r--r--sound/drivers/vx/vx_pcm.c7
-rw-r--r--sound/pci/echoaudio/echoaudio.c4
-rw-r--r--sound/pci/emu10k1/emu10k1_main.c11
-rw-r--r--sound/pci/emu10k1/irq.c6
-rw-r--r--sound/ppc/awacs.c3
-rw-r--r--sound/ppc/daca.c3
-rw-r--r--sound/ppc/keywest.c3
-rw-r--r--sound/ppc/powermac.c13
-rw-r--r--sound/ppc/tumbler.c3
-rw-r--r--sound/usb/usbaudio.c6
18 files changed, 62 insertions, 47 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index bd82e99a8c21..e3e1515ba5a9 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -298,6 +298,13 @@ L: info-linux@geode.amd.com
298W: http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html 298W: http://www.amd.com/us-en/ConnectivitySolutions/TechnicalResources/0,,50_2334_2452_11363,00.html
299S: Supported 299S: Supported
300 300
301AOA (Apple Onboard Audio) ALSA DRIVER
302P: Johannes Berg
303M: johannes@sipsolutions.net
304L: linuxppc-dev@ozlabs.org
305L: alsa-devel@alsa-project.org
306S: Maintained
307
301APM DRIVER 308APM DRIVER
302P: Stephen Rothwell 309P: Stephen Rothwell
303M: sfr@canb.auug.org.au 310M: sfr@canb.auug.org.au
diff --git a/sound/aoa/codecs/snd-aoa-codec-toonie.c b/sound/aoa/codecs/snd-aoa-codec-toonie.c
index bcc555647e79..3c7d1d8a9a6f 100644
--- a/sound/aoa/codecs/snd-aoa-codec-toonie.c
+++ b/sound/aoa/codecs/snd-aoa-codec-toonie.c
@@ -51,6 +51,13 @@ static struct transfer_info toonie_transfers[] = {
51 {} 51 {}
52}; 52};
53 53
54static int toonie_usable(struct codec_info_item *cii,
55 struct transfer_info *ti,
56 struct transfer_info *out)
57{
58 return 1;
59}
60
54#ifdef CONFIG_PM 61#ifdef CONFIG_PM
55static int toonie_suspend(struct codec_info_item *cii, pm_message_t state) 62static int toonie_suspend(struct codec_info_item *cii, pm_message_t state)
56{ 63{
@@ -69,6 +76,7 @@ static struct codec_info toonie_codec_info = {
69 .sysclock_factor = 256, 76 .sysclock_factor = 256,
70 .bus_factor = 64, 77 .bus_factor = 64,
71 .owner = THIS_MODULE, 78 .owner = THIS_MODULE,
79 .usable = toonie_usable,
72#ifdef CONFIG_PM 80#ifdef CONFIG_PM
73 .suspend = toonie_suspend, 81 .suspend = toonie_suspend,
74 .resume = toonie_resume, 82 .resume = toonie_resume,
@@ -79,19 +87,20 @@ static int toonie_init_codec(struct aoa_codec *codec)
79{ 87{
80 struct toonie *toonie = codec_to_toonie(codec); 88 struct toonie *toonie = codec_to_toonie(codec);
81 89
90 /* nothing connected? what a joke! */
91 if (toonie->codec.connected != 1)
92 return -ENOTCONN;
93
82 if (aoa_snd_device_new(SNDRV_DEV_LOWLEVEL, toonie, &ops)) { 94 if (aoa_snd_device_new(SNDRV_DEV_LOWLEVEL, toonie, &ops)) {
83 printk(KERN_ERR PFX "failed to create toonie snd device!\n"); 95 printk(KERN_ERR PFX "failed to create toonie snd device!\n");
84 return -ENODEV; 96 return -ENODEV;
85 } 97 }
86 98
87 /* nothing connected? what a joke! */
88 if (toonie->codec.connected != 1)
89 return -ENOTCONN;
90
91 if (toonie->codec.soundbus_dev->attach_codec(toonie->codec.soundbus_dev, 99 if (toonie->codec.soundbus_dev->attach_codec(toonie->codec.soundbus_dev,
92 aoa_get_card(), 100 aoa_get_card(),
93 &toonie_codec_info, toonie)) { 101 &toonie_codec_info, toonie)) {
94 printk(KERN_ERR PFX "error creating toonie pcm\n"); 102 printk(KERN_ERR PFX "error creating toonie pcm\n");
103 snd_device_free(aoa_get_card(), toonie);
95 return -ENODEV; 104 return -ENODEV;
96 } 105 }
97 106
diff --git a/sound/aoa/core/snd-aoa-gpio-feature.c b/sound/aoa/core/snd-aoa-gpio-feature.c
index 7ae0c0bdfad8..f69d33357a28 100644
--- a/sound/aoa/core/snd-aoa-gpio-feature.c
+++ b/sound/aoa/core/snd-aoa-gpio-feature.c
@@ -112,7 +112,10 @@ static struct device_node *get_gpio(char *name,
112 112
113static void get_irq(struct device_node * np, int *irqptr) 113static void get_irq(struct device_node * np, int *irqptr)
114{ 114{
115 *irqptr = irq_of_parse_and_map(np, 0); 115 if (np)
116 *irqptr = irq_of_parse_and_map(np, 0);
117 else
118 *irqptr = NO_IRQ;
116} 119}
117 120
118/* 0x4 is outenable, 0x1 is out, thus 4 or 5 */ 121/* 0x4 is outenable, 0x1 is out, thus 4 or 5 */
@@ -322,7 +325,7 @@ static int ftr_set_notify(struct gpio_runtime *rt,
322 return -EINVAL; 325 return -EINVAL;
323 } 326 }
324 327
325 if (irq == -1) 328 if (irq == NO_IRQ)
326 return -ENODEV; 329 return -ENODEV;
327 330
328 mutex_lock(&notif->mutex); 331 mutex_lock(&notif->mutex);
diff --git a/sound/aoa/core/snd-aoa-gpio-pmf.c b/sound/aoa/core/snd-aoa-gpio-pmf.c
index 3d57fd1aec4b..2836c3218391 100644
--- a/sound/aoa/core/snd-aoa-gpio-pmf.c
+++ b/sound/aoa/core/snd-aoa-gpio-pmf.c
@@ -18,7 +18,7 @@ static void pmf_gpio_set_##name(struct gpio_runtime *rt, int on)\
18 \ 18 \
19 if (unlikely(!rt)) return; \ 19 if (unlikely(!rt)) return; \
20 rc = pmf_call_function(rt->node, #name "-mute", &args); \ 20 rc = pmf_call_function(rt->node, #name "-mute", &args); \
21 if (rc) \ 21 if (rc && rc != -ENODEV) \
22 printk(KERN_WARNING "pmf_gpio_set_" #name \ 22 printk(KERN_WARNING "pmf_gpio_set_" #name \
23 " failed, rc: %d\n", rc); \ 23 " failed, rc: %d\n", rc); \
24 rt->implementation_private &= ~(1<<bit); \ 24 rt->implementation_private &= ~(1<<bit); \
diff --git a/sound/core/oss/mixer_oss.c b/sound/core/oss/mixer_oss.c
index 71b5080fa66d..75a9505c7445 100644
--- a/sound/core/oss/mixer_oss.c
+++ b/sound/core/oss/mixer_oss.c
@@ -988,13 +988,12 @@ static int snd_mixer_oss_build_input(struct snd_mixer_oss *mixer, struct snd_mix
988 if (ptr->index == 0 && (kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0)) != NULL) { 988 if (ptr->index == 0 && (kctl = snd_mixer_oss_test_id(mixer, "Capture Source", 0)) != NULL) {
989 struct snd_ctl_elem_info *uinfo; 989 struct snd_ctl_elem_info *uinfo;
990 990
991 uinfo = kmalloc(sizeof(*uinfo), GFP_KERNEL); 991 uinfo = kzalloc(sizeof(*uinfo), GFP_KERNEL);
992 if (! uinfo) { 992 if (! uinfo) {
993 up_read(&mixer->card->controls_rwsem); 993 up_read(&mixer->card->controls_rwsem);
994 return -ENOMEM; 994 return -ENOMEM;
995 } 995 }
996 996
997 memset(uinfo, 0, sizeof(*uinfo));
998 if (kctl->info(kctl, uinfo)) { 997 if (kctl->info(kctl, uinfo)) {
999 up_read(&mixer->card->controls_rwsem); 998 up_read(&mixer->card->controls_rwsem);
1000 return 0; 999 return 0;
diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
index f5ff4f4a16ee..472fce0ee0e8 100644
--- a/sound/core/oss/pcm_oss.c
+++ b/sound/core/oss/pcm_oss.c
@@ -2228,6 +2228,8 @@ static int snd_pcm_oss_open_file(struct file *file,
2228 for (idx = 0; idx < 2; idx++) { 2228 for (idx = 0; idx < 2; idx++) {
2229 if (setup[idx].disable) 2229 if (setup[idx].disable)
2230 continue; 2230 continue;
2231 if (! pcm->streams[idx].substream_count)
2232 continue; /* no matching substream */
2231 if (idx == SNDRV_PCM_STREAM_PLAYBACK) { 2233 if (idx == SNDRV_PCM_STREAM_PLAYBACK) {
2232 if (! (f_mode & FMODE_WRITE)) 2234 if (! (f_mode & FMODE_WRITE))
2233 continue; 2235 continue;
diff --git a/sound/core/seq/seq_device.c b/sound/core/seq/seq_device.c
index 4260de90f36f..102ff548ce69 100644
--- a/sound/core/seq/seq_device.c
+++ b/sound/core/seq/seq_device.c
@@ -372,10 +372,9 @@ static struct ops_list * create_driver(char *id)
372{ 372{
373 struct ops_list *ops; 373 struct ops_list *ops;
374 374
375 ops = kmalloc(sizeof(*ops), GFP_KERNEL); 375 ops = kzalloc(sizeof(*ops), GFP_KERNEL);
376 if (ops == NULL) 376 if (ops == NULL)
377 return ops; 377 return ops;
378 memset(ops, 0, sizeof(*ops));
379 378
380 /* set up driver entry */ 379 /* set up driver entry */
381 strlcpy(ops->id, id, sizeof(ops->id)); 380 strlcpy(ops->id, id, sizeof(ops->id));
diff --git a/sound/core/sgbuf.c b/sound/core/sgbuf.c
index 6e4d4ab34632..c30669f14ac0 100644
--- a/sound/core/sgbuf.c
+++ b/sound/core/sgbuf.c
@@ -68,21 +68,18 @@ void *snd_malloc_sgbuf_pages(struct device *device,
68 68
69 dmab->area = NULL; 69 dmab->area = NULL;
70 dmab->addr = 0; 70 dmab->addr = 0;
71 dmab->private_data = sgbuf = kmalloc(sizeof(*sgbuf), GFP_KERNEL); 71 dmab->private_data = sgbuf = kzalloc(sizeof(*sgbuf), GFP_KERNEL);
72 if (! sgbuf) 72 if (! sgbuf)
73 return NULL; 73 return NULL;
74 memset(sgbuf, 0, sizeof(*sgbuf));
75 sgbuf->dev = device; 74 sgbuf->dev = device;
76 pages = snd_sgbuf_aligned_pages(size); 75 pages = snd_sgbuf_aligned_pages(size);
77 sgbuf->tblsize = sgbuf_align_table(pages); 76 sgbuf->tblsize = sgbuf_align_table(pages);
78 sgbuf->table = kmalloc(sizeof(*sgbuf->table) * sgbuf->tblsize, GFP_KERNEL); 77 sgbuf->table = kcalloc(sgbuf->tblsize, sizeof(*sgbuf->table), GFP_KERNEL);
79 if (! sgbuf->table) 78 if (! sgbuf->table)
80 goto _failed; 79 goto _failed;
81 memset(sgbuf->table, 0, sizeof(*sgbuf->table) * sgbuf->tblsize); 80 sgbuf->page_table = kcalloc(sgbuf->tblsize, sizeof(*sgbuf->page_table), GFP_KERNEL);
82 sgbuf->page_table = kmalloc(sizeof(*sgbuf->page_table) * sgbuf->tblsize, GFP_KERNEL);
83 if (! sgbuf->page_table) 81 if (! sgbuf->page_table)
84 goto _failed; 82 goto _failed;
85 memset(sgbuf->page_table, 0, sizeof(*sgbuf->page_table) * sgbuf->tblsize);
86 83
87 /* allocate each page */ 84 /* allocate each page */
88 for (i = 0; i < pages; i++) { 85 for (i = 0; i < pages; i++) {
diff --git a/sound/drivers/vx/vx_pcm.c b/sound/drivers/vx/vx_pcm.c
index c4af84995d05..7e65a103fbb2 100644
--- a/sound/drivers/vx/vx_pcm.c
+++ b/sound/drivers/vx/vx_pcm.c
@@ -1252,18 +1252,15 @@ static int vx_init_audio_io(struct vx_core *chip)
1252 chip->audio_info = rmh.Stat[1]; 1252 chip->audio_info = rmh.Stat[1];
1253 1253
1254 /* allocate pipes */ 1254 /* allocate pipes */
1255 chip->playback_pipes = kmalloc(sizeof(struct vx_pipe *) * chip->audio_outs, GFP_KERNEL); 1255 chip->playback_pipes = kcalloc(chip->audio_outs, sizeof(struct vx_pipe *), GFP_KERNEL);
1256 if (!chip->playback_pipes) 1256 if (!chip->playback_pipes)
1257 return -ENOMEM; 1257 return -ENOMEM;
1258 chip->capture_pipes = kmalloc(sizeof(struct vx_pipe *) * chip->audio_ins, GFP_KERNEL); 1258 chip->capture_pipes = kcalloc(chip->audio_ins, sizeof(struct vx_pipe *), GFP_KERNEL);
1259 if (!chip->capture_pipes) { 1259 if (!chip->capture_pipes) {
1260 kfree(chip->playback_pipes); 1260 kfree(chip->playback_pipes);
1261 return -ENOMEM; 1261 return -ENOMEM;
1262 } 1262 }
1263 1263
1264 memset(chip->playback_pipes, 0, sizeof(struct vx_pipe *) * chip->audio_outs);
1265 memset(chip->capture_pipes, 0, sizeof(struct vx_pipe *) * chip->audio_ins);
1266
1267 preferred = chip->ibl.size; 1264 preferred = chip->ibl.size;
1268 chip->ibl.size = 0; 1265 chip->ibl.size = 0;
1269 vx_set_ibl(chip, &chip->ibl); /* query the info */ 1266 vx_set_ibl(chip, &chip->ibl); /* query the info */
diff --git a/sound/pci/echoaudio/echoaudio.c b/sound/pci/echoaudio/echoaudio.c
index 27a8dbe6f6a8..c3dafa29054f 100644
--- a/sound/pci/echoaudio/echoaudio.c
+++ b/sound/pci/echoaudio/echoaudio.c
@@ -236,9 +236,9 @@ static int pcm_open(struct snd_pcm_substream *substream,
236 chip = snd_pcm_substream_chip(substream); 236 chip = snd_pcm_substream_chip(substream);
237 runtime = substream->runtime; 237 runtime = substream->runtime;
238 238
239 if (!(pipe = kmalloc(sizeof(struct audiopipe), GFP_KERNEL))) 239 pipe = kzalloc(sizeof(struct audiopipe), GFP_KERNEL);
240 if (!pipe)
240 return -ENOMEM; 241 return -ENOMEM;
241 memset(pipe, 0, sizeof(struct audiopipe));
242 pipe->index = -1; /* Not configured yet */ 242 pipe->index = -1; /* Not configured yet */
243 243
244 /* Set up hw capabilities and contraints */ 244 /* Set up hw capabilities and contraints */
diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c
index f9b5c3dc3b34..79f24cdf5fbf 100644
--- a/sound/pci/emu10k1/emu10k1_main.c
+++ b/sound/pci/emu10k1/emu10k1_main.c
@@ -936,6 +936,17 @@ static struct snd_emu_chip_details emu_chip_details[] = {
936 .ca0151_chip = 1, 936 .ca0151_chip = 1,
937 .spk71 = 1, 937 .spk71 = 1,
938 .spdif_bug = 1} , 938 .spdif_bug = 1} ,
939 /* Dell OEM/Creative Labs Audigy 2 ZS */
940 /* See ALSA bug#1365 */
941 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10031102,
942 .driver = "Audigy2", .name = "Audigy 2 ZS [SB0353]",
943 .id = "Audigy2",
944 .emu10k2_chip = 1,
945 .ca0102_chip = 1,
946 .ca0151_chip = 1,
947 .spk71 = 1,
948 .spdif_bug = 1,
949 .ac97_chip = 1} ,
939 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10021102, 950 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10021102,
940 .driver = "Audigy2", .name = "Audigy 2 Platinum [SB0240P]", 951 .driver = "Audigy2", .name = "Audigy 2 Platinum [SB0240P]",
941 .id = "Audigy2", 952 .id = "Audigy2",
diff --git a/sound/pci/emu10k1/irq.c b/sound/pci/emu10k1/irq.c
index a8b31286b6db..1076af4c3669 100644
--- a/sound/pci/emu10k1/irq.c
+++ b/sound/pci/emu10k1/irq.c
@@ -37,9 +37,13 @@ irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
37 int handled = 0; 37 int handled = 0;
38 38
39 while ((status = inl(emu->port + IPR)) != 0) { 39 while ((status = inl(emu->port + IPR)) != 0) {
40 //printk("emu10k1 irq - status = 0x%x\n", status); 40 //snd_printk(KERN_INFO "emu10k1 irq - status = 0x%x\n", status);
41 orig_status = status; 41 orig_status = status;
42 handled = 1; 42 handled = 1;
43 if ((status & 0xffffffff) == 0xffffffff) {
44 snd_printk(KERN_INFO "snd-emu10k1: Suspected sound card removal\n");
45 break;
46 }
43 if (status & IPR_PCIERROR) { 47 if (status & IPR_PCIERROR) {
44 snd_printk(KERN_ERR "interrupt: PCI error\n"); 48 snd_printk(KERN_ERR "interrupt: PCI error\n");
45 snd_emu10k1_intr_disable(emu, INTE_PCIERRORENABLE); 49 snd_emu10k1_intr_disable(emu, INTE_PCIERRORENABLE);
diff --git a/sound/ppc/awacs.c b/sound/ppc/awacs.c
index 82d791be7499..05dabe454658 100644
--- a/sound/ppc/awacs.c
+++ b/sound/ppc/awacs.c
@@ -801,11 +801,10 @@ snd_pmac_awacs_init(struct snd_pmac *chip)
801 chip->revision = (in_le32(&chip->awacs->codec_stat) >> 12) & 0xf; 801 chip->revision = (in_le32(&chip->awacs->codec_stat) >> 12) & 0xf;
802#ifdef PMAC_AMP_AVAIL 802#ifdef PMAC_AMP_AVAIL
803 if (chip->revision == 3 && chip->has_iic && CHECK_CUDA_AMP()) { 803 if (chip->revision == 3 && chip->has_iic && CHECK_CUDA_AMP()) {
804 struct awacs_amp *amp = kmalloc(sizeof(*amp), GFP_KERNEL); 804 struct awacs_amp *amp = kzalloc(sizeof(*amp), GFP_KERNEL);
805 if (! amp) 805 if (! amp)
806 return -ENOMEM; 806 return -ENOMEM;
807 chip->mixer_data = amp; 807 chip->mixer_data = amp;
808 memset(amp, 0, sizeof(*amp));
809 chip->mixer_free = awacs_amp_free; 808 chip->mixer_free = awacs_amp_free;
810 awacs_amp_set_vol(amp, 0, 63, 63, 0); /* mute and zero vol */ 809 awacs_amp_set_vol(amp, 0, 63, 63, 0); /* mute and zero vol */
811 awacs_amp_set_vol(amp, 1, 63, 63, 0); 810 awacs_amp_set_vol(amp, 1, 63, 63, 0);
diff --git a/sound/ppc/daca.c b/sound/ppc/daca.c
index 46eebf5610e3..57202b0f033e 100644
--- a/sound/ppc/daca.c
+++ b/sound/ppc/daca.c
@@ -258,10 +258,9 @@ int __init snd_pmac_daca_init(struct snd_pmac *chip)
258 request_module("i2c-powermac"); 258 request_module("i2c-powermac");
259#endif /* CONFIG_KMOD */ 259#endif /* CONFIG_KMOD */
260 260
261 mix = kmalloc(sizeof(*mix), GFP_KERNEL); 261 mix = kzalloc(sizeof(*mix), GFP_KERNEL);
262 if (! mix) 262 if (! mix)
263 return -ENOMEM; 263 return -ENOMEM;
264 memset(mix, 0, sizeof(*mix));
265 chip->mixer_data = mix; 264 chip->mixer_data = mix;
266 chip->mixer_free = daca_cleanup; 265 chip->mixer_free = daca_cleanup;
267 mix->amp_on = 1; /* default on */ 266 mix->amp_on = 1; /* default on */
diff --git a/sound/ppc/keywest.c b/sound/ppc/keywest.c
index fb05938dcbd9..59482a4cd446 100644
--- a/sound/ppc/keywest.c
+++ b/sound/ppc/keywest.c
@@ -64,11 +64,10 @@ static int keywest_attach_adapter(struct i2c_adapter *adapter)
64 if (strncmp(i2c_device_name(adapter), "mac-io", 6)) 64 if (strncmp(i2c_device_name(adapter), "mac-io", 6))
65 return 0; /* ignored */ 65 return 0; /* ignored */
66 66
67 new_client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL); 67 new_client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
68 if (! new_client) 68 if (! new_client)
69 return -ENOMEM; 69 return -ENOMEM;
70 70
71 memset(new_client, 0, sizeof(*new_client));
72 new_client->addr = keywest_ctx->addr; 71 new_client->addr = keywest_ctx->addr;
73 i2c_set_clientdata(new_client, keywest_ctx); 72 i2c_set_clientdata(new_client, keywest_ctx);
74 new_client->adapter = adapter; 73 new_client->adapter = adapter;
diff --git a/sound/ppc/powermac.c b/sound/ppc/powermac.c
index fa9a44ab487e..2264574fa06b 100644
--- a/sound/ppc/powermac.c
+++ b/sound/ppc/powermac.c
@@ -181,21 +181,14 @@ static int __init alsa_card_pmac_init(void)
181 if ((err = platform_driver_register(&snd_pmac_driver)) < 0) 181 if ((err = platform_driver_register(&snd_pmac_driver)) < 0)
182 return err; 182 return err;
183 device = platform_device_register_simple(SND_PMAC_DRIVER, -1, NULL, 0); 183 device = platform_device_register_simple(SND_PMAC_DRIVER, -1, NULL, 0);
184 if (!IS_ERR(device)) { 184 return 0;
185 if (platform_get_drvdata(device))
186 return 0;
187 platform_device_unregister(device);
188 err = -ENODEV;
189 } else
190 err = PTR_ERR(device);
191 platform_driver_unregister(&snd_pmac_driver);
192 return err;
193 185
194} 186}
195 187
196static void __exit alsa_card_pmac_exit(void) 188static void __exit alsa_card_pmac_exit(void)
197{ 189{
198 platform_device_unregister(device); 190 if (!IS_ERR(device))
191 platform_device_unregister(device);
199 platform_driver_unregister(&snd_pmac_driver); 192 platform_driver_unregister(&snd_pmac_driver);
200} 193}
201 194
diff --git a/sound/ppc/tumbler.c b/sound/ppc/tumbler.c
index 692c61177678..84f6b19c07ca 100644
--- a/sound/ppc/tumbler.c
+++ b/sound/ppc/tumbler.c
@@ -1316,10 +1316,9 @@ int __init snd_pmac_tumbler_init(struct snd_pmac *chip)
1316 request_module("i2c-powermac"); 1316 request_module("i2c-powermac");
1317#endif /* CONFIG_KMOD */ 1317#endif /* CONFIG_KMOD */
1318 1318
1319 mix = kmalloc(sizeof(*mix), GFP_KERNEL); 1319 mix = kzalloc(sizeof(*mix), GFP_KERNEL);
1320 if (! mix) 1320 if (! mix)
1321 return -ENOMEM; 1321 return -ENOMEM;
1322 memset(mix, 0, sizeof(*mix));
1323 mix->headphone_irq = -1; 1322 mix->headphone_irq = -1;
1324 1323
1325 chip->mixer_data = mix; 1324 chip->mixer_data = mix;
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c
index d32d83d970cc..1b7f499c549d 100644
--- a/sound/usb/usbaudio.c
+++ b/sound/usb/usbaudio.c
@@ -2260,10 +2260,9 @@ static int add_audio_endpoint(struct snd_usb_audio *chip, int stream, struct aud
2260 } 2260 }
2261 2261
2262 /* create a new pcm */ 2262 /* create a new pcm */
2263 as = kmalloc(sizeof(*as), GFP_KERNEL); 2263 as = kzalloc(sizeof(*as), GFP_KERNEL);
2264 if (! as) 2264 if (! as)
2265 return -ENOMEM; 2265 return -ENOMEM;
2266 memset(as, 0, sizeof(*as));
2267 as->pcm_index = chip->pcm_devs; 2266 as->pcm_index = chip->pcm_devs;
2268 as->chip = chip; 2267 as->chip = chip;
2269 as->fmt_type = fp->fmt_type; 2268 as->fmt_type = fp->fmt_type;
@@ -2633,13 +2632,12 @@ static int parse_audio_endpoints(struct snd_usb_audio *chip, int iface_no)
2633 csep = NULL; 2632 csep = NULL;
2634 } 2633 }
2635 2634
2636 fp = kmalloc(sizeof(*fp), GFP_KERNEL); 2635 fp = kzalloc(sizeof(*fp), GFP_KERNEL);
2637 if (! fp) { 2636 if (! fp) {
2638 snd_printk(KERN_ERR "cannot malloc\n"); 2637 snd_printk(KERN_ERR "cannot malloc\n");
2639 return -ENOMEM; 2638 return -ENOMEM;
2640 } 2639 }
2641 2640
2642 memset(fp, 0, sizeof(*fp));
2643 fp->iface = iface_no; 2641 fp->iface = iface_no;
2644 fp->altsetting = altno; 2642 fp->altsetting = altno;
2645 fp->altset_idx = i; 2643 fp->altset_idx = i;