Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
37e57066
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看板
提交
37e57066
编写于
9月 29, 2015
作者:
C
Chanwoo Choi
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'ib-extcon-mfd-4.4' into extcon-next
上级
363b3891
6c20b934
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
113 addition
and
21 deletion
+113
-21
drivers/extcon/extcon-arizona.c
drivers/extcon/extcon-arizona.c
+88
-18
drivers/mfd/wm5110-tables.c
drivers/mfd/wm5110-tables.c
+6
-0
include/dt-bindings/mfd/arizona.h
include/dt-bindings/mfd/arizona.h
+2
-0
include/linux/mfd/arizona/pdata.h
include/linux/mfd/arizona/pdata.h
+6
-0
include/linux/mfd/arizona/registers.h
include/linux/mfd/arizona/registers.h
+11
-3
未找到文件。
drivers/extcon/extcon-arizona.c
浏览文件 @
37e57066
...
...
@@ -43,11 +43,18 @@
#define ARIZONA_MICD_CLAMP_MODE_JDL_GP5H 0x9
#define ARIZONA_MICD_CLAMP_MODE_JDH_GP5H 0xb
#define ARIZONA_TST_CAP_DEFAULT 0x3
#define ARIZONA_TST_CAP_CLAMP 0x1
#define ARIZONA_HPDET_MAX 10000
#define HPDET_DEBOUNCE 500
#define DEFAULT_MICD_TIMEOUT 2000
#define QUICK_HEADPHONE_MAX_OHM 3
#define MICROPHONE_MIN_OHM 1257
#define MICROPHONE_MAX_OHM 30000
#define MICD_DBTIME_TWO_READINGS 2
#define MICD_DBTIME_FOUR_READINGS 4
...
...
@@ -117,12 +124,15 @@ static const struct arizona_micd_range micd_default_ranges[] = {
{
.
max
=
430
,
.
key
=
BTN_5
},
};
/* The number of levels in arizona_micd_levels valid for button thresholds */
#define ARIZONA_NUM_MICD_BUTTON_LEVELS 64
static
const
int
arizona_micd_levels
[]
=
{
3
,
6
,
8
,
11
,
13
,
16
,
18
,
21
,
23
,
26
,
28
,
31
,
34
,
36
,
39
,
41
,
44
,
46
,
49
,
52
,
54
,
57
,
60
,
62
,
65
,
67
,
70
,
73
,
75
,
78
,
81
,
83
,
89
,
94
,
100
,
105
,
111
,
116
,
122
,
127
,
139
,
150
,
161
,
173
,
186
,
196
,
209
,
220
,
245
,
270
,
295
,
321
,
348
,
375
,
402
,
430
,
489
,
550
,
614
,
681
,
752
,
903
,
1071
,
1257
,
1257
,
30000
,
};
static
const
unsigned
int
arizona_cable
[]
=
{
...
...
@@ -140,6 +150,7 @@ static void arizona_extcon_hp_clamp(struct arizona_extcon_info *info,
{
struct
arizona
*
arizona
=
info
->
arizona
;
unsigned
int
mask
=
0
,
val
=
0
;
unsigned
int
cap_sel
=
0
;
int
ret
;
switch
(
arizona
->
type
)
{
...
...
@@ -147,10 +158,21 @@ static void arizona_extcon_hp_clamp(struct arizona_extcon_info *info,
case
WM8280
:
mask
=
ARIZONA_HP1L_SHRTO
|
ARIZONA_HP1L_FLWR
|
ARIZONA_HP1L_SHRTI
;
if
(
clamp
)
if
(
clamp
)
{
val
=
ARIZONA_HP1L_SHRTO
;
else
cap_sel
=
ARIZONA_TST_CAP_CLAMP
;
}
else
{
val
=
ARIZONA_HP1L_FLWR
|
ARIZONA_HP1L_SHRTI
;
cap_sel
=
ARIZONA_TST_CAP_DEFAULT
;
}
ret
=
regmap_update_bits
(
arizona
->
regmap
,
ARIZONA_HP_TEST_CTRL_1
,
ARIZONA_HP1_TST_CAP_SEL_MASK
,
cap_sel
);
if
(
ret
!=
0
)
dev_warn
(
arizona
->
dev
,
"Failed to set TST_CAP_SEL: %d
\n
"
,
ret
);
break
;
default:
mask
=
ARIZONA_RMV_SHRT_HP1L
;
...
...
@@ -270,6 +292,7 @@ static void arizona_start_mic(struct arizona_extcon_info *info)
struct
arizona
*
arizona
=
info
->
arizona
;
bool
change
;
int
ret
;
unsigned
int
mode
;
/* Microphone detection can't use idle mode */
pm_runtime_get
(
info
->
dev
);
...
...
@@ -295,9 +318,14 @@ static void arizona_start_mic(struct arizona_extcon_info *info)
regmap_write
(
arizona
->
regmap
,
0x80
,
0x0
);
}
if
(
info
->
detecting
&&
arizona
->
pdata
.
micd_software_compare
)
mode
=
ARIZONA_ACCDET_MODE_ADC
;
else
mode
=
ARIZONA_ACCDET_MODE_MIC
;
regmap_update_bits
(
arizona
->
regmap
,
ARIZONA_ACCESSORY_DETECT_MODE_1
,
ARIZONA_ACCDET_MODE_MASK
,
ARIZONA_ACCDET_MODE_MIC
);
ARIZONA_ACCDET_MODE_MASK
,
mode
);
arizona_extcon_pulse_micbias
(
info
);
...
...
@@ -804,6 +832,37 @@ static void arizona_micd_detect(struct work_struct *work)
return
;
}
if
(
info
->
detecting
&&
arizona
->
pdata
.
micd_software_compare
)
{
/* Must disable MICD before we read the ADCVAL */
regmap_update_bits
(
arizona
->
regmap
,
ARIZONA_MIC_DETECT_1
,
ARIZONA_MICD_ENA
,
0
);
ret
=
regmap_read
(
arizona
->
regmap
,
ARIZONA_MIC_DETECT_4
,
&
val
);
if
(
ret
!=
0
)
{
dev_err
(
arizona
->
dev
,
"Failed to read MICDET_ADCVAL: %d
\n
"
,
ret
);
mutex_unlock
(
&
info
->
lock
);
return
;
}
dev_dbg
(
arizona
->
dev
,
"MICDET_ADCVAL: %x
\n
"
,
val
);
val
&=
ARIZONA_MICDET_ADCVAL_MASK
;
if
(
val
<
ARRAY_SIZE
(
arizona_micd_levels
))
val
=
arizona_micd_levels
[
val
];
else
val
=
INT_MAX
;
if
(
val
<=
QUICK_HEADPHONE_MAX_OHM
)
val
=
ARIZONA_MICD_STS
|
ARIZONA_MICD_LVL_0
;
else
if
(
val
<=
MICROPHONE_MIN_OHM
)
val
=
ARIZONA_MICD_STS
|
ARIZONA_MICD_LVL_1
;
else
if
(
val
<=
MICROPHONE_MAX_OHM
)
val
=
ARIZONA_MICD_STS
|
ARIZONA_MICD_LVL_8
;
else
val
=
ARIZONA_MICD_LVL_8
;
}
for
(
i
=
0
;
i
<
10
&&
!
(
val
&
MICD_LVL_0_TO_8
);
i
++
)
{
ret
=
regmap_read
(
arizona
->
regmap
,
ARIZONA_MIC_DETECT_3
,
&
val
);
if
(
ret
!=
0
)
{
...
...
@@ -932,10 +991,17 @@ static void arizona_micd_detect(struct work_struct *work)
}
handled:
if
(
info
->
detecting
)
if
(
info
->
detecting
)
{
if
(
arizona
->
pdata
.
micd_software_compare
)
regmap_update_bits
(
arizona
->
regmap
,
ARIZONA_MIC_DETECT_1
,
ARIZONA_MICD_ENA
,
ARIZONA_MICD_ENA
);
queue_delayed_work
(
system_power_efficient_wq
,
&
info
->
micd_timeout_work
,
msecs_to_jiffies
(
info
->
micd_timeout
));
}
pm_runtime_mark_last_busy
(
info
->
dev
);
mutex_unlock
(
&
info
->
lock
);
...
...
@@ -991,12 +1057,9 @@ static irqreturn_t arizona_jackdet(int irq, void *data)
mutex_lock
(
&
info
->
lock
);
if
(
arizona
->
pdata
.
jd_gpio5
)
{
if
(
info
->
micd_clamp
)
{
mask
=
ARIZONA_MICD_CLAMP_STS
;
if
(
arizona
->
pdata
.
jd_invert
)
present
=
ARIZONA_MICD_CLAMP_STS
;
else
present
=
0
;
present
=
0
;
}
else
{
mask
=
ARIZONA_JD1_STS
;
if
(
arizona
->
pdata
.
jd_invert
)
...
...
@@ -1055,9 +1118,11 @@ static irqreturn_t arizona_jackdet(int irq, void *data)
msecs_to_jiffies
(
HPDET_DEBOUNCE
));
}
regmap_update_bits
(
arizona
->
regmap
,
ARIZONA_JACK_DETECT_DEBOUNCE
,
ARIZONA_MICD_CLAMP_DB
|
ARIZONA_JD1_DB
,
0
);
if
(
info
->
micd_clamp
||
!
arizona
->
pdata
.
jd_invert
)
regmap_update_bits
(
arizona
->
regmap
,
ARIZONA_JACK_DETECT_DEBOUNCE
,
ARIZONA_MICD_CLAMP_DB
|
ARIZONA_JD1_DB
,
0
);
}
else
{
dev_dbg
(
arizona
->
dev
,
"Detected jack removal
\n
"
);
...
...
@@ -1259,6 +1324,10 @@ static int arizona_extcon_probe(struct platform_device *pdev)
info
->
micd_num_modes
=
ARRAY_SIZE
(
micd_default_modes
);
}
if
(
arizona
->
pdata
.
gpsw
>
0
)
regmap_update_bits
(
arizona
->
regmap
,
ARIZONA_GP_SWITCH_1
,
ARIZONA_SW1_MODE_MASK
,
arizona
->
pdata
.
gpsw
);
if
(
arizona
->
pdata
.
micd_pol_gpio
>
0
)
{
if
(
info
->
micd_modes
[
0
].
gpio
)
mode
=
GPIOF_OUT_INIT_HIGH
;
...
...
@@ -1335,7 +1404,8 @@ static int arizona_extcon_probe(struct platform_device *pdev)
break
;
}
BUILD_BUG_ON
(
ARRAY_SIZE
(
arizona_micd_levels
)
!=
0x40
);
BUILD_BUG_ON
(
ARRAY_SIZE
(
arizona_micd_levels
)
<
ARIZONA_NUM_MICD_BUTTON_LEVELS
);
if
(
arizona
->
pdata
.
num_micd_ranges
)
{
info
->
micd_ranges
=
pdata
->
micd_ranges
;
...
...
@@ -1368,11 +1438,11 @@ static int arizona_extcon_probe(struct platform_device *pdev)
/* Set up all the buttons the user specified */
for
(
i
=
0
;
i
<
info
->
num_micd_ranges
;
i
++
)
{
for
(
j
=
0
;
j
<
AR
RAY_SIZE
(
arizona_micd_levels
)
;
j
++
)
for
(
j
=
0
;
j
<
AR
IZONA_NUM_MICD_BUTTON_LEVELS
;
j
++
)
if
(
arizona_micd_levels
[
j
]
>=
info
->
micd_ranges
[
i
].
max
)
break
;
if
(
j
==
AR
RAY_SIZE
(
arizona_micd_levels
)
)
{
if
(
j
==
AR
IZONA_NUM_MICD_BUTTON_LEVELS
)
{
dev_err
(
arizona
->
dev
,
"Unsupported MICD level %d
\n
"
,
info
->
micd_ranges
[
i
].
max
);
ret
=
-
EINVAL
;
...
...
@@ -1436,7 +1506,7 @@ static int arizona_extcon_probe(struct platform_device *pdev)
pm_runtime_idle
(
&
pdev
->
dev
);
pm_runtime_get_sync
(
&
pdev
->
dev
);
if
(
arizona
->
pdata
.
jd_gpio5
)
{
if
(
info
->
micd_clamp
)
{
jack_irq_rise
=
ARIZONA_IRQ_MICD_CLAMP_RISE
;
jack_irq_fall
=
ARIZONA_IRQ_MICD_CLAMP_FALL
;
}
else
{
...
...
@@ -1541,7 +1611,7 @@ static int arizona_extcon_remove(struct platform_device *pdev)
ARIZONA_MICD_CLAMP_CONTROL
,
ARIZONA_MICD_CLAMP_MODE_MASK
,
0
);
if
(
arizona
->
pdata
.
jd_gpio5
)
{
if
(
info
->
micd_clamp
)
{
jack_irq_rise
=
ARIZONA_IRQ_MICD_CLAMP_RISE
;
jack_irq_fall
=
ARIZONA_IRQ_MICD_CLAMP_FALL
;
}
else
{
...
...
drivers/mfd/wm5110-tables.c
浏览文件 @
37e57066
...
...
@@ -1481,6 +1481,7 @@ static const struct reg_default wm5110_reg_default[] = {
{
0x00000C04
,
0xA101
},
/* R3076 - GPIO5 CTRL */
{
0x00000C0F
,
0x0400
},
/* R3087 - IRQ CTRL 1 */
{
0x00000C10
,
0x1000
},
/* R3088 - GPIO Debounce Config */
{
0x00000C18
,
0x0000
},
/* R3096 - GP Switch 1 */
{
0x00000C20
,
0x8002
},
/* R3104 - Misc Pad Ctrl 1 */
{
0x00000C21
,
0x8001
},
/* R3105 - Misc Pad Ctrl 2 */
{
0x00000C22
,
0x0000
},
/* R3106 - Misc Pad Ctrl 3 */
...
...
@@ -1811,6 +1812,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)
case
ARIZONA_MIC_DETECT_1
:
case
ARIZONA_MIC_DETECT_2
:
case
ARIZONA_MIC_DETECT_3
:
case
ARIZONA_MIC_DETECT_4
:
case
ARIZONA_MIC_DETECT_LEVEL_1
:
case
ARIZONA_MIC_DETECT_LEVEL_2
:
case
ARIZONA_MIC_DETECT_LEVEL_3
:
...
...
@@ -1910,6 +1912,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)
case
ARIZONA_HP1_SHORT_CIRCUIT_CTRL
:
case
ARIZONA_HP2_SHORT_CIRCUIT_CTRL
:
case
ARIZONA_HP3_SHORT_CIRCUIT_CTRL
:
case
ARIZONA_HP_TEST_CTRL_1
:
case
ARIZONA_AIF1_BCLK_CTRL
:
case
ARIZONA_AIF1_TX_PIN_CTRL
:
case
ARIZONA_AIF1_RX_PIN_CTRL
:
...
...
@@ -2527,6 +2530,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)
case
ARIZONA_GPIO5_CTRL
:
case
ARIZONA_IRQ_CTRL_1
:
case
ARIZONA_GPIO_DEBOUNCE_CONFIG
:
case
ARIZONA_GP_SWITCH_1
:
case
ARIZONA_MISC_PAD_CTRL_1
:
case
ARIZONA_MISC_PAD_CTRL_2
:
case
ARIZONA_MISC_PAD_CTRL_3
:
...
...
@@ -2847,12 +2851,14 @@ static bool wm5110_volatile_register(struct device *dev, unsigned int reg)
case
ARIZONA_ASYNC_SAMPLE_RATE_1_STATUS
:
case
ARIZONA_ASYNC_SAMPLE_RATE_2_STATUS
:
case
ARIZONA_MIC_DETECT_3
:
case
ARIZONA_MIC_DETECT_4
:
case
ARIZONA_HP_CTRL_1L
:
case
ARIZONA_HP_CTRL_1R
:
case
ARIZONA_HEADPHONE_DETECT_2
:
case
ARIZONA_INPUT_ENABLES_STATUS
:
case
ARIZONA_OUTPUT_STATUS_1
:
case
ARIZONA_RAW_OUTPUT_STATUS_1
:
case
ARIZONA_HP_TEST_CTRL_1
:
case
ARIZONA_SLIMBUS_RX_PORT_STATUS
:
case
ARIZONA_SLIMBUS_TX_PORT_STATUS
:
case
ARIZONA_INTERRUPT_STATUS_1
:
...
...
include/dt-bindings/mfd/arizona.h
浏览文件 @
37e57066
...
...
@@ -107,5 +107,7 @@
#define ARIZONA_ACCDET_MODE_MIC 0
#define ARIZONA_ACCDET_MODE_HPL 1
#define ARIZONA_ACCDET_MODE_HPR 2
#define ARIZONA_ACCDET_MODE_HPM 4
#define ARIZONA_ACCDET_MODE_ADC 7
#endif
include/linux/mfd/arizona/pdata.h
浏览文件 @
37e57066
...
...
@@ -124,6 +124,9 @@ struct arizona_pdata {
/** Channel to use for headphone detection */
unsigned
int
hpdet_channel
;
/** Use software comparison to determine mic presence */
bool
micd_software_compare
;
/** Extra debounce timeout used during initial mic detection (ms) */
unsigned
int
micd_detect_debounce
;
...
...
@@ -181,6 +184,9 @@ struct arizona_pdata {
/** GPIO for primary IRQ (used for edge triggered emulation) */
int
irq_gpio
;
/** General purpose switch control */
unsigned
int
gpsw
;
};
#endif
include/linux/mfd/arizona/registers.h
浏览文件 @
37e57066
...
...
@@ -242,6 +242,7 @@
#define ARIZONA_HP1_SHORT_CIRCUIT_CTRL 0x4A0
#define ARIZONA_HP2_SHORT_CIRCUIT_CTRL 0x4A1
#define ARIZONA_HP3_SHORT_CIRCUIT_CTRL 0x4A2
#define ARIZONA_HP_TEST_CTRL_1 0x4A4
#define ARIZONA_SPK_CTRL_2 0x4B5
#define ARIZONA_SPK_CTRL_3 0x4B6
#define ARIZONA_DAC_COMP_1 0x4DC
...
...
@@ -2359,9 +2360,9 @@
#define ARIZONA_ACCDET_SRC_MASK 0x2000
/* ACCDET_SRC */
#define ARIZONA_ACCDET_SRC_SHIFT 13
/* ACCDET_SRC */
#define ARIZONA_ACCDET_SRC_WIDTH 1
/* ACCDET_SRC */
#define ARIZONA_ACCDET_MODE_MASK 0x000
3
/* ACCDET_MODE - [1
:0] */
#define ARIZONA_ACCDET_MODE_SHIFT 0
/* ACCDET_MODE - [
1
:0] */
#define ARIZONA_ACCDET_MODE_WIDTH
2
/* ACCDET_MODE - [1
:0] */
#define ARIZONA_ACCDET_MODE_MASK 0x000
7
/* ACCDET_MODE - [2
:0] */
#define ARIZONA_ACCDET_MODE_SHIFT 0
/* ACCDET_MODE - [
2
:0] */
#define ARIZONA_ACCDET_MODE_WIDTH
3
/* ACCDET_MODE - [2
:0] */
/*
* R667 (0x29B) - Headphone Detect 1
...
...
@@ -3701,6 +3702,13 @@
#define ARIZONA_HP3_SC_ENA_SHIFT 12
/* HP3_SC_ENA */
#define ARIZONA_HP3_SC_ENA_WIDTH 1
/* HP3_SC_ENA */
/*
* R1188 (0x4A4) HP Test Ctrl 1
*/
#define ARIZONA_HP1_TST_CAP_SEL_MASK 0x0003
/* HP1_TST_CAP_SEL - [1:0] */
#define ARIZONA_HP1_TST_CAP_SEL_SHIFT 0
/* HP1_TST_CAP_SEL - [1:0] */
#define ARIZONA_HP1_TST_CAP_SEL_WIDTH 2
/* HP1_TST_CAP_SEL - [1:0] */
/*
* R1244 (0x4DC) - DAC comp 1
*/
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录