Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
2c218b74
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
2c218b74
编写于
10月 26, 2015
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branches 'asoc/topic/ad193x' and 'asoc/topic/arizona' into asoc-next
上级
4cb803b8
92b822a4
6ebbce0a
变更
10
展开全部
隐藏空白更改
内联
并排
Showing
10 changed file
with
1626 addition
and
41 deletion
+1626
-41
sound/soc/codecs/Kconfig
sound/soc/codecs/Kconfig
+6
-0
sound/soc/codecs/Makefile
sound/soc/codecs/Makefile
+2
-0
sound/soc/codecs/ad193x-i2c.c
sound/soc/codecs/ad193x-i2c.c
+5
-3
sound/soc/codecs/ad193x-spi.c
sound/soc/codecs/ad193x-spi.c
+15
-1
sound/soc/codecs/ad193x.c
sound/soc/codecs/ad193x.c
+93
-35
sound/soc/codecs/ad193x.h
sound/soc/codecs/ad193x.h
+8
-1
sound/soc/codecs/arizona.c
sound/soc/codecs/arizona.c
+33
-0
sound/soc/codecs/arizona.h
sound/soc/codecs/arizona.h
+11
-1
sound/soc/codecs/wm8998.c
sound/soc/codecs/wm8998.c
+1430
-0
sound/soc/codecs/wm8998.h
sound/soc/codecs/wm8998.h
+23
-0
未找到文件。
sound/soc/codecs/Kconfig
浏览文件 @
2c218b74
...
...
@@ -171,6 +171,7 @@ config SND_SOC_ALL_CODECS
select SND_SOC_WM8995 if SND_SOC_I2C_AND_SPI
select SND_SOC_WM8996 if I2C
select SND_SOC_WM8997 if MFD_WM8997
select SND_SOC_WM8998 if MFD_WM8998
select SND_SOC_WM9081 if I2C
select SND_SOC_WM9090 if I2C
select SND_SOC_WM9705 if SND_SOC_AC97_BUS
...
...
@@ -195,9 +196,11 @@ config SND_SOC_ARIZONA
default y if SND_SOC_WM5102=y
default y if SND_SOC_WM5110=y
default y if SND_SOC_WM8997=y
default y if SND_SOC_WM8998=y
default m if SND_SOC_WM5102=m
default m if SND_SOC_WM5110=m
default m if SND_SOC_WM8997=m
default m if SND_SOC_WM8998=m
config SND_SOC_WM_HUBS
tristate
...
...
@@ -866,6 +869,9 @@ config SND_SOC_WM8996
config SND_SOC_WM8997
tristate
config SND_SOC_WM8998
tristate
config SND_SOC_WM9081
tristate
...
...
sound/soc/codecs/Makefile
浏览文件 @
2c218b74
...
...
@@ -176,6 +176,7 @@ snd-soc-wm8993-objs := wm8993.o
snd-soc-wm8994-objs
:=
wm8994.o wm8958-dsp2.o
snd-soc-wm8995-objs
:=
wm8995.o
snd-soc-wm8997-objs
:=
wm8997.o
snd-soc-wm8998-objs
:=
wm8998.o
snd-soc-wm9081-objs
:=
wm9081.o
snd-soc-wm9090-objs
:=
wm9090.o
snd-soc-wm9705-objs
:=
wm9705.o
...
...
@@ -364,6 +365,7 @@ obj-$(CONFIG_SND_SOC_WM8993) += snd-soc-wm8993.o
obj-$(CONFIG_SND_SOC_WM8994)
+=
snd-soc-wm8994.o
obj-$(CONFIG_SND_SOC_WM8995)
+=
snd-soc-wm8995.o
obj-$(CONFIG_SND_SOC_WM8997)
+=
snd-soc-wm8997.o
obj-$(CONFIG_SND_SOC_WM8998)
+=
snd-soc-wm8998.o
obj-$(CONFIG_SND_SOC_WM9081)
+=
snd-soc-wm9081.o
obj-$(CONFIG_SND_SOC_WM9090)
+=
snd-soc-wm9090.o
obj-$(CONFIG_SND_SOC_WM9705)
+=
snd-soc-wm9705.o
...
...
sound/soc/codecs/ad193x-i2c.c
浏览文件 @
2c218b74
...
...
@@ -15,8 +15,8 @@
#include "ad193x.h"
static
const
struct
i2c_device_id
ad193x_id
[]
=
{
{
"ad1936"
,
0
},
{
"ad1937"
,
0
},
{
"ad1936"
,
AD193X
},
{
"ad1937"
,
AD193X
},
{
}
};
MODULE_DEVICE_TABLE
(
i2c
,
ad193x_id
);
...
...
@@ -30,7 +30,9 @@ static int ad193x_i2c_probe(struct i2c_client *client,
config
.
val_bits
=
8
;
config
.
reg_bits
=
8
;
return
ad193x_probe
(
&
client
->
dev
,
devm_regmap_init_i2c
(
client
,
&
config
));
return
ad193x_probe
(
&
client
->
dev
,
devm_regmap_init_i2c
(
client
,
&
config
),
(
enum
ad193x_type
)
id
->
driver_data
);
}
static
int
ad193x_i2c_remove
(
struct
i2c_client
*
client
)
...
...
sound/soc/codecs/ad193x-spi.c
浏览文件 @
2c218b74
...
...
@@ -16,6 +16,7 @@
static
int
ad193x_spi_probe
(
struct
spi_device
*
spi
)
{
const
struct
spi_device_id
*
id
=
spi_get_device_id
(
spi
);
struct
regmap_config
config
;
config
=
ad193x_regmap_config
;
...
...
@@ -24,7 +25,8 @@ static int ad193x_spi_probe(struct spi_device *spi)
config
.
read_flag_mask
=
0x09
;
config
.
write_flag_mask
=
0x08
;
return
ad193x_probe
(
&
spi
->
dev
,
devm_regmap_init_spi
(
spi
,
&
config
));
return
ad193x_probe
(
&
spi
->
dev
,
devm_regmap_init_spi
(
spi
,
&
config
),
(
enum
ad193x_type
)
id
->
driver_data
);
}
static
int
ad193x_spi_remove
(
struct
spi_device
*
spi
)
...
...
@@ -33,6 +35,17 @@ static int ad193x_spi_remove(struct spi_device *spi)
return
0
;
}
static
const
struct
spi_device_id
ad193x_spi_id
[]
=
{
{
"ad193x"
,
AD193X
},
{
"ad1933"
,
AD1933
},
{
"ad1934"
,
AD1934
},
{
"ad1938"
,
AD193X
},
{
"ad1939"
,
AD193X
},
{
"adau1328"
,
AD193X
},
{
}
};
MODULE_DEVICE_TABLE
(
spi
,
ad193x_spi_id
);
static
struct
spi_driver
ad193x_spi_driver
=
{
.
driver
=
{
.
name
=
"ad193x"
,
...
...
@@ -40,6 +53,7 @@ static struct spi_driver ad193x_spi_driver = {
},
.
probe
=
ad193x_spi_probe
,
.
remove
=
ad193x_spi_remove
,
.
id_table
=
ad193x_spi_id
,
};
module_spi_driver
(
ad193x_spi_driver
);
...
...
sound/soc/codecs/ad193x.c
浏览文件 @
2c218b74
...
...
@@ -23,6 +23,7 @@
/* codec private data */
struct
ad193x_priv
{
struct
regmap
*
regmap
;
enum
ad193x_type
type
;
int
sysclk
;
};
...
...
@@ -47,12 +48,6 @@ static const struct snd_kcontrol_new ad193x_snd_controls[] = {
SOC_DOUBLE_R_TLV
(
"DAC4 Volume"
,
AD193X_DAC_L4_VOL
,
AD193X_DAC_R4_VOL
,
0
,
0xFF
,
1
,
adau193x_tlv
),
/* ADC switch control */
SOC_DOUBLE
(
"ADC1 Switch"
,
AD193X_ADC_CTRL0
,
AD193X_ADCL1_MUTE
,
AD193X_ADCR1_MUTE
,
1
,
1
),
SOC_DOUBLE
(
"ADC2 Switch"
,
AD193X_ADC_CTRL0
,
AD193X_ADCL2_MUTE
,
AD193X_ADCR2_MUTE
,
1
,
1
),
/* DAC switch control */
SOC_DOUBLE
(
"DAC1 Switch"
,
AD193X_DAC_CHNL_MUTE
,
AD193X_DACL1_MUTE
,
AD193X_DACR1_MUTE
,
1
,
1
),
...
...
@@ -63,26 +58,37 @@ static const struct snd_kcontrol_new ad193x_snd_controls[] = {
SOC_DOUBLE
(
"DAC4 Switch"
,
AD193X_DAC_CHNL_MUTE
,
AD193X_DACL4_MUTE
,
AD193X_DACR4_MUTE
,
1
,
1
),
/* DAC de-emphasis */
SOC_ENUM
(
"Playback Deemphasis"
,
ad193x_deemp_enum
),
};
static
const
struct
snd_kcontrol_new
ad193x_adc_snd_controls
[]
=
{
/* ADC switch control */
SOC_DOUBLE
(
"ADC1 Switch"
,
AD193X_ADC_CTRL0
,
AD193X_ADCL1_MUTE
,
AD193X_ADCR1_MUTE
,
1
,
1
),
SOC_DOUBLE
(
"ADC2 Switch"
,
AD193X_ADC_CTRL0
,
AD193X_ADCL2_MUTE
,
AD193X_ADCR2_MUTE
,
1
,
1
),
/* ADC high-pass filter */
SOC_SINGLE
(
"ADC High Pass Filter Switch"
,
AD193X_ADC_CTRL0
,
AD193X_ADC_HIGHPASS_FILTER
,
1
,
0
),
/* DAC de-emphasis */
SOC_ENUM
(
"Playback Deemphasis"
,
ad193x_deemp_enum
),
};
static
const
struct
snd_soc_dapm_widget
ad193x_dapm_widgets
[]
=
{
SND_SOC_DAPM_DAC
(
"DAC"
,
"Playback"
,
SND_SOC_NOPM
,
0
,
0
),
SND_SOC_DAPM_PGA
(
"DAC Output"
,
AD193X_DAC_CTRL0
,
0
,
1
,
NULL
,
0
),
SND_SOC_DAPM_ADC
(
"ADC"
,
"Capture"
,
SND_SOC_NOPM
,
0
,
0
),
SND_SOC_DAPM_SUPPLY
(
"PLL_PWR"
,
AD193X_PLL_CLK_CTRL0
,
0
,
1
,
NULL
,
0
),
SND_SOC_DAPM_SUPPLY
(
"ADC_PWR"
,
AD193X_ADC_CTRL0
,
0
,
1
,
NULL
,
0
),
SND_SOC_DAPM_SUPPLY
(
"SYSCLK"
,
AD193X_PLL_CLK_CTRL0
,
7
,
0
,
NULL
,
0
),
SND_SOC_DAPM_VMID
(
"VMID"
),
SND_SOC_DAPM_OUTPUT
(
"DAC1OUT"
),
SND_SOC_DAPM_OUTPUT
(
"DAC2OUT"
),
SND_SOC_DAPM_OUTPUT
(
"DAC3OUT"
),
SND_SOC_DAPM_OUTPUT
(
"DAC4OUT"
),
};
static
const
struct
snd_soc_dapm_widget
ad193x_adc_widgets
[]
=
{
SND_SOC_DAPM_ADC
(
"ADC"
,
"Capture"
,
SND_SOC_NOPM
,
0
,
0
),
SND_SOC_DAPM_SUPPLY
(
"ADC_PWR"
,
AD193X_ADC_CTRL0
,
0
,
1
,
NULL
,
0
),
SND_SOC_DAPM_INPUT
(
"ADC1IN"
),
SND_SOC_DAPM_INPUT
(
"ADC2IN"
),
};
...
...
@@ -91,18 +97,33 @@ static const struct snd_soc_dapm_route audio_paths[] = {
{
"DAC"
,
NULL
,
"SYSCLK"
},
{
"DAC Output"
,
NULL
,
"DAC"
},
{
"DAC Output"
,
NULL
,
"VMID"
},
{
"ADC"
,
NULL
,
"SYSCLK"
},
{
"DAC"
,
NULL
,
"ADC_PWR"
},
{
"ADC"
,
NULL
,
"ADC_PWR"
},
{
"DAC1OUT"
,
NULL
,
"DAC Output"
},
{
"DAC2OUT"
,
NULL
,
"DAC Output"
},
{
"DAC3OUT"
,
NULL
,
"DAC Output"
},
{
"DAC4OUT"
,
NULL
,
"DAC Output"
},
{
"SYSCLK"
,
NULL
,
"PLL_PWR"
},
};
static
const
struct
snd_soc_dapm_route
ad193x_adc_audio_paths
[]
=
{
{
"ADC"
,
NULL
,
"SYSCLK"
},
{
"ADC"
,
NULL
,
"ADC_PWR"
},
{
"ADC"
,
NULL
,
"ADC1IN"
},
{
"ADC"
,
NULL
,
"ADC2IN"
},
{
"SYSCLK"
,
NULL
,
"PLL_PWR"
},
};
static
inline
bool
ad193x_has_adc
(
const
struct
ad193x_priv
*
ad193x
)
{
switch
(
ad193x
->
type
)
{
case
AD1933
:
case
AD1934
:
return
false
;
default:
break
;
}
return
true
;
}
/*
* DAI ops entries
*/
...
...
@@ -147,8 +168,10 @@ static int ad193x_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
regmap_update_bits
(
ad193x
->
regmap
,
AD193X_DAC_CTRL1
,
AD193X_DAC_CHAN_MASK
,
channels
<<
AD193X_DAC_CHAN_SHFT
);
regmap_update_bits
(
ad193x
->
regmap
,
AD193X_ADC_CTRL2
,
AD193X_ADC_CHAN_MASK
,
channels
<<
AD193X_ADC_CHAN_SHFT
);
if
(
ad193x_has_adc
(
ad193x
))
regmap_update_bits
(
ad193x
->
regmap
,
AD193X_ADC_CTRL2
,
AD193X_ADC_CHAN_MASK
,
channels
<<
AD193X_ADC_CHAN_SHFT
);
return
0
;
}
...
...
@@ -172,7 +195,9 @@ static int ad193x_set_dai_fmt(struct snd_soc_dai *codec_dai,
adc_serfmt
|=
AD193X_ADC_SERFMT_AUX
;
break
;
default:
return
-
EINVAL
;
if
(
ad193x_has_adc
(
ad193x
))
return
-
EINVAL
;
break
;
}
switch
(
fmt
&
SND_SOC_DAIFMT_INV_MASK
)
{
...
...
@@ -217,10 +242,12 @@ static int ad193x_set_dai_fmt(struct snd_soc_dai *codec_dai,
return
-
EINVAL
;
}
regmap_update_bits
(
ad193x
->
regmap
,
AD193X_ADC_CTRL1
,
AD193X_ADC_SERFMT_MASK
,
adc_serfmt
);
regmap_update_bits
(
ad193x
->
regmap
,
AD193X_ADC_CTRL2
,
AD193X_ADC_FMT_MASK
,
adc_fmt
);
if
(
ad193x_has_adc
(
ad193x
))
{
regmap_update_bits
(
ad193x
->
regmap
,
AD193X_ADC_CTRL1
,
AD193X_ADC_SERFMT_MASK
,
adc_serfmt
);
regmap_update_bits
(
ad193x
->
regmap
,
AD193X_ADC_CTRL2
,
AD193X_ADC_FMT_MASK
,
adc_fmt
);
}
regmap_update_bits
(
ad193x
->
regmap
,
AD193X_DAC_CTRL1
,
AD193X_DAC_FMT_MASK
,
dac_fmt
);
...
...
@@ -287,8 +314,9 @@ static int ad193x_hw_params(struct snd_pcm_substream *substream,
AD193X_DAC_WORD_LEN_MASK
,
word_len
<<
AD193X_DAC_WORD_LEN_SHFT
);
regmap_update_bits
(
ad193x
->
regmap
,
AD193X_ADC_CTRL1
,
AD193X_ADC_WORD_LEN_MASK
,
word_len
);
if
(
ad193x_has_adc
(
ad193x
))
regmap_update_bits
(
ad193x
->
regmap
,
AD193X_ADC_CTRL1
,
AD193X_ADC_WORD_LEN_MASK
,
word_len
);
return
0
;
}
...
...
@@ -326,6 +354,8 @@ static struct snd_soc_dai_driver ad193x_dai = {
static
int
ad193x_codec_probe
(
struct
snd_soc_codec
*
codec
)
{
struct
ad193x_priv
*
ad193x
=
snd_soc_codec_get_drvdata
(
codec
);
struct
snd_soc_dapm_context
*
dapm
=
snd_soc_codec_get_dapm
(
codec
);
int
num
,
ret
;
/* default setting for ad193x */
...
...
@@ -335,14 +365,46 @@ static int ad193x_codec_probe(struct snd_soc_codec *codec)
regmap_write
(
ad193x
->
regmap
,
AD193X_DAC_CTRL2
,
0x1A
);
/* dac in tdm mode */
regmap_write
(
ad193x
->
regmap
,
AD193X_DAC_CTRL0
,
0x40
);
/* high-pass filter enable */
regmap_write
(
ad193x
->
regmap
,
AD193X_ADC_CTRL0
,
0x3
);
/* sata delay=1, adc aux mode */
regmap_write
(
ad193x
->
regmap
,
AD193X_ADC_CTRL1
,
0x43
);
/* adc only */
if
(
ad193x_has_adc
(
ad193x
))
{
/* high-pass filter enable */
regmap_write
(
ad193x
->
regmap
,
AD193X_ADC_CTRL0
,
0x3
);
/* sata delay=1, adc aux mode */
regmap_write
(
ad193x
->
regmap
,
AD193X_ADC_CTRL1
,
0x43
);
}
/* pll input: mclki/xi */
regmap_write
(
ad193x
->
regmap
,
AD193X_PLL_CLK_CTRL0
,
0x99
);
/* mclk=24.576Mhz: 0x9D; mclk=12.288Mhz: 0x99 */
regmap_write
(
ad193x
->
regmap
,
AD193X_PLL_CLK_CTRL1
,
0x04
);
/* adc only */
if
(
ad193x_has_adc
(
ad193x
))
{
/* add adc controls */
num
=
ARRAY_SIZE
(
ad193x_adc_snd_controls
);
ret
=
snd_soc_add_codec_controls
(
codec
,
ad193x_adc_snd_controls
,
num
);
if
(
ret
)
return
ret
;
/* add adc widgets */
num
=
ARRAY_SIZE
(
ad193x_adc_widgets
);
ret
=
snd_soc_dapm_new_controls
(
dapm
,
ad193x_adc_widgets
,
num
);
if
(
ret
)
return
ret
;
/* add adc routes */
num
=
ARRAY_SIZE
(
ad193x_adc_audio_paths
);
ret
=
snd_soc_dapm_add_routes
(
dapm
,
ad193x_adc_audio_paths
,
num
);
if
(
ret
)
return
ret
;
}
return
0
;
}
...
...
@@ -356,18 +418,13 @@ static struct snd_soc_codec_driver soc_codec_dev_ad193x = {
.
num_dapm_routes
=
ARRAY_SIZE
(
audio_paths
),
};
static
bool
adau193x_reg_volatile
(
struct
device
*
dev
,
unsigned
int
reg
)
{
return
false
;
}
const
struct
regmap_config
ad193x_regmap_config
=
{
.
max_register
=
AD193X_NUM_REGS
-
1
,
.
volatile_reg
=
adau193x_reg_volatile
,
};
EXPORT_SYMBOL_GPL
(
ad193x_regmap_config
);
int
ad193x_probe
(
struct
device
*
dev
,
struct
regmap
*
regmap
)
int
ad193x_probe
(
struct
device
*
dev
,
struct
regmap
*
regmap
,
enum
ad193x_type
type
)
{
struct
ad193x_priv
*
ad193x
;
...
...
@@ -379,6 +436,7 @@ int ad193x_probe(struct device *dev, struct regmap *regmap)
return
-
ENOMEM
;
ad193x
->
regmap
=
regmap
;
ad193x
->
type
=
type
;
dev_set_drvdata
(
dev
,
ad193x
);
...
...
sound/soc/codecs/ad193x.h
浏览文件 @
2c218b74
...
...
@@ -13,8 +13,15 @@
struct
device
;
enum
ad193x_type
{
AD193X
,
AD1933
,
AD1934
,
};
extern
const
struct
regmap_config
ad193x_regmap_config
;
int
ad193x_probe
(
struct
device
*
dev
,
struct
regmap
*
regmap
);
int
ad193x_probe
(
struct
device
*
dev
,
struct
regmap
*
regmap
,
enum
ad193x_type
type
);
#define AD193X_PLL_CLK_CTRL0 0x00
#define AD193X_PLL_POWERDOWN 0x01
...
...
sound/soc/codecs/arizona.c
浏览文件 @
2c218b74
...
...
@@ -316,6 +316,7 @@ const char *arizona_mixer_texts[ARIZONA_NUM_MIXER_INPUTS] = {
"Tone Generator 2"
,
"Haptics"
,
"AEC"
,
"AEC2"
,
"Mic Mute Mixer"
,
"Noise Generator"
,
"IN1L"
,
...
...
@@ -423,6 +424,7 @@ int arizona_mixer_values[ARIZONA_NUM_MIXER_INPUTS] = {
0x05
,
0x06
,
/* Haptics */
0x08
,
/* AEC */
0x09
,
/* AEC2 */
0x0c
,
/* Noise mixer */
0x0d
,
/* Comfort noise */
0x10
,
/* IN1L */
...
...
@@ -527,6 +529,32 @@ EXPORT_SYMBOL_GPL(arizona_mixer_values);
const
DECLARE_TLV_DB_SCALE
(
arizona_mixer_tlv
,
-
3200
,
100
,
0
);
EXPORT_SYMBOL_GPL
(
arizona_mixer_tlv
);
const
char
*
const
arizona_sample_rate_text
[
ARIZONA_SAMPLE_RATE_ENUM_SIZE
]
=
{
"12kHz"
,
"24kHz"
,
"48kHz"
,
"96kHz"
,
"192kHz"
,
"11.025kHz"
,
"22.05kHz"
,
"44.1kHz"
,
"88.2kHz"
,
"176.4kHz"
,
"4kHz"
,
"8kHz"
,
"16kHz"
,
"32kHz"
,
};
EXPORT_SYMBOL_GPL
(
arizona_sample_rate_text
);
const
unsigned
int
arizona_sample_rate_val
[
ARIZONA_SAMPLE_RATE_ENUM_SIZE
]
=
{
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x09
,
0x0A
,
0x0B
,
0x0C
,
0x0D
,
0x10
,
0x11
,
0x12
,
0x13
,
};
EXPORT_SYMBOL_GPL
(
arizona_sample_rate_val
);
const
char
*
arizona_sample_rate_val_to_name
(
unsigned
int
rate_val
)
{
int
i
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
arizona_sample_rate_val
);
++
i
)
{
if
(
arizona_sample_rate_val
[
i
]
==
rate_val
)
return
arizona_sample_rate_text
[
i
];
}
return
"Illegal"
;
}
EXPORT_SYMBOL_GPL
(
arizona_sample_rate_val_to_name
);
const
char
*
arizona_rate_text
[
ARIZONA_RATE_ENUM_SIZE
]
=
{
"SYNCCLK rate"
,
"8kHz"
,
"16kHz"
,
"ASYNCCLK rate"
,
};
...
...
@@ -1884,6 +1912,11 @@ static int arizona_calc_fratio(struct arizona_fll *fll,
if
(
fll
->
arizona
->
rev
<
3
||
sync
)
return
init_ratio
;
break
;
case
WM8998
:
case
WM1814
:
if
(
sync
)
return
init_ratio
;
break
;
default:
return
init_ratio
;
}
...
...
sound/soc/codecs/arizona.h
浏览文件 @
2c218b74
...
...
@@ -93,12 +93,17 @@ struct arizona_priv {
bool
dvfs_cached
;
};
#define ARIZONA_NUM_MIXER_INPUTS 10
3
#define ARIZONA_NUM_MIXER_INPUTS 10
4
extern
const
unsigned
int
arizona_mixer_tlv
[];
extern
const
char
*
arizona_mixer_texts
[
ARIZONA_NUM_MIXER_INPUTS
];
extern
int
arizona_mixer_values
[
ARIZONA_NUM_MIXER_INPUTS
];
#define ARIZONA_GAINMUX_CONTROLS(name, base) \
SOC_SINGLE_RANGE_TLV(name " Input Volume", base + 1, \
ARIZONA_MIXER_VOL_SHIFT, 0x20, 0x50, 0, \
arizona_mixer_tlv)
#define ARIZONA_MIXER_CONTROLS(name, base) \
SOC_SINGLE_RANGE_TLV(name " Input 1 Volume", base + 1, \
ARIZONA_MIXER_VOL_SHIFT, 0x20, 0x50, 0, \
...
...
@@ -209,8 +214,12 @@ extern int arizona_mixer_values[ARIZONA_NUM_MIXER_INPUTS];
.num_regs = 1 }) }
#define ARIZONA_RATE_ENUM_SIZE 4
#define ARIZONA_SAMPLE_RATE_ENUM_SIZE 14
extern
const
char
*
arizona_rate_text
[
ARIZONA_RATE_ENUM_SIZE
];
extern
const
int
arizona_rate_val
[
ARIZONA_RATE_ENUM_SIZE
];
extern
const
char
*
const
arizona_sample_rate_text
[
ARIZONA_SAMPLE_RATE_ENUM_SIZE
];
extern
const
unsigned
int
arizona_sample_rate_val
[
ARIZONA_SAMPLE_RATE_ENUM_SIZE
];
extern
const
struct
soc_enum
arizona_isrc_fsl
[];
extern
const
struct
soc_enum
arizona_isrc_fsh
[];
...
...
@@ -296,4 +305,5 @@ int arizona_set_output_mode(struct snd_soc_codec *codec, int output,
extern
bool
arizona_input_analog
(
struct
snd_soc_codec
*
codec
,
int
shift
);
extern
const
char
*
arizona_sample_rate_val_to_name
(
unsigned
int
rate_val
);
#endif
sound/soc/codecs/wm8998.c
0 → 100644
浏览文件 @
2c218b74
此差异已折叠。
点击以展开。
sound/soc/codecs/wm8998.h
0 → 100644
浏览文件 @
2c218b74
/*
* wm8998.h -- ALSA SoC Audio driver for WM8998 codecs
*
* Copyright 2015 Cirrus Logic, Inc.
*
* Author: Richard Fitzgerald <rf@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 version 2 as
* published by the Free Software Foundation.
*/
#ifndef _WM8998_H
#define _WM8998_H
#include "arizona.h"
#define WM8998_FLL1 1
#define WM8998_FLL2 2
#define WM8998_FLL1_REFCLK 3
#define WM8998_FLL2_REFCLK 4
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录