static int palm27x_asoc_probe(struct platform_device *pdev) { int ret; if (!(machine_is_palmtx() || machine_is_palmt5() || machine_is_palmld() || machine_is_palmte2())) return -ENODEV; if (!pdev->dev.platform_data) { dev_err(&pdev->dev, "please supply platform_data\n"); return -ENODEV; } hs_jack_gpios[0].gpio = ((struct palm27x_asoc_info *) (pdev->dev.platform_data))->jack_gpio; palm27x_snd_device = platform_device_alloc("soc-audio", -1); if (!palm27x_snd_device) return -ENOMEM; platform_set_drvdata(palm27x_snd_device, &palm27x_snd_devdata); palm27x_snd_devdata.dev = &palm27x_snd_device->dev; ret = platform_device_add(palm27x_snd_device); if (ret != 0) goto put_device; return 0; put_device: platform_device_put(palm27x_snd_device); return ret; }
static int palm27x_ac97_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; int err; /* add palm27x specific widgets */ err = snd_soc_dapm_new_controls(codec, palm27x_dapm_widgets, ARRAY_SIZE(palm27x_dapm_widgets)); if (err) return err; /* set up palm27x specific audio path audio_map */ err = snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); if (err) return err; /* connected pins */ if (machine_is_palmld()) snd_soc_dapm_enable_pin(codec, "MIC1"); snd_soc_dapm_enable_pin(codec, "HPOUTL"); snd_soc_dapm_enable_pin(codec, "HPOUTR"); snd_soc_dapm_enable_pin(codec, "LOUT2"); snd_soc_dapm_enable_pin(codec, "ROUT2"); /* not connected pins */ snd_soc_dapm_nc_pin(codec, "OUT3"); snd_soc_dapm_nc_pin(codec, "MONOOUT"); snd_soc_dapm_nc_pin(codec, "LINEINL"); snd_soc_dapm_nc_pin(codec, "LINEINR"); snd_soc_dapm_nc_pin(codec, "PCBEEP"); snd_soc_dapm_nc_pin(codec, "PHONE"); snd_soc_dapm_nc_pin(codec, "MIC2"); err = snd_soc_dapm_sync(codec); if (err) return err; /* Jack detection API stuff */ err = snd_soc_jack_new(codec, "Headphone Jack", SND_JACK_HEADPHONE, &hs_jack); if (err) return err; err = snd_soc_jack_add_pins(&hs_jack, ARRAY_SIZE(hs_jack_pins), hs_jack_pins); if (err) return err; err = snd_soc_jack_add_gpios(&hs_jack, ARRAY_SIZE(hs_jack_gpios), hs_jack_gpios); return err; }
static int __init palm27x_asoc_init(void) { int ret; if (!(machine_is_palmtx() || machine_is_palmt5() || machine_is_palmld())) return -ENODEV; ret = gpio_request(palm27x_ep_gpio, "Headphone Jack"); if (ret) return ret; ret = gpio_direction_input(palm27x_ep_gpio); if (ret) goto err_alloc; if (request_irq(gpio_to_irq(palm27x_ep_gpio), palm27x_interrupt, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "Headphone jack", NULL)) goto err_alloc; palm27x_snd_device = platform_device_alloc("soc-audio", -1); if (!palm27x_snd_device) { ret = -ENOMEM; goto err_dev; } platform_set_drvdata(palm27x_snd_device, &palm27x_snd_devdata); palm27x_snd_devdata.dev = &palm27x_snd_device->dev; ret = platform_device_add(palm27x_snd_device); if (ret != 0) goto put_device; return 0; put_device: platform_device_put(palm27x_snd_device); err_dev: free_irq(gpio_to_irq(palm27x_ep_gpio), NULL); err_alloc: gpio_free(palm27x_ep_gpio); return ret; }
static int __init palmld_pcmcia_init(void) { int ret; if (!machine_is_palmld()) return -ENODEV; palmld_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1); if (!palmld_pcmcia_device) return -ENOMEM; ret = platform_device_add_data(palmld_pcmcia_device, &palmld_pcmcia_ops, sizeof(palmld_pcmcia_ops)); if (!ret) ret = platform_device_add(palmld_pcmcia_device); if (ret) platform_device_put(palmld_pcmcia_device); return ret; }
static int palm27x_asoc_probe(struct platform_device *pdev) { int ret; if (!(machine_is_palmtx() || machine_is_palmt5() || machine_is_palmld() || machine_is_palmte2())) return -ENODEV; if (!pdev->dev.platform_data) { dev_err(&pdev->dev, "please supply platform_data\n"); return -ENODEV; } hs_jack_gpios[0].gpio = ((struct palm27x_asoc_info *) (pdev->dev.platform_data))->jack_gpio; palm27x_asoc.dev = &pdev->dev; ret = snd_soc_register_card(&palm27x_asoc); if (ret) dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n", ret); return ret; }