X-Git-Url: http://pilppa.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=sound%2Fppc%2Fbeep.c;h=a1aa89f2faf3bc9e6f25ccb3784871d0631a49dd;hb=50b65cc6fa3a69bdfbc8b3342d8ca6ddbbf5ec88;hp=d4ec6cc3f1c51cd24669997cbd50f84beeb0e65a;hpb=e532c37858fdcc18e9a91d24c2e22cd21aa22561;p=linux-2.6-omap-h63xx.git diff --git a/sound/ppc/beep.c b/sound/ppc/beep.c index d4ec6cc3f1c..a1aa89f2faf 100644 --- a/sound/ppc/beep.c +++ b/sound/ppc/beep.c @@ -30,7 +30,7 @@ #include #include "pmac.h" -struct snd_pmac_beep { +struct pmac_beep { int running; /* boolean */ int volume; /* mixer volume: 0-100 */ int volume_play; /* currently playing volume */ @@ -44,9 +44,9 @@ struct snd_pmac_beep { /* * stop beep if running */ -void snd_pmac_beep_stop(pmac_t *chip) +void snd_pmac_beep_stop(struct snd_pmac *chip) { - pmac_beep_t *beep = chip->beep; + struct pmac_beep *beep = chip->beep; if (beep && beep->running) { beep->running = 0; snd_pmac_beep_dma_stop(chip); @@ -97,10 +97,11 @@ static short beep_wform[256] = { #define BEEP_BUFLEN 512 #define BEEP_VOLUME 15 /* 0 - 100 */ -static int snd_pmac_beep_event(struct input_dev *dev, unsigned int type, unsigned int code, int hz) +static int snd_pmac_beep_event(struct input_dev *dev, unsigned int type, + unsigned int code, int hz) { - pmac_t *chip; - pmac_beep_t *beep; + struct snd_pmac *chip; + struct pmac_beep *beep; unsigned long flags; int beep_speed = 0; int srate; @@ -117,7 +118,7 @@ static int snd_pmac_beep_event(struct input_dev *dev, unsigned int type, unsigne default: return -1; } - chip = dev->private; + chip = input_get_drvdata(dev); if (! chip || (beep = chip->beep) == NULL) return -1; @@ -171,7 +172,8 @@ static int snd_pmac_beep_event(struct input_dev *dev, unsigned int type, unsigne * beep volume mixer */ -static int snd_pmac_info_beep(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) +static int snd_pmac_info_beep(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_info *uinfo) { uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; uinfo->count = 1; @@ -180,17 +182,19 @@ static int snd_pmac_info_beep(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uin return 0; } -static int snd_pmac_get_beep(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) +static int snd_pmac_get_beep(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) { - pmac_t *chip = snd_kcontrol_chip(kcontrol); + struct snd_pmac *chip = snd_kcontrol_chip(kcontrol); snd_assert(chip->beep, return -ENXIO); ucontrol->value.integer.value[0] = chip->beep->volume; return 0; } -static int snd_pmac_put_beep(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) +static int snd_pmac_put_beep(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) { - pmac_t *chip = snd_kcontrol_chip(kcontrol); + struct snd_pmac *chip = snd_kcontrol_chip(kcontrol); int oval; snd_assert(chip->beep, return -ENXIO); oval = chip->beep->volume; @@ -198,7 +202,7 @@ static int snd_pmac_put_beep(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *uco return oval != chip->beep->volume; } -static snd_kcontrol_new_t snd_pmac_beep_mixer = { +static struct snd_kcontrol_new snd_pmac_beep_mixer = { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "Beep Playback Volume", .info = snd_pmac_info_beep, @@ -207,19 +211,22 @@ static snd_kcontrol_new_t snd_pmac_beep_mixer = { }; /* Initialize beep stuff */ -int __init snd_pmac_attach_beep(pmac_t *chip) +int __init snd_pmac_attach_beep(struct snd_pmac *chip) { - pmac_beep_t *beep; + struct pmac_beep *beep; struct input_dev *input_dev; + struct snd_kcontrol *beep_ctl; void *dmabuf; int err = -ENOMEM; beep = kzalloc(sizeof(*beep), GFP_KERNEL); + if (! beep) + return -ENOMEM; dmabuf = dma_alloc_coherent(&chip->pdev->dev, BEEP_BUFLEN * 4, &beep->addr, GFP_KERNEL); input_dev = input_allocate_device(); - if (!beep || !dmabuf || !input_dev) - goto fail; + if (! dmabuf || ! input_dev) + goto fail1; /* FIXME: set more better values */ input_dev->name = "PowerMac Beep"; @@ -232,30 +239,37 @@ int __init snd_pmac_attach_beep(pmac_t *chip) 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; + input_dev->dev.parent = &chip->pdev->dev; + input_set_drvdata(input_dev, chip); beep->dev = input_dev; beep->buf = dmabuf; beep->volume = BEEP_VOLUME; beep->running = 0; - err = snd_ctl_add(chip->card, snd_ctl_new1(&snd_pmac_beep_mixer, chip)); + beep_ctl = snd_ctl_new1(&snd_pmac_beep_mixer, chip); + err = snd_ctl_add(chip->card, beep_ctl); if (err < 0) - goto fail; + goto fail1; chip->beep = beep; - input_register_device(beep->dev); - return 0; - - fail: input_free_device(input_dev); - kfree(dmabuf); + err = input_register_device(beep->dev); + if (err) + goto fail2; + + return 0; + + fail2: snd_ctl_remove(chip->card, beep_ctl); + fail1: input_free_device(input_dev); + if (dmabuf) + dma_free_coherent(&chip->pdev->dev, BEEP_BUFLEN * 4, + dmabuf, beep->addr); kfree(beep); return err; } -void snd_pmac_detach_beep(pmac_t *chip) +void snd_pmac_detach_beep(struct snd_pmac *chip) { if (chip->beep) { input_unregister_device(chip->beep->dev);