diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-24 16:37:37 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-24 16:37:37 -0400 |
commit | dbf7b5915b39bfff548e4c6a3a753fc291a60e25 (patch) | |
tree | 55c457a22aa869d2ab558317877138369ae5f9bb /sound/soc/tegra/tegra20_spdif.c | |
parent | d14b7a419a664cd7c1c585c9e7fffee9e9051d53 (diff) | |
parent | c1b623d9e4117d18d244e9b7fb30d2c27aeaf074 (diff) |
Merge tag 'sound-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound update from Takashi Iwai:
"This is a fairly quiet release in all sound area. Only a little bit
of changes in the core side while most of changes are seen in the
drivers.
HD-audio:
- A few new codec additions for Nvidia, Realtek and VIA
- Intel Haswell audio support
- Support for "phantom" jacks for consistent jack reporting
- Major clean-ups in HDMI/DP driver codes
- A workaround for inverted digital-mic pins with Realtek codecs
- Removal of beep_mode=2 option
ASoC:
- Added the ability to add and remove DAPM paths dynamically, mostly
for reparenting on clock changes
- New machine drivers for Marvell Brownstone, ST-Ericsson Ux500
reference platform and ttc-dkp
- New CPU drivers for Blackfin BF6xx SPORTs in I2S mode, Marvell MMP,
Synopsis Designware I2S controllers, and SPEAr DMA and S/PDIF
- New CODEC drivers for Dialog DA732x, ST STA529, ST-Ericsson AB8500,
TI Isabelle and Wolfson Microelectronics WM5102 and WM5110
- DAPM fixes for the recent locking changes
- Fix for _PRE and _POST widgets (which have been broken for a few
releases now)
- A couple of minor driver updates
Misc
- Conversion to new dev_pm_ops in platform and PCI drivers
- LTC support and some fixes in PCXHR driver
- A few fixes and PM support for ISA OPti9xx and WSS cards
- Some TLV code cleanup
- Move driver-specific headers from include/sound to local dirs"
* tag 'sound-3.6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (212 commits)
ASoC: dapm: Fix _PRE and _POST events for DAPM performance improvements
ALSA: hda - add dock support for Thinkpad X230 Tablet
ALSA: hda - Turn on PIN_OUT from hdmi playback prepare.
ASoC imx-audmux: add MX31_AUDMUX_PORT7_SSI_PINS_7 define
ASoC: littlemill: Add userspace control of the WM1250 I/O
ASoC: wm8994: Update micdet for irqdomain conversion
ALSA: hda - make sure alc268 does not OOPS on codec parse
ALSA: hda - Add support for Realtek ALC282
ALSA: hda - Fix index number conflicts of phantom jacks
ALSA: opti9xx: Fix section mismatch by PM support
ALSA: snd-opti9xx: Implement suspend/resume
ALSA: hda - Add new GPU codec ID to snd-hda
ALSA: hda - Fix driver type of Haswell controller to AZX_DRIVER_SCH
ALSA: hda - add Haswell HDMI codec id
ALSA: hda - Add DeviceID for Haswell HDA
ALSA: wss_lib: Fix resume on Yamaha OPL3-SAx
ALSA: wss_lib: fix suspend/resume
ALSA: es1938: replace TLV_DB_RANGE_HEAD with DECLARE_TLV_DB_RANGE
ALSA: tlv: add DECLARE_TLV_DB_RANGE()
ALSA: tlv: add DECLARE_TLV_CONTAINER()
...
Diffstat (limited to 'sound/soc/tegra/tegra20_spdif.c')
-rw-r--r-- | sound/soc/tegra/tegra20_spdif.c | 36 |
1 files changed, 14 insertions, 22 deletions
diff --git a/sound/soc/tegra/tegra20_spdif.c b/sound/soc/tegra/tegra20_spdif.c index 2262e4fdec2a..3ebc8670ba00 100644 --- a/sound/soc/tegra/tegra20_spdif.c +++ b/sound/soc/tegra/tegra20_spdif.c | |||
@@ -37,19 +37,6 @@ | |||
37 | 37 | ||
38 | #define DRV_NAME "tegra20-spdif" | 38 | #define DRV_NAME "tegra20-spdif" |
39 | 39 | ||
40 | static inline void tegra20_spdif_write(struct tegra20_spdif *spdif, u32 reg, | ||
41 | u32 val) | ||
42 | { | ||
43 | regmap_write(spdif->regmap, reg, val); | ||
44 | } | ||
45 | |||
46 | static inline u32 tegra20_spdif_read(struct tegra20_spdif *spdif, u32 reg) | ||
47 | { | ||
48 | u32 val; | ||
49 | regmap_read(spdif->regmap, reg, &val); | ||
50 | return val; | ||
51 | } | ||
52 | |||
53 | static int tegra20_spdif_runtime_suspend(struct device *dev) | 40 | static int tegra20_spdif_runtime_suspend(struct device *dev) |
54 | { | 41 | { |
55 | struct tegra20_spdif *spdif = dev_get_drvdata(dev); | 42 | struct tegra20_spdif *spdif = dev_get_drvdata(dev); |
@@ -77,21 +64,24 @@ static int tegra20_spdif_hw_params(struct snd_pcm_substream *substream, | |||
77 | struct snd_pcm_hw_params *params, | 64 | struct snd_pcm_hw_params *params, |
78 | struct snd_soc_dai *dai) | 65 | struct snd_soc_dai *dai) |
79 | { | 66 | { |
80 | struct device *dev = substream->pcm->card->dev; | 67 | struct device *dev = dai->dev; |
81 | struct tegra20_spdif *spdif = snd_soc_dai_get_drvdata(dai); | 68 | struct tegra20_spdif *spdif = snd_soc_dai_get_drvdata(dai); |
69 | unsigned int mask, val; | ||
82 | int ret, spdifclock; | 70 | int ret, spdifclock; |
83 | 71 | ||
84 | spdif->reg_ctrl &= ~TEGRA20_SPDIF_CTRL_PACK; | 72 | mask = TEGRA20_SPDIF_CTRL_PACK | |
85 | spdif->reg_ctrl &= ~TEGRA20_SPDIF_CTRL_BIT_MODE_MASK; | 73 | TEGRA20_SPDIF_CTRL_BIT_MODE_MASK; |
86 | switch (params_format(params)) { | 74 | switch (params_format(params)) { |
87 | case SNDRV_PCM_FORMAT_S16_LE: | 75 | case SNDRV_PCM_FORMAT_S16_LE: |
88 | spdif->reg_ctrl |= TEGRA20_SPDIF_CTRL_PACK; | 76 | val = TEGRA20_SPDIF_CTRL_PACK | |
89 | spdif->reg_ctrl |= TEGRA20_SPDIF_CTRL_BIT_MODE_16BIT; | 77 | TEGRA20_SPDIF_CTRL_BIT_MODE_16BIT; |
90 | break; | 78 | break; |
91 | default: | 79 | default: |
92 | return -EINVAL; | 80 | return -EINVAL; |
93 | } | 81 | } |
94 | 82 | ||
83 | regmap_update_bits(spdif->regmap, TEGRA20_SPDIF_CTRL, mask, val); | ||
84 | |||
95 | switch (params_rate(params)) { | 85 | switch (params_rate(params)) { |
96 | case 32000: | 86 | case 32000: |
97 | spdifclock = 4096000; | 87 | spdifclock = 4096000; |
@@ -129,14 +119,15 @@ static int tegra20_spdif_hw_params(struct snd_pcm_substream *substream, | |||
129 | 119 | ||
130 | static void tegra20_spdif_start_playback(struct tegra20_spdif *spdif) | 120 | static void tegra20_spdif_start_playback(struct tegra20_spdif *spdif) |
131 | { | 121 | { |
132 | spdif->reg_ctrl |= TEGRA20_SPDIF_CTRL_TX_EN; | 122 | regmap_update_bits(spdif->regmap, TEGRA20_SPDIF_CTRL, |
133 | tegra20_spdif_write(spdif, TEGRA20_SPDIF_CTRL, spdif->reg_ctrl); | 123 | TEGRA20_SPDIF_CTRL_TX_EN, |
124 | TEGRA20_SPDIF_CTRL_TX_EN); | ||
134 | } | 125 | } |
135 | 126 | ||
136 | static void tegra20_spdif_stop_playback(struct tegra20_spdif *spdif) | 127 | static void tegra20_spdif_stop_playback(struct tegra20_spdif *spdif) |
137 | { | 128 | { |
138 | spdif->reg_ctrl &= ~TEGRA20_SPDIF_CTRL_TX_EN; | 129 | regmap_update_bits(spdif->regmap, TEGRA20_SPDIF_CTRL, |
139 | tegra20_spdif_write(spdif, TEGRA20_SPDIF_CTRL, spdif->reg_ctrl); | 130 | TEGRA20_SPDIF_CTRL_TX_EN, 0); |
140 | } | 131 | } |
141 | 132 | ||
142 | static int tegra20_spdif_trigger(struct snd_pcm_substream *substream, int cmd, | 133 | static int tegra20_spdif_trigger(struct snd_pcm_substream *substream, int cmd, |
@@ -181,6 +172,7 @@ static struct snd_soc_dai_driver tegra20_spdif_dai = { | |||
181 | .name = DRV_NAME, | 172 | .name = DRV_NAME, |
182 | .probe = tegra20_spdif_probe, | 173 | .probe = tegra20_spdif_probe, |
183 | .playback = { | 174 | .playback = { |
175 | .stream_name = "Playback", | ||
184 | .channels_min = 2, | 176 | .channels_min = 2, |
185 | .channels_max = 2, | 177 | .channels_max = 2, |
186 | .rates = SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | | 178 | .rates = SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | |