~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/sound/soc/pxa/palm27x.c

Version: ~ [ linux-5.1-rc5 ] ~ [ linux-5.0.7 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.34 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.111 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.168 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.178 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.138 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.65 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * linux/sound/soc/pxa/palm27x.c
  3  *
  4  * SoC Audio driver for Palm T|X, T5 and LifeDrive
  5  *
  6  * based on tosa.c
  7  *
  8  * Copyright (C) 2008 Marek Vasut <marek.vasut@gmail.com>
  9  *
 10  * This program is free software; you can redistribute it and/or modify
 11  * it under the terms of the GNU General Public License version 2 as
 12  * published by the Free Software Foundation.
 13  *
 14  */
 15 
 16 #include <linux/module.h>
 17 #include <linux/moduleparam.h>
 18 #include <linux/device.h>
 19 #include <linux/gpio.h>
 20 
 21 #include <sound/core.h>
 22 #include <sound/pcm.h>
 23 #include <sound/soc.h>
 24 #include <sound/jack.h>
 25 
 26 #include <asm/mach-types.h>
 27 #include <mach/audio.h>
 28 #include <linux/platform_data/asoc-palm27x.h>
 29 
 30 static struct snd_soc_jack hs_jack;
 31 
 32 /* Headphones jack detection DAPM pins */
 33 static struct snd_soc_jack_pin hs_jack_pins[] = {
 34         {
 35                 .pin    = "Headphone Jack",
 36                 .mask   = SND_JACK_HEADPHONE,
 37         },
 38 };
 39 
 40 /* Headphones jack detection gpios */
 41 static struct snd_soc_jack_gpio hs_jack_gpios[] = {
 42         [0] = {
 43                 /* gpio is set on per-platform basis */
 44                 .name           = "hp-gpio",
 45                 .report         = SND_JACK_HEADPHONE,
 46                 .debounce_time  = 200,
 47         },
 48 };
 49 
 50 /* Palm27x machine dapm widgets */
 51 static const struct snd_soc_dapm_widget palm27x_dapm_widgets[] = {
 52         SND_SOC_DAPM_HP("Headphone Jack", NULL),
 53         SND_SOC_DAPM_SPK("Ext. Speaker", NULL),
 54         SND_SOC_DAPM_MIC("Ext. Microphone", NULL),
 55 };
 56 
 57 /* PalmTX audio map */
 58 static const struct snd_soc_dapm_route audio_map[] = {
 59         /* headphone connected to HPOUTL, HPOUTR */
 60         {"Headphone Jack", NULL, "HPOUTL"},
 61         {"Headphone Jack", NULL, "HPOUTR"},
 62 
 63         /* ext speaker connected to ROUT2, LOUT2 */
 64         {"Ext. Speaker", NULL, "LOUT2"},
 65         {"Ext. Speaker", NULL, "ROUT2"},
 66 
 67         /* mic connected to MIC1 */
 68         {"MIC1", NULL, "Ext. Microphone"},
 69 };
 70 
 71 static struct snd_soc_card palm27x_asoc;
 72 
 73 static int palm27x_ac97_init(struct snd_soc_pcm_runtime *rtd)
 74 {
 75         int err;
 76 
 77         /* Jack detection API stuff */
 78         err = snd_soc_card_jack_new(rtd->card, "Headphone Jack",
 79                                     SND_JACK_HEADPHONE, &hs_jack, hs_jack_pins,
 80                                     ARRAY_SIZE(hs_jack_pins));
 81         if (err)
 82                 return err;
 83 
 84         err = snd_soc_jack_add_gpios(&hs_jack, ARRAY_SIZE(hs_jack_gpios),
 85                                 hs_jack_gpios);
 86 
 87         return err;
 88 }
 89 
 90 static struct snd_soc_dai_link palm27x_dai[] = {
 91 {
 92         .name = "AC97 HiFi",
 93         .stream_name = "AC97 HiFi",
 94         .cpu_dai_name = "pxa2xx-ac97",
 95         .codec_dai_name =  "wm9712-hifi",
 96         .codec_name = "wm9712-codec",
 97         .platform_name = "pxa-pcm-audio",
 98         .init = palm27x_ac97_init,
 99 },
100 {
101         .name = "AC97 Aux",
102         .stream_name = "AC97 Aux",
103         .cpu_dai_name = "pxa2xx-ac97-aux",
104         .codec_dai_name = "wm9712-aux",
105         .codec_name = "wm9712-codec",
106         .platform_name = "pxa-pcm-audio",
107 },
108 };
109 
110 static struct snd_soc_card palm27x_asoc = {
111         .name = "Palm/PXA27x",
112         .owner = THIS_MODULE,
113         .dai_link = palm27x_dai,
114         .num_links = ARRAY_SIZE(palm27x_dai),
115         .dapm_widgets = palm27x_dapm_widgets,
116         .num_dapm_widgets = ARRAY_SIZE(palm27x_dapm_widgets),
117         .dapm_routes = audio_map,
118         .num_dapm_routes = ARRAY_SIZE(audio_map),
119         .fully_routed = true,
120 };
121 
122 static int palm27x_asoc_probe(struct platform_device *pdev)
123 {
124         int ret;
125 
126         if (!(machine_is_palmtx() || machine_is_palmt5() ||
127                 machine_is_palmld() || machine_is_palmte2()))
128                 return -ENODEV;
129 
130         if (!pdev->dev.platform_data) {
131                 dev_err(&pdev->dev, "please supply platform_data\n");
132                 return -ENODEV;
133         }
134 
135         hs_jack_gpios[0].gpio = ((struct palm27x_asoc_info *)
136                         (pdev->dev.platform_data))->jack_gpio;
137 
138         palm27x_asoc.dev = &pdev->dev;
139 
140         ret = devm_snd_soc_register_card(&pdev->dev, &palm27x_asoc);
141         if (ret)
142                 dev_err(&pdev->dev, "snd_soc_register_card() failed: %d\n",
143                         ret);
144         return ret;
145 }
146 
147 static struct platform_driver palm27x_wm9712_driver = {
148         .probe          = palm27x_asoc_probe,
149         .driver         = {
150                 .name           = "palm27x-asoc",
151                 .pm     = &snd_soc_pm_ops,
152         },
153 };
154 
155 module_platform_driver(palm27x_wm9712_driver);
156 
157 /* Module information */
158 MODULE_AUTHOR("Marek Vasut <marek.vasut@gmail.com>");
159 MODULE_DESCRIPTION("ALSA SoC Palm T|X, T5 and LifeDrive");
160 MODULE_LICENSE("GPL");
161 MODULE_ALIAS("platform:palm27x-asoc");
162 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp