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

Commit aaf1e176 authored by Mark Brown's avatar Mark Brown
Browse files

ASoC: Add initial driver for the WM8400 CODEC



The WM8400 is a highly integrated audio CODEC and power management unit
intended for mobile multimedia application.  This driver supports the
primary audio CODEC features, including:

 - 1W speaker driver
 - Fully differential headphone output
 - Up to 4 differential microphone inputs

Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent 5706d501
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1181,6 +1181,7 @@
#define WM8400_FLL_OUTDIV_SHIFT                      0  /* FLL_OUTDIV - [2:0] */
#define WM8400_FLL_OUTDIV_WIDTH                      3  /* FLL_OUTDIV - [2:0] */

struct wm8400;
void wm8400_reset_codec_reg_cache(struct wm8400 *wm8400);

#endif
+4 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ config SND_SOC_ALL_CODECS
	select SND_SOC_UDA134X
	select SND_SOC_UDA1380 if I2C
	select SND_SOC_WM8350 if MFD_WM8350
	select SND_SOC_WM8400 if MFD_WM8400
	select SND_SOC_WM8510 if SND_SOC_I2C_AND_SPI
	select SND_SOC_WM8580 if I2C
	select SND_SOC_WM8728 if SND_SOC_I2C_AND_SPI
@@ -110,6 +111,9 @@ config SND_SOC_UDA1380
config SND_SOC_WM8350
	tristate

config SND_SOC_WM8400
	tristate

config SND_SOC_WM8510
	tristate

+2 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ 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-wm8400-objs := wm8400.o
snd-soc-wm8510-objs := wm8510.o
snd-soc-wm8580-objs := wm8580.o
snd-soc-wm8728-objs := wm8728.o
@@ -44,6 +45,7 @@ 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_WM8400)	+= snd-soc-wm8400.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
+1479 −0

File added.

Preview size limit exceeded, changes collapsed.

+62 −0
Original line number Diff line number Diff line
/*
 * wm8400.h  --  audio driver for WM8400
 *
 * Copyright 2008 Wolfson Microelectronics PLC.
 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
 *
 *  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 _WM8400_CODEC_H
#define _WM8400_CODEC_H

#define WM8400_MCLK_DIV 0
#define WM8400_DACCLK_DIV 1
#define WM8400_ADCCLK_DIV 2
#define WM8400_BCLK_DIV 3

#define WM8400_MCLK_DIV_1 0x400
#define WM8400_MCLK_DIV_2 0x800

#define WM8400_DAC_CLKDIV_1    0x00
#define WM8400_DAC_CLKDIV_1_5  0x04
#define WM8400_DAC_CLKDIV_2    0x08
#define WM8400_DAC_CLKDIV_3    0x0c
#define WM8400_DAC_CLKDIV_4    0x10
#define WM8400_DAC_CLKDIV_5_5  0x14
#define WM8400_DAC_CLKDIV_6    0x18

#define WM8400_ADC_CLKDIV_1    0x00
#define WM8400_ADC_CLKDIV_1_5  0x20
#define WM8400_ADC_CLKDIV_2    0x40
#define WM8400_ADC_CLKDIV_3    0x60
#define WM8400_ADC_CLKDIV_4    0x80
#define WM8400_ADC_CLKDIV_5_5  0xa0
#define WM8400_ADC_CLKDIV_6    0xc0


#define WM8400_BCLK_DIV_1                       (0x0 << 1)
#define WM8400_BCLK_DIV_1_5                     (0x1 << 1)
#define WM8400_BCLK_DIV_2                       (0x2 << 1)
#define WM8400_BCLK_DIV_3                       (0x3 << 1)
#define WM8400_BCLK_DIV_4                       (0x4 << 1)
#define WM8400_BCLK_DIV_5_5                     (0x5 << 1)
#define WM8400_BCLK_DIV_6                       (0x6 << 1)
#define WM8400_BCLK_DIV_8                       (0x7 << 1)
#define WM8400_BCLK_DIV_11                      (0x8 << 1)
#define WM8400_BCLK_DIV_12                      (0x9 << 1)
#define WM8400_BCLK_DIV_16                      (0xA << 1)
#define WM8400_BCLK_DIV_22                      (0xB << 1)
#define WM8400_BCLK_DIV_24                      (0xC << 1)
#define WM8400_BCLK_DIV_32                      (0xD << 1)
#define WM8400_BCLK_DIV_44                      (0xE << 1)
#define WM8400_BCLK_DIV_48                      (0xF << 1)

extern struct snd_soc_dai wm8400_dai;
extern struct snd_soc_codec_device soc_codec_dev_wm8400;

#endif