static void __exit neo1973_exit(void) { platform_device_unregister(neo1973_snd_device); if (machine_is_neo1973_gta02()) { gpio_free_array(neo1973_gta02_gpios, ARRAY_SIZE(neo1973_gta02_gpios)); } }
static int neo1973_wm8753_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; int ret; /* set up NC codec pins */ if (machine_is_neo1973_gta01()) { snd_soc_dapm_nc_pin(dapm, "LOUT2"); snd_soc_dapm_nc_pin(dapm, "ROUT2"); } snd_soc_dapm_nc_pin(dapm, "OUT3"); snd_soc_dapm_nc_pin(dapm, "OUT4"); snd_soc_dapm_nc_pin(dapm, "LINE1"); snd_soc_dapm_nc_pin(dapm, "LINE2"); /* Add neo1973 specific widgets */ ret = snd_soc_dapm_new_controls(dapm, neo1973_wm8753_dapm_widgets, ARRAY_SIZE(neo1973_wm8753_dapm_widgets)); if (ret) return ret; /* add neo1973 specific controls */ ret = snd_soc_add_controls(codec, neo1973_wm8753_controls, ARRAY_SIZE(neo1973_wm8753_controls)); if (ret) return ret; /* set up neo1973 specific audio routes */ ret = snd_soc_dapm_add_routes(dapm, neo1973_wm8753_routes, ARRAY_SIZE(neo1973_wm8753_routes)); if (ret) return ret; /* set endpoints to default off mode */ snd_soc_dapm_disable_pin(dapm, "GSM Line Out"); snd_soc_dapm_disable_pin(dapm, "GSM Line In"); snd_soc_dapm_disable_pin(dapm, "Headset Mic"); snd_soc_dapm_disable_pin(dapm, "Handset Mic"); /* allow audio paths from the GSM modem to run during suspend */ snd_soc_dapm_ignore_suspend(dapm, "GSM Line Out"); snd_soc_dapm_ignore_suspend(dapm, "GSM Line In"); snd_soc_dapm_ignore_suspend(dapm, "Headset Mic"); snd_soc_dapm_ignore_suspend(dapm, "Handset Mic"); if (machine_is_neo1973_gta02()) { ret = neo1973_gta02_wm8753_init(codec); if (ret) return ret; } return 0; }
static int __init neo1973_init(void) { int ret; if (!machine_is_neo1973_gta02()) return -ENODEV; if (machine_is_neo1973_gta02()) { neo1973.name = "neo1973gta02"; neo1973.num_aux_devs = 1; ret = gpio_request_array(neo1973_gta02_gpios, ARRAY_SIZE(neo1973_gta02_gpios)); if (ret) return ret; } neo1973_snd_device = platform_device_alloc("soc-audio", -1); if (!neo1973_snd_device) { ret = -ENOMEM; goto err_gpio_free; } platform_set_drvdata(neo1973_snd_device, &neo1973); ret = platform_device_add(neo1973_snd_device); if (ret) goto err_put_device; return 0; err_put_device: platform_device_put(neo1973_snd_device); err_gpio_free: if (machine_is_neo1973_gta02()) { gpio_free_array(neo1973_gta02_gpios, ARRAY_SIZE(neo1973_gta02_gpios)); } return ret; }
static int neo1973_wm8753_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; int ret; /* */ snd_soc_dapm_nc_pin(dapm, "OUT3"); snd_soc_dapm_nc_pin(dapm, "OUT4"); snd_soc_dapm_nc_pin(dapm, "LINE1"); snd_soc_dapm_nc_pin(dapm, "LINE2"); /* */ ret = snd_soc_dapm_new_controls(dapm, neo1973_wm8753_dapm_widgets, ARRAY_SIZE(neo1973_wm8753_dapm_widgets)); if (ret) return ret; /* */ ret = snd_soc_add_card_controls(rtd->card, neo1973_wm8753_controls, ARRAY_SIZE(neo1973_wm8753_controls)); if (ret) return ret; /* */ ret = snd_soc_dapm_add_routes(dapm, neo1973_wm8753_routes, ARRAY_SIZE(neo1973_wm8753_routes)); if (ret) return ret; /* */ snd_soc_dapm_disable_pin(dapm, "GSM Line Out"); snd_soc_dapm_disable_pin(dapm, "GSM Line In"); snd_soc_dapm_disable_pin(dapm, "Headset Mic"); snd_soc_dapm_disable_pin(dapm, "Handset Mic"); /* */ snd_soc_dapm_ignore_suspend(dapm, "GSM Line Out"); snd_soc_dapm_ignore_suspend(dapm, "GSM Line In"); snd_soc_dapm_ignore_suspend(dapm, "Headset Mic"); snd_soc_dapm_ignore_suspend(dapm, "Handset Mic"); if (machine_is_neo1973_gta02()) { ret = neo1973_gta02_wm8753_init(codec); if (ret) return ret; } return 0; }