Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
e3a4bd27
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
e3a4bd27
编写于
10月 24, 2013
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'asoc/topic/twl4030' into asoc-next
上级
856de815
052901f4
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
36 addition
and
44 deletion
+36
-44
sound/soc/codecs/twl4030.c
sound/soc/codecs/twl4030.c
+36
-44
未找到文件。
sound/soc/codecs/twl4030.c
浏览文件 @
e3a4bd27
...
@@ -46,13 +46,7 @@
...
@@ -46,13 +46,7 @@
/* TWL4030 PMBR1 Register GPIO6 mux bits */
/* TWL4030 PMBR1 Register GPIO6 mux bits */
#define TWL4030_GPIO6_PWM0_MUTE(value) ((value & 0x03) << 2)
#define TWL4030_GPIO6_PWM0_MUTE(value) ((value & 0x03) << 2)
/* Shadow register used by the audio driver */
#define TWL4030_CACHEREGNUM (TWL4030_REG_MISC_SET_2 + 1)
#define TWL4030_REG_SW_SHADOW 0x4A
#define TWL4030_CACHEREGNUM (TWL4030_REG_SW_SHADOW + 1)
/* TWL4030_REG_SW_SHADOW (0x4A) Fields */
#define TWL4030_HFL_EN 0x01
#define TWL4030_HFR_EN 0x02
/*
/*
* twl4030 register cache & default register settings
* twl4030 register cache & default register settings
...
@@ -132,7 +126,6 @@ static const u8 twl4030_reg[TWL4030_CACHEREGNUM] = {
...
@@ -132,7 +126,6 @@ static const u8 twl4030_reg[TWL4030_CACHEREGNUM] = {
0x00
,
/* REG_VIBRA_PWM_SET (0x47) */
0x00
,
/* REG_VIBRA_PWM_SET (0x47) */
0x00
,
/* REG_ANAMIC_GAIN (0x48) */
0x00
,
/* REG_ANAMIC_GAIN (0x48) */
0x00
,
/* REG_MISC_SET_2 (0x49) */
0x00
,
/* REG_MISC_SET_2 (0x49) */
0x00
,
/* REG_SW_SHADOW (0x4A) - Shadow, non HW register */
};
};
/* codec private data */
/* codec private data */
...
@@ -198,42 +191,41 @@ static int twl4030_write(struct snd_soc_codec *codec,
...
@@ -198,42 +191,41 @@ static int twl4030_write(struct snd_soc_codec *codec,
int
write_to_reg
=
0
;
int
write_to_reg
=
0
;
twl4030_write_reg_cache
(
codec
,
reg
,
value
);
twl4030_write_reg_cache
(
codec
,
reg
,
value
);
if
(
likely
(
reg
<
TWL4030_REG_SW_SHADOW
))
{
/* Decide if the given register can be written */
/* Decide if the given register can be written */
switch
(
reg
)
{
switch
(
reg
)
{
case
TWL4030_REG_EAR_CTL
:
case
TWL4030_REG_EAR_CTL
:
if
(
twl4030
->
earpiece_enabled
)
if
(
twl4030
->
earpiece_enabled
)
write_to_reg
=
1
;
break
;
case
TWL4030_REG_PREDL_CTL
:
if
(
twl4030
->
predrivel_enabled
)
write_to_reg
=
1
;
break
;
case
TWL4030_REG_PREDR_CTL
:
if
(
twl4030
->
predriver_enabled
)
write_to_reg
=
1
;
break
;
case
TWL4030_REG_PRECKL_CTL
:
if
(
twl4030
->
carkitl_enabled
)
write_to_reg
=
1
;
break
;
case
TWL4030_REG_PRECKR_CTL
:
if
(
twl4030
->
carkitr_enabled
)
write_to_reg
=
1
;
break
;
case
TWL4030_REG_HS_GAIN_SET
:
if
(
twl4030
->
hsl_enabled
||
twl4030
->
hsr_enabled
)
write_to_reg
=
1
;
break
;
default:
/* All other register can be written */
write_to_reg
=
1
;
write_to_reg
=
1
;
break
;
break
;
}
case
TWL4030_REG_PREDL_CTL
:
if
(
write_to_reg
)
if
(
twl4030
->
predrivel_enabled
)
return
twl_i2c_write_u8
(
TWL4030_MODULE_AUDIO_VOICE
,
write_to_reg
=
1
;
value
,
reg
);
break
;
case
TWL4030_REG_PREDR_CTL
:
if
(
twl4030
->
predriver_enabled
)
write_to_reg
=
1
;
break
;
case
TWL4030_REG_PRECKL_CTL
:
if
(
twl4030
->
carkitl_enabled
)
write_to_reg
=
1
;
break
;
case
TWL4030_REG_PRECKR_CTL
:
if
(
twl4030
->
carkitr_enabled
)
write_to_reg
=
1
;
break
;
case
TWL4030_REG_HS_GAIN_SET
:
if
(
twl4030
->
hsl_enabled
||
twl4030
->
hsr_enabled
)
write_to_reg
=
1
;
break
;
default:
/* All other register can be written */
write_to_reg
=
1
;
break
;
}
}
if
(
write_to_reg
)
return
twl_i2c_write_u8
(
TWL4030_MODULE_AUDIO_VOICE
,
value
,
reg
);
return
0
;
return
0
;
}
}
...
@@ -532,7 +524,7 @@ SOC_DAPM_ENUM("Route", twl4030_handsfreel_enum);
...
@@ -532,7 +524,7 @@ SOC_DAPM_ENUM("Route", twl4030_handsfreel_enum);
/* Handsfree Left virtual mute */
/* Handsfree Left virtual mute */
static
const
struct
snd_kcontrol_new
twl4030_dapm_handsfreelmute_control
=
static
const
struct
snd_kcontrol_new
twl4030_dapm_handsfreelmute_control
=
SOC_DAPM_SINGLE
(
"Switch"
,
TWL4030_REG_SW_SHADOW
,
0
,
1
,
0
);
SOC_DAPM_SINGLE
_VIRT
(
"Switch"
,
1
);
/* Handsfree Right */
/* Handsfree Right */
static
const
char
*
twl4030_handsfreer_texts
[]
=
static
const
char
*
twl4030_handsfreer_texts
[]
=
...
@@ -548,7 +540,7 @@ SOC_DAPM_ENUM("Route", twl4030_handsfreer_enum);
...
@@ -548,7 +540,7 @@ SOC_DAPM_ENUM("Route", twl4030_handsfreer_enum);
/* Handsfree Right virtual mute */
/* Handsfree Right virtual mute */
static
const
struct
snd_kcontrol_new
twl4030_dapm_handsfreermute_control
=
static
const
struct
snd_kcontrol_new
twl4030_dapm_handsfreermute_control
=
SOC_DAPM_SINGLE
(
"Switch"
,
TWL4030_REG_SW_SHADOW
,
1
,
1
,
0
);
SOC_DAPM_SINGLE
_VIRT
(
"Switch"
,
1
);
/* Vibra */
/* Vibra */
/* Vibra audio path selection */
/* Vibra audio path selection */
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录