Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
82d553c6
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
82d553c6
编写于
9月 02, 2007
作者:
R
Russell King
提交者:
Russell King
10月 12, 2007
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
[ARM] pxa: update pxa irda driver to use clk support
Signed-off-by:
N
Russell King
<
rmk+kernel@arm.linux.org.uk
>
上级
435b6e94
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
43 addition
and
8 deletion
+43
-8
drivers/net/irda/pxaficp_ir.c
drivers/net/irda/pxaficp_ir.c
+43
-8
未找到文件。
drivers/net/irda/pxaficp_ir.c
浏览文件 @
82d553c6
...
...
@@ -23,6 +23,7 @@
#include <linux/dma-mapping.h>
#include <linux/platform_device.h>
#include <linux/pm.h>
#include <linux/clk.h>
#include <net/irda/irda.h>
#include <net/irda/irmod.h>
...
...
@@ -87,8 +88,30 @@ struct pxa_irda {
struct
device
*
dev
;
struct
pxaficp_platform_data
*
pdata
;
struct
clk
*
fir_clk
;
struct
clk
*
sir_clk
;
struct
clk
*
cur_clk
;
};
static
inline
void
pxa_irda_disable_clk
(
struct
pxa_irda
*
si
)
{
if
(
si
->
cur_clk
)
clk_disable
(
si
->
cur_clk
);
si
->
cur_clk
=
NULL
;
}
static
inline
void
pxa_irda_enable_firclk
(
struct
pxa_irda
*
si
)
{
si
->
cur_clk
=
si
->
fir_clk
;
clk_enable
(
si
->
fir_clk
);
}
static
inline
void
pxa_irda_enable_sirclk
(
struct
pxa_irda
*
si
)
{
si
->
cur_clk
=
si
->
sir_clk
;
clk_enable
(
si
->
sir_clk
);
}
#define IS_FIR(si) ((si)->speed >= 4000000)
#define IRDA_FRAME_SIZE_LIMIT 2047
...
...
@@ -134,7 +157,7 @@ static int pxa_irda_set_speed(struct pxa_irda *si, int speed)
DCSR
(
si
->
rxdma
)
&=
~
DCSR_RUN
;
/* disable FICP */
ICCR0
=
0
;
pxa_
set_cken
(
CKEN_FICP
,
0
);
pxa_
irda_disable_clk
(
si
);
/* set board transceiver to SIR mode */
si
->
pdata
->
transceiver_mode
(
si
->
dev
,
IR_SIRMODE
);
...
...
@@ -144,7 +167,7 @@ static int pxa_irda_set_speed(struct pxa_irda *si, int speed)
pxa_gpio_mode
(
GPIO47_STTXD_MD
);
/* enable the STUART clock */
pxa_
set_cken
(
CKEN_STUART
,
1
);
pxa_
irda_enable_sirclk
(
si
);
}
/* disable STUART first */
...
...
@@ -169,7 +192,7 @@ static int pxa_irda_set_speed(struct pxa_irda *si, int speed)
/* disable STUART */
STIER
=
0
;
STISR
=
0
;
pxa_
set_cken
(
CKEN_STUART
,
0
);
pxa_
irda_disable_clk
(
si
);
/* disable FICP first */
ICCR0
=
0
;
...
...
@@ -182,7 +205,7 @@ static int pxa_irda_set_speed(struct pxa_irda *si, int speed)
pxa_gpio_mode
(
GPIO47_ICPTXD_MD
);
/* enable the FICP clock */
pxa_
set_cken
(
CKEN_FICP
,
1
);
pxa_
irda_enable_firclk
(
si
);
si
->
speed
=
speed
;
pxa_irda_fir_dma_rx_start
(
si
);
...
...
@@ -592,16 +615,15 @@ static void pxa_irda_shutdown(struct pxa_irda *si)
STIER
=
0
;
/* disable STUART SIR mode */
STISR
=
0
;
/* disable the STUART clock */
pxa_set_cken
(
CKEN_STUART
,
0
);
/* disable DMA */
DCSR
(
si
->
txdma
)
&=
~
DCSR_RUN
;
DCSR
(
si
->
rxdma
)
&=
~
DCSR_RUN
;
/* disable FICP */
ICCR0
=
0
;
/* disable the FICP clock */
pxa_set_cken
(
CKEN_FICP
,
0
);
/* disable the STUART or FICP clocks */
pxa_irda_disable_clk
(
si
);
DRCMR17
=
0
;
DRCMR18
=
0
;
...
...
@@ -792,6 +814,13 @@ static int pxa_irda_probe(struct platform_device *pdev)
si
->
dev
=
&
pdev
->
dev
;
si
->
pdata
=
pdev
->
dev
.
platform_data
;
si
->
sir_clk
=
clk_get
(
&
pdev
->
dev
,
"UARTCLK"
);
si
->
fir_clk
=
clk_get
(
&
pdev
->
dev
,
"FICPCLK"
);
if
(
IS_ERR
(
si
->
sir_clk
)
||
IS_ERR
(
si
->
fir_clk
))
{
err
=
PTR_ERR
(
IS_ERR
(
si
->
sir_clk
)
?
si
->
sir_clk
:
si
->
fir_clk
);
goto
err_mem_4
;
}
/*
* Initialise the SIR buffers
*/
...
...
@@ -831,6 +860,10 @@ static int pxa_irda_probe(struct platform_device *pdev)
err_mem_5:
kfree
(
si
->
rx_buff
.
head
);
err_mem_4:
if
(
si
->
sir_clk
&&
!
IS_ERR
(
si
->
sir_clk
))
clk_put
(
si
->
sir_clk
);
if
(
si
->
fir_clk
&&
!
IS_ERR
(
si
->
fir_clk
))
clk_put
(
si
->
fir_clk
);
free_netdev
(
dev
);
err_mem_3:
release_mem_region
(
__PREG
(
FICP
),
0x1c
);
...
...
@@ -850,6 +883,8 @@ static int pxa_irda_remove(struct platform_device *_dev)
unregister_netdev
(
dev
);
kfree
(
si
->
tx_buff
.
head
);
kfree
(
si
->
rx_buff
.
head
);
clk_put
(
si
->
fir_clk
);
clk_put
(
si
->
sir_clk
);
free_netdev
(
dev
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录