Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OS
U-Boot.Mirror
提交
27a19876
U
U-Boot.Mirror
项目概览
OS
/
U-Boot.Mirror
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
U-Boot.Mirror
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
27a19876
编写于
5月 05, 2017
作者:
T
Tom Rini
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.denx.de/u-boot-spi
上级
a63d8001
2f542058
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
33 addition
and
1 deletion
+33
-1
drivers/spi/atmel_spi.c
drivers/spi/atmel_spi.c
+9
-0
drivers/spi/omap3_spi.c
drivers/spi/omap3_spi.c
+0
-1
drivers/spi/zynq_spi.c
drivers/spi/zynq_spi.c
+24
-0
未找到文件。
drivers/spi/atmel_spi.c
浏览文件 @
27a19876
...
...
@@ -296,6 +296,9 @@ static void atmel_spi_cs_activate(struct udevice *dev)
struct
dm_spi_slave_platdata
*
slave_plat
=
dev_get_parent_platdata
(
dev
);
u32
cs
=
slave_plat
->
cs
;
if
(
!
dm_gpio_is_valid
(
&
priv
->
cs_gpios
[
cs
]))
return
;
dm_gpio_set_value
(
&
priv
->
cs_gpios
[
cs
],
0
);
}
...
...
@@ -306,6 +309,9 @@ static void atmel_spi_cs_deactivate(struct udevice *dev)
struct
dm_spi_slave_platdata
*
slave_plat
=
dev_get_parent_platdata
(
dev
);
u32
cs
=
slave_plat
->
cs
;
if
(
!
dm_gpio_is_valid
(
&
priv
->
cs_gpios
[
cs
]))
return
;
dm_gpio_set_value
(
&
priv
->
cs_gpios
[
cs
],
1
);
}
...
...
@@ -473,6 +479,9 @@ static int atmel_spi_probe(struct udevice *bus)
}
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
priv
->
cs_gpios
);
i
++
)
{
if
(
!
dm_gpio_is_valid
(
&
priv
->
cs_gpios
[
i
]))
continue
;
dm_gpio_set_dir_flags
(
&
priv
->
cs_gpios
[
i
],
GPIOD_IS_OUT
|
GPIOD_IS_OUT_ACTIVE
);
}
...
...
drivers/spi/omap3_spi.c
浏览文件 @
27a19876
...
...
@@ -692,6 +692,5 @@ U_BOOT_DRIVER(omap3_spi) = {
.
probe
=
omap3_spi_probe
,
.
ops
=
&
omap3_spi_ops
,
.
priv_auto_alloc_size
=
sizeof
(
struct
omap3_spi_priv
),
.
probe
=
omap3_spi_probe
,
};
#endif
drivers/spi/zynq_spi.c
浏览文件 @
27a19876
...
...
@@ -56,6 +56,8 @@ struct zynq_spi_platdata {
struct
zynq_spi_regs
*
regs
;
u32
frequency
;
/* input frequency */
u32
speed_hz
;
uint
deactivate_delay_us
;
/* Delay to wait after deactivate */
uint
activate_delay_us
;
/* Delay to wait after activate */
};
/* zynq spi priv */
...
...
@@ -63,6 +65,7 @@ struct zynq_spi_priv {
struct
zynq_spi_regs
*
regs
;
u8
cs
;
u8
mode
;
ulong
last_transaction_us
;
/* Time of last transaction end */
u8
fifo_depth
;
u32
freq
;
/* required frequency */
};
...
...
@@ -78,6 +81,10 @@ static int zynq_spi_ofdata_to_platdata(struct udevice *bus)
/* FIXME: Use 250MHz as a suitable default */
plat
->
frequency
=
fdtdec_get_int
(
blob
,
node
,
"spi-max-frequency"
,
250000000
);
plat
->
deactivate_delay_us
=
fdtdec_get_int
(
blob
,
node
,
"spi-deactivate-delay"
,
0
);
plat
->
activate_delay_us
=
fdtdec_get_int
(
blob
,
node
,
"spi-activate-delay"
,
0
);
plat
->
speed_hz
=
plat
->
frequency
/
2
;
debug
(
"%s: regs=%p max-frequency=%d
\n
"
,
__func__
,
...
...
@@ -133,10 +140,19 @@ static int zynq_spi_probe(struct udevice *bus)
static
void
spi_cs_activate
(
struct
udevice
*
dev
)
{
struct
udevice
*
bus
=
dev
->
parent
;
struct
zynq_spi_platdata
*
plat
=
bus
->
platdata
;
struct
zynq_spi_priv
*
priv
=
dev_get_priv
(
bus
);
struct
zynq_spi_regs
*
regs
=
priv
->
regs
;
u32
cr
;
/* If it's too soon to do another transaction, wait */
if
(
plat
->
deactivate_delay_us
&&
priv
->
last_transaction_us
)
{
ulong
delay_us
;
/* The delay completed so far */
delay_us
=
timer_get_us
()
-
priv
->
last_transaction_us
;
if
(
delay_us
<
plat
->
deactivate_delay_us
)
udelay
(
plat
->
deactivate_delay_us
-
delay_us
);
}
clrbits_le32
(
&
regs
->
cr
,
ZYNQ_SPI_CR_CS_MASK
);
cr
=
readl
(
&
regs
->
cr
);
/*
...
...
@@ -147,15 +163,23 @@ static void spi_cs_activate(struct udevice *dev)
*/
cr
|=
(
~
(
1
<<
priv
->
cs
)
<<
ZYNQ_SPI_CR_SS_SHIFT
)
&
ZYNQ_SPI_CR_CS_MASK
;
writel
(
cr
,
&
regs
->
cr
);
if
(
plat
->
activate_delay_us
)
udelay
(
plat
->
activate_delay_us
);
}
static
void
spi_cs_deactivate
(
struct
udevice
*
dev
)
{
struct
udevice
*
bus
=
dev
->
parent
;
struct
zynq_spi_platdata
*
plat
=
bus
->
platdata
;
struct
zynq_spi_priv
*
priv
=
dev_get_priv
(
bus
);
struct
zynq_spi_regs
*
regs
=
priv
->
regs
;
setbits_le32
(
&
regs
->
cr
,
ZYNQ_SPI_CR_CS_MASK
);
/* Remember time of this transaction so we can honour the bus delay */
if
(
plat
->
deactivate_delay_us
)
priv
->
last_transaction_us
=
timer_get_us
();
}
static
int
zynq_spi_claim_bus
(
struct
udevice
*
dev
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录