Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
e4609747
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看板
提交
e4609747
编写于
7月 11, 2011
作者:
T
Tony Lindgren
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'prcm-fixes-3.1' of
git://git.pwsan.com/linux-2.6
into fixes-part-2
上级
69d042d1
c8458413
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
233 addition
and
31 deletion
+233
-31
arch/arm/mach-omap2/clock44xx_data.c
arch/arm/mach-omap2/clock44xx_data.c
+5
-4
arch/arm/mach-omap2/i2c.c
arch/arm/mach-omap2/i2c.c
+68
-0
arch/arm/mach-omap2/omap_hwmod.c
arch/arm/mach-omap2/omap_hwmod.c
+27
-0
arch/arm/mach-omap2/omap_hwmod_2420_data.c
arch/arm/mach-omap2/omap_hwmod_2420_data.c
+8
-1
arch/arm/mach-omap2/omap_hwmod_2430_data.c
arch/arm/mach-omap2/omap_hwmod_2430_data.c
+7
-0
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+16
-2
arch/arm/mach-omap2/omap_hwmod_44xx_data.c
arch/arm/mach-omap2/omap_hwmod_44xx_data.c
+63
-18
arch/arm/mach-omap2/pm.c
arch/arm/mach-omap2/pm.c
+1
-1
arch/arm/mach-omap2/powerdomains44xx_data.c
arch/arm/mach-omap2/powerdomains44xx_data.c
+5
-4
arch/arm/plat-omap/include/plat/i2c.h
arch/arm/plat-omap/include/plat/i2c.h
+5
-1
arch/arm/plat-omap/include/plat/omap_hwmod.h
arch/arm/plat-omap/include/plat/omap_hwmod.h
+1
-0
include/linux/i2c-omap.h
include/linux/i2c-omap.h
+27
-0
未找到文件。
arch/arm/mach-omap2/clock44xx_data.c
浏览文件 @
e4609747
...
...
@@ -1605,6 +1605,7 @@ static struct clk gpmc_ick = {
.
ops
=
&
clkops_omap2_dflt
,
.
enable_reg
=
OMAP4430_CM_L3_2_GPMC_CLKCTRL
,
.
enable_bit
=
OMAP4430_MODULEMODE_HWCTRL
,
.
flags
=
ENABLE_ON_INIT
,
.
clkdm_name
=
"l3_2_clkdm"
,
.
parent
=
&
l3_div_ck
,
.
recalc
=
&
followparent_recalc
,
...
...
@@ -3032,10 +3033,10 @@ static struct omap_clk omap44xx_clks[] = {
CLK
(
NULL
,
"dmic_sync_mux_ck"
,
&
dmic_sync_mux_ck
,
CK_443X
),
CLK
(
NULL
,
"dmic_fck"
,
&
dmic_fck
,
CK_443X
),
CLK
(
NULL
,
"dsp_fck"
,
&
dsp_fck
,
CK_443X
),
CLK
(
"omapdss_dss"
,
"
sys_clk"
,
&
dss_sys_clk
,
CK_443X
),
CLK
(
"omapdss_dss"
,
"
tv_clk"
,
&
dss_tv_clk
,
CK_443X
),
CLK
(
"omapdss_dss"
,
"video_clk"
,
&
dss_48mhz_clk
,
CK_443X
),
CLK
(
"omapdss_dss"
,
"fck"
,
&
dss_dss_clk
,
CK_443X
),
CLK
(
NULL
,
"dss_
sys_clk"
,
&
dss_sys_clk
,
CK_443X
),
CLK
(
NULL
,
"dss_
tv_clk"
,
&
dss_tv_clk
,
CK_443X
),
CLK
(
NULL
,
"dss_48mhz_clk"
,
&
dss_48mhz_clk
,
CK_443X
),
CLK
(
NULL
,
"dss_dss_clk"
,
&
dss_dss_clk
,
CK_443X
),
CLK
(
"omapdss_dss"
,
"ick"
,
&
dss_fck
,
CK_443X
),
CLK
(
NULL
,
"efuse_ctrl_cust_fck"
,
&
efuse_ctrl_cust_fck
,
CK_443X
),
CLK
(
NULL
,
"emif1_fck"
,
&
emif1_fck
,
CK_443X
),
...
...
arch/arm/mach-omap2/i2c.c
浏览文件 @
e4609747
...
...
@@ -21,9 +21,19 @@
#include <plat/cpu.h>
#include <plat/i2c.h>
#include <plat/common.h>
#include <plat/omap_hwmod.h>
#include "mux.h"
/* In register I2C_CON, Bit 15 is the I2C enable bit */
#define I2C_EN BIT(15)
#define OMAP2_I2C_CON_OFFSET 0x24
#define OMAP4_I2C_CON_OFFSET 0xA4
/* Maximum microseconds to wait for OMAP module to softreset */
#define MAX_MODULE_SOFTRESET_WAIT 10000
void
__init
omap2_i2c_mux_pins
(
int
bus_id
)
{
char
mux_name
[
sizeof
(
"i2c2_scl.i2c2_scl"
)];
...
...
@@ -37,3 +47,61 @@ void __init omap2_i2c_mux_pins(int bus_id)
sprintf
(
mux_name
,
"i2c%i_sda.i2c%i_sda"
,
bus_id
,
bus_id
);
omap_mux_init_signal
(
mux_name
,
OMAP_PIN_INPUT
);
}
/**
* omap_i2c_reset - reset the omap i2c module.
* @oh: struct omap_hwmod *
*
* The i2c moudle in omap2, omap3 had a special sequence to reset. The
* sequence is:
* - Disable the I2C.
* - Write to SOFTRESET bit.
* - Enable the I2C.
* - Poll on the RESETDONE bit.
* The sequence is implemented in below function. This is called for 2420,
* 2430 and omap3.
*/
int
omap_i2c_reset
(
struct
omap_hwmod
*
oh
)
{
u32
v
;
u16
i2c_con
;
int
c
=
0
;
if
(
oh
->
class
->
rev
==
OMAP_I2C_IP_VERSION_2
)
{
i2c_con
=
OMAP4_I2C_CON_OFFSET
;
}
else
if
(
oh
->
class
->
rev
==
OMAP_I2C_IP_VERSION_1
)
{
i2c_con
=
OMAP2_I2C_CON_OFFSET
;
}
else
{
WARN
(
1
,
"Cannot reset I2C block %s: unsupported revision
\n
"
,
oh
->
name
);
return
-
EINVAL
;
}
/* Disable I2C */
v
=
omap_hwmod_read
(
oh
,
i2c_con
);
v
&=
~
I2C_EN
;
omap_hwmod_write
(
v
,
oh
,
i2c_con
);
/* Write to the SOFTRESET bit */
omap_hwmod_softreset
(
oh
);
/* Enable I2C */
v
=
omap_hwmod_read
(
oh
,
i2c_con
);
v
|=
I2C_EN
;
omap_hwmod_write
(
v
,
oh
,
i2c_con
);
/* Poll on RESETDONE bit */
omap_test_timeout
((
omap_hwmod_read
(
oh
,
oh
->
class
->
sysc
->
syss_offs
)
&
SYSS_RESETDONE_MASK
),
MAX_MODULE_SOFTRESET_WAIT
,
c
);
if
(
c
==
MAX_MODULE_SOFTRESET_WAIT
)
pr_warning
(
"%s: %s: softreset failed (waited %d usec)
\n
"
,
__func__
,
oh
->
name
,
MAX_MODULE_SOFTRESET_WAIT
);
else
pr_debug
(
"%s: %s: softreset in %d usec
\n
"
,
__func__
,
oh
->
name
,
c
);
return
0
;
}
arch/arm/mach-omap2/omap_hwmod.c
浏览文件 @
e4609747
...
...
@@ -1655,6 +1655,33 @@ void omap_hwmod_write(u32 v, struct omap_hwmod *oh, u16 reg_offs)
__raw_writel
(
v
,
oh
->
_mpu_rt_va
+
reg_offs
);
}
/**
* omap_hwmod_softreset - reset a module via SYSCONFIG.SOFTRESET bit
* @oh: struct omap_hwmod *
*
* This is a public function exposed to drivers. Some drivers may need to do
* some settings before and after resetting the device. Those drivers after
* doing the necessary settings could use this function to start a reset by
* setting the SYSCONFIG.SOFTRESET bit.
*/
int
omap_hwmod_softreset
(
struct
omap_hwmod
*
oh
)
{
u32
v
;
int
ret
;
if
(
!
oh
||
!
(
oh
->
_sysc_cache
))
return
-
EINVAL
;
v
=
oh
->
_sysc_cache
;
ret
=
_set_softreset
(
oh
,
&
v
);
if
(
ret
)
goto
error
;
_write_sysconfig
(
v
,
oh
);
error:
return
ret
;
}
/**
* omap_hwmod_set_slave_idlemode - set the hwmod's OCP slave idlemode
* @oh: struct omap_hwmod *
...
...
arch/arm/mach-omap2/omap_hwmod_2420_data.c
浏览文件 @
e4609747
...
...
@@ -1029,9 +1029,16 @@ static struct omap_hwmod_class_sysconfig i2c_sysc = {
static
struct
omap_hwmod_class
i2c_class
=
{
.
name
=
"i2c"
,
.
sysc
=
&
i2c_sysc
,
.
rev
=
OMAP_I2C_IP_VERSION_1
,
.
reset
=
&
omap_i2c_reset
,
};
static
struct
omap_i2c_dev_attr
i2c_dev_attr
;
static
struct
omap_i2c_dev_attr
i2c_dev_attr
=
{
.
flags
=
OMAP_I2C_FLAG_NO_FIFO
|
OMAP_I2C_FLAG_SIMPLE_CLOCK
|
OMAP_I2C_FLAG_16BIT_DATA_REG
|
OMAP_I2C_FLAG_BUS_SHIFT_2
,
};
/* I2C1 */
...
...
arch/arm/mach-omap2/omap_hwmod_2430_data.c
浏览文件 @
e4609747
...
...
@@ -1078,10 +1078,15 @@ static struct omap_hwmod_class_sysconfig i2c_sysc = {
static
struct
omap_hwmod_class
i2c_class
=
{
.
name
=
"i2c"
,
.
sysc
=
&
i2c_sysc
,
.
rev
=
OMAP_I2C_IP_VERSION_1
,
.
reset
=
&
omap_i2c_reset
,
};
static
struct
omap_i2c_dev_attr
i2c_dev_attr
=
{
.
fifo_depth
=
8
,
/* bytes */
.
flags
=
OMAP_I2C_FLAG_APPLY_ERRATA_I207
|
OMAP_I2C_FLAG_BUS_SHIFT_2
|
OMAP_I2C_FLAG_FORCE_19200_INT_CLK
,
};
/* I2C1 */
...
...
@@ -1092,6 +1097,7 @@ static struct omap_hwmod_ocp_if *omap2430_i2c1_slaves[] = {
static
struct
omap_hwmod
omap2430_i2c1_hwmod
=
{
.
name
=
"i2c1"
,
.
flags
=
HWMOD_16BIT_REG
,
.
mpu_irqs
=
omap2_i2c1_mpu_irqs
,
.
sdma_reqs
=
omap2_i2c1_sdma_reqs
,
.
main_clk
=
"i2chs1_fck"
,
...
...
@@ -1127,6 +1133,7 @@ static struct omap_hwmod_ocp_if *omap2430_i2c2_slaves[] = {
static
struct
omap_hwmod
omap2430_i2c2_hwmod
=
{
.
name
=
"i2c2"
,
.
flags
=
HWMOD_16BIT_REG
,
.
mpu_irqs
=
omap2_i2c2_mpu_irqs
,
.
sdma_reqs
=
omap2_i2c2_sdma_reqs
,
.
main_clk
=
"i2chs2_fck"
,
...
...
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
浏览文件 @
e4609747
...
...
@@ -1306,8 +1306,10 @@ static struct omap_hwmod omap3xxx_uart4_hwmod = {
};
static
struct
omap_hwmod_class
i2c_class
=
{
.
name
=
"i2c"
,
.
sysc
=
&
i2c_sysc
,
.
name
=
"i2c"
,
.
sysc
=
&
i2c_sysc
,
.
rev
=
OMAP_I2C_IP_VERSION_1
,
.
reset
=
&
omap_i2c_reset
,
};
static
struct
omap_hwmod_dma_info
omap3xxx_dss_sdma_chs
[]
=
{
...
...
@@ -1607,6 +1609,9 @@ static struct omap_hwmod omap3xxx_dss_venc_hwmod = {
static
struct
omap_i2c_dev_attr
i2c1_dev_attr
=
{
.
fifo_depth
=
8
,
/* bytes */
.
flags
=
OMAP_I2C_FLAG_APPLY_ERRATA_I207
|
OMAP_I2C_FLAG_RESET_REGS_POSTIDLE
|
OMAP_I2C_FLAG_BUS_SHIFT_2
,
};
static
struct
omap_hwmod_ocp_if
*
omap3xxx_i2c1_slaves
[]
=
{
...
...
@@ -1615,6 +1620,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_i2c1_slaves[] = {
static
struct
omap_hwmod
omap3xxx_i2c1_hwmod
=
{
.
name
=
"i2c1"
,
.
flags
=
HWMOD_16BIT_REG
,
.
mpu_irqs
=
omap2_i2c1_mpu_irqs
,
.
sdma_reqs
=
omap2_i2c1_sdma_reqs
,
.
main_clk
=
"i2c1_fck"
,
...
...
@@ -1638,6 +1644,9 @@ static struct omap_hwmod omap3xxx_i2c1_hwmod = {
static
struct
omap_i2c_dev_attr
i2c2_dev_attr
=
{
.
fifo_depth
=
8
,
/* bytes */
.
flags
=
OMAP_I2C_FLAG_APPLY_ERRATA_I207
|
OMAP_I2C_FLAG_RESET_REGS_POSTIDLE
|
OMAP_I2C_FLAG_BUS_SHIFT_2
,
};
static
struct
omap_hwmod_ocp_if
*
omap3xxx_i2c2_slaves
[]
=
{
...
...
@@ -1646,6 +1655,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_i2c2_slaves[] = {
static
struct
omap_hwmod
omap3xxx_i2c2_hwmod
=
{
.
name
=
"i2c2"
,
.
flags
=
HWMOD_16BIT_REG
,
.
mpu_irqs
=
omap2_i2c2_mpu_irqs
,
.
sdma_reqs
=
omap2_i2c2_sdma_reqs
,
.
main_clk
=
"i2c2_fck"
,
...
...
@@ -1669,6 +1679,9 @@ static struct omap_hwmod omap3xxx_i2c2_hwmod = {
static
struct
omap_i2c_dev_attr
i2c3_dev_attr
=
{
.
fifo_depth
=
64
,
/* bytes */
.
flags
=
OMAP_I2C_FLAG_APPLY_ERRATA_I207
|
OMAP_I2C_FLAG_RESET_REGS_POSTIDLE
|
OMAP_I2C_FLAG_BUS_SHIFT_2
,
};
static
struct
omap_hwmod_irq_info
i2c3_mpu_irqs
[]
=
{
...
...
@@ -1688,6 +1701,7 @@ static struct omap_hwmod_ocp_if *omap3xxx_i2c3_slaves[] = {
static
struct
omap_hwmod
omap3xxx_i2c3_hwmod
=
{
.
name
=
"i2c3"
,
.
flags
=
HWMOD_16BIT_REG
,
.
mpu_irqs
=
i2c3_mpu_irqs
,
.
sdma_reqs
=
i2c3_sdma_reqs
,
.
main_clk
=
"i2c3_fck"
,
...
...
arch/arm/mach-omap2/omap_hwmod_44xx_data.c
浏览文件 @
e4609747
...
...
@@ -22,11 +22,13 @@
#include <plat/omap_hwmod.h>
#include <plat/cpu.h>
#include <plat/i2c.h>
#include <plat/gpio.h>
#include <plat/dma.h>
#include <plat/mcspi.h>
#include <plat/mcbsp.h>
#include <plat/mmc.h>
#include <plat/i2c.h>
#include "omap_hwmod_common_data.h"
...
...
@@ -1136,7 +1138,7 @@ static struct omap_hwmod_addr_space omap44xx_dss_dma_addrs[] = {
static
struct
omap_hwmod_ocp_if
omap44xx_l3_main_2__dss
=
{
.
master
=
&
omap44xx_l3_main_2_hwmod
,
.
slave
=
&
omap44xx_dss_hwmod
,
.
clk
=
"
l3_div_
ck"
,
.
clk
=
"
dss_f
ck"
,
.
addr
=
omap44xx_dss_dma_addrs
,
.
user
=
OCP_USER_SDMA
,
};
...
...
@@ -1175,7 +1177,7 @@ static struct omap_hwmod_opt_clk dss_opt_clks[] = {
static
struct
omap_hwmod
omap44xx_dss_hwmod
=
{
.
name
=
"dss_core"
,
.
class
=
&
omap44xx_dss_hwmod_class
,
.
main_clk
=
"dss_
fc
k"
,
.
main_clk
=
"dss_
dss_cl
k"
,
.
prcm
=
{
.
omap4
=
{
.
clkctrl_reg
=
OMAP4430_CM_DSS_DSS_CLKCTRL
,
...
...
@@ -1238,7 +1240,7 @@ static struct omap_hwmod_addr_space omap44xx_dss_dispc_dma_addrs[] = {
static
struct
omap_hwmod_ocp_if
omap44xx_l3_main_2__dss_dispc
=
{
.
master
=
&
omap44xx_l3_main_2_hwmod
,
.
slave
=
&
omap44xx_dss_dispc_hwmod
,
.
clk
=
"
l3_div_
ck"
,
.
clk
=
"
dss_f
ck"
,
.
addr
=
omap44xx_dss_dispc_dma_addrs
,
.
user
=
OCP_USER_SDMA
,
};
...
...
@@ -1267,17 +1269,26 @@ static struct omap_hwmod_ocp_if *omap44xx_dss_dispc_slaves[] = {
&
omap44xx_l4_per__dss_dispc
,
};
static
struct
omap_hwmod_opt_clk
dss_dispc_opt_clks
[]
=
{
{
.
role
=
"sys_clk"
,
.
clk
=
"dss_sys_clk"
},
{
.
role
=
"tv_clk"
,
.
clk
=
"dss_tv_clk"
},
{
.
role
=
"hdmi_clk"
,
.
clk
=
"dss_48mhz_clk"
},
};
static
struct
omap_hwmod
omap44xx_dss_dispc_hwmod
=
{
.
name
=
"dss_dispc"
,
.
class
=
&
omap44xx_dispc_hwmod_class
,
.
flags
=
HWMOD_CONTROL_OPT_CLKS_IN_RESET
,
.
mpu_irqs
=
omap44xx_dss_dispc_irqs
,
.
sdma_reqs
=
omap44xx_dss_dispc_sdma_reqs
,
.
main_clk
=
"dss_
fc
k"
,
.
main_clk
=
"dss_
dss_cl
k"
,
.
prcm
=
{
.
omap4
=
{
.
clkctrl_reg
=
OMAP4430_CM_DSS_DSS_CLKCTRL
,
},
},
.
opt_clks
=
dss_dispc_opt_clks
,
.
opt_clks_cnt
=
ARRAY_SIZE
(
dss_dispc_opt_clks
),
.
slaves
=
omap44xx_dss_dispc_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap44xx_dss_dispc_slaves
),
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP4430
),
...
...
@@ -1329,7 +1340,7 @@ static struct omap_hwmod_addr_space omap44xx_dss_dsi1_dma_addrs[] = {
static
struct
omap_hwmod_ocp_if
omap44xx_l3_main_2__dss_dsi1
=
{
.
master
=
&
omap44xx_l3_main_2_hwmod
,
.
slave
=
&
omap44xx_dss_dsi1_hwmod
,
.
clk
=
"
l3_div_
ck"
,
.
clk
=
"
dss_f
ck"
,
.
addr
=
omap44xx_dss_dsi1_dma_addrs
,
.
user
=
OCP_USER_SDMA
,
};
...
...
@@ -1358,17 +1369,23 @@ static struct omap_hwmod_ocp_if *omap44xx_dss_dsi1_slaves[] = {
&
omap44xx_l4_per__dss_dsi1
,
};
static
struct
omap_hwmod_opt_clk
dss_dsi1_opt_clks
[]
=
{
{
.
role
=
"sys_clk"
,
.
clk
=
"dss_sys_clk"
},
};
static
struct
omap_hwmod
omap44xx_dss_dsi1_hwmod
=
{
.
name
=
"dss_dsi1"
,
.
class
=
&
omap44xx_dsi_hwmod_class
,
.
mpu_irqs
=
omap44xx_dss_dsi1_irqs
,
.
sdma_reqs
=
omap44xx_dss_dsi1_sdma_reqs
,
.
main_clk
=
"dss_
fc
k"
,
.
main_clk
=
"dss_
dss_cl
k"
,
.
prcm
=
{
.
omap4
=
{
.
clkctrl_reg
=
OMAP4430_CM_DSS_DSS_CLKCTRL
,
},
},
.
opt_clks
=
dss_dsi1_opt_clks
,
.
opt_clks_cnt
=
ARRAY_SIZE
(
dss_dsi1_opt_clks
),
.
slaves
=
omap44xx_dss_dsi1_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap44xx_dss_dsi1_slaves
),
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP4430
),
...
...
@@ -1399,7 +1416,7 @@ static struct omap_hwmod_addr_space omap44xx_dss_dsi2_dma_addrs[] = {
static
struct
omap_hwmod_ocp_if
omap44xx_l3_main_2__dss_dsi2
=
{
.
master
=
&
omap44xx_l3_main_2_hwmod
,
.
slave
=
&
omap44xx_dss_dsi2_hwmod
,
.
clk
=
"
l3_div_
ck"
,
.
clk
=
"
dss_f
ck"
,
.
addr
=
omap44xx_dss_dsi2_dma_addrs
,
.
user
=
OCP_USER_SDMA
,
};
...
...
@@ -1428,17 +1445,23 @@ static struct omap_hwmod_ocp_if *omap44xx_dss_dsi2_slaves[] = {
&
omap44xx_l4_per__dss_dsi2
,
};
static
struct
omap_hwmod_opt_clk
dss_dsi2_opt_clks
[]
=
{
{
.
role
=
"sys_clk"
,
.
clk
=
"dss_sys_clk"
},
};
static
struct
omap_hwmod
omap44xx_dss_dsi2_hwmod
=
{
.
name
=
"dss_dsi2"
,
.
class
=
&
omap44xx_dsi_hwmod_class
,
.
mpu_irqs
=
omap44xx_dss_dsi2_irqs
,
.
sdma_reqs
=
omap44xx_dss_dsi2_sdma_reqs
,
.
main_clk
=
"dss_
fc
k"
,
.
main_clk
=
"dss_
dss_cl
k"
,
.
prcm
=
{
.
omap4
=
{
.
clkctrl_reg
=
OMAP4430_CM_DSS_DSS_CLKCTRL
,
},
},
.
opt_clks
=
dss_dsi2_opt_clks
,
.
opt_clks_cnt
=
ARRAY_SIZE
(
dss_dsi2_opt_clks
),
.
slaves
=
omap44xx_dss_dsi2_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap44xx_dss_dsi2_slaves
),
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP4430
),
...
...
@@ -1489,7 +1512,7 @@ static struct omap_hwmod_addr_space omap44xx_dss_hdmi_dma_addrs[] = {
static
struct
omap_hwmod_ocp_if
omap44xx_l3_main_2__dss_hdmi
=
{
.
master
=
&
omap44xx_l3_main_2_hwmod
,
.
slave
=
&
omap44xx_dss_hdmi_hwmod
,
.
clk
=
"
l3_div_
ck"
,
.
clk
=
"
dss_f
ck"
,
.
addr
=
omap44xx_dss_hdmi_dma_addrs
,
.
user
=
OCP_USER_SDMA
,
};
...
...
@@ -1518,17 +1541,23 @@ static struct omap_hwmod_ocp_if *omap44xx_dss_hdmi_slaves[] = {
&
omap44xx_l4_per__dss_hdmi
,
};
static
struct
omap_hwmod_opt_clk
dss_hdmi_opt_clks
[]
=
{
{
.
role
=
"sys_clk"
,
.
clk
=
"dss_sys_clk"
},
};
static
struct
omap_hwmod
omap44xx_dss_hdmi_hwmod
=
{
.
name
=
"dss_hdmi"
,
.
class
=
&
omap44xx_hdmi_hwmod_class
,
.
mpu_irqs
=
omap44xx_dss_hdmi_irqs
,
.
sdma_reqs
=
omap44xx_dss_hdmi_sdma_reqs
,
.
main_clk
=
"dss_
fc
k"
,
.
main_clk
=
"dss_
dss_cl
k"
,
.
prcm
=
{
.
omap4
=
{
.
clkctrl_reg
=
OMAP4430_CM_DSS_DSS_CLKCTRL
,
},
},
.
opt_clks
=
dss_hdmi_opt_clks
,
.
opt_clks_cnt
=
ARRAY_SIZE
(
dss_hdmi_opt_clks
),
.
slaves
=
omap44xx_dss_hdmi_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap44xx_dss_hdmi_slaves
),
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP4430
),
...
...
@@ -1574,7 +1603,7 @@ static struct omap_hwmod_addr_space omap44xx_dss_rfbi_dma_addrs[] = {
static
struct
omap_hwmod_ocp_if
omap44xx_l3_main_2__dss_rfbi
=
{
.
master
=
&
omap44xx_l3_main_2_hwmod
,
.
slave
=
&
omap44xx_dss_rfbi_hwmod
,
.
clk
=
"
l3_div_
ck"
,
.
clk
=
"
dss_f
ck"
,
.
addr
=
omap44xx_dss_rfbi_dma_addrs
,
.
user
=
OCP_USER_SDMA
,
};
...
...
@@ -1603,16 +1632,22 @@ static struct omap_hwmod_ocp_if *omap44xx_dss_rfbi_slaves[] = {
&
omap44xx_l4_per__dss_rfbi
,
};
static
struct
omap_hwmod_opt_clk
dss_rfbi_opt_clks
[]
=
{
{
.
role
=
"ick"
,
.
clk
=
"dss_fck"
},
};
static
struct
omap_hwmod
omap44xx_dss_rfbi_hwmod
=
{
.
name
=
"dss_rfbi"
,
.
class
=
&
omap44xx_rfbi_hwmod_class
,
.
sdma_reqs
=
omap44xx_dss_rfbi_sdma_reqs
,
.
main_clk
=
"dss_
fc
k"
,
.
main_clk
=
"dss_
dss_cl
k"
,
.
prcm
=
{
.
omap4
=
{
.
clkctrl_reg
=
OMAP4430_CM_DSS_DSS_CLKCTRL
,
},
},
.
opt_clks
=
dss_rfbi_opt_clks
,
.
opt_clks_cnt
=
ARRAY_SIZE
(
dss_rfbi_opt_clks
),
.
slaves
=
omap44xx_dss_rfbi_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap44xx_dss_rfbi_slaves
),
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP4430
),
...
...
@@ -1642,7 +1677,7 @@ static struct omap_hwmod_addr_space omap44xx_dss_venc_dma_addrs[] = {
static
struct
omap_hwmod_ocp_if
omap44xx_l3_main_2__dss_venc
=
{
.
master
=
&
omap44xx_l3_main_2_hwmod
,
.
slave
=
&
omap44xx_dss_venc_hwmod
,
.
clk
=
"
l3_div_
ck"
,
.
clk
=
"
dss_f
ck"
,
.
addr
=
omap44xx_dss_venc_dma_addrs
,
.
user
=
OCP_USER_SDMA
,
};
...
...
@@ -1674,7 +1709,7 @@ static struct omap_hwmod_ocp_if *omap44xx_dss_venc_slaves[] = {
static
struct
omap_hwmod
omap44xx_dss_venc_hwmod
=
{
.
name
=
"dss_venc"
,
.
class
=
&
omap44xx_venc_hwmod_class
,
.
main_clk
=
"dss_
fc
k"
,
.
main_clk
=
"dss_
dss_cl
k"
,
.
prcm
=
{
.
omap4
=
{
.
clkctrl_reg
=
OMAP4430_CM_DSS_DSS_CLKCTRL
,
...
...
@@ -2127,6 +2162,12 @@ static struct omap_hwmod_class_sysconfig omap44xx_i2c_sysc = {
static
struct
omap_hwmod_class
omap44xx_i2c_hwmod_class
=
{
.
name
=
"i2c"
,
.
sysc
=
&
omap44xx_i2c_sysc
,
.
rev
=
OMAP_I2C_IP_VERSION_2
,
.
reset
=
&
omap_i2c_reset
,
};
static
struct
omap_i2c_dev_attr
i2c_dev_attr
=
{
.
flags
=
OMAP_I2C_FLAG_BUS_SHIFT_NONE
,
};
/* i2c1 */
...
...
@@ -2168,7 +2209,7 @@ static struct omap_hwmod_ocp_if *omap44xx_i2c1_slaves[] = {
static
struct
omap_hwmod
omap44xx_i2c1_hwmod
=
{
.
name
=
"i2c1"
,
.
class
=
&
omap44xx_i2c_hwmod_class
,
.
flags
=
HWMOD_
INIT_NO_RESET
,
.
flags
=
HWMOD_
16BIT_REG
,
.
mpu_irqs
=
omap44xx_i2c1_irqs
,
.
sdma_reqs
=
omap44xx_i2c1_sdma_reqs
,
.
main_clk
=
"i2c1_fck"
,
...
...
@@ -2179,6 +2220,7 @@ static struct omap_hwmod omap44xx_i2c1_hwmod = {
},
.
slaves
=
omap44xx_i2c1_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap44xx_i2c1_slaves
),
.
dev_attr
=
&
i2c_dev_attr
,
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP4430
),
};
...
...
@@ -2221,7 +2263,7 @@ static struct omap_hwmod_ocp_if *omap44xx_i2c2_slaves[] = {
static
struct
omap_hwmod
omap44xx_i2c2_hwmod
=
{
.
name
=
"i2c2"
,
.
class
=
&
omap44xx_i2c_hwmod_class
,
.
flags
=
HWMOD_
INIT_NO_RESET
,
.
flags
=
HWMOD_
16BIT_REG
,
.
mpu_irqs
=
omap44xx_i2c2_irqs
,
.
sdma_reqs
=
omap44xx_i2c2_sdma_reqs
,
.
main_clk
=
"i2c2_fck"
,
...
...
@@ -2232,6 +2274,7 @@ static struct omap_hwmod omap44xx_i2c2_hwmod = {
},
.
slaves
=
omap44xx_i2c2_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap44xx_i2c2_slaves
),
.
dev_attr
=
&
i2c_dev_attr
,
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP4430
),
};
...
...
@@ -2274,7 +2317,7 @@ static struct omap_hwmod_ocp_if *omap44xx_i2c3_slaves[] = {
static
struct
omap_hwmod
omap44xx_i2c3_hwmod
=
{
.
name
=
"i2c3"
,
.
class
=
&
omap44xx_i2c_hwmod_class
,
.
flags
=
HWMOD_
INIT_NO_RESET
,
.
flags
=
HWMOD_
16BIT_REG
,
.
mpu_irqs
=
omap44xx_i2c3_irqs
,
.
sdma_reqs
=
omap44xx_i2c3_sdma_reqs
,
.
main_clk
=
"i2c3_fck"
,
...
...
@@ -2285,6 +2328,7 @@ static struct omap_hwmod omap44xx_i2c3_hwmod = {
},
.
slaves
=
omap44xx_i2c3_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap44xx_i2c3_slaves
),
.
dev_attr
=
&
i2c_dev_attr
,
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP4430
),
};
...
...
@@ -2327,7 +2371,7 @@ static struct omap_hwmod_ocp_if *omap44xx_i2c4_slaves[] = {
static
struct
omap_hwmod
omap44xx_i2c4_hwmod
=
{
.
name
=
"i2c4"
,
.
class
=
&
omap44xx_i2c_hwmod_class
,
.
flags
=
HWMOD_
INIT_NO_RESET
,
.
flags
=
HWMOD_
16BIT_REG
,
.
mpu_irqs
=
omap44xx_i2c4_irqs
,
.
sdma_reqs
=
omap44xx_i2c4_sdma_reqs
,
.
main_clk
=
"i2c4_fck"
,
...
...
@@ -2338,6 +2382,7 @@ static struct omap_hwmod omap44xx_i2c4_hwmod = {
},
.
slaves
=
omap44xx_i2c4_slaves
,
.
slaves_cnt
=
ARRAY_SIZE
(
omap44xx_i2c4_slaves
),
.
dev_attr
=
&
i2c_dev_attr
,
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP4430
),
};
...
...
arch/arm/mach-omap2/pm.c
浏览文件 @
e4609747
...
...
@@ -106,7 +106,7 @@ static void omap2_init_processor_devices(void)
int
omap_set_pwrdm_state
(
struct
powerdomain
*
pwrdm
,
u32
state
)
{
u32
cur_state
;
int
sleep_switch
=
0
;
int
sleep_switch
=
-
1
;
int
ret
=
0
;
if
(
pwrdm
==
NULL
||
IS_ERR
(
pwrdm
))
...
...
arch/arm/mach-omap2/powerdomains44xx_data.c
浏览文件 @
e4609747
/*
* OMAP4 Power domains framework
*
* Copyright (C) 2009-201
0
Texas Instruments, Inc.
* Copyright (C) 2009-201
1
Texas Instruments, Inc.
* Copyright (C) 2009-2011 Nokia Corporation
*
* Abhijit Pagare (abhijitpagare@ti.com)
...
...
@@ -41,14 +41,14 @@ static struct powerdomain core_44xx_pwrdm = {
.
banks
=
5
,
.
pwrsts_mem_ret
=
{
[
0
]
=
PWRSTS_OFF
,
/* core_nret_bank */
[
1
]
=
PWRSTS_
OFF_
RET
,
/* core_ocmram */
[
1
]
=
PWRSTS_RET
,
/* core_ocmram */
[
2
]
=
PWRSTS_RET
,
/* core_other_bank */
[
3
]
=
PWRSTS_OFF_RET
,
/* ducati_l2ram */
[
4
]
=
PWRSTS_OFF_RET
,
/* ducati_unicache */
},
.
pwrsts_mem_on
=
{
[
0
]
=
PWRSTS_ON
,
/* core_nret_bank */
[
1
]
=
PWRSTS_O
FF_RET
,
/* core_ocmram */
[
1
]
=
PWRSTS_O
N
,
/* core_ocmram */
[
2
]
=
PWRSTS_ON
,
/* core_other_bank */
[
3
]
=
PWRSTS_ON
,
/* ducati_l2ram */
[
4
]
=
PWRSTS_ON
,
/* ducati_unicache */
...
...
@@ -205,7 +205,7 @@ static struct powerdomain mpu_44xx_pwrdm = {
.
prcm_offs
=
OMAP4430_PRM_MPU_INST
,
.
prcm_partition
=
OMAP4430_PRM_PARTITION
,
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP4430
),
.
pwrsts
=
PWRSTS_
OFF_
RET_ON
,
.
pwrsts
=
PWRSTS_RET_ON
,
.
pwrsts_logic_ret
=
PWRSTS_OFF_RET
,
.
banks
=
3
,
.
pwrsts_mem_ret
=
{
...
...
@@ -318,6 +318,7 @@ static struct powerdomain cefuse_44xx_pwrdm = {
.
prcm_partition
=
OMAP4430_PRM_PARTITION
,
.
omap_chip
=
OMAP_CHIP_INIT
(
CHIP_IS_OMAP4430
),
.
pwrsts
=
PWRSTS_OFF_ON
,
.
flags
=
PWRDM_HAS_LOWPOWERSTATECHANGE
,
};
/*
...
...
arch/arm/plat-omap/include/plat/i2c.h
浏览文件 @
e4609747
...
...
@@ -22,6 +22,7 @@
#define __ASM__ARCH_OMAP_I2C_H
#include <linux/i2c.h>
#include <linux/i2c-omap.h>
#if defined(CONFIG_I2C_OMAP) || defined(CONFIG_I2C_OMAP_MODULE)
extern
int
omap_register_i2c_bus
(
int
bus_id
,
u32
clkrate
,
...
...
@@ -46,10 +47,13 @@ static inline int omap_register_i2c_bus(int bus_id, u32 clkrate,
*/
struct
omap_i2c_dev_attr
{
u8
fifo_depth
;
u
8
flags
;
u
32
flags
;
};
void
__init
omap1_i2c_mux_pins
(
int
bus_id
);
void
__init
omap2_i2c_mux_pins
(
int
bus_id
);
struct
omap_hwmod
;
int
omap_i2c_reset
(
struct
omap_hwmod
*
oh
);
#endif
/* __ASM__ARCH_OMAP_I2C_H */
arch/arm/plat-omap/include/plat/omap_hwmod.h
浏览文件 @
e4609747
...
...
@@ -566,6 +566,7 @@ void omap_hwmod_ocp_barrier(struct omap_hwmod *oh);
void
omap_hwmod_write
(
u32
v
,
struct
omap_hwmod
*
oh
,
u16
reg_offs
);
u32
omap_hwmod_read
(
struct
omap_hwmod
*
oh
,
u16
reg_offs
);
int
omap_hwmod_softreset
(
struct
omap_hwmod
*
oh
);
int
omap_hwmod_count_resources
(
struct
omap_hwmod
*
oh
);
int
omap_hwmod_fill_resources
(
struct
omap_hwmod
*
oh
,
struct
resource
*
res
);
...
...
include/linux/i2c-omap.h
浏览文件 @
e4609747
...
...
@@ -3,6 +3,33 @@
#include <linux/platform_device.h>
/*
* Version 2 of the I2C peripheral unit has a different register
* layout and extra registers. The ID register in the V2 peripheral
* unit on the OMAP4430 reports the same ID as the V1 peripheral
* unit on the OMAP3530, so we must inform the driver which IP
* version we know it is running on from platform / cpu-specific
* code using these constants in the hwmod class definition.
*/
#define OMAP_I2C_IP_VERSION_1 1
#define OMAP_I2C_IP_VERSION_2 2
/* struct omap_i2c_bus_platform_data .flags meanings */
#define OMAP_I2C_FLAG_NO_FIFO BIT(0)
#define OMAP_I2C_FLAG_SIMPLE_CLOCK BIT(1)
#define OMAP_I2C_FLAG_16BIT_DATA_REG BIT(2)
#define OMAP_I2C_FLAG_RESET_REGS_POSTIDLE BIT(3)
#define OMAP_I2C_FLAG_APPLY_ERRATA_I207 BIT(4)
#define OMAP_I2C_FLAG_ALWAYS_ARMXOR_CLK BIT(5)
#define OMAP_I2C_FLAG_FORCE_19200_INT_CLK BIT(6)
/* how the CPU address bus must be translated for I2C unit access */
#define OMAP_I2C_FLAG_BUS_SHIFT_NONE 0
#define OMAP_I2C_FLAG_BUS_SHIFT_1 BIT(7)
#define OMAP_I2C_FLAG_BUS_SHIFT_2 BIT(8)
#define OMAP_I2C_FLAG_BUS_SHIFT__SHIFT 7
struct
omap_i2c_bus_platform_data
{
u32
clkrate
;
void
(
*
set_mpu_wkup_lat
)(
struct
device
*
dev
,
long
set
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录