Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
45bb5065
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看板
提交
45bb5065
编写于
9月 01, 2013
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'spi/topic/octeon' into spi-next
上级
455765f0
f79cc88e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
5 addition
and
44 deletion
+5
-44
drivers/spi/spi-octeon.c
drivers/spi/spi-octeon.c
+5
-44
未找到文件。
drivers/spi/spi-octeon.c
浏览文件 @
45bb5065
...
...
@@ -28,7 +28,6 @@
#define OCTEON_SPI_MAX_CLOCK_HZ 16000000
struct
octeon_spi
{
struct
spi_master
*
my_master
;
u64
register_base
;
u64
last_cfg
;
u64
cs_enax
;
...
...
@@ -64,7 +63,6 @@ static int octeon_spi_do_transfer(struct octeon_spi *p,
unsigned
int
speed_hz
;
int
mode
;
bool
cpha
,
cpol
;
int
bits_per_word
;
const
u8
*
tx_buf
;
u8
*
rx_buf
;
int
len
;
...
...
@@ -76,12 +74,9 @@ static int octeon_spi_do_transfer(struct octeon_spi *p,
mode
=
msg_setup
->
mode
;
cpha
=
mode
&
SPI_CPHA
;
cpol
=
mode
&
SPI_CPOL
;
bits_per_word
=
msg_setup
->
bits_per_word
;
if
(
xfer
->
speed_hz
)
speed_hz
=
xfer
->
speed_hz
;
if
(
xfer
->
bits_per_word
)
bits_per_word
=
xfer
->
bits_per_word
;
if
(
speed_hz
>
OCTEON_SPI_MAX_CLOCK_HZ
)
speed_hz
=
OCTEON_SPI_MAX_CLOCK_HZ
;
...
...
@@ -166,19 +161,6 @@ static int octeon_spi_do_transfer(struct octeon_spi *p,
return
xfer
->
len
;
}
static
int
octeon_spi_validate_bpw
(
struct
spi_device
*
spi
,
u32
speed
)
{
switch
(
speed
)
{
case
8
:
break
;
default:
dev_err
(
&
spi
->
dev
,
"Error: %d bits per word not supported
\n
"
,
speed
);
return
-
EINVAL
;
}
return
0
;
}
static
int
octeon_spi_transfer_one_message
(
struct
spi_master
*
master
,
struct
spi_message
*
msg
)
{
...
...
@@ -196,15 +178,6 @@ static int octeon_spi_transfer_one_message(struct spi_master *master,
goto
err
;
}
list_for_each_entry
(
xfer
,
&
msg
->
transfers
,
transfer_list
)
{
if
(
xfer
->
bits_per_word
)
{
status
=
octeon_spi_validate_bpw
(
msg
->
spi
,
xfer
->
bits_per_word
);
if
(
status
)
goto
err
;
}
}
list_for_each_entry
(
xfer
,
&
msg
->
transfers
,
transfer_list
)
{
bool
last_xfer
=
&
xfer
->
transfer_list
==
msg
->
transfers
.
prev
;
int
r
=
octeon_spi_do_transfer
(
p
,
msg
,
xfer
,
last_xfer
);
...
...
@@ -236,14 +209,9 @@ static struct octeon_spi_setup *octeon_spi_new_setup(struct spi_device *spi)
static
int
octeon_spi_setup
(
struct
spi_device
*
spi
)
{
int
r
;
struct
octeon_spi_setup
*
new_setup
;
struct
octeon_spi_setup
*
old_setup
=
spi_get_ctldata
(
spi
);
r
=
octeon_spi_validate_bpw
(
spi
,
spi
->
bits_per_word
);
if
(
r
)
return
r
;
new_setup
=
octeon_spi_new_setup
(
spi
);
if
(
!
new_setup
)
return
-
ENOMEM
;
...
...
@@ -261,14 +229,8 @@ static void octeon_spi_cleanup(struct spi_device *spi)
kfree
(
old_setup
);
}
static
int
octeon_spi_nop_transfer_hardware
(
struct
spi_master
*
master
)
{
return
0
;
}
static
int
octeon_spi_probe
(
struct
platform_device
*
pdev
)
{
struct
resource
*
res_mem
;
struct
spi_master
*
master
;
struct
octeon_spi
*
p
;
...
...
@@ -278,8 +240,7 @@ static int octeon_spi_probe(struct platform_device *pdev)
if
(
!
master
)
return
-
ENOMEM
;
p
=
spi_master_get_devdata
(
master
);
platform_set_drvdata
(
pdev
,
p
);
p
->
my_master
=
master
;
platform_set_drvdata
(
pdev
,
master
);
res_mem
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
...
...
@@ -307,9 +268,8 @@ static int octeon_spi_probe(struct platform_device *pdev)
master
->
setup
=
octeon_spi_setup
;
master
->
cleanup
=
octeon_spi_cleanup
;
master
->
prepare_transfer_hardware
=
octeon_spi_nop_transfer_hardware
;
master
->
transfer_one_message
=
octeon_spi_transfer_one_message
;
master
->
unprepare_transfer_hardware
=
octeon_spi_nop_transfer_hardware
;
master
->
bits_per_word_mask
=
SPI_BPW_MASK
(
8
)
;
master
->
dev
.
of_node
=
pdev
->
dev
.
of_node
;
err
=
spi_register_master
(
master
);
...
...
@@ -328,10 +288,11 @@ static int octeon_spi_probe(struct platform_device *pdev)
static
int
octeon_spi_remove
(
struct
platform_device
*
pdev
)
{
struct
octeon_spi
*
p
=
platform_get_drvdata
(
pdev
);
struct
spi_master
*
master
=
platform_get_drvdata
(
pdev
);
struct
octeon_spi
*
p
=
spi_master_get_devdata
(
master
);
u64
register_base
=
p
->
register_base
;
spi_unregister_master
(
p
->
my_
master
);
spi_unregister_master
(
master
);
/* Clear the CSENA* and put everything in a known state. */
cvmx_write_csr
(
register_base
+
OCTEON_SPI_CFG
,
0
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录