Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 40aa4a30 authored by Mark Brown's avatar Mark Brown
Browse files

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: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent b8b33cb5
Loading
Loading
Loading
Loading
+34 −4
Original line number Diff line number Diff line
/*
 * 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
 *  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_VMID_OFF                         0
#define WM8350_VMID_500K                        1
#define WM8350_VMID_100K                        2
#define WM8350_VMID_10K                         3
#define WM8350_VMID_300K                        1
#define WM8350_VMID_50K                         2
#define WM8350_VMID_5K                          3

/*
 * R40 (0x28) - Clock Control 1
@@ -591,8 +591,38 @@
#define WM8350_IRQ_CODEC_MICSCD			41
#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 platform_device *pdev;
	struct snd_soc_codec *codec;
	struct wm8350_audio_platform_data *platform_data;
};

#endif
+4 −0
Original line number Diff line number Diff line
@@ -13,6 +13,7 @@ config SND_SOC_ALL_CODECS
	select SND_SOC_TWL4030 if TWL4030_CORE
	select SND_SOC_UDA134X
	select SND_SOC_UDA1380 if I2C
	select SND_SOC_WM8350 if MFD_WM8350
	select SND_SOC_WM8510 if (I2C || SPI_MASTER)
	select SND_SOC_WM8580 if I2C
	select SND_SOC_WM8728 if (I2C || SPI_MASTER)
@@ -100,6 +101,9 @@ config SND_SOC_UDA134X
config SND_SOC_UDA1380
        tristate

config SND_SOC_WM8350
	tristate

config SND_SOC_WM8510
	tristate

+2 −0
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ snd-soc-tlv320aic3x-objs := tlv320aic3x.o
snd-soc-twl4030-objs := twl4030.o
snd-soc-uda134x-objs := uda134x.o
snd-soc-uda1380-objs := uda1380.o
snd-soc-wm8350-objs := wm8350.o
snd-soc-wm8510-objs := wm8510.o
snd-soc-wm8580-objs := wm8580.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_UDA134X)	+= snd-soc-uda134x.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_WM8580)	+= snd-soc-wm8580.o
obj-$(CONFIG_SND_SOC_WM8728)	+= snd-soc-wm8728.o
+1583 −0

File added.

Preview size limit exceeded, changes collapsed.

+20 −0
Original line number Diff line number Diff line
/*
 * 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