Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
44c5d739
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看板
提交
44c5d739
编写于
11月 21, 2009
作者:
R
Russell King
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ARM: PNX4008: kzalloc i2c drivers internal data
Signed-off-by:
N
Russell King
<
rmk+kernel@arm.linux.org.uk
>
上级
88d968b2
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
28 addition
and
30 deletion
+28
-30
arch/arm/mach-pnx4008/i2c.c
arch/arm/mach-pnx4008/i2c.c
+7
-18
drivers/i2c/busses/i2c-pnx.c
drivers/i2c/busses/i2c-pnx.c
+19
-10
include/linux/i2c-pnx.h
include/linux/i2c-pnx.h
+2
-2
未找到文件。
arch/arm/mach-pnx4008/i2c.c
浏览文件 @
44c5d739
...
...
@@ -18,45 +18,34 @@
#include <mach/irqs.h>
#include <mach/i2c.h>
static
struct
i2c_pnx_algo_data
pnx_algo_data0
=
{
.
base
=
PNX4008_I2C1_BASE
,
.
irq
=
I2C_1_INT
,
};
static
struct
i2c_pnx_algo_data
pnx_algo_data1
=
{
.
base
=
PNX4008_I2C2_BASE
,
.
irq
=
I2C_2_INT
,
};
static
struct
i2c_pnx_algo_data
pnx_algo_data2
=
{
.
base
=
(
PNX4008_USB_CONFIG_BASE
+
0x300
),
.
irq
=
USB_I2C_INT
,
};
static
struct
i2c_adapter
pnx_adapter0
=
{
.
name
=
I2C_CHIP_NAME
"0"
,
.
algo_data
=
&
pnx_algo_data0
,
};
static
struct
i2c_adapter
pnx_adapter1
=
{
.
name
=
I2C_CHIP_NAME
"1"
,
.
algo_data
=
&
pnx_algo_data1
,
};
static
struct
i2c_adapter
pnx_adapter2
=
{
.
name
=
"USB-I2C"
,
.
algo_data
=
&
pnx_algo_data2
,
};
static
struct
i2c_pnx_data
i2c0_data
=
{
.
adapter
=
&
pnx_adapter0
,
.
base
=
PNX4008_I2C1_BASE
,
.
irq
=
I2C_1_INT
,
};
static
struct
i2c_pnx_data
i2c1_data
=
{
.
adapter
=
&
pnx_adapter1
,
.
base
=
PNX4008_I2C2_BASE
,
.
irq
=
I2C_2_INT
,
};
static
struct
i2c_pnx_data
i2c2_data
=
{
.
adapter
=
&
pnx_adapter2
,
.
base
=
(
PNX4008_USB_CONFIG_BASE
+
0x300
),
.
irq
=
USB_I2C_INT
,
};
static
struct
platform_device
i2c0_device
=
{
...
...
drivers/i2c/busses/i2c-pnx.c
浏览文件 @
44c5d739
...
...
@@ -587,10 +587,16 @@ static int __devinit i2c_pnx_probe(struct platform_device *pdev)
goto
out
;
}
alg_data
=
kzalloc
(
sizeof
(
*
alg_data
),
GFP_KERNEL
);
if
(
!
alg_data
)
{
ret
=
-
ENOMEM
;
goto
err_kzalloc
;
}
platform_set_drvdata
(
pdev
,
i2c_pnx
);
i2c_pnx
->
adapter
->
algo
=
&
pnx_algorithm
;
alg_data
=
i2c_pnx
->
adapter
->
algo
_data
;
i2c_pnx
->
adapter
->
algo_data
=
alg
_data
;
alg_data
->
clk
=
clk_get
(
&
pdev
->
dev
,
NULL
);
if
(
IS_ERR
(
alg_data
->
clk
))
{
...
...
@@ -603,16 +609,16 @@ static int __devinit i2c_pnx_probe(struct platform_device *pdev)
alg_data
->
mif
.
timer
.
data
=
(
unsigned
long
)
i2c_pnx
->
adapter
;
/* Register I/O resource */
if
(
!
request_mem_region
(
alg_data
->
base
,
I2C_PNX_REGION_SIZE
,
if
(
!
request_mem_region
(
i2c_pnx
->
base
,
I2C_PNX_REGION_SIZE
,
pdev
->
name
))
{
dev_err
(
&
pdev
->
dev
,
"I/O region 0x%08x for I2C already in use.
\n
"
,
alg_data
->
base
);
i2c_pnx
->
base
);
ret
=
-
ENODEV
;
goto
out_clkget
;
}
alg_data
->
ioaddr
=
ioremap
(
alg_data
->
base
,
I2C_PNX_REGION_SIZE
);
alg_data
->
ioaddr
=
ioremap
(
i2c_pnx
->
base
,
I2C_PNX_REGION_SIZE
);
if
(
!
alg_data
->
ioaddr
)
{
dev_err
(
&
pdev
->
dev
,
"Couldn't ioremap I2C I/O region
\n
"
);
ret
=
-
ENOMEM
;
...
...
@@ -647,7 +653,7 @@ static int __devinit i2c_pnx_probe(struct platform_device *pdev)
}
init_completion
(
&
alg_data
->
mif
.
complete
);
ret
=
request_irq
(
alg_data
->
irq
,
i2c_pnx_interrupt
,
ret
=
request_irq
(
i2c_pnx
->
irq
,
i2c_pnx_interrupt
,
0
,
pdev
->
name
,
i2c_pnx
->
adapter
);
if
(
ret
)
goto
out_clock
;
...
...
@@ -662,21 +668,23 @@ static int __devinit i2c_pnx_probe(struct platform_device *pdev)
}
dev_dbg
(
&
pdev
->
dev
,
"%s: Master at %#8x, irq %d.
\n
"
,
i2c_pnx
->
adapter
->
name
,
alg_data
->
base
,
alg_data
->
irq
);
i2c_pnx
->
adapter
->
name
,
i2c_pnx
->
base
,
i2c_pnx
->
irq
);
return
0
;
out_irq:
free_irq
(
alg_data
->
irq
,
i2c_pnx
->
adapter
);
free_irq
(
i2c_pnx
->
irq
,
i2c_pnx
->
adapter
);
out_clock:
clk_disable
(
alg_data
->
clk
);
out_unmap:
iounmap
(
alg_data
->
ioaddr
);
out_release:
release_mem_region
(
alg_data
->
base
,
I2C_PNX_REGION_SIZE
);
release_mem_region
(
i2c_pnx
->
base
,
I2C_PNX_REGION_SIZE
);
out_clkget:
clk_put
(
alg_data
->
clk
);
out_drvdata:
kfree
(
alg_data
);
err_kzalloc:
platform_set_drvdata
(
pdev
,
NULL
);
out:
return
ret
;
...
...
@@ -688,12 +696,13 @@ static int __devexit i2c_pnx_remove(struct platform_device *pdev)
struct
i2c_adapter
*
adap
=
i2c_pnx
->
adapter
;
struct
i2c_pnx_algo_data
*
alg_data
=
adap
->
algo_data
;
free_irq
(
alg_data
->
irq
,
i2c_pnx
->
adapter
);
free_irq
(
i2c_pnx
->
irq
,
i2c_pnx
->
adapter
);
i2c_del_adapter
(
adap
);
clk_disable
(
alg_data
->
clk
);
iounmap
(
alg_data
->
ioaddr
);
release_mem_region
(
alg_data
->
base
,
I2C_PNX_REGION_SIZE
);
release_mem_region
(
i2c_pnx
->
base
,
I2C_PNX_REGION_SIZE
);
clk_put
(
alg_data
->
clk
);
kfree
(
alg_data
);
platform_set_drvdata
(
pdev
,
NULL
);
return
0
;
...
...
include/linux/i2c-pnx.h
浏览文件 @
44c5d739
...
...
@@ -25,9 +25,7 @@ struct i2c_pnx_mif {
};
struct
i2c_pnx_algo_data
{
u32
base
;
void
__iomem
*
ioaddr
;
int
irq
;
struct
i2c_pnx_mif
mif
;
int
last
;
struct
clk
*
clk
;
...
...
@@ -35,6 +33,8 @@ struct i2c_pnx_algo_data {
struct
i2c_pnx_data
{
struct
i2c_adapter
*
adapter
;
u32
base
;
int
irq
;
};
#endif
/* __I2C_PNX_H__ */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录