Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
665ddeb2
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看板
提交
665ddeb2
编写于
11月 25, 2015
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'asoc/fix/rt5645' into asoc-linus
上级
98409bfd
6b3cecd1
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
57 addition
and
4 deletion
+57
-4
sound/soc/codecs/rt5645.c
sound/soc/codecs/rt5645.c
+57
-4
未找到文件。
sound/soc/codecs/rt5645.c
浏览文件 @
665ddeb2
...
...
@@ -245,7 +245,7 @@ struct rt5645_priv {
struct
snd_soc_jack
*
hp_jack
;
struct
snd_soc_jack
*
mic_jack
;
struct
snd_soc_jack
*
btn_jack
;
struct
delayed_work
jack_detect_work
;
struct
delayed_work
jack_detect_work
,
rcclock_work
;
struct
regulator_bulk_data
supplies
[
ARRAY_SIZE
(
rt5645_supply_names
)];
struct
rt5645_eq_param_s
*
eq_param
;
...
...
@@ -565,12 +565,33 @@ static int rt5645_hweq_put(struct snd_kcontrol *kcontrol,
.put = rt5645_hweq_put \
}
static
int
rt5645_spk_put_volsw
(
struct
snd_kcontrol
*
kcontrol
,
struct
snd_ctl_elem_value
*
ucontrol
)
{
struct
snd_soc_component
*
component
=
snd_kcontrol_chip
(
kcontrol
);
struct
rt5645_priv
*
rt5645
=
snd_soc_component_get_drvdata
(
component
);
int
ret
;
cancel_delayed_work_sync
(
&
rt5645
->
rcclock_work
);
regmap_update_bits
(
rt5645
->
regmap
,
RT5645_MICBIAS
,
RT5645_PWR_CLK25M_MASK
,
RT5645_PWR_CLK25M_PU
);
ret
=
snd_soc_put_volsw
(
kcontrol
,
ucontrol
);
queue_delayed_work
(
system_power_efficient_wq
,
&
rt5645
->
rcclock_work
,
msecs_to_jiffies
(
200
));
return
ret
;
}
static
const
struct
snd_kcontrol_new
rt5645_snd_controls
[]
=
{
/* Speaker Output Volume */
SOC_DOUBLE
(
"Speaker Channel Switch"
,
RT5645_SPK_VOL
,
RT5645_VOL_L_SFT
,
RT5645_VOL_R_SFT
,
1
,
1
),
SOC_DOUBLE_TLV
(
"Speaker Playback Volume"
,
RT5645_SPK_VOL
,
RT5645_L_VOL_SFT
,
RT5645_R_VOL_SFT
,
39
,
1
,
out_vol_tlv
),
SOC_DOUBLE_EXT_TLV
(
"Speaker Playback Volume"
,
RT5645_SPK_VOL
,
RT5645_L_VOL_SFT
,
RT5645_R_VOL_SFT
,
39
,
1
,
snd_soc_get_volsw
,
rt5645_spk_put_volsw
,
out_vol_tlv
),
/* ClassD modulator Speaker Gain Ratio */
SOC_SINGLE_TLV
(
"Speaker ClassD Playback Volume"
,
RT5645_SPO_CLSD_RATIO
,
...
...
@@ -1498,7 +1519,7 @@ static void hp_amp_power(struct snd_soc_codec *codec, int on)
regmap_write
(
rt5645
->
regmap
,
RT5645_PR_BASE
+
RT5645_MAMP_INT_REG2
,
0xfc00
);
snd_soc_write
(
codec
,
RT5645_DEPOP_M2
,
0x1140
);
msleep
(
4
0
);
msleep
(
7
0
);
rt5645
->
hp_on
=
true
;
}
else
{
/* depop parameters */
...
...
@@ -3122,6 +3143,15 @@ static void rt5645_jack_detect_work(struct work_struct *work)
SND_JACK_BTN_2
|
SND_JACK_BTN_3
);
}
static
void
rt5645_rcclock_work
(
struct
work_struct
*
work
)
{
struct
rt5645_priv
*
rt5645
=
container_of
(
work
,
struct
rt5645_priv
,
rcclock_work
.
work
);
regmap_update_bits
(
rt5645
->
regmap
,
RT5645_MICBIAS
,
RT5645_PWR_CLK25M_MASK
,
RT5645_PWR_CLK25M_PD
);
}
static
irqreturn_t
rt5645_irq
(
int
irq
,
void
*
data
)
{
struct
rt5645_priv
*
rt5645
=
data
;
...
...
@@ -3348,6 +3378,27 @@ static const struct dmi_system_id dmi_platform_intel_braswell[] = {
DMI_MATCH
(
DMI_PRODUCT_NAME
,
"Reks"
),
},
},
{
.
ident
=
"Google Edgar"
,
.
callback
=
strago_quirk_cb
,
.
matches
=
{
DMI_MATCH
(
DMI_PRODUCT_NAME
,
"Edgar"
),
},
},
{
.
ident
=
"Google Wizpig"
,
.
callback
=
strago_quirk_cb
,
.
matches
=
{
DMI_MATCH
(
DMI_PRODUCT_NAME
,
"Wizpig"
),
},
},
{
.
ident
=
"Google Terra"
,
.
callback
=
strago_quirk_cb
,
.
matches
=
{
DMI_MATCH
(
DMI_PRODUCT_NAME
,
"Terra"
),
},
},
{
}
};
...
...
@@ -3587,6 +3638,7 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
}
INIT_DELAYED_WORK
(
&
rt5645
->
jack_detect_work
,
rt5645_jack_detect_work
);
INIT_DELAYED_WORK
(
&
rt5645
->
rcclock_work
,
rt5645_rcclock_work
);
if
(
rt5645
->
i2c
->
irq
)
{
ret
=
request_threaded_irq
(
rt5645
->
i2c
->
irq
,
NULL
,
rt5645_irq
,
...
...
@@ -3621,6 +3673,7 @@ static int rt5645_i2c_remove(struct i2c_client *i2c)
free_irq
(
i2c
->
irq
,
rt5645
);
cancel_delayed_work_sync
(
&
rt5645
->
jack_detect_work
);
cancel_delayed_work_sync
(
&
rt5645
->
rcclock_work
);
snd_soc_unregister_codec
(
&
i2c
->
dev
);
regulator_bulk_disable
(
ARRAY_SIZE
(
rt5645
->
supplies
),
rt5645
->
supplies
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录