ASoC: Add WM8350 AudioPlus codec driver
The WM8350 is an integrated audio and power management subsystem which provides a single-chip solution for portable audio and multimedia systems. The integrated audio CODEC provides all the necessary functions for high-quality stereo recording and playback. Programmable on-chip amplifiers allow for the direct connection of headphones and microphones with a minimum of external components. A programmable low-noise bias voltage is available to feed one or more electret microphones. Additional audio features include programmable high-pass filter in the ADC input path. This driver was originally written by Liam Girdwood with further updates from me. Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
b8b33cb560
commit
40aa4a30d0
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* audio.h -- Audio Driver for Wolfson WM8350 PMIC
|
* audio.h -- Audio Driver for Wolfson WM8350 PMIC
|
||||||
*
|
*
|
||||||
* Copyright 2007 Wolfson Microelectronics PLC
|
* Copyright 2007, 2008 Wolfson Microelectronics PLC
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms of the GNU General Public License as published by the
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
@ -70,9 +70,9 @@
|
||||||
#define WM8350_CODEC_ISEL_0_5 3 /* x0.5 */
|
#define WM8350_CODEC_ISEL_0_5 3 /* x0.5 */
|
||||||
|
|
||||||
#define WM8350_VMID_OFF 0
|
#define WM8350_VMID_OFF 0
|
||||||
#define WM8350_VMID_500K 1
|
#define WM8350_VMID_300K 1
|
||||||
#define WM8350_VMID_100K 2
|
#define WM8350_VMID_50K 2
|
||||||
#define WM8350_VMID_10K 3
|
#define WM8350_VMID_5K 3
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* R40 (0x28) - Clock Control 1
|
* R40 (0x28) - Clock Control 1
|
||||||
|
@ -591,8 +591,38 @@
|
||||||
#define WM8350_IRQ_CODEC_MICSCD 41
|
#define WM8350_IRQ_CODEC_MICSCD 41
|
||||||
#define WM8350_IRQ_CODEC_MICD 42
|
#define WM8350_IRQ_CODEC_MICD 42
|
||||||
|
|
||||||
|
/*
|
||||||
|
* WM8350 Platform data.
|
||||||
|
*
|
||||||
|
* This must be initialised per platform for best audio performance.
|
||||||
|
* Please see WM8350 datasheet for information.
|
||||||
|
*/
|
||||||
|
struct wm8350_audio_platform_data {
|
||||||
|
int vmid_discharge_msecs; /* VMID --> OFF discharge time */
|
||||||
|
int drain_msecs; /* OFF drain time */
|
||||||
|
int cap_discharge_msecs; /* Cap ON (from OFF) discharge time */
|
||||||
|
int vmid_charge_msecs; /* vmid power up time */
|
||||||
|
u32 vmid_s_curve:2; /* vmid enable s curve speed */
|
||||||
|
u32 dis_out4:2; /* out4 discharge speed */
|
||||||
|
u32 dis_out3:2; /* out3 discharge speed */
|
||||||
|
u32 dis_out2:2; /* out2 discharge speed */
|
||||||
|
u32 dis_out1:2; /* out1 discharge speed */
|
||||||
|
u32 vroi_out4:1; /* out4 tie off */
|
||||||
|
u32 vroi_out3:1; /* out3 tie off */
|
||||||
|
u32 vroi_out2:1; /* out2 tie off */
|
||||||
|
u32 vroi_out1:1; /* out1 tie off */
|
||||||
|
u32 vroi_enable:1; /* enable tie off */
|
||||||
|
u32 codec_current_on:2; /* current level ON */
|
||||||
|
u32 codec_current_standby:2; /* current level STANDBY */
|
||||||
|
u32 codec_current_charge:2; /* codec current @ vmid charge */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct snd_soc_codec;
|
||||||
|
|
||||||
struct wm8350_codec {
|
struct wm8350_codec {
|
||||||
struct platform_device *pdev;
|
struct platform_device *pdev;
|
||||||
|
struct snd_soc_codec *codec;
|
||||||
|
struct wm8350_audio_platform_data *platform_data;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -13,6 +13,7 @@ config SND_SOC_ALL_CODECS
|
||||||
select SND_SOC_TWL4030 if TWL4030_CORE
|
select SND_SOC_TWL4030 if TWL4030_CORE
|
||||||
select SND_SOC_UDA134X
|
select SND_SOC_UDA134X
|
||||||
select SND_SOC_UDA1380 if I2C
|
select SND_SOC_UDA1380 if I2C
|
||||||
|
select SND_SOC_WM8350 if MFD_WM8350
|
||||||
select SND_SOC_WM8510 if (I2C || SPI_MASTER)
|
select SND_SOC_WM8510 if (I2C || SPI_MASTER)
|
||||||
select SND_SOC_WM8580 if I2C
|
select SND_SOC_WM8580 if I2C
|
||||||
select SND_SOC_WM8728 if (I2C || SPI_MASTER)
|
select SND_SOC_WM8728 if (I2C || SPI_MASTER)
|
||||||
|
@ -100,6 +101,9 @@ config SND_SOC_UDA134X
|
||||||
config SND_SOC_UDA1380
|
config SND_SOC_UDA1380
|
||||||
tristate
|
tristate
|
||||||
|
|
||||||
|
config SND_SOC_WM8350
|
||||||
|
tristate
|
||||||
|
|
||||||
config SND_SOC_WM8510
|
config SND_SOC_WM8510
|
||||||
tristate
|
tristate
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ snd-soc-tlv320aic3x-objs := tlv320aic3x.o
|
||||||
snd-soc-twl4030-objs := twl4030.o
|
snd-soc-twl4030-objs := twl4030.o
|
||||||
snd-soc-uda134x-objs := uda134x.o
|
snd-soc-uda134x-objs := uda134x.o
|
||||||
snd-soc-uda1380-objs := uda1380.o
|
snd-soc-uda1380-objs := uda1380.o
|
||||||
|
snd-soc-wm8350-objs := wm8350.o
|
||||||
snd-soc-wm8510-objs := wm8510.o
|
snd-soc-wm8510-objs := wm8510.o
|
||||||
snd-soc-wm8580-objs := wm8580.o
|
snd-soc-wm8580-objs := wm8580.o
|
||||||
snd-soc-wm8728-objs := wm8728.o
|
snd-soc-wm8728-objs := wm8728.o
|
||||||
|
@ -39,6 +40,7 @@ obj-$(CONFIG_SND_SOC_TLV320AIC3X) += snd-soc-tlv320aic3x.o
|
||||||
obj-$(CONFIG_SND_SOC_TWL4030) += snd-soc-twl4030.o
|
obj-$(CONFIG_SND_SOC_TWL4030) += snd-soc-twl4030.o
|
||||||
obj-$(CONFIG_SND_SOC_UDA134X) += snd-soc-uda134x.o
|
obj-$(CONFIG_SND_SOC_UDA134X) += snd-soc-uda134x.o
|
||||||
obj-$(CONFIG_SND_SOC_UDA1380) += snd-soc-uda1380.o
|
obj-$(CONFIG_SND_SOC_UDA1380) += snd-soc-uda1380.o
|
||||||
|
obj-$(CONFIG_SND_SOC_WM8350) += snd-soc-wm8350.o
|
||||||
obj-$(CONFIG_SND_SOC_WM8510) += snd-soc-wm8510.o
|
obj-$(CONFIG_SND_SOC_WM8510) += snd-soc-wm8510.o
|
||||||
obj-$(CONFIG_SND_SOC_WM8580) += snd-soc-wm8580.o
|
obj-$(CONFIG_SND_SOC_WM8580) += snd-soc-wm8580.o
|
||||||
obj-$(CONFIG_SND_SOC_WM8728) += snd-soc-wm8728.o
|
obj-$(CONFIG_SND_SOC_WM8728) += snd-soc-wm8728.o
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,20 @@
|
||||||
|
/*
|
||||||
|
* wm8350.h - WM8903 audio codec interface
|
||||||
|
*
|
||||||
|
* Copyright 2008 Wolfson Microelectronics PLC.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _WM8350_H
|
||||||
|
#define _WM8350_H
|
||||||
|
|
||||||
|
#include <sound/soc.h>
|
||||||
|
|
||||||
|
extern struct snd_soc_dai wm8350_dai;
|
||||||
|
extern struct snd_soc_codec_device soc_codec_dev_wm8350;
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue