static int snd_stm_conv_dac_mem_probe(struct platform_device *pdev) { int result = 0; struct snd_stm_conv_dac_mem_info *conv_dac_mem_info = pdev->dev.platform_data; struct snd_stm_conv_dac_mem *conv_dac_mem; struct snd_card *card = snd_stm_card_get(); snd_stm_printd(0, "%s('%s')\n", __func__, dev_name(&pdev->dev)); BUG_ON(!card); BUG_ON(!conv_dac_mem_info); conv_dac_mem = kzalloc(sizeof(*conv_dac_mem), GFP_KERNEL); if (!conv_dac_mem) { snd_stm_printe("Can't allocate memory " "for a device description!\n"); result = -ENOMEM; goto error_alloc; } snd_stm_magic_set(conv_dac_mem); conv_dac_mem->dev_name = dev_name(&pdev->dev); /* Get resources */ result = snd_stm_memory_request(pdev, &conv_dac_mem->mem_region, &conv_dac_mem->base); if (result < 0) { snd_stm_printe("Memory region request failed!\n"); goto error_memory_request; } /* Get connections */ BUG_ON(!conv_dac_mem_info->source_bus_id); snd_stm_printd(0, "This DAC is attached to PCM player '%s'.\n", conv_dac_mem_info->source_bus_id); conv_dac_mem->converter = snd_stm_conv_register_converter( "Analog Output", &snd_stm_conv_dac_mem_ops, conv_dac_mem, &platform_bus_type, conv_dac_mem_info->source_bus_id, conv_dac_mem_info->channel_from, conv_dac_mem_info->channel_to, NULL); if (!conv_dac_mem->converter) { snd_stm_printe("Can't attach to PCM player!\n"); goto error_attach; } /* Create ALSA lowlevel device*/ result = snd_device_new(card, SNDRV_DEV_LOWLEVEL, conv_dac_mem, &snd_stm_conv_dac_mem_snd_device_ops); if (result < 0) { snd_stm_printe("ALSA low level device creation failed!\n"); goto error_device; } /* Done now */ platform_set_drvdata(pdev, conv_dac_mem); return 0; error_device: error_attach: snd_stm_memory_release(conv_dac_mem->mem_region, conv_dac_mem->base); error_memory_request: snd_stm_magic_clear(conv_dac_mem); kfree(conv_dac_mem); error_alloc: return result; }
static int snd_stm_conv_dac_sc_probe(struct platform_device *pdev) { int result = 0; struct snd_stm_conv_dac_sc_info *info = pdev->dev.platform_data; struct snd_stm_conv_dac_sc *conv_dac_sc; struct snd_card *card = snd_stm_card_get(); snd_stm_printd(0, "%s('%s')\n", __func__, dev_name(&pdev->dev)); BUG_ON(!card); BUG_ON(!info); conv_dac_sc = kzalloc(sizeof(*conv_dac_sc), GFP_KERNEL); if (!conv_dac_sc) { snd_stm_printe("Can't allocate memory " "for a device description!\n"); result = -ENOMEM; goto error_alloc; } snd_stm_magic_set(conv_dac_sc); conv_dac_sc->bus_id = dev_name(&pdev->dev); /* Get resources */ conv_dac_sc->nrst = sysconf_claim(info->nrst.group, info->nrst.num, info->nrst.lsb, info->nrst.msb, "NRST"); BUG_ON(!conv_dac_sc->nrst); conv_dac_sc->mode = sysconf_claim(info->mode.group, info->mode.num, info->mode.lsb, info->mode.msb, "MODE"); BUG_ON(!conv_dac_sc->mode); conv_dac_sc->nsb = sysconf_claim(info->nsb.group, info->nsb.num, info->nsb.lsb, info->nsb.msb, "NSB"); BUG_ON(!conv_dac_sc->nsb); conv_dac_sc->softmute = sysconf_claim(info->softmute.group, info->softmute.num, info->softmute.lsb, info->softmute.msb, "SOFTMUTE"); BUG_ON(!conv_dac_sc->softmute); conv_dac_sc->pdana = sysconf_claim(info->pdana.group, info->pdana.num, info->pdana.lsb, info->pdana.msb, "PDANA"); BUG_ON(!conv_dac_sc->pdana); conv_dac_sc->pndbg = sysconf_claim(info->pndbg.group, info->pndbg.num, info->pndbg.lsb, info->pndbg.msb, "PNDBG"); BUG_ON(!conv_dac_sc->pndbg); /* Get connections */ BUG_ON(!info->source_bus_id); snd_stm_printd(0, "This DAC is attached to PCM player '%s'.\n", info->source_bus_id); conv_dac_sc->converter = snd_stm_conv_register_converter( "Analog Output", &snd_stm_conv_dac_sc_ops, conv_dac_sc, &platform_bus_type, info->source_bus_id, info->channel_from, info->channel_to, NULL); if (!conv_dac_sc->converter) { snd_stm_printe("Can't attach to PCM player!\n"); goto error_attach; } /* Create ALSA lowlevel device*/ result = snd_device_new(card, SNDRV_DEV_LOWLEVEL, conv_dac_sc, &snd_stm_conv_dac_sc_snd_device_ops); if (result < 0) { snd_stm_printe("ALSA low level device creation failed!\n"); goto error_device; } /* Done now */ platform_set_drvdata(pdev, conv_dac_sc); return 0; error_device: error_attach: snd_stm_magic_clear(conv_dac_sc); kfree(conv_dac_sc); error_alloc: return result; }
static int snd_stm_conv_i2sspdif_probe(struct platform_device *pdev) { int result = 0; struct snd_stm_conv_i2sspdif_info *conv_i2sspdif_info = pdev->dev.platform_data; struct snd_stm_conv_i2sspdif *conv_i2sspdif; snd_stm_printd(0, "%s('%s')\n", __func__, dev_name(&pdev->dev)); BUG_ON(!conv_i2sspdif_info); conv_i2sspdif = kzalloc(sizeof(*conv_i2sspdif), GFP_KERNEL); if (!conv_i2sspdif) { snd_stm_printe("Can't allocate memory " "for a device description!\n"); result = -ENOMEM; goto error_alloc; } snd_stm_magic_set(conv_i2sspdif); conv_i2sspdif->ver = conv_i2sspdif_info->ver; BUG_ON(conv_i2sspdif->ver <= 0); conv_i2sspdif->info = conv_i2sspdif_info; conv_i2sspdif->device = &pdev->dev; spin_lock_init(&conv_i2sspdif->iec958_default_lock); /* Get resources */ result = snd_stm_memory_request(pdev, &conv_i2sspdif->mem_region, &conv_i2sspdif->base); if (result < 0) { snd_stm_printe("Memory region request failed!\n"); goto error_memory_request; } /* Get connections */ BUG_ON(!conv_i2sspdif_info->source_bus_id); snd_stm_printd(0, "This I2S-SPDIF converter is attached to PCM player" " '%s'.\n", conv_i2sspdif_info->source_bus_id); conv_i2sspdif->converter = snd_stm_conv_register_converter( "HDMI Output", &snd_stm_conv_i2sspdif_ops, conv_i2sspdif, &platform_bus_type, conv_i2sspdif_info->source_bus_id, conv_i2sspdif_info->channel_from, conv_i2sspdif_info->channel_to, &conv_i2sspdif->index); if (!conv_i2sspdif->converter) { snd_stm_printe("Can't attach to PCM player!\n"); result = -EINVAL; goto error_attach; } /* Create ALSA lowlevel device*/ result = snd_device_new(snd_stm_card_get(), SNDRV_DEV_LOWLEVEL, conv_i2sspdif, &snd_stm_conv_i2sspdif_snd_device_ops); if (result < 0) { snd_stm_printe("ALSA low level device creation failed!\n"); goto error_device; } /* Done now */ platform_set_drvdata(pdev, conv_i2sspdif); return result; error_device: error_attach: snd_stm_memory_release(conv_i2sspdif->mem_region, conv_i2sspdif->base); error_memory_request: snd_stm_magic_clear(conv_i2sspdif); kfree(conv_i2sspdif); error_alloc: return result; }