Loading sound/ppc/beep.c +37 −29 Original line number Diff line number Diff line Loading @@ -38,7 +38,7 @@ struct snd_pmac_beep { int nsamples; short *buf; /* allocated wave buffer */ dma_addr_t addr; /* physical address of buffer */ struct input_dev dev; struct input_dev *dev; }; /* Loading Loading @@ -212,47 +212,55 @@ static snd_kcontrol_new_t snd_pmac_beep_mixer = { int __init snd_pmac_attach_beep(pmac_t *chip) { pmac_beep_t *beep; int err; struct input_dev *input_dev; void *dmabuf; int err = -ENOMEM; beep = kmalloc(sizeof(*beep), GFP_KERNEL); if (! beep) return -ENOMEM; memset(beep, 0, sizeof(*beep)); beep->buf = dma_alloc_coherent(&chip->pdev->dev, BEEP_BUFLEN * 4, beep = kzalloc(sizeof(*beep), GFP_KERNEL); dmabuf = dma_alloc_coherent(&chip->pdev->dev, BEEP_BUFLEN * 4, &beep->addr, GFP_KERNEL); beep->dev.evbit[0] = BIT(EV_SND); beep->dev.sndbit[0] = BIT(SND_BELL) | BIT(SND_TONE); beep->dev.event = snd_pmac_beep_event; beep->dev.private = chip; input_dev = input_allocate_device(); if (!beep || !dmabuf || !input_dev) goto fail; /* FIXME: set more better values */ beep->dev.name = "PowerMac Beep"; beep->dev.phys = "powermac/beep"; beep->dev.id.bustype = BUS_ADB; beep->dev.id.vendor = 0x001f; beep->dev.id.product = 0x0001; beep->dev.id.version = 0x0100; input_dev->name = "PowerMac Beep"; input_dev->phys = "powermac/beep"; input_dev->id.bustype = BUS_ADB; input_dev->id.vendor = 0x001f; input_dev->id.product = 0x0001; input_dev->id.version = 0x0100; input_dev->evbit[0] = BIT(EV_SND); input_dev->sndbit[0] = BIT(SND_BELL) | BIT(SND_TONE); input_dev->event = snd_pmac_beep_event; input_dev->private = chip; input_dev->cdev.dev = &chip->pdev->dev; beep->dev = input_dev; beep->buf = dmabuf; beep->volume = BEEP_VOLUME; beep->running = 0; if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_pmac_beep_mixer, chip))) < 0) { kfree(beep->buf); kfree(beep); return err; } err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_pmac_beep_mixer, chip)); if (err < 0) goto fail; chip->beep = beep; input_register_device(&beep->dev); input_register_device(beep->dev); return 0; fail: input_free_device(input_dev); kfree(dmabuf); kfree(beep); return err; } void snd_pmac_detach_beep(pmac_t *chip) { if (chip->beep) { input_unregister_device(&chip->beep->dev); input_unregister_device(chip->beep->dev); dma_free_coherent(&chip->pdev->dev, BEEP_BUFLEN * 4, chip->beep->buf, chip->beep->addr); kfree(chip->beep); Loading Loading
sound/ppc/beep.c +37 −29 Original line number Diff line number Diff line Loading @@ -38,7 +38,7 @@ struct snd_pmac_beep { int nsamples; short *buf; /* allocated wave buffer */ dma_addr_t addr; /* physical address of buffer */ struct input_dev dev; struct input_dev *dev; }; /* Loading Loading @@ -212,47 +212,55 @@ static snd_kcontrol_new_t snd_pmac_beep_mixer = { int __init snd_pmac_attach_beep(pmac_t *chip) { pmac_beep_t *beep; int err; struct input_dev *input_dev; void *dmabuf; int err = -ENOMEM; beep = kmalloc(sizeof(*beep), GFP_KERNEL); if (! beep) return -ENOMEM; memset(beep, 0, sizeof(*beep)); beep->buf = dma_alloc_coherent(&chip->pdev->dev, BEEP_BUFLEN * 4, beep = kzalloc(sizeof(*beep), GFP_KERNEL); dmabuf = dma_alloc_coherent(&chip->pdev->dev, BEEP_BUFLEN * 4, &beep->addr, GFP_KERNEL); beep->dev.evbit[0] = BIT(EV_SND); beep->dev.sndbit[0] = BIT(SND_BELL) | BIT(SND_TONE); beep->dev.event = snd_pmac_beep_event; beep->dev.private = chip; input_dev = input_allocate_device(); if (!beep || !dmabuf || !input_dev) goto fail; /* FIXME: set more better values */ beep->dev.name = "PowerMac Beep"; beep->dev.phys = "powermac/beep"; beep->dev.id.bustype = BUS_ADB; beep->dev.id.vendor = 0x001f; beep->dev.id.product = 0x0001; beep->dev.id.version = 0x0100; input_dev->name = "PowerMac Beep"; input_dev->phys = "powermac/beep"; input_dev->id.bustype = BUS_ADB; input_dev->id.vendor = 0x001f; input_dev->id.product = 0x0001; input_dev->id.version = 0x0100; input_dev->evbit[0] = BIT(EV_SND); input_dev->sndbit[0] = BIT(SND_BELL) | BIT(SND_TONE); input_dev->event = snd_pmac_beep_event; input_dev->private = chip; input_dev->cdev.dev = &chip->pdev->dev; beep->dev = input_dev; beep->buf = dmabuf; beep->volume = BEEP_VOLUME; beep->running = 0; if ((err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_pmac_beep_mixer, chip))) < 0) { kfree(beep->buf); kfree(beep); return err; } err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_pmac_beep_mixer, chip)); if (err < 0) goto fail; chip->beep = beep; input_register_device(&beep->dev); input_register_device(beep->dev); return 0; fail: input_free_device(input_dev); kfree(dmabuf); kfree(beep); return err; } void snd_pmac_detach_beep(pmac_t *chip) { if (chip->beep) { input_unregister_device(&chip->beep->dev); input_unregister_device(chip->beep->dev); dma_free_coherent(&chip->pdev->dev, BEEP_BUFLEN * 4, chip->beep->buf, chip->beep->addr); kfree(chip->beep); Loading