Merge branch 'for-3.1' into for-3.2

This commit is contained in:
Mark Brown 2011-08-09 10:00:05 +09:00
commit 6f1a7767fd
13 changed files with 6780 additions and 6764 deletions

View file

@ -65,7 +65,7 @@
#include <plat/iic.h> #include <plat/iic.h>
#include <plat/pm.h> #include <plat/pm.h>
#include <sound/wm8915.h> #include <sound/wm8996.h>
#include <sound/wm8962.h> #include <sound/wm8962.h>
#include <sound/wm9081.h> #include <sound/wm9081.h>
@ -614,7 +614,7 @@ static struct wm831x_pdata glenfarclas_pmic_pdata __initdata = {
.disable_touch = true, .disable_touch = true,
}; };
static struct wm8915_retune_mobile_config wm8915_retune[] = { static struct wm8996_retune_mobile_config wm8996_retune[] = {
{ {
.name = "Sub LPF", .name = "Sub LPF",
.rate = 48000, .rate = 48000,
@ -635,12 +635,12 @@ static struct wm8915_retune_mobile_config wm8915_retune[] = {
}, },
}; };
static struct wm8915_pdata wm8915_pdata __initdata = { static struct wm8996_pdata wm8996_pdata __initdata = {
.ldo_ena = S3C64XX_GPN(7), .ldo_ena = S3C64XX_GPN(7),
.gpio_base = CODEC_GPIO_BASE, .gpio_base = CODEC_GPIO_BASE,
.micdet_def = 1, .micdet_def = 1,
.inl_mode = WM8915_DIFFERRENTIAL_1, .inl_mode = WM8996_DIFFERRENTIAL_1,
.inr_mode = WM8915_DIFFERRENTIAL_1, .inr_mode = WM8996_DIFFERRENTIAL_1,
.irq_flags = IRQF_TRIGGER_RISING, .irq_flags = IRQF_TRIGGER_RISING,
@ -652,8 +652,8 @@ static struct wm8915_pdata wm8915_pdata __initdata = {
0x020e, /* GPIO5 == CLKOUT */ 0x020e, /* GPIO5 == CLKOUT */
}, },
.retune_mobile_cfgs = wm8915_retune, .retune_mobile_cfgs = wm8996_retune,
.num_retune_mobile_cfgs = ARRAY_SIZE(wm8915_retune), .num_retune_mobile_cfgs = ARRAY_SIZE(wm8996_retune),
}; };
static struct wm8962_pdata wm8962_pdata __initdata = { static struct wm8962_pdata wm8962_pdata __initdata = {
@ -679,8 +679,8 @@ static struct i2c_board_info i2c_devs1[] __initdata = {
.platform_data = &glenfarclas_pmic_pdata }, .platform_data = &glenfarclas_pmic_pdata },
{ I2C_BOARD_INFO("wm1250-ev1", 0x27) }, { I2C_BOARD_INFO("wm1250-ev1", 0x27) },
{ I2C_BOARD_INFO("wm8915", 0x1a), { I2C_BOARD_INFO("wm8996", 0x1a),
.platform_data = &wm8915_pdata, .platform_data = &wm8996_pdata,
.irq = GLENFARCLAS_PMIC_IRQ_BASE + WM831X_IRQ_GPIO_2, .irq = GLENFARCLAS_PMIC_IRQ_BASE + WM831X_IRQ_GPIO_2,
}, },
{ I2C_BOARD_INFO("wm9081", 0x6c), { I2C_BOARD_INFO("wm9081", 0x6c),

View file

@ -1,5 +1,5 @@
/* /*
* linux/sound/wm8915.h -- Platform data for WM8915 * linux/sound/wm8996.h -- Platform data for WM8996
* *
* Copyright 2011 Wolfson Microelectronics. PLC. * Copyright 2011 Wolfson Microelectronics. PLC.
* *
@ -8,14 +8,14 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
#ifndef __LINUX_SND_WM8903_H #ifndef __LINUX_SND_WM8996_H
#define __LINUX_SND_WM8903_H #define __LINUX_SND_WM8996_H
enum wm8915_inmode { enum wm8996_inmode {
WM8915_DIFFERRENTIAL_1 = 0, /* IN1xP - IN1xN */ WM8996_DIFFERRENTIAL_1 = 0, /* IN1xP - IN1xN */
WM8915_INVERTING = 1, /* IN1xN */ WM8996_INVERTING = 1, /* IN1xN */
WM8915_NON_INVERTING = 2, /* IN1xP */ WM8996_NON_INVERTING = 2, /* IN1xP */
WM8915_DIFFERENTIAL_2 = 3, /* IN2xP - IN2xP */ WM8996_DIFFERENTIAL_2 = 3, /* IN2xP - IN2xP */
}; };
/** /**
@ -25,23 +25,23 @@ enum wm8915_inmode {
* Configurations are expected to be generated using the ReTune Mobile * Configurations are expected to be generated using the ReTune Mobile
* control panel in WISCE - see http://www.wolfsonmicro.com/wisce/ * control panel in WISCE - see http://www.wolfsonmicro.com/wisce/
*/ */
struct wm8915_retune_mobile_config { struct wm8996_retune_mobile_config {
const char *name; const char *name;
int rate; int rate;
u16 regs[20]; u16 regs[20];
}; };
#define WM8915_SET_DEFAULT 0x10000 #define WM8996_SET_DEFAULT 0x10000
struct wm8915_pdata { struct wm8996_pdata {
int irq_flags; /** Set IRQ trigger flags; default active low */ int irq_flags; /** Set IRQ trigger flags; default active low */
int ldo_ena; /** GPIO for LDO1; -1 for none */ int ldo_ena; /** GPIO for LDO1; -1 for none */
int micdet_def; /** Default MICDET_SRC/HP1FB_SRC/MICD_BIAS */ int micdet_def; /** Default MICDET_SRC/HP1FB_SRC/MICD_BIAS */
enum wm8915_inmode inl_mode; enum wm8996_inmode inl_mode;
enum wm8915_inmode inr_mode; enum wm8996_inmode inr_mode;
u32 spkmute_seq; /** Value for register 0x802 */ u32 spkmute_seq; /** Value for register 0x802 */
@ -49,7 +49,7 @@ struct wm8915_pdata {
u32 gpio_default[5]; u32 gpio_default[5];
int num_retune_mobile_cfgs; int num_retune_mobile_cfgs;
struct wm8915_retune_mobile_config *retune_mobile_cfgs; struct wm8996_retune_mobile_config *retune_mobile_cfgs;
}; };
#endif #endif

View file

@ -78,7 +78,6 @@ config SND_SOC_ALL_CODECS
select SND_SOC_WM8900 if I2C select SND_SOC_WM8900 if I2C
select SND_SOC_WM8903 if I2C select SND_SOC_WM8903 if I2C
select SND_SOC_WM8904 if I2C select SND_SOC_WM8904 if I2C
select SND_SOC_WM8915 if I2C
select SND_SOC_WM8940 if I2C select SND_SOC_WM8940 if I2C
select SND_SOC_WM8955 if I2C select SND_SOC_WM8955 if I2C
select SND_SOC_WM8960 if I2C select SND_SOC_WM8960 if I2C
@ -95,6 +94,7 @@ config SND_SOC_ALL_CODECS
select SND_SOC_WM8993 if I2C select SND_SOC_WM8993 if I2C
select SND_SOC_WM8994 if MFD_WM8994 select SND_SOC_WM8994 if MFD_WM8994
select SND_SOC_WM8995 if SND_SOC_I2C_AND_SPI select SND_SOC_WM8995 if SND_SOC_I2C_AND_SPI
select SND_SOC_WM8996 if I2C
select SND_SOC_WM9081 if I2C select SND_SOC_WM9081 if I2C
select SND_SOC_WM9090 if I2C select SND_SOC_WM9090 if I2C
select SND_SOC_WM9705 if SND_SOC_AC97_BUS select SND_SOC_WM9705 if SND_SOC_AC97_BUS
@ -329,9 +329,6 @@ config SND_SOC_WM8903
config SND_SOC_WM8904 config SND_SOC_WM8904
tristate tristate
config SND_SOC_WM8915
tristate
config SND_SOC_WM8940 config SND_SOC_WM8940
tristate tristate
@ -380,6 +377,9 @@ config SND_SOC_WM8994
config SND_SOC_WM8995 config SND_SOC_WM8995
tristate tristate
config SND_SOC_WM8996
tristate
config SND_SOC_WM9081 config SND_SOC_WM9081
tristate tristate

View file

@ -63,7 +63,7 @@ snd-soc-wm8804-objs := wm8804.o
snd-soc-wm8900-objs := wm8900.o snd-soc-wm8900-objs := wm8900.o
snd-soc-wm8903-objs := wm8903.o snd-soc-wm8903-objs := wm8903.o
snd-soc-wm8904-objs := wm8904.o snd-soc-wm8904-objs := wm8904.o
snd-soc-wm8915-objs := wm8915.o snd-soc-wm8996-objs := wm8996.o
snd-soc-wm8940-objs := wm8940.o snd-soc-wm8940-objs := wm8940.o
snd-soc-wm8955-objs := wm8955.o snd-soc-wm8955-objs := wm8955.o
snd-soc-wm8960-objs := wm8960.o snd-soc-wm8960-objs := wm8960.o
@ -160,7 +160,7 @@ obj-$(CONFIG_SND_SOC_WM8804) += snd-soc-wm8804.o
obj-$(CONFIG_SND_SOC_WM8900) += snd-soc-wm8900.o obj-$(CONFIG_SND_SOC_WM8900) += snd-soc-wm8900.o
obj-$(CONFIG_SND_SOC_WM8903) += snd-soc-wm8903.o obj-$(CONFIG_SND_SOC_WM8903) += snd-soc-wm8903.o
obj-$(CONFIG_SND_SOC_WM8904) += snd-soc-wm8904.o obj-$(CONFIG_SND_SOC_WM8904) += snd-soc-wm8904.o
obj-$(CONFIG_SND_SOC_WM8915) += snd-soc-wm8915.o obj-$(CONFIG_SND_SOC_WM8996) += snd-soc-wm8996.o
obj-$(CONFIG_SND_SOC_WM8940) += snd-soc-wm8940.o obj-$(CONFIG_SND_SOC_WM8940) += snd-soc-wm8940.o
obj-$(CONFIG_SND_SOC_WM8955) += snd-soc-wm8955.o obj-$(CONFIG_SND_SOC_WM8955) += snd-soc-wm8955.o
obj-$(CONFIG_SND_SOC_WM8960) += snd-soc-wm8960.o obj-$(CONFIG_SND_SOC_WM8960) += snd-soc-wm8960.o

View file

@ -2046,8 +2046,13 @@ static int wm8903_probe(struct snd_soc_codec *codec)
/* power down chip */ /* power down chip */
static int wm8903_remove(struct snd_soc_codec *codec) static int wm8903_remove(struct snd_soc_codec *codec)
{ {
struct wm8903_priv *wm8903 = snd_soc_codec_get_drvdata(codec);
wm8903_free_gpio(codec); wm8903_free_gpio(codec);
wm8903_set_bias_level(codec, SND_SOC_BIAS_OFF); wm8903_set_bias_level(codec, SND_SOC_BIAS_OFF);
if (wm8903->irq)
free_irq(wm8903->irq, codec);
return 0; return 0;
} }

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

2994
sound/soc/codecs/wm8996.c Normal file

File diff suppressed because it is too large Load diff

3717
sound/soc/codecs/wm8996.h Normal file

File diff suppressed because it is too large Load diff

View file

@ -183,7 +183,7 @@ config SND_SOC_SPEYSIDE
tristate "Audio support for Wolfson Speyside" tristate "Audio support for Wolfson Speyside"
depends on SND_SOC_SAMSUNG && MACH_WLF_CRAGG_6410 depends on SND_SOC_SAMSUNG && MACH_WLF_CRAGG_6410
select SND_SAMSUNG_I2S select SND_SAMSUNG_I2S
select SND_SOC_WM8915 select SND_SOC_WM8996
select SND_SOC_WM9081 select SND_SOC_WM9081
config SND_SOC_SPEYSIDE_WM8962 config SND_SOC_SPEYSIDE_WM8962

View file

@ -14,10 +14,10 @@
#include <sound/jack.h> #include <sound/jack.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include "../codecs/wm8915.h" #include "../codecs/wm8996.h"
#include "../codecs/wm9081.h" #include "../codecs/wm9081.h"
#define WM8915_HPSEL_GPIO 214 #define WM8996_HPSEL_GPIO 214
static int speyside_set_bias_level(struct snd_soc_card *card, static int speyside_set_bias_level(struct snd_soc_card *card,
struct snd_soc_dapm_context *dapm, struct snd_soc_dapm_context *dapm,
@ -31,12 +31,12 @@ static int speyside_set_bias_level(struct snd_soc_card *card,
switch (level) { switch (level) {
case SND_SOC_BIAS_STANDBY: case SND_SOC_BIAS_STANDBY:
ret = snd_soc_dai_set_sysclk(codec_dai, WM8915_SYSCLK_MCLK2, ret = snd_soc_dai_set_sysclk(codec_dai, WM8996_SYSCLK_MCLK2,
32768, SND_SOC_CLOCK_IN); 32768, SND_SOC_CLOCK_IN);
if (ret < 0) if (ret < 0)
return ret; return ret;
ret = snd_soc_dai_set_pll(codec_dai, WM8915_FLL_MCLK2, ret = snd_soc_dai_set_pll(codec_dai, WM8996_FLL_MCLK2,
0, 0, 0); 0, 0, 0);
if (ret < 0) { if (ret < 0) {
pr_err("Failed to stop FLL\n"); pr_err("Failed to stop FLL\n");
@ -65,7 +65,7 @@ static int speyside_set_bias_level_post(struct snd_soc_card *card,
case SND_SOC_BIAS_PREPARE: case SND_SOC_BIAS_PREPARE:
if (card->dapm.bias_level == SND_SOC_BIAS_STANDBY) { if (card->dapm.bias_level == SND_SOC_BIAS_STANDBY) {
ret = snd_soc_dai_set_pll(codec_dai, 0, ret = snd_soc_dai_set_pll(codec_dai, 0,
WM8915_FLL_MCLK2, WM8996_FLL_MCLK2,
32768, 48000 * 256); 32768, 48000 * 256);
if (ret < 0) { if (ret < 0) {
pr_err("Failed to start FLL\n"); pr_err("Failed to start FLL\n");
@ -73,7 +73,7 @@ static int speyside_set_bias_level_post(struct snd_soc_card *card,
} }
ret = snd_soc_dai_set_sysclk(codec_dai, ret = snd_soc_dai_set_sysclk(codec_dai,
WM8915_SYSCLK_FLL, WM8996_SYSCLK_FLL,
48000 * 256, 48000 * 256,
SND_SOC_CLOCK_IN); SND_SOC_CLOCK_IN);
if (ret < 0) if (ret < 0)
@ -149,26 +149,26 @@ static void speyside_set_polarity(struct snd_soc_codec *codec,
int polarity) int polarity)
{ {
speyside_jack_polarity = !polarity; speyside_jack_polarity = !polarity;
gpio_direction_output(WM8915_HPSEL_GPIO, speyside_jack_polarity); gpio_direction_output(WM8996_HPSEL_GPIO, speyside_jack_polarity);
/* Re-run DAPM to make sure we're using the correct mic bias */ /* Re-run DAPM to make sure we're using the correct mic bias */
snd_soc_dapm_sync(&codec->dapm); snd_soc_dapm_sync(&codec->dapm);
} }
static int speyside_wm8915_init(struct snd_soc_pcm_runtime *rtd) static int speyside_wm8996_init(struct snd_soc_pcm_runtime *rtd)
{ {
struct snd_soc_dai *dai = rtd->codec_dai; struct snd_soc_dai *dai = rtd->codec_dai;
struct snd_soc_codec *codec = rtd->codec; struct snd_soc_codec *codec = rtd->codec;
int ret; int ret;
ret = snd_soc_dai_set_sysclk(dai, WM8915_SYSCLK_MCLK2, 32768, 0); ret = snd_soc_dai_set_sysclk(dai, WM8996_SYSCLK_MCLK2, 32768, 0);
if (ret < 0) if (ret < 0)
return ret; return ret;
ret = gpio_request(WM8915_HPSEL_GPIO, "HP_SEL"); ret = gpio_request(WM8996_HPSEL_GPIO, "HP_SEL");
if (ret != 0) if (ret != 0)
pr_err("Failed to request HP_SEL GPIO: %d\n", ret); pr_err("Failed to request HP_SEL GPIO: %d\n", ret);
gpio_direction_output(WM8915_HPSEL_GPIO, speyside_jack_polarity); gpio_direction_output(WM8996_HPSEL_GPIO, speyside_jack_polarity);
ret = snd_soc_jack_new(codec, "Headset", ret = snd_soc_jack_new(codec, "Headset",
SND_JACK_HEADSET | SND_JACK_BTN_0, SND_JACK_HEADSET | SND_JACK_BTN_0,
@ -182,7 +182,7 @@ static int speyside_wm8915_init(struct snd_soc_pcm_runtime *rtd)
if (ret) if (ret)
return ret; return ret;
wm8915_detect(codec, &speyside_headset, speyside_set_polarity); wm8996_detect(codec, &speyside_headset, speyside_set_polarity);
return 0; return 0;
} }
@ -205,16 +205,16 @@ static struct snd_soc_dai_link speyside_dai[] = {
.name = "CPU", .name = "CPU",
.stream_name = "CPU", .stream_name = "CPU",
.cpu_dai_name = "samsung-i2s.0", .cpu_dai_name = "samsung-i2s.0",
.codec_dai_name = "wm8915-aif1", .codec_dai_name = "wm8996-aif1",
.platform_name = "samsung-audio", .platform_name = "samsung-audio",
.codec_name = "wm8915.1-001a", .codec_name = "wm8996.1-001a",
.init = speyside_wm8915_init, .init = speyside_wm8996_init,
.ops = &speyside_ops, .ops = &speyside_ops,
}, },
{ {
.name = "Baseband", .name = "Baseband",
.stream_name = "Baseband", .stream_name = "Baseband",
.cpu_dai_name = "wm8915-aif2", .cpu_dai_name = "wm8996-aif2",
.codec_dai_name = "wm1250-ev1", .codec_dai_name = "wm1250-ev1",
.codec_name = "wm1250-ev1.1-0027", .codec_name = "wm1250-ev1.1-0027",
.ops = &speyside_ops, .ops = &speyside_ops,

View file

@ -309,9 +309,14 @@ static int tegra_pcm_preallocate_dma_buffer(struct snd_pcm *pcm, int stream)
static void tegra_pcm_deallocate_dma_buffer(struct snd_pcm *pcm, int stream) static void tegra_pcm_deallocate_dma_buffer(struct snd_pcm *pcm, int stream)
{ {
struct snd_pcm_substream *substream = pcm->streams[stream].substream; struct snd_pcm_substream *substream;
struct snd_dma_buffer *buf = &substream->dma_buffer; struct snd_dma_buffer *buf;
substream = pcm->streams[stream].substream;
if (!substream)
return;
buf = &substream->dma_buffer;
if (!buf->area) if (!buf->area)
return; return;

View file

@ -56,6 +56,7 @@
#define GPIO_HP_MUTE BIT(1) #define GPIO_HP_MUTE BIT(1)
#define GPIO_INT_MIC_EN BIT(2) #define GPIO_INT_MIC_EN BIT(2)
#define GPIO_EXT_MIC_EN BIT(3) #define GPIO_EXT_MIC_EN BIT(3)
#define GPIO_HP_DET BIT(4)
struct tegra_wm8903 { struct tegra_wm8903 {
struct tegra_asoc_utils_data util_data; struct tegra_asoc_utils_data util_data;
@ -304,6 +305,7 @@ static int tegra_wm8903_init(struct snd_soc_pcm_runtime *rtd)
snd_soc_jack_add_gpios(&tegra_wm8903_hp_jack, snd_soc_jack_add_gpios(&tegra_wm8903_hp_jack,
1, 1,
&tegra_wm8903_hp_jack_gpio); &tegra_wm8903_hp_jack_gpio);
machine->gpio_requested |= GPIO_HP_DET;
} }
snd_soc_jack_new(codec, "Mic Jack", SND_JACK_MICROPHONE, snd_soc_jack_new(codec, "Mic Jack", SND_JACK_MICROPHONE,
@ -429,10 +431,10 @@ static int __devexit tegra_wm8903_driver_remove(struct platform_device *pdev)
struct tegra_wm8903 *machine = snd_soc_card_get_drvdata(card); struct tegra_wm8903 *machine = snd_soc_card_get_drvdata(card);
struct tegra_wm8903_platform_data *pdata = machine->pdata; struct tegra_wm8903_platform_data *pdata = machine->pdata;
snd_soc_unregister_card(card); if (machine->gpio_requested & GPIO_HP_DET)
snd_soc_jack_free_gpios(&tegra_wm8903_hp_jack,
tegra_asoc_utils_fini(&machine->util_data); 1,
&tegra_wm8903_hp_jack_gpio);
if (machine->gpio_requested & GPIO_EXT_MIC_EN) if (machine->gpio_requested & GPIO_EXT_MIC_EN)
gpio_free(pdata->gpio_ext_mic_en); gpio_free(pdata->gpio_ext_mic_en);
if (machine->gpio_requested & GPIO_INT_MIC_EN) if (machine->gpio_requested & GPIO_INT_MIC_EN)
@ -441,6 +443,11 @@ static int __devexit tegra_wm8903_driver_remove(struct platform_device *pdev)
gpio_free(pdata->gpio_hp_mute); gpio_free(pdata->gpio_hp_mute);
if (machine->gpio_requested & GPIO_SPKR_EN) if (machine->gpio_requested & GPIO_SPKR_EN)
gpio_free(pdata->gpio_spkr_en); gpio_free(pdata->gpio_spkr_en);
machine->gpio_requested = 0;
snd_soc_unregister_card(card);
tegra_asoc_utils_fini(&machine->util_data);
kfree(machine); kfree(machine);