Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
38962571
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看板
提交
38962571
编写于
4月 23, 2014
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'regulator/fix/pbias' into regulator-linus
上级
5c437f42
60e8c1e3
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
20 addition
and
56 deletion
+20
-56
drivers/regulator/pbias-regulator.c
drivers/regulator/pbias-regulator.c
+20
-56
未找到文件。
drivers/regulator/pbias-regulator.c
浏览文件 @
38962571
...
@@ -38,66 +38,24 @@ struct pbias_reg_info {
...
@@ -38,66 +38,24 @@ struct pbias_reg_info {
struct
pbias_regulator_data
{
struct
pbias_regulator_data
{
struct
regulator_desc
desc
;
struct
regulator_desc
desc
;
void
__iomem
*
pbias_addr
;
void
__iomem
*
pbias_addr
;
unsigned
int
pbias_reg
;
struct
regulator_dev
*
dev
;
struct
regulator_dev
*
dev
;
struct
regmap
*
syscon
;
struct
regmap
*
syscon
;
const
struct
pbias_reg_info
*
info
;
const
struct
pbias_reg_info
*
info
;
int
voltage
;
int
voltage
;
};
};
static
int
pbias_regulator_set_voltage
(
struct
regulator_dev
*
dev
,
static
const
unsigned
int
pbias_volt_table
[]
=
{
int
min_uV
,
int
max_uV
,
unsigned
*
selector
)
1800000
,
{
3000000
struct
pbias_regulator_data
*
data
=
rdev_get_drvdata
(
dev
);
};
const
struct
pbias_reg_info
*
info
=
data
->
info
;
int
ret
,
vmode
;
if
(
min_uV
<=
1800000
)
vmode
=
0
;
else
if
(
min_uV
>
1800000
)
vmode
=
info
->
vmode
;
ret
=
regmap_update_bits
(
data
->
syscon
,
data
->
pbias_reg
,
info
->
vmode
,
vmode
);
return
ret
;
}
static
int
pbias_regulator_get_voltage
(
struct
regulator_dev
*
rdev
)
{
struct
pbias_regulator_data
*
data
=
rdev_get_drvdata
(
rdev
);
const
struct
pbias_reg_info
*
info
=
data
->
info
;
int
value
,
voltage
;
regmap_read
(
data
->
syscon
,
data
->
pbias_reg
,
&
value
);
value
&=
info
->
vmode
;
voltage
=
value
?
3000000
:
1800000
;
return
voltage
;
}
static
int
pbias_regulator_enable
(
struct
regulator_dev
*
rdev
)
static
int
pbias_regulator_enable
(
struct
regulator_dev
*
rdev
)
{
{
struct
pbias_regulator_data
*
data
=
rdev_get_drvdata
(
rdev
);
struct
pbias_regulator_data
*
data
=
rdev_get_drvdata
(
rdev
);
const
struct
pbias_reg_info
*
info
=
data
->
info
;
const
struct
pbias_reg_info
*
info
=
data
->
info
;
int
ret
;
ret
=
regmap_update_bits
(
data
->
syscon
,
data
->
pbias
_reg
,
ret
urn
regmap_update_bits
(
data
->
syscon
,
rdev
->
desc
->
enable
_reg
,
info
->
enable_mask
,
info
->
enable
);
info
->
enable_mask
,
info
->
enable
);
return
ret
;
}
static
int
pbias_regulator_disable
(
struct
regulator_dev
*
rdev
)
{
struct
pbias_regulator_data
*
data
=
rdev_get_drvdata
(
rdev
);
const
struct
pbias_reg_info
*
info
=
data
->
info
;
int
ret
;
ret
=
regmap_update_bits
(
data
->
syscon
,
data
->
pbias_reg
,
info
->
enable_mask
,
0
);
return
ret
;
}
}
static
int
pbias_regulator_is_enable
(
struct
regulator_dev
*
rdev
)
static
int
pbias_regulator_is_enable
(
struct
regulator_dev
*
rdev
)
...
@@ -106,16 +64,17 @@ static int pbias_regulator_is_enable(struct regulator_dev *rdev)
...
@@ -106,16 +64,17 @@ static int pbias_regulator_is_enable(struct regulator_dev *rdev)
const
struct
pbias_reg_info
*
info
=
data
->
info
;
const
struct
pbias_reg_info
*
info
=
data
->
info
;
int
value
;
int
value
;
regmap_read
(
data
->
syscon
,
data
->
pbias
_reg
,
&
value
);
regmap_read
(
data
->
syscon
,
rdev
->
desc
->
enable
_reg
,
&
value
);
return
(
value
&
info
->
enable_mask
)
==
info
->
enable
_mask
;
return
(
value
&
info
->
enable_mask
)
==
info
->
enable
;
}
}
static
struct
regulator_ops
pbias_regulator_voltage_ops
=
{
static
struct
regulator_ops
pbias_regulator_voltage_ops
=
{
.
set_voltage
=
pbias_regulator_set_voltage
,
.
list_voltage
=
regulator_list_voltage_table
,
.
get_voltage
=
pbias_regulator_get_voltage
,
.
get_voltage_sel
=
regulator_get_voltage_sel_regmap
,
.
set_voltage_sel
=
regulator_set_voltage_sel_regmap
,
.
enable
=
pbias_regulator_enable
,
.
enable
=
pbias_regulator_enable
,
.
disable
=
pbias_regulator_disable
,
.
disable
=
regulator_disable_regmap
,
.
is_enabled
=
pbias_regulator_is_enable
,
.
is_enabled
=
pbias_regulator_is_enable
,
};
};
...
@@ -192,6 +151,7 @@ static int pbias_regulator_probe(struct platform_device *pdev)
...
@@ -192,6 +151,7 @@ static int pbias_regulator_probe(struct platform_device *pdev)
if
(
IS_ERR
(
syscon
))
if
(
IS_ERR
(
syscon
))
return
PTR_ERR
(
syscon
);
return
PTR_ERR
(
syscon
);
cfg
.
regmap
=
syscon
;
cfg
.
dev
=
&
pdev
->
dev
;
cfg
.
dev
=
&
pdev
->
dev
;
for
(
idx
=
0
;
idx
<
PBIAS_NUM_REGS
&&
data_idx
<
count
;
idx
++
)
{
for
(
idx
=
0
;
idx
<
PBIAS_NUM_REGS
&&
data_idx
<
count
;
idx
++
)
{
...
@@ -207,15 +167,19 @@ static int pbias_regulator_probe(struct platform_device *pdev)
...
@@ -207,15 +167,19 @@ static int pbias_regulator_probe(struct platform_device *pdev)
if
(
!
res
)
if
(
!
res
)
return
-
EINVAL
;
return
-
EINVAL
;
drvdata
[
data_idx
].
pbias_reg
=
res
->
start
;
drvdata
[
data_idx
].
syscon
=
syscon
;
drvdata
[
data_idx
].
syscon
=
syscon
;
drvdata
[
data_idx
].
info
=
info
;
drvdata
[
data_idx
].
info
=
info
;
drvdata
[
data_idx
].
desc
.
name
=
info
->
name
;
drvdata
[
data_idx
].
desc
.
name
=
info
->
name
;
drvdata
[
data_idx
].
desc
.
owner
=
THIS_MODULE
;
drvdata
[
data_idx
].
desc
.
owner
=
THIS_MODULE
;
drvdata
[
data_idx
].
desc
.
type
=
REGULATOR_VOLTAGE
;
drvdata
[
data_idx
].
desc
.
type
=
REGULATOR_VOLTAGE
;
drvdata
[
data_idx
].
desc
.
ops
=
&
pbias_regulator_voltage_ops
;
drvdata
[
data_idx
].
desc
.
ops
=
&
pbias_regulator_voltage_ops
;
drvdata
[
data_idx
].
desc
.
volt_table
=
pbias_volt_table
;
drvdata
[
data_idx
].
desc
.
n_voltages
=
2
;
drvdata
[
data_idx
].
desc
.
n_voltages
=
2
;
drvdata
[
data_idx
].
desc
.
enable_time
=
info
->
enable_time
;
drvdata
[
data_idx
].
desc
.
enable_time
=
info
->
enable_time
;
drvdata
[
data_idx
].
desc
.
vsel_reg
=
res
->
start
;
drvdata
[
data_idx
].
desc
.
vsel_mask
=
info
->
vmode
;
drvdata
[
data_idx
].
desc
.
enable_reg
=
res
->
start
;
drvdata
[
data_idx
].
desc
.
enable_mask
=
info
->
enable_mask
;
cfg
.
init_data
=
pbias_matches
[
idx
].
init_data
;
cfg
.
init_data
=
pbias_matches
[
idx
].
init_data
;
cfg
.
driver_data
=
&
drvdata
[
data_idx
];
cfg
.
driver_data
=
&
drvdata
[
data_idx
];
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录