static int __devinit imx_wm1808_audio_probe(struct platform_device *pdev) { struct snd_soc_machine **machine = platform_get_drvdata(pdev); struct snd_soc_pcm_link *hifi; struct mxc_audio_platform_data *tmp; int ret, hp_status; dbg("%s: pdev->name=%s, machine->pcm_links=%d", __func__, pdev->name, (*machine)->pcm_links); (*machine)->owner = THIS_MODULE; (*machine)->pdev = pdev; (*machine)->name = "i.MX_SAMSUNG"; (*machine)->longname = "WM1808"; (*machine)->ops = &machine_ops; /* register card */ ret = snd_soc_new_card(*machine, 1, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1); if (ret < 0) { err("%s: failed to create pcms\n", __func__); return ret; } /* WM1808 hifi interface */ ret = -ENODEV; tmp = pdev->dev.platform_data; if (tmp->src_port == 2) hifi = snd_soc_pcm_link_new(*machine, "imx_3stack-hifi", &imx_3stack_pcm_ops, imx_pcm, wm1808_codec, wm1808_hifi_dai, imx_ssi_3); else hifi = snd_soc_pcm_link_new(*machine, "imx_3stack-hifi", &imx_3stack_pcm_ops, imx_pcm, wm1808_codec, wm1808_hifi_dai, imx_ssi_1); if (hifi == NULL) { dbg("failed to create HiFi PCM link"); snd_soc_machine_free(*machine); return ret; } ret = snd_soc_pcm_link_attach(hifi); if (ret < 0) { dbg("%s: failed to attach hifi pcm", __func__); snd_soc_machine_free(*machine); return ret; } gpio_activate_audio_ports(); imx_3stack_init_dam(tmp->src_port, tmp->ext_port); return ret; }
static int __devinit imx_3stack_sgtl5000_audio_probe(struct platform_device *pdev) { struct snd_soc_machine *machine; struct mxc_sgtl5000_platform_data *plat = pdev->dev.platform_data; struct snd_soc_pcm_link *audio; int ret; machine = kzalloc(sizeof(struct snd_soc_machine), GFP_KERNEL); if (machine == NULL) return -ENOMEM; platform_set_drvdata(pdev, machine); machine->owner = THIS_MODULE; machine->pdev = pdev; machine->name = "i.MX_3STACK"; machine->longname = "SGTL5000"; machine->ops = &machine_ops; /* register card */ ret = snd_soc_new_card(machine, 1, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1); if (ret < 0) { pr_err("%s: failed to create pcms\n", __func__); goto err; } /* SGTL5000 interface */ ret = -ENODEV; if (plat->src_port == 2) audio = snd_soc_pcm_link_new(machine, "imx_3stack-audio", &imx_3stack_pcm_ops, imx_pcm, sgtl5000_codec, sgtl5000_dai, imx_ssi_3); else audio = snd_soc_pcm_link_new(machine, "imx_3stack-audio", &imx_3stack_pcm_ops, imx_pcm, sgtl5000_codec, sgtl5000_dai, imx_ssi_1); if (audio == NULL) { pr_err("failed to create PCM link\n"); goto link_err; } ret = snd_soc_pcm_link_attach(audio); if (ret < 0) { pr_err("%s: failed to attach audio pcm\n", __func__); goto link_err; } ret = driver_create_file(pdev->dev.driver, &driver_attr_headphone); if (ret < 0) { pr_err("%s:failed to create driver_attr_headphone\n", __func__); goto sysfs_err; } return ret; sysfs_err: driver_remove_file(pdev->dev.driver, &driver_attr_headphone); link_err: snd_soc_machine_free(machine); err: kfree(machine); return ret; }
/* * This function will register the snd_soc_pcm_link drivers. * It also registers devices for platform DMA, I2S, SSP and registers an * I2C driver to probe the codec. */ static int __init imx_3stack_bt_probe(struct platform_device *pdev) { struct snd_soc_machine *machine; struct mxc_audio_platform_data *dev_data = pdev->dev.platform_data; struct snd_soc_pcm_link *bt_audio; const char *ssi_port; int ret; static int dev; if (dev >= SNDRV_CARDS) return -ENODEV; if (!enable[dev]) { dev++; return -ENOENT; } machine = kzalloc(sizeof(struct snd_soc_machine), GFP_KERNEL); if (machine == NULL) return -ENOMEM; machine->owner = THIS_MODULE; machine->pdev = pdev; machine->name = "imx_3stack"; machine->longname = "bluetooth"; machine->ops = &imx_3stack_mach_ops; machine->private_data = dev_data; pdev->dev.driver_data = machine; /* register card */ imx_3stack_mach = machine; ret = snd_soc_new_card(machine, 1, index[dev], id[dev]); if (ret < 0) { pr_err("%s: failed to create bt sound card\n", __func__); goto err; } /* imx_3stack bluetooth audio interface */ if (dev_data->src_port == 1) ssi_port = imx_ssi_1; else ssi_port = imx_ssi_3; bt_audio = snd_soc_pcm_link_new(machine, "imx_3stack-bt", &bt_pcm, imx_pcm, bt_codec, bt_dai, ssi_port); if (bt_audio == NULL) { pr_err("Failed to create bt PCM link\n"); goto err; } ret = snd_soc_pcm_link_attach(bt_audio); if (ret < 0) goto link_err; return ret; link_err: snd_soc_machine_free(machine); err: kfree(machine); return ret; }
static int __init imx_3stack_audio_probe(struct platform_device *pdev) { struct snd_soc_machine *machine; struct mxc_audio_platform_data *dev_data = pdev->dev.platform_data; struct snd_soc_pcm_link *hifi; const char *ssi_port; int ret; machine = kzalloc(sizeof(struct snd_soc_machine), GFP_KERNEL); if (machine == NULL) return -ENOMEM; machine->owner = THIS_MODULE; machine->pdev = pdev; machine->name = "i.MX_3STACK"; machine->longname = "WM8903"; machine->ops = &imx_3stack_mach_ops; pdev->dev.driver_data = machine; /* register card */ imx_3stack_mach = machine; ret = snd_soc_new_card(machine, 1, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1); if (ret < 0) { pr_err("%s: failed to create stereo sound card\n", __func__); goto err; } if (dev_data->src_port == 2) ssi_port = imx_ssi_3; else ssi_port = imx_ssi_1; hifi = snd_soc_pcm_link_new(machine, "imx_3stack-hifi", &imx_3stack_pcm_ops, imx_pcm, "wm8903-codec", "wm8903-hifi-dai", ssi_port); if (hifi == NULL) { pr_err("Failed to create HiFi PCM link\n"); snd_soc_machine_free(machine); goto err; } ret = snd_soc_pcm_link_attach(hifi); hifi->private_data = dev_data; if (ret < 0) goto link_err; imx_3stack_init_dam(dev_data->src_port, dev_data->ext_port); ret = driver_create_file(pdev->dev.driver, &driver_attr_headphone); if (ret < 0) goto sysfs_err; return ret; sysfs_err: driver_remove_file(pdev->dev.driver, &driver_attr_headphone); link_err: snd_soc_machine_free(machine); err: kfree(machine); return ret; }
/* * This function will register the snd_soc_pcm_link drivers. * It also registers devices for platform DMA, I2S, SSP and registers an * I2C driver to probe the codec. */ static int __init imx_3stack_ak4647_probe(struct platform_device *pdev) { struct snd_soc_machine *machine; struct mxc_audio_platform_data *dev_data = pdev->dev.platform_data; struct snd_soc_pcm_link *hifi; const char *ssi_port; int ret; machine = kzalloc(sizeof(struct snd_soc_machine), GFP_KERNEL); if (machine == NULL) return -ENOMEM; machine->owner = THIS_MODULE; machine->pdev = pdev; machine->name = "imx_3stack"; machine->longname = "ak4647"; machine->ops = &imx_3stack_mach_ops; pdev->dev.driver_data = machine; /* register card */ imx_3stack_mach = machine; ret = snd_soc_new_card(machine, 1, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1); if (ret < 0) { pr_err("%s: failed to create stereo sound card\n", __func__); goto err; } pmic_gpio_set_bit_val(MCU_GPIO_REG_RESET_2, 1, 0); msleep(1); pmic_gpio_set_bit_val(MCU_GPIO_REG_RESET_2, 1, 1); /* imx_3stack ak4647 hifi interface */ if (dev_data->src_port == 1) ssi_port = imx_ssi_1; else ssi_port = imx_ssi_3; hifi = snd_soc_pcm_link_new(machine, "imx_3stack-hifi", &hifi_pcm, imx_pcm, ak4647_codec, ak4647_hifi_dai, ssi_port); if (hifi == NULL) { pr_err("Failed to create HiFi PCM link\n"); goto err; } ret = snd_soc_pcm_link_attach(hifi); hifi->private_data = dev_data; if (ret < 0) goto link_err; /* Configure audio port 3 */ gpio_activate_audio_ports(); if (request_irq (dev_data->intr_id_hp, imx_headphone_detect_handler, 0, "headphone", machine)) goto link_err; ret = driver_create_file(pdev->dev.driver, &driver_attr_headphone); if (ret < 0) goto sysfs_err; return ret; sysfs_err: driver_remove_file(pdev->dev.driver, &driver_attr_headphone); link_err: snd_soc_machine_free(machine); err: kfree(machine); return ret; }