Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
9296dbd7
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
161
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
9296dbd7
编写于
11月 05, 2012
作者:
T
Tomi Valkeinen
浏览文件
操作
浏览文件
下载
差异文件
Merge branch '3.8/misc-2'
Merge omapdss miscellaneous patches.
上级
f8fb7d7b
ffc81fc5
变更
27
隐藏空白更改
内联
并排
Showing
27 changed file
with
315 addition
and
664 deletion
+315
-664
arch/arm/mach-omap2/display.c
arch/arm/mach-omap2/display.c
+10
-5
drivers/video/omap2/displays/panel-acx565akm.c
drivers/video/omap2/displays/panel-acx565akm.c
+0
-23
drivers/video/omap2/displays/panel-generic-dpi.c
drivers/video/omap2/displays/panel-generic-dpi.c
+0
-36
drivers/video/omap2/displays/panel-lgphilips-lb035q02.c
drivers/video/omap2/displays/panel-lgphilips-lb035q02.c
+0
-34
drivers/video/omap2/displays/panel-n8x0.c
drivers/video/omap2/displays/panel-n8x0.c
+0
-50
drivers/video/omap2/displays/panel-nec-nl8048hl11-01b.c
drivers/video/omap2/displays/panel-nec-nl8048hl11-01b.c
+0
-24
drivers/video/omap2/displays/panel-picodlp.c
drivers/video/omap2/displays/panel-picodlp.c
+0
-44
drivers/video/omap2/displays/panel-sharp-ls037v7dw01.c
drivers/video/omap2/displays/panel-sharp-ls037v7dw01.c
+0
-17
drivers/video/omap2/displays/panel-taal.c
drivers/video/omap2/displays/panel-taal.c
+0
-72
drivers/video/omap2/displays/panel-tfp410.c
drivers/video/omap2/displays/panel-tfp410.c
+0
-33
drivers/video/omap2/displays/panel-tpo-td043mtea1.c
drivers/video/omap2/displays/panel-tpo-td043mtea1.c
+0
-20
drivers/video/omap2/dss/apply.c
drivers/video/omap2/dss/apply.c
+3
-3
drivers/video/omap2/dss/core.c
drivers/video/omap2/dss/core.c
+10
-2
drivers/video/omap2/dss/dispc.c
drivers/video/omap2/dss/dispc.c
+79
-64
drivers/video/omap2/dss/display.c
drivers/video/omap2/dss/display.c
+10
-83
drivers/video/omap2/dss/dpi.c
drivers/video/omap2/dss/dpi.c
+1
-1
drivers/video/omap2/dss/dsi.c
drivers/video/omap2/dss/dsi.c
+1
-1
drivers/video/omap2/dss/dss.c
drivers/video/omap2/dss/dss.c
+3
-2
drivers/video/omap2/dss/dss.h
drivers/video/omap2/dss/dss.h
+10
-4
drivers/video/omap2/dss/hdmi.c
drivers/video/omap2/dss/hdmi.c
+91
-33
drivers/video/omap2/dss/hdmi_panel.c
drivers/video/omap2/dss/hdmi_panel.c
+14
-64
drivers/video/omap2/dss/rfbi.c
drivers/video/omap2/dss/rfbi.c
+1
-1
drivers/video/omap2/dss/sdi.c
drivers/video/omap2/dss/sdi.c
+1
-1
drivers/video/omap2/dss/venc.c
drivers/video/omap2/dss/venc.c
+1
-1
drivers/video/omap2/dss/venc_panel.c
drivers/video/omap2/dss/venc_panel.c
+0
-19
drivers/video/omap2/omapfb/omapfb-main.c
drivers/video/omap2/omapfb/omapfb-main.c
+77
-24
include/video/omapdss.h
include/video/omapdss.h
+3
-3
未找到文件。
arch/arm/mach-omap2/display.c
浏览文件 @
9296dbd7
...
...
@@ -100,17 +100,20 @@ static const struct omap_dss_hwmod_data omap4_dss_hwmod_data[] __initconst = {
{
"dss_hdmi"
,
"omapdss_hdmi"
,
-
1
},
};
static
void
__init
omap4_
hdmi_mux_pads
(
enum
omap_hdmi_flags
flags
)
static
void
__init
omap4_
tpd12s015_mux_pads
(
void
)
{
u32
reg
;
u16
control_i2c_1
;
omap_mux_init_signal
(
"hdmi_cec"
,
OMAP_PIN_INPUT_PULLUP
);
omap_mux_init_signal
(
"hdmi_ddc_scl"
,
OMAP_PIN_INPUT_PULLUP
);
omap_mux_init_signal
(
"hdmi_ddc_sda"
,
OMAP_PIN_INPUT_PULLUP
);
}
static
void
__init
omap4_hdmi_mux_pads
(
enum
omap_hdmi_flags
flags
)
{
u32
reg
;
u16
control_i2c_1
;
/*
* CONTROL_I2C_1: HDMI_DDC_SDA_PULLUPRESX (bit 28) and
...
...
@@ -161,8 +164,10 @@ static int omap4_dsi_mux_pads(int dsi_id, unsigned lanes)
int
__init
omap_hdmi_init
(
enum
omap_hdmi_flags
flags
)
{
if
(
cpu_is_omap44xx
())
if
(
cpu_is_omap44xx
())
{
omap4_hdmi_mux_pads
(
flags
);
omap4_tpd12s015_mux_pads
();
}
return
0
;
}
...
...
drivers/video/omap2/displays/panel-acx565akm.c
浏览文件 @
9296dbd7
...
...
@@ -710,27 +710,6 @@ static void acx_panel_disable(struct omap_dss_device *dssdev)
dssdev
->
state
=
OMAP_DSS_DISPLAY_DISABLED
;
}
static
int
acx_panel_suspend
(
struct
omap_dss_device
*
dssdev
)
{
dev_dbg
(
&
dssdev
->
dev
,
"%s
\n
"
,
__func__
);
acx_panel_power_off
(
dssdev
);
dssdev
->
state
=
OMAP_DSS_DISPLAY_SUSPENDED
;
return
0
;
}
static
int
acx_panel_resume
(
struct
omap_dss_device
*
dssdev
)
{
int
r
;
dev_dbg
(
&
dssdev
->
dev
,
"%s
\n
"
,
__func__
);
r
=
acx_panel_power_on
(
dssdev
);
if
(
r
)
return
r
;
dssdev
->
state
=
OMAP_DSS_DISPLAY_ACTIVE
;
return
0
;
}
static
void
acx_panel_set_timings
(
struct
omap_dss_device
*
dssdev
,
struct
omap_video_timings
*
timings
)
{
...
...
@@ -752,8 +731,6 @@ static struct omap_dss_driver acx_panel_driver = {
.
enable
=
acx_panel_enable
,
.
disable
=
acx_panel_disable
,
.
suspend
=
acx_panel_suspend
,
.
resume
=
acx_panel_resume
,
.
set_timings
=
acx_panel_set_timings
,
.
check_timings
=
acx_panel_check_timings
,
...
...
drivers/video/omap2/displays/panel-generic-dpi.c
浏览文件 @
9296dbd7
...
...
@@ -688,40 +688,6 @@ static void generic_dpi_panel_disable(struct omap_dss_device *dssdev)
mutex_unlock
(
&
drv_data
->
lock
);
}
static
int
generic_dpi_panel_suspend
(
struct
omap_dss_device
*
dssdev
)
{
struct
panel_drv_data
*
drv_data
=
dev_get_drvdata
(
&
dssdev
->
dev
);
mutex_lock
(
&
drv_data
->
lock
);
generic_dpi_panel_power_off
(
dssdev
);
dssdev
->
state
=
OMAP_DSS_DISPLAY_SUSPENDED
;
mutex_unlock
(
&
drv_data
->
lock
);
return
0
;
}
static
int
generic_dpi_panel_resume
(
struct
omap_dss_device
*
dssdev
)
{
struct
panel_drv_data
*
drv_data
=
dev_get_drvdata
(
&
dssdev
->
dev
);
int
r
;
mutex_lock
(
&
drv_data
->
lock
);
r
=
generic_dpi_panel_power_on
(
dssdev
);
if
(
r
)
goto
err
;
dssdev
->
state
=
OMAP_DSS_DISPLAY_ACTIVE
;
err:
mutex_unlock
(
&
drv_data
->
lock
);
return
r
;
}
static
void
generic_dpi_panel_set_timings
(
struct
omap_dss_device
*
dssdev
,
struct
omap_video_timings
*
timings
)
{
...
...
@@ -769,8 +735,6 @@ static struct omap_dss_driver dpi_driver = {
.
enable
=
generic_dpi_panel_enable
,
.
disable
=
generic_dpi_panel_disable
,
.
suspend
=
generic_dpi_panel_suspend
,
.
resume
=
generic_dpi_panel_resume
,
.
set_timings
=
generic_dpi_panel_set_timings
,
.
get_timings
=
generic_dpi_panel_get_timings
,
...
...
drivers/video/omap2/displays/panel-lgphilips-lb035q02.c
浏览文件 @
9296dbd7
...
...
@@ -143,46 +143,12 @@ static void lb035q02_panel_disable(struct omap_dss_device *dssdev)
mutex_unlock
(
&
ld
->
lock
);
}
static
int
lb035q02_panel_suspend
(
struct
omap_dss_device
*
dssdev
)
{
struct
lb035q02_data
*
ld
=
dev_get_drvdata
(
&
dssdev
->
dev
);
mutex_lock
(
&
ld
->
lock
);
lb035q02_panel_power_off
(
dssdev
);
dssdev
->
state
=
OMAP_DSS_DISPLAY_SUSPENDED
;
mutex_unlock
(
&
ld
->
lock
);
return
0
;
}
static
int
lb035q02_panel_resume
(
struct
omap_dss_device
*
dssdev
)
{
struct
lb035q02_data
*
ld
=
dev_get_drvdata
(
&
dssdev
->
dev
);
int
r
;
mutex_lock
(
&
ld
->
lock
);
r
=
lb035q02_panel_power_on
(
dssdev
);
if
(
r
)
goto
err
;
dssdev
->
state
=
OMAP_DSS_DISPLAY_ACTIVE
;
mutex_unlock
(
&
ld
->
lock
);
return
0
;
err:
mutex_unlock
(
&
ld
->
lock
);
return
r
;
}
static
struct
omap_dss_driver
lb035q02_driver
=
{
.
probe
=
lb035q02_panel_probe
,
.
remove
=
lb035q02_panel_remove
,
.
enable
=
lb035q02_panel_enable
,
.
disable
=
lb035q02_panel_disable
,
.
suspend
=
lb035q02_panel_suspend
,
.
resume
=
lb035q02_panel_resume
,
.
driver
=
{
.
name
=
"lgphilips_lb035q02_panel"
,
...
...
drivers/video/omap2/displays/panel-n8x0.c
浏览文件 @
9296dbd7
...
...
@@ -574,54 +574,6 @@ static void n8x0_panel_disable(struct omap_dss_device *dssdev)
mutex_unlock
(
&
ddata
->
lock
);
}
static
int
n8x0_panel_suspend
(
struct
omap_dss_device
*
dssdev
)
{
struct
panel_drv_data
*
ddata
=
get_drv_data
(
dssdev
);
dev_dbg
(
&
dssdev
->
dev
,
"suspend
\n
"
);
mutex_lock
(
&
ddata
->
lock
);
rfbi_bus_lock
();
n8x0_panel_power_off
(
dssdev
);
rfbi_bus_unlock
();
dssdev
->
state
=
OMAP_DSS_DISPLAY_SUSPENDED
;
mutex_unlock
(
&
ddata
->
lock
);
return
0
;
}
static
int
n8x0_panel_resume
(
struct
omap_dss_device
*
dssdev
)
{
struct
panel_drv_data
*
ddata
=
get_drv_data
(
dssdev
);
int
r
;
dev_dbg
(
&
dssdev
->
dev
,
"resume
\n
"
);
mutex_lock
(
&
ddata
->
lock
);
rfbi_bus_lock
();
r
=
n8x0_panel_power_on
(
dssdev
);
rfbi_bus_unlock
();
if
(
r
)
{
mutex_unlock
(
&
ddata
->
lock
);
return
r
;
}
dssdev
->
state
=
OMAP_DSS_DISPLAY_ACTIVE
;
mutex_unlock
(
&
ddata
->
lock
);
return
0
;
}
static
void
n8x0_panel_get_resolution
(
struct
omap_dss_device
*
dssdev
,
u16
*
xres
,
u16
*
yres
)
{
...
...
@@ -683,8 +635,6 @@ static struct omap_dss_driver n8x0_panel_driver = {
.
enable
=
n8x0_panel_enable
,
.
disable
=
n8x0_panel_disable
,
.
suspend
=
n8x0_panel_suspend
,
.
resume
=
n8x0_panel_resume
,
.
update
=
n8x0_panel_update
,
.
sync
=
n8x0_panel_sync
,
...
...
drivers/video/omap2/displays/panel-nec-nl8048hl11-01b.c
浏览文件 @
9296dbd7
...
...
@@ -236,28 +236,6 @@ static void nec_8048_panel_disable(struct omap_dss_device *dssdev)
dssdev
->
state
=
OMAP_DSS_DISPLAY_DISABLED
;
}
static
int
nec_8048_panel_suspend
(
struct
omap_dss_device
*
dssdev
)
{
nec_8048_panel_power_off
(
dssdev
);
dssdev
->
state
=
OMAP_DSS_DISPLAY_SUSPENDED
;
return
0
;
}
static
int
nec_8048_panel_resume
(
struct
omap_dss_device
*
dssdev
)
{
int
r
;
r
=
nec_8048_panel_power_on
(
dssdev
);
if
(
r
)
return
r
;
dssdev
->
state
=
OMAP_DSS_DISPLAY_ACTIVE
;
return
0
;
}
static
int
nec_8048_recommended_bpp
(
struct
omap_dss_device
*
dssdev
)
{
return
16
;
...
...
@@ -268,8 +246,6 @@ static struct omap_dss_driver nec_8048_driver = {
.
remove
=
nec_8048_panel_remove
,
.
enable
=
nec_8048_panel_enable
,
.
disable
=
nec_8048_panel_disable
,
.
suspend
=
nec_8048_panel_suspend
,
.
resume
=
nec_8048_panel_resume
,
.
get_recommended_bpp
=
nec_8048_recommended_bpp
,
.
driver
=
{
...
...
drivers/video/omap2/displays/panel-picodlp.c
浏览文件 @
9296dbd7
...
...
@@ -503,47 +503,6 @@ static void picodlp_panel_disable(struct omap_dss_device *dssdev)
dev_dbg
(
&
dssdev
->
dev
,
"disabling picodlp panel
\n
"
);
}
static
int
picodlp_panel_suspend
(
struct
omap_dss_device
*
dssdev
)
{
struct
picodlp_data
*
picod
=
dev_get_drvdata
(
&
dssdev
->
dev
);
mutex_lock
(
&
picod
->
lock
);
/* Turn off DLP Power */
if
(
dssdev
->
state
!=
OMAP_DSS_DISPLAY_ACTIVE
)
{
mutex_unlock
(
&
picod
->
lock
);
dev_err
(
&
dssdev
->
dev
,
"unable to suspend picodlp panel,"
" panel is not ACTIVE
\n
"
);
return
-
EINVAL
;
}
picodlp_panel_power_off
(
dssdev
);
dssdev
->
state
=
OMAP_DSS_DISPLAY_SUSPENDED
;
mutex_unlock
(
&
picod
->
lock
);
dev_dbg
(
&
dssdev
->
dev
,
"suspending picodlp panel
\n
"
);
return
0
;
}
static
int
picodlp_panel_resume
(
struct
omap_dss_device
*
dssdev
)
{
struct
picodlp_data
*
picod
=
dev_get_drvdata
(
&
dssdev
->
dev
);
int
r
;
mutex_lock
(
&
picod
->
lock
);
if
(
dssdev
->
state
!=
OMAP_DSS_DISPLAY_SUSPENDED
)
{
mutex_unlock
(
&
picod
->
lock
);
dev_err
(
&
dssdev
->
dev
,
"unable to resume picodlp panel,"
" panel is not ACTIVE
\n
"
);
return
-
EINVAL
;
}
r
=
picodlp_panel_power_on
(
dssdev
);
mutex_unlock
(
&
picod
->
lock
);
dev_dbg
(
&
dssdev
->
dev
,
"resuming picodlp panel
\n
"
);
return
r
;
}
static
void
picodlp_get_resolution
(
struct
omap_dss_device
*
dssdev
,
u16
*
xres
,
u16
*
yres
)
{
...
...
@@ -560,9 +519,6 @@ static struct omap_dss_driver picodlp_driver = {
.
get_resolution
=
picodlp_get_resolution
,
.
suspend
=
picodlp_panel_suspend
,
.
resume
=
picodlp_panel_resume
,
.
driver
=
{
.
name
=
"picodlp_panel"
,
.
owner
=
THIS_MODULE
,
...
...
drivers/video/omap2/displays/panel-sharp-ls037v7dw01.c
浏览文件 @
9296dbd7
...
...
@@ -194,29 +194,12 @@ static void sharp_ls_panel_disable(struct omap_dss_device *dssdev)
dssdev
->
state
=
OMAP_DSS_DISPLAY_DISABLED
;
}
static
int
sharp_ls_panel_suspend
(
struct
omap_dss_device
*
dssdev
)
{
sharp_ls_power_off
(
dssdev
);
dssdev
->
state
=
OMAP_DSS_DISPLAY_SUSPENDED
;
return
0
;
}
static
int
sharp_ls_panel_resume
(
struct
omap_dss_device
*
dssdev
)
{
int
r
;
r
=
sharp_ls_power_on
(
dssdev
);
dssdev
->
state
=
OMAP_DSS_DISPLAY_ACTIVE
;
return
r
;
}
static
struct
omap_dss_driver
sharp_ls_driver
=
{
.
probe
=
sharp_ls_panel_probe
,
.
remove
=
__exit_p
(
sharp_ls_panel_remove
),
.
enable
=
sharp_ls_panel_enable
,
.
disable
=
sharp_ls_panel_disable
,
.
suspend
=
sharp_ls_panel_suspend
,
.
resume
=
sharp_ls_panel_resume
,
.
driver
=
{
.
name
=
"sharp_ls_panel"
,
...
...
drivers/video/omap2/displays/panel-taal.c
浏览文件 @
9296dbd7
...
...
@@ -1245,76 +1245,6 @@ static void taal_disable(struct omap_dss_device *dssdev)
mutex_unlock
(
&
td
->
lock
);
}
static
int
taal_suspend
(
struct
omap_dss_device
*
dssdev
)
{
struct
taal_data
*
td
=
dev_get_drvdata
(
&
dssdev
->
dev
);
int
r
;
dev_dbg
(
&
dssdev
->
dev
,
"suspend
\n
"
);
mutex_lock
(
&
td
->
lock
);
if
(
dssdev
->
state
!=
OMAP_DSS_DISPLAY_ACTIVE
)
{
r
=
-
EINVAL
;
goto
err
;
}
taal_cancel_ulps_work
(
dssdev
);
taal_cancel_esd_work
(
dssdev
);
dsi_bus_lock
(
dssdev
);
r
=
taal_wake_up
(
dssdev
);
if
(
!
r
)
taal_power_off
(
dssdev
);
dsi_bus_unlock
(
dssdev
);
dssdev
->
state
=
OMAP_DSS_DISPLAY_SUSPENDED
;
mutex_unlock
(
&
td
->
lock
);
return
0
;
err:
mutex_unlock
(
&
td
->
lock
);
return
r
;
}
static
int
taal_resume
(
struct
omap_dss_device
*
dssdev
)
{
struct
taal_data
*
td
=
dev_get_drvdata
(
&
dssdev
->
dev
);
int
r
;
dev_dbg
(
&
dssdev
->
dev
,
"resume
\n
"
);
mutex_lock
(
&
td
->
lock
);
if
(
dssdev
->
state
!=
OMAP_DSS_DISPLAY_SUSPENDED
)
{
r
=
-
EINVAL
;
goto
err
;
}
dsi_bus_lock
(
dssdev
);
r
=
taal_power_on
(
dssdev
);
dsi_bus_unlock
(
dssdev
);
if
(
r
)
{
dssdev
->
state
=
OMAP_DSS_DISPLAY_DISABLED
;
}
else
{
dssdev
->
state
=
OMAP_DSS_DISPLAY_ACTIVE
;
taal_queue_esd_work
(
dssdev
);
}
mutex_unlock
(
&
td
->
lock
);
return
r
;
err:
mutex_unlock
(
&
td
->
lock
);
return
r
;
}
static
void
taal_framedone_cb
(
int
err
,
void
*
data
)
{
struct
omap_dss_device
*
dssdev
=
data
;
...
...
@@ -1818,8 +1748,6 @@ static struct omap_dss_driver taal_driver = {
.
enable
=
taal_enable
,
.
disable
=
taal_disable
,
.
suspend
=
taal_suspend
,
.
resume
=
taal_resume
,
.
update
=
taal_update
,
.
sync
=
taal_sync
,
...
...
drivers/video/omap2/displays/panel-tfp410.c
浏览文件 @
9296dbd7
...
...
@@ -189,37 +189,6 @@ static void tfp410_disable(struct omap_dss_device *dssdev)
mutex_unlock
(
&
ddata
->
lock
);
}
static
int
tfp410_suspend
(
struct
omap_dss_device
*
dssdev
)
{
struct
panel_drv_data
*
ddata
=
dev_get_drvdata
(
&
dssdev
->
dev
);
mutex_lock
(
&
ddata
->
lock
);
tfp410_power_off
(
dssdev
);
dssdev
->
state
=
OMAP_DSS_DISPLAY_SUSPENDED
;
mutex_unlock
(
&
ddata
->
lock
);
return
0
;
}
static
int
tfp410_resume
(
struct
omap_dss_device
*
dssdev
)
{
struct
panel_drv_data
*
ddata
=
dev_get_drvdata
(
&
dssdev
->
dev
);
int
r
;
mutex_lock
(
&
ddata
->
lock
);
r
=
tfp410_power_on
(
dssdev
);
if
(
r
==
0
)
dssdev
->
state
=
OMAP_DSS_DISPLAY_ACTIVE
;
mutex_unlock
(
&
ddata
->
lock
);
return
r
;
}
static
void
tfp410_set_timings
(
struct
omap_dss_device
*
dssdev
,
struct
omap_video_timings
*
timings
)
{
...
...
@@ -355,8 +324,6 @@ static struct omap_dss_driver tfp410_driver = {
.
enable
=
tfp410_enable
,
.
disable
=
tfp410_disable
,
.
suspend
=
tfp410_suspend
,
.
resume
=
tfp410_resume
,
.
set_timings
=
tfp410_set_timings
,
.
get_timings
=
tfp410_get_timings
,
...
...
drivers/video/omap2/displays/panel-tpo-td043mtea1.c
浏览文件 @
9296dbd7
...
...
@@ -401,24 +401,6 @@ static void tpo_td043_disable(struct omap_dss_device *dssdev)
dssdev
->
state
=
OMAP_DSS_DISPLAY_DISABLED
;
}
static
int
tpo_td043_suspend
(
struct
omap_dss_device
*
dssdev
)
{
dev_dbg
(
&
dssdev
->
dev
,
"suspend
\n
"
);
tpo_td043_disable_dss
(
dssdev
);
dssdev
->
state
=
OMAP_DSS_DISPLAY_SUSPENDED
;
return
0
;
}
static
int
tpo_td043_resume
(
struct
omap_dss_device
*
dssdev
)
{
dev_dbg
(
&
dssdev
->
dev
,
"resume
\n
"
);
return
tpo_td043_enable_dss
(
dssdev
);
}
static
int
tpo_td043_probe
(
struct
omap_dss_device
*
dssdev
)
{
struct
tpo_td043_device
*
tpo_td043
=
dev_get_drvdata
(
&
dssdev
->
dev
);
...
...
@@ -500,8 +482,6 @@ static struct omap_dss_driver tpo_td043_driver = {
.
enable
=
tpo_td043_enable
,
.
disable
=
tpo_td043_disable
,
.
suspend
=
tpo_td043_suspend
,
.
resume
=
tpo_td043_resume
,
.
set_mirror
=
tpo_td043_set_hmirror
,
.
get_mirror
=
tpo_td043_get_hmirror
,
...
...
drivers/video/omap2/dss/apply.c
浏览文件 @
9296dbd7
...
...
@@ -772,7 +772,7 @@ void dss_mgr_start_update(struct omap_overlay_manager *mgr)
if
(
!
dss_data
.
irq_enabled
&&
need_isr
())
dss_register_vsync_isr
();
dispc_mgr_enable
(
mgr
->
id
);
dispc_mgr_enable
_sync
(
mgr
->
id
);
mgr_clear_shadow_dirty
(
mgr
);
...
...
@@ -1027,7 +1027,7 @@ int dss_mgr_enable(struct omap_overlay_manager *mgr)
spin_unlock_irqrestore
(
&
data_lock
,
flags
);
if
(
!
mgr_manual_update
(
mgr
))
dispc_mgr_enable
(
mgr
->
id
);
dispc_mgr_enable
_sync
(
mgr
->
id
);
out:
mutex_unlock
(
&
apply_lock
);
...
...
@@ -1052,7 +1052,7 @@ void dss_mgr_disable(struct omap_overlay_manager *mgr)
goto
out
;
if
(
!
mgr_manual_update
(
mgr
))
dispc_mgr_disable
(
mgr
->
id
);
dispc_mgr_disable
_sync
(
mgr
->
id
);
spin_lock_irqsave
(
&
data_lock
,
flags
);
...
...
drivers/video/omap2/dss/core.c
浏览文件 @
9296dbd7
...
...
@@ -53,10 +53,18 @@ static char *def_disp_name;
module_param_named
(
def_disp
,
def_disp_name
,
charp
,
0
);
MODULE_PARM_DESC
(
def_disp
,
"default display name"
);
const
char
*
dss_get_default_display_name
(
void
)
const
char
*
omap
dss_get_default_display_name
(
void
)
{
return
core
.
default_display_name
;
}
EXPORT_SYMBOL
(
omapdss_get_default_display_name
);
enum
omapdss_version
omapdss_get_version
(
void
)
{
struct
omap_dss_board_info
*
pdata
=
core
.
pdev
->
dev
.
platform_data
;
return
pdata
->
version
;
}
EXPORT_SYMBOL
(
omapdss_get_version
);
/* REGULATORS */
...
...
@@ -232,7 +240,7 @@ static int __init omap_dss_probe(struct platform_device *pdev)
core
.
pdev
=
pdev
;
dss_features_init
(
pdata
->
version
);
dss_features_init
(
omapdss_get_version
()
);
dss_apply_init
();
...
...
drivers/video/omap2/dss/dispc.c
浏览文件 @
9296dbd7
...
...
@@ -497,7 +497,7 @@ static void dispc_restore_context(void)
if
(
dss_has_feature
(
FEAT_MGR_LCD3
))
RR
(
CONTROL3
);
/* clear spurious SYNC_LOST_DIGIT interrupts */
dispc_
write_reg
(
DISPC_IRQSTATUS
,
DISPC_IRQ_SYNC_LOST_DIGIT
);
dispc_
clear_irqstatus
(
DISPC_IRQ_SYNC_LOST_DIGIT
);
/*
* enable last so IRQs won't trigger before
...
...
@@ -1046,7 +1046,7 @@ static void dispc_configure_burst_sizes(void)
const
int
burst_size
=
BURST_SIZE_X8
;
/* Configure burst size always to maximum size */
for
(
i
=
0
;
i
<
omap_dss_get_num_overlay
s
();
++
i
)
for
(
i
=
0
;
i
<
dss_feat_get_num_ovl
s
();
++
i
)
dispc_ovl_set_burst_size
(
i
,
burst_size
);
}
...
...
@@ -1250,7 +1250,7 @@ void dispc_ovl_compute_fifo_thresholds(enum omap_plane plane,
if
(
use_fifomerge
)
{
total_fifo_size
=
0
;
for
(
i
=
0
;
i
<
omap_dss_get_num_overlay
s
();
++
i
)
for
(
i
=
0
;
i
<
dss_feat_get_num_ovl
s
();
++
i
)
total_fifo_size
+=
dispc_ovl_get_fifo_size
(
i
);
}
else
{
total_fifo_size
=
ovl_fifo_size
;
...
...
@@ -2589,13 +2589,18 @@ int dispc_ovl_enable(enum omap_plane plane, bool enable)
return
0
;
}
bool
dispc_ovl_enabled
(
enum
omap_plane
plane
)
{
return
REG_GET
(
DISPC_OVL_ATTRIBUTES
(
plane
),
0
,
0
);
}
static
void
dispc_mgr_disable_isr
(
void
*
data
,
u32
mask
)
{
struct
completion
*
compl
=
data
;
complete
(
compl
);
}
static
void
_enable_mgr_out
(
enum
omap_channel
channel
,
bool
enable
)
void
dispc_mgr_enable
(
enum
omap_channel
channel
,
bool
enable
)
{
mgr_fld_write
(
channel
,
DISPC_MGR_FLD_ENABLE
,
enable
);
/* flush posted write */
...
...
@@ -2609,7 +2614,7 @@ bool dispc_mgr_is_enabled(enum omap_channel channel)
static
void
dispc_mgr_enable_lcd_out
(
enum
omap_channel
channel
)
{
_enable_mgr_out
(
channel
,
true
);
dispc_mgr_enable
(
channel
,
true
);
}
static
void
dispc_mgr_disable_lcd_out
(
enum
omap_channel
channel
)
...
...
@@ -2633,7 +2638,7 @@ static void dispc_mgr_disable_lcd_out(enum omap_channel channel)
if
(
r
)
DSSERR
(
"failed to register FRAMEDONE isr
\n
"
);
_enable_mgr_out
(
channel
,
false
);
dispc_mgr_enable
(
channel
,
false
);
/* if we couldn't register for framedone, just sleep and exit */
if
(
r
)
{
...
...
@@ -2685,7 +2690,7 @@ static void dispc_mgr_enable_digit_out(void)
return
;
}
_enable_mgr_out
(
OMAP_DSS_CHANNEL_DIGIT
,
true
);
dispc_mgr_enable
(
OMAP_DSS_CHANNEL_DIGIT
,
true
);
/* wait for the first evsync */
if
(
!
wait_for_completion_timeout
(
&
vsync_compl
,
msecs_to_jiffies
(
100
)))
...
...
@@ -2735,7 +2740,7 @@ static void dispc_mgr_disable_digit_out(void)
if
(
r
)
DSSERR
(
"failed to register %x isr
\n
"
,
irq_mask
);
_enable_mgr_out
(
OMAP_DSS_CHANNEL_DIGIT
,
false
);
dispc_mgr_enable
(
OMAP_DSS_CHANNEL_DIGIT
,
false
);
/* if we couldn't register the irq, just sleep and exit */
if
(
r
)
{
...
...
@@ -2755,7 +2760,7 @@ static void dispc_mgr_disable_digit_out(void)
DSSERR
(
"failed to unregister %x isr
\n
"
,
irq_mask
);
}
void
dispc_mgr_enable
(
enum
omap_channel
channel
)
void
dispc_mgr_enable
_sync
(
enum
omap_channel
channel
)
{
if
(
dss_mgr_is_lcd
(
channel
))
dispc_mgr_enable_lcd_out
(
channel
);
...
...
@@ -2765,7 +2770,7 @@ void dispc_mgr_enable(enum omap_channel channel)
WARN_ON
(
1
);
}
void
dispc_mgr_disable
(
enum
omap_channel
channel
)
void
dispc_mgr_disable
_sync
(
enum
omap_channel
channel
)
{
if
(
dss_mgr_is_lcd
(
channel
))
dispc_mgr_disable_lcd_out
(
channel
);
...
...
@@ -3167,28 +3172,32 @@ unsigned long dispc_mgr_lclk_rate(enum omap_channel channel)
unsigned
long
r
;
u32
l
;
l
=
dispc_read_reg
(
DISPC_DIVISORo
(
channel
));
if
(
dss_mgr_is_lcd
(
channel
))
{
l
=
dispc_read_reg
(
DISPC_DIVISORo
(
channel
));
lcd
=
FLD_GET
(
l
,
23
,
16
);
lcd
=
FLD_GET
(
l
,
23
,
16
);
switch
(
dss_get_lcd_clk_source
(
channel
))
{
case
OMAP_DSS_CLK_SRC_FCK
:
r
=
clk_get_rate
(
dispc
.
dss_clk
);
break
;
case
OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC
:
dsidev
=
dsi_get_dsidev_from_id
(
0
);
r
=
dsi_get_pll_hsdiv_dispc_rate
(
dsidev
);
break
;
case
OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DISPC
:
dsidev
=
dsi_get_dsidev_from_id
(
1
);
r
=
dsi_get_pll_hsdiv_dispc_rate
(
dsidev
);
break
;
default:
BUG
();
return
0
;
}
switch
(
dss_get_lcd_clk_source
(
channel
))
{
case
OMAP_DSS_CLK_SRC_FCK
:
r
=
clk_get_rate
(
dispc
.
dss_clk
);
break
;
case
OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC
:
dsidev
=
dsi_get_dsidev_from_id
(
0
);
r
=
dsi_get_pll_hsdiv_dispc_rate
(
dsidev
);
break
;
case
OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DISPC
:
dsidev
=
dsi_get_dsidev_from_id
(
1
);
r
=
dsi_get_pll_hsdiv_dispc_rate
(
dsidev
);
break
;
default:
BUG
();
return
0
;
}
return
r
/
lcd
;
return
r
/
lcd
;
}
else
{
return
dispc_fclk_rate
();
}
}
unsigned
long
dispc_mgr_pclk_rate
(
enum
omap_channel
channel
)
...
...
@@ -3247,12 +3256,9 @@ static unsigned long dispc_plane_lclk_rate(enum omap_plane plane)
{
enum
omap_channel
channel
=
dispc_ovl_get_channel_out
(
plane
);
if
(
dss_mgr_is_lcd
(
channel
))
return
dispc_mgr_lclk_rate
(
channel
);
else
return
dispc_fclk_rate
();
return
dispc_mgr_lclk_rate
(
channel
);
}
static
void
dispc_dump_clocks_channel
(
struct
seq_file
*
s
,
enum
omap_channel
channel
)
{
int
lcd
,
pcd
;
...
...
@@ -3621,11 +3627,35 @@ int dispc_mgr_get_clock_div(enum omap_channel channel,
return
0
;
}
u32
dispc_read_irqstatus
(
void
)
{
return
dispc_read_reg
(
DISPC_IRQSTATUS
);
}
void
dispc_clear_irqstatus
(
u32
mask
)
{
dispc_write_reg
(
DISPC_IRQSTATUS
,
mask
);
}
u32
dispc_read_irqenable
(
void
)
{
return
dispc_read_reg
(
DISPC_IRQENABLE
);
}
void
dispc_write_irqenable
(
u32
mask
)
{
u32
old_mask
=
dispc_read_reg
(
DISPC_IRQENABLE
);
/* clear the irqstatus for newly enabled irqs */
dispc_clear_irqstatus
((
mask
^
old_mask
)
&
mask
);
dispc_write_reg
(
DISPC_IRQENABLE
,
mask
);
}
/* dispc.irq_lock has to be locked by the caller */
static
void
_omap_dispc_set_irqs
(
void
)
{
u32
mask
;
u32
old_mask
;
int
i
;
struct
omap_dispc_isr_data
*
isr_data
;
...
...
@@ -3640,11 +3670,7 @@ static void _omap_dispc_set_irqs(void)
mask
|=
isr_data
->
mask
;
}
old_mask
=
dispc_read_reg
(
DISPC_IRQENABLE
);
/* clear the irqstatus for newly enabled irqs */
dispc_write_reg
(
DISPC_IRQSTATUS
,
(
mask
^
old_mask
)
&
mask
);
dispc_write_reg
(
DISPC_IRQENABLE
,
mask
);
dispc_write_irqenable
(
mask
);
}
int
omap_dispc_register_isr
(
omap_dispc_isr_t
isr
,
void
*
arg
,
u32
mask
)
...
...
@@ -3771,8 +3797,8 @@ static irqreturn_t omap_dispc_irq_handler(int irq, void *arg)
spin_lock
(
&
dispc
.
irq_lock
);
irqstatus
=
dispc_read_
reg
(
DISPC_IRQSTATUS
);
irqenable
=
dispc_read_
reg
(
DISPC_IRQENABLE
);
irqstatus
=
dispc_read_
irqstatus
(
);
irqenable
=
dispc_read_
irqenable
(
);
/* IRQ is not for us */
if
(
!
(
irqstatus
&
irqenable
))
{
...
...
@@ -3791,9 +3817,9 @@ static irqreturn_t omap_dispc_irq_handler(int irq, void *arg)
/* Ack the interrupt. Do it here before clocks are possibly turned
* off */
dispc_
write_reg
(
DISPC_IRQSTATUS
,
irqstatus
);
dispc_
clear_irqstatus
(
irqstatus
);
/* flush posted write */
dispc_read_
reg
(
DISPC_IRQSTATUS
);
dispc_read_
irqstatus
(
);
/* make a copy and unlock, so that isrs can unregister
* themselves */
...
...
@@ -3875,30 +3901,24 @@ static void dispc_error_worker(struct work_struct *work)
bit
=
mgr_desc
[
i
].
sync_lost_irq
;
if
(
bit
&
errors
)
{
struct
omap_dss_device
*
dssdev
=
mgr
->
get_device
(
mgr
);
bool
enable
;
int
j
;
DSSERR
(
"SYNC_LOST on channel %s, restarting the output "
"with video overlays disabled
\n
"
,
mgr
->
name
);
enable
=
dssdev
->
state
==
OMAP_DSS_DISPLAY_ACTIVE
;
dssdev
->
driver
->
disable
(
dssdev
);
dss_mgr_disable
(
mgr
);
for
(
i
=
0
;
i
<
omap_dss_get_num_overlays
();
++
i
)
{
for
(
j
=
0
;
j
<
omap_dss_get_num_overlays
();
++
j
)
{
struct
omap_overlay
*
ovl
;
ovl
=
omap_dss_get_overlay
(
i
);
ovl
=
omap_dss_get_overlay
(
j
);
if
(
ovl
->
id
!=
OMAP_DSS_GFX
&&
ovl
->
manager
==
mgr
)
dispc_ovl_enable
(
ovl
->
id
,
false
);
ovl
->
disable
(
ovl
);
}
dispc_mgr_go
(
mgr
->
id
);
msleep
(
50
);
if
(
enable
)
dssdev
->
driver
->
enable
(
dssdev
);
dss_mgr_enable
(
mgr
);
}
}
...
...
@@ -3906,13 +3926,9 @@ static void dispc_error_worker(struct work_struct *work)
DSSERR
(
"OCP_ERR
\n
"
);
for
(
i
=
0
;
i
<
omap_dss_get_num_overlay_managers
();
++
i
)
{
struct
omap_overlay_manager
*
mgr
;
struct
omap_dss_device
*
dssdev
;
mgr
=
omap_dss_get_overlay_manager
(
i
);
dssdev
=
mgr
->
get_device
(
mgr
);
if
(
dssdev
&&
dssdev
->
driver
)
dssdev
->
driver
->
disable
(
dssdev
);
dss_mgr_disable
(
mgr
);
}
}
...
...
@@ -4002,7 +4018,7 @@ static void _omap_dispc_initialize_irq(void)
/* there's SYNC_LOST_DIGIT waiting after enabling the DSS,
* so clear it */
dispc_
write_reg
(
DISPC_IRQSTATUS
,
dispc_read_reg
(
DISPC_IRQSTATUS
));
dispc_
clear_irqstatus
(
dispc_read_irqstatus
(
));
_omap_dispc_set_irqs
();
...
...
@@ -4098,7 +4114,6 @@ static const struct dispc_features omap44xx_dispc_feats __initconst = {
static
int
__init
dispc_init_features
(
struct
platform_device
*
pdev
)
{
struct
omap_dss_board_info
*
pdata
=
pdev
->
dev
.
platform_data
;
const
struct
dispc_features
*
src
;
struct
dispc_features
*
dst
;
...
...
@@ -4108,7 +4123,7 @@ static int __init dispc_init_features(struct platform_device *pdev)
return
-
ENOMEM
;
}
switch
(
pdata
->
version
)
{
switch
(
omapdss_get_version
()
)
{
case
OMAPDSS_VER_OMAP24xx
:
src
=
&
omap24xx_dispc_feats
;
break
;
...
...
drivers/video/omap2/dss/display.c
浏览文件 @
9296dbd7
...
...
@@ -320,86 +320,21 @@ void omapdss_default_get_timings(struct omap_dss_device *dssdev,
}
EXPORT_SYMBOL
(
omapdss_default_get_timings
);
/*
* Connect dssdev to a manager if the manager is free or if force is specified.
* Connect all overlays to that manager if they are free or if force is
* specified.
*/
static
int
dss_init_connections
(
struct
omap_dss_device
*
dssdev
,
bool
force
)
int
dss_init_device
(
struct
platform_device
*
pdev
,
struct
omap_dss_device
*
dssdev
)
{
struct
device_attribute
*
attr
;
struct
omap_dss_output
*
out
;
struct
omap_overlay_manager
*
mgr
;
int
i
,
r
;
out
=
omapdss_get_output_from_dssdev
(
dssdev
);
WARN_ON
(
dssdev
->
output
);
WARN_ON
(
out
->
device
);
r
=
omapdss_output_set_device
(
out
,
dssdev
);
if
(
r
)
{
DSSERR
(
"failed to connect output to new device
\n
"
);
return
r
;
}
mgr
=
omap_dss_get_overlay_manager
(
dssdev
->
channel
);
if
(
mgr
->
output
&&
!
force
)
return
0
;
if
(
mgr
->
output
)
mgr
->
unset_output
(
mgr
);
r
=
mgr
->
set_output
(
mgr
,
out
);
if
(
r
)
{
DSSERR
(
"failed to connect manager to output of new device
\n
"
);
/* remove the output-device connection we just made */
omapdss_output_unset_device
(
out
);
return
r
;
}
for
(
i
=
0
;
i
<
omap_dss_get_num_overlays
();
++
i
)
{
struct
omap_overlay
*
ovl
=
omap_dss_get_overlay
(
i
);
if
(
!
ovl
->
manager
||
force
)
{
if
(
ovl
->
manager
)
ovl
->
unset_manager
(
ovl
);
r
=
ovl
->
set_manager
(
ovl
,
mgr
);
if
(
r
)
{
DSSERR
(
"failed to set initial overlay
\n
"
);
return
r
;
}
}
}
return
0
;
}
static
void
dss_uninit_connections
(
struct
omap_dss_device
*
dssdev
)
{
if
(
dssdev
->
output
)
{
struct
omap_overlay_manager
*
mgr
=
dssdev
->
output
->
manager
;
if
(
mgr
)
mgr
->
unset_output
(
mgr
);
omapdss_output_unset_device
(
dssdev
->
output
);
}
}
int
dss_init_device
(
struct
platform_device
*
pdev
,
struct
omap_dss_device
*
dssdev
)
{
struct
device_attribute
*
attr
;
int
i
,
r
;
const
char
*
def_disp_name
=
dss_get_default_display_name
();
bool
force
;
force
=
def_disp_name
&&
strcmp
(
def_disp_name
,
dssdev
->
name
)
==
0
;
dss_init_connections
(
dssdev
,
force
);
/* create device sysfs files */
i
=
0
;
while
((
attr
=
display_sysfs_attrs
[
i
++
])
!=
NULL
)
{
...
...
@@ -410,7 +345,7 @@ int dss_init_device(struct platform_device *pdev,
device_remove_file
(
&
dssdev
->
dev
,
attr
);
}
dss_uninit_connections
(
dssdev
);
omapdss_output_unset_device
(
dssdev
->
output
);
DSSERR
(
"failed to create sysfs file
\n
"
);
return
r
;
...
...
@@ -424,7 +359,7 @@ int dss_init_device(struct platform_device *pdev,
while
((
attr
=
display_sysfs_attrs
[
i
++
])
!=
NULL
)
device_remove_file
(
&
dssdev
->
dev
,
attr
);
dss_uninit_connections
(
dssdev
);
omapdss_output_unset_device
(
dssdev
->
output
);
DSSERR
(
"failed to create sysfs display link
\n
"
);
return
r
;
...
...
@@ -444,12 +379,12 @@ void dss_uninit_device(struct platform_device *pdev,
while
((
attr
=
display_sysfs_attrs
[
i
++
])
!=
NULL
)
device_remove_file
(
&
dssdev
->
dev
,
attr
);
dss_uninit_connections
(
dssdev
);
if
(
dssdev
->
output
)
omapdss_output_unset_device
(
dssdev
->
output
);
}
static
int
dss_suspend_device
(
struct
device
*
dev
,
void
*
data
)
{
int
r
;
struct
omap_dss_device
*
dssdev
=
to_dss_device
(
dev
);
if
(
dssdev
->
state
!=
OMAP_DSS_DISPLAY_ACTIVE
)
{
...
...
@@ -457,15 +392,7 @@ static int dss_suspend_device(struct device *dev, void *data)
return
0
;
}
if
(
!
dssdev
->
driver
->
suspend
)
{
DSSERR
(
"display '%s' doesn't implement suspend
\n
"
,
dssdev
->
name
);
return
-
ENOSYS
;
}
r
=
dssdev
->
driver
->
suspend
(
dssdev
);
if
(
r
)
return
r
;
dssdev
->
driver
->
disable
(
dssdev
);
dssdev
->
activate_after_resume
=
true
;
...
...
@@ -492,8 +419,8 @@ static int dss_resume_device(struct device *dev, void *data)
int
r
;
struct
omap_dss_device
*
dssdev
=
to_dss_device
(
dev
);
if
(
dssdev
->
activate_after_resume
&&
dssdev
->
driver
->
resume
)
{
r
=
dssdev
->
driver
->
resum
e
(
dssdev
);
if
(
dssdev
->
activate_after_resume
)
{
r
=
dssdev
->
driver
->
enabl
e
(
dssdev
);
if
(
r
)
return
r
;
}
...
...
drivers/video/omap2/dss/dpi.c
浏览文件 @
9296dbd7
...
...
@@ -389,7 +389,7 @@ static int __init dpi_init_display(struct omap_dss_device *dssdev)
static
struct
omap_dss_device
*
__init
dpi_find_dssdev
(
struct
platform_device
*
pdev
)
{
struct
omap_dss_board_info
*
pdata
=
pdev
->
dev
.
platform_data
;
const
char
*
def_disp_name
=
dss_get_default_display_name
();
const
char
*
def_disp_name
=
omap
dss_get_default_display_name
();
struct
omap_dss_device
*
def_dssdev
;
int
i
;
...
...
drivers/video/omap2/dss/dsi.c
浏览文件 @
9296dbd7
...
...
@@ -5100,7 +5100,7 @@ static struct omap_dss_device * __init dsi_find_dssdev(struct platform_device *p
{
struct
omap_dss_board_info
*
pdata
=
pdev
->
dev
.
platform_data
;
struct
dsi_data
*
dsi
=
dsi_get_dsidrv_data
(
pdev
);
const
char
*
def_disp_name
=
dss_get_default_display_name
();
const
char
*
def_disp_name
=
omap
dss_get_default_display_name
();
struct
omap_dss_device
*
def_dssdev
;
int
i
;
...
...
drivers/video/omap2/dss/dss.c
浏览文件 @
9296dbd7
...
...
@@ -97,6 +97,8 @@ static const char * const dss_generic_clk_source_names[] = {
[
OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC
]
=
"DSI_PLL_HSDIV_DISPC"
,
[
OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DSI
]
=
"DSI_PLL_HSDIV_DSI"
,
[
OMAP_DSS_CLK_SRC_FCK
]
=
"DSS_FCK"
,
[
OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DISPC
]
=
"DSI_PLL2_HSDIV_DISPC"
,
[
OMAP_DSS_CLK_SRC_DSI2_PLL_HSDIV_DSI
]
=
"DSI_PLL2_HSDIV_DSI"
,
};
static
inline
void
dss_write_reg
(
const
struct
dss_reg
idx
,
u32
val
)
...
...
@@ -793,7 +795,6 @@ static const struct dss_features omap54xx_dss_feats __initconst = {
static
int
__init
dss_init_features
(
struct
platform_device
*
pdev
)
{
struct
omap_dss_board_info
*
pdata
=
pdev
->
dev
.
platform_data
;
const
struct
dss_features
*
src
;
struct
dss_features
*
dst
;
...
...
@@ -803,7 +804,7 @@ static int __init dss_init_features(struct platform_device *pdev)
return
-
ENOMEM
;
}
switch
(
pdata
->
version
)
{
switch
(
omapdss_get_version
()
)
{
case
OMAPDSS_VER_OMAP24xx
:
src
=
&
omap24xx_dss_feats
;
break
;
...
...
drivers/video/omap2/dss/dss.h
浏览文件 @
9296dbd7
...
...
@@ -160,7 +160,6 @@ struct seq_file;
struct
platform_device
;
/* core */
const
char
*
dss_get_default_display_name
(
void
);
struct
bus_type
*
dss_get_bus
(
void
);
struct
regulator
*
dss_get_vdds_dsi
(
void
);
struct
regulator
*
dss_get_vdds_sdi
(
void
);
...
...
@@ -398,7 +397,10 @@ void dpi_uninit_platform_driver(void) __exit;
int
dispc_init_platform_driver
(
void
)
__init
;
void
dispc_uninit_platform_driver
(
void
)
__exit
;
void
dispc_dump_clocks
(
struct
seq_file
*
s
);
void
dispc_irq_handler
(
void
);
u32
dispc_read_irqstatus
(
void
);
void
dispc_clear_irqstatus
(
u32
mask
);
u32
dispc_read_irqenable
(
void
);
void
dispc_write_irqenable
(
u32
mask
);
int
dispc_runtime_get
(
void
);
void
dispc_runtime_put
(
void
);
...
...
@@ -429,6 +431,7 @@ int dispc_ovl_setup(enum omap_plane plane, const struct omap_overlay_info *oi,
bool
replication
,
const
struct
omap_video_timings
*
mgr_timings
,
bool
mem_to_mem
);
int
dispc_ovl_enable
(
enum
omap_plane
plane
,
bool
enable
);
bool
dispc_ovl_enabled
(
enum
omap_plane
plane
);
void
dispc_ovl_set_channel_out
(
enum
omap_plane
plane
,
enum
omap_channel
channel
);
...
...
@@ -437,9 +440,10 @@ u32 dispc_mgr_get_framedone_irq(enum omap_channel channel);
u32
dispc_mgr_get_sync_lost_irq
(
enum
omap_channel
channel
);
bool
dispc_mgr_go_busy
(
enum
omap_channel
channel
);
void
dispc_mgr_go
(
enum
omap_channel
channel
);
void
dispc_mgr_enable
(
enum
omap_channel
channel
,
bool
enable
);
bool
dispc_mgr_is_enabled
(
enum
omap_channel
channel
);
void
dispc_mgr_enable
(
enum
omap_channel
channel
);
void
dispc_mgr_disable
(
enum
omap_channel
channel
);
void
dispc_mgr_enable
_sync
(
enum
omap_channel
channel
);
void
dispc_mgr_disable
_sync
(
enum
omap_channel
channel
);
bool
dispc_mgr_is_channel_enabled
(
enum
omap_channel
channel
);
void
dispc_mgr_set_lcd_config
(
enum
omap_channel
channel
,
const
struct
dss_lcd_mgr_config
*
config
);
...
...
@@ -505,6 +509,8 @@ static inline unsigned long hdmi_get_pixel_clock(void)
#endif
int
omapdss_hdmi_display_enable
(
struct
omap_dss_device
*
dssdev
);
void
omapdss_hdmi_display_disable
(
struct
omap_dss_device
*
dssdev
);
int
omapdss_hdmi_core_enable
(
struct
omap_dss_device
*
dssdev
);
void
omapdss_hdmi_core_disable
(
struct
omap_dss_device
*
dssdev
);
void
omapdss_hdmi_display_set_timing
(
struct
omap_dss_device
*
dssdev
,
struct
omap_video_timings
*
timings
);
int
omapdss_hdmi_display_check_timing
(
struct
omap_dss_device
*
dssdev
,
...
...
drivers/video/omap2/dss/hdmi.c
浏览文件 @
9296dbd7
...
...
@@ -295,6 +295,12 @@ static const struct hdmi_config vesa_timings[] = {
false
,
},
{
0x55
,
HDMI_DVI
},
},
{
{
1920
,
1200
,
154000
,
32
,
48
,
80
,
6
,
3
,
26
,
OMAPDSS_SIG_ACTIVE_LOW
,
OMAPDSS_SIG_ACTIVE_HIGH
,
false
,
},
{
0x44
,
HDMI_DVI
},
},
};
static
int
hdmi_runtime_get
(
void
)
...
...
@@ -323,7 +329,6 @@ static void hdmi_runtime_put(void)
static
int
__init
hdmi_init_display
(
struct
omap_dss_device
*
dssdev
)
{
struct
omap_dss_board_info
*
pdata
=
hdmi
.
pdev
->
dev
.
platform_data
;
int
r
;
struct
gpio
gpios
[]
=
{
...
...
@@ -334,7 +339,7 @@ static int __init hdmi_init_display(struct omap_dss_device *dssdev)
DSSDBG
(
"init_display
\n
"
);
dss_init_hdmi_ip_ops
(
&
hdmi
.
ip_data
,
pdata
->
version
);
dss_init_hdmi_ip_ops
(
&
hdmi
.
ip_data
,
omapdss_get_version
()
);
if
(
hdmi
.
vdda_hdmi_dac_reg
==
NULL
)
{
struct
regulator
*
reg
;
...
...
@@ -399,7 +404,8 @@ static bool hdmi_timings_compare(struct omap_video_timings *timing1,
{
int
timing1_vsync
,
timing1_hsync
,
timing2_vsync
,
timing2_hsync
;
if
((
timing2
->
pixel_clock
==
timing1
->
pixel_clock
)
&&
if
((
DIV_ROUND_CLOSEST
(
timing2
->
pixel_clock
,
1000
)
==
DIV_ROUND_CLOSEST
(
timing1
->
pixel_clock
,
1000
))
&&
(
timing2
->
x_res
==
timing1
->
x_res
)
&&
(
timing2
->
y_res
==
timing1
->
y_res
))
{
...
...
@@ -501,12 +507,9 @@ static void hdmi_compute_pll(struct omap_dss_device *dssdev, int phy,
DSSDBG
(
"range = %d sd = %d
\n
"
,
pi
->
dcofreq
,
pi
->
regsd
);
}
static
int
hdmi_power_on
(
struct
omap_dss_device
*
dssdev
)
static
int
hdmi_power_on
_core
(
struct
omap_dss_device
*
dssdev
)
{
int
r
;
struct
omap_video_timings
*
p
;
struct
omap_overlay_manager
*
mgr
=
dssdev
->
output
->
manager
;
unsigned
long
phy
;
gpio_set_value
(
hdmi
.
ct_cp_hpd_gpio
,
1
);
gpio_set_value
(
hdmi
.
ls_oe_gpio
,
1
);
...
...
@@ -522,6 +525,46 @@ static int hdmi_power_on(struct omap_dss_device *dssdev)
if
(
r
)
goto
err_runtime_get
;
/* Make selection of HDMI in DSS */
dss_select_hdmi_venc_clk_source
(
DSS_HDMI_M_PCLK
);
/* Select the dispc clock source as PRCM clock, to ensure that it is not
* DSI PLL source as the clock selected by DSI PLL might not be
* sufficient for the resolution selected / that can be changed
* dynamically by user. This can be moved to single location , say
* Boardfile.
*/
dss_select_dispc_clk_source
(
dssdev
->
clocks
.
dispc
.
dispc_fclk_src
);
return
0
;
err_runtime_get:
regulator_disable
(
hdmi
.
vdda_hdmi_dac_reg
);
err_vdac_enable:
gpio_set_value
(
hdmi
.
ct_cp_hpd_gpio
,
0
);
gpio_set_value
(
hdmi
.
ls_oe_gpio
,
0
);
return
r
;
}
static
void
hdmi_power_off_core
(
struct
omap_dss_device
*
dssdev
)
{
hdmi_runtime_put
();
regulator_disable
(
hdmi
.
vdda_hdmi_dac_reg
);
gpio_set_value
(
hdmi
.
ct_cp_hpd_gpio
,
0
);
gpio_set_value
(
hdmi
.
ls_oe_gpio
,
0
);
}
static
int
hdmi_power_on_full
(
struct
omap_dss_device
*
dssdev
)
{
int
r
;
struct
omap_video_timings
*
p
;
struct
omap_overlay_manager
*
mgr
=
dssdev
->
output
->
manager
;
unsigned
long
phy
;
r
=
hdmi_power_on_core
(
dssdev
);
if
(
r
)
return
r
;
dss_mgr_disable
(
mgr
);
p
=
&
hdmi
.
ip_data
.
cfg
.
timings
;
...
...
@@ -549,17 +592,6 @@ static int hdmi_power_on(struct omap_dss_device *dssdev)
hdmi
.
ip_data
.
ops
->
video_configure
(
&
hdmi
.
ip_data
);
/* Make selection of HDMI in DSS */
dss_select_hdmi_venc_clk_source
(
DSS_HDMI_M_PCLK
);
/* Select the dispc clock source as PRCM clock, to ensure that it is not
* DSI PLL source as the clock selected by DSI PLL might not be
* sufficient for the resolution selected / that can be changed
* dynamically by user. This can be moved to single location , say
* Boardfile.
*/
dss_select_dispc_clk_source
(
dssdev
->
clocks
.
dispc
.
dispc_fclk_src
);
/* bypass TV gamma table */
dispc_enable_gamma_table
(
0
);
...
...
@@ -583,16 +615,11 @@ static int hdmi_power_on(struct omap_dss_device *dssdev)
err_phy_enable:
hdmi
.
ip_data
.
ops
->
pll_disable
(
&
hdmi
.
ip_data
);
err_pll_enable:
hdmi_runtime_put
();
err_runtime_get:
regulator_disable
(
hdmi
.
vdda_hdmi_dac_reg
);
err_vdac_enable:
gpio_set_value
(
hdmi
.
ct_cp_hpd_gpio
,
0
);
gpio_set_value
(
hdmi
.
ls_oe_gpio
,
0
);
hdmi_power_off_core
(
dssdev
);
return
-
EIO
;
}
static
void
hdmi_power_off
(
struct
omap_dss_device
*
dssdev
)
static
void
hdmi_power_off
_full
(
struct
omap_dss_device
*
dssdev
)
{
struct
omap_overlay_manager
*
mgr
=
dssdev
->
output
->
manager
;
...
...
@@ -601,12 +628,8 @@ static void hdmi_power_off(struct omap_dss_device *dssdev)
hdmi
.
ip_data
.
ops
->
video_disable
(
&
hdmi
.
ip_data
);
hdmi
.
ip_data
.
ops
->
phy_disable
(
&
hdmi
.
ip_data
);
hdmi
.
ip_data
.
ops
->
pll_disable
(
&
hdmi
.
ip_data
);
hdmi_runtime_put
();
regulator_disable
(
hdmi
.
vdda_hdmi_dac_reg
);
gpio_set_value
(
hdmi
.
ct_cp_hpd_gpio
,
0
);
gpio_set_value
(
hdmi
.
ls_oe_gpio
,
0
);
hdmi_power_off_core
(
dssdev
);
}
int
omapdss_hdmi_display_check_timing
(
struct
omap_dss_device
*
dssdev
,
...
...
@@ -716,7 +739,7 @@ int omapdss_hdmi_display_enable(struct omap_dss_device *dssdev)
goto
err0
;
}
r
=
hdmi_power_on
(
dssdev
);
r
=
hdmi_power_on
_full
(
dssdev
);
if
(
r
)
{
DSSERR
(
"failed to power on device
\n
"
);
goto
err1
;
...
...
@@ -738,13 +761,48 @@ void omapdss_hdmi_display_disable(struct omap_dss_device *dssdev)
mutex_lock
(
&
hdmi
.
lock
);
hdmi_power_off
(
dssdev
);
hdmi_power_off
_full
(
dssdev
);
omap_dss_stop_device
(
dssdev
);
mutex_unlock
(
&
hdmi
.
lock
);
}
int
omapdss_hdmi_core_enable
(
struct
omap_dss_device
*
dssdev
)
{
int
r
=
0
;
DSSDBG
(
"ENTER omapdss_hdmi_core_enable
\n
"
);
mutex_lock
(
&
hdmi
.
lock
);
hdmi
.
ip_data
.
hpd_gpio
=
hdmi
.
hpd_gpio
;
r
=
hdmi_power_on_core
(
dssdev
);
if
(
r
)
{
DSSERR
(
"failed to power on device
\n
"
);
goto
err0
;
}
mutex_unlock
(
&
hdmi
.
lock
);
return
0
;
err0:
mutex_unlock
(
&
hdmi
.
lock
);
return
r
;
}
void
omapdss_hdmi_core_disable
(
struct
omap_dss_device
*
dssdev
)
{
DSSDBG
(
"Enter omapdss_hdmi_core_disable
\n
"
);
mutex_lock
(
&
hdmi
.
lock
);
hdmi_power_off_core
(
dssdev
);
mutex_unlock
(
&
hdmi
.
lock
);
}
static
int
hdmi_get_clocks
(
struct
platform_device
*
pdev
)
{
struct
clk
*
clk
;
...
...
@@ -913,7 +971,7 @@ int hdmi_audio_config(struct omap_dss_audio *audio)
static
struct
omap_dss_device
*
__init
hdmi_find_dssdev
(
struct
platform_device
*
pdev
)
{
struct
omap_dss_board_info
*
pdata
=
pdev
->
dev
.
platform_data
;
const
char
*
def_disp_name
=
dss_get_default_display_name
();
const
char
*
def_disp_name
=
omap
dss_get_default_display_name
();
struct
omap_dss_device
*
def_dssdev
;
int
i
;
...
...
drivers/video/omap2/dss/hdmi_panel.c
浏览文件 @
9296dbd7
...
...
@@ -280,58 +280,6 @@ static void hdmi_panel_disable(struct omap_dss_device *dssdev)
mutex_unlock
(
&
hdmi
.
lock
);
}
static
int
hdmi_panel_suspend
(
struct
omap_dss_device
*
dssdev
)
{
int
r
=
0
;
mutex_lock
(
&
hdmi
.
lock
);
if
(
dssdev
->
state
!=
OMAP_DSS_DISPLAY_ACTIVE
)
{
r
=
-
EINVAL
;
goto
err
;
}
/*
* TODO: notify audio users that the display was suspended. For now,
* disable audio locally to not break our audio state machine.
*/
hdmi_panel_audio_disable
(
dssdev
);
dssdev
->
state
=
OMAP_DSS_DISPLAY_SUSPENDED
;
omapdss_hdmi_display_disable
(
dssdev
);
err:
mutex_unlock
(
&
hdmi
.
lock
);
return
r
;
}
static
int
hdmi_panel_resume
(
struct
omap_dss_device
*
dssdev
)
{
int
r
=
0
;
mutex_lock
(
&
hdmi
.
lock
);
if
(
dssdev
->
state
!=
OMAP_DSS_DISPLAY_SUSPENDED
)
{
r
=
-
EINVAL
;
goto
err
;
}
r
=
omapdss_hdmi_display_enable
(
dssdev
);
if
(
r
)
{
DSSERR
(
"failed to power on
\n
"
);
goto
err
;
}
/* TODO: notify audio users that the panel resumed. */
dssdev
->
state
=
OMAP_DSS_DISPLAY_ACTIVE
;
err:
mutex_unlock
(
&
hdmi
.
lock
);
return
r
;
}
static
void
hdmi_get_timings
(
struct
omap_dss_device
*
dssdev
,
struct
omap_video_timings
*
timings
)
{
...
...
@@ -379,20 +327,22 @@ static int hdmi_check_timings(struct omap_dss_device *dssdev,
static
int
hdmi_read_edid
(
struct
omap_dss_device
*
dssdev
,
u8
*
buf
,
int
len
)
{
int
r
;
bool
need_enable
;
mutex_lock
(
&
hdmi
.
lock
);
if
(
dssdev
->
state
!=
OMAP_DSS_DISPLAY_ACTIVE
)
{
r
=
omapdss_hdmi_display_enable
(
dssdev
);
need_enable
=
dssdev
->
state
==
OMAP_DSS_DISPLAY_DISABLED
;
if
(
need_enable
)
{
r
=
omapdss_hdmi_core_enable
(
dssdev
);
if
(
r
)
goto
err
;
}
r
=
omapdss_hdmi_read_edid
(
buf
,
len
);
if
(
dssdev
->
state
==
OMAP_DSS_DISPLAY_DISABLED
||
dssdev
->
state
==
OMAP_DSS_DISPLAY_SUSPENDED
)
omapdss_hdmi_display_disable
(
dssdev
);
if
(
need_enable
)
omapdss_hdmi_core_disable
(
dssdev
);
err:
mutex_unlock
(
&
hdmi
.
lock
);
...
...
@@ -402,20 +352,22 @@ static int hdmi_read_edid(struct omap_dss_device *dssdev, u8 *buf, int len)
static
bool
hdmi_detect
(
struct
omap_dss_device
*
dssdev
)
{
int
r
;
bool
need_enable
;
mutex_lock
(
&
hdmi
.
lock
);
if
(
dssdev
->
state
!=
OMAP_DSS_DISPLAY_ACTIVE
)
{
r
=
omapdss_hdmi_display_enable
(
dssdev
);
need_enable
=
dssdev
->
state
==
OMAP_DSS_DISPLAY_DISABLED
;
if
(
need_enable
)
{
r
=
omapdss_hdmi_core_enable
(
dssdev
);
if
(
r
)
goto
err
;
}
r
=
omapdss_hdmi_detect
();
if
(
dssdev
->
state
==
OMAP_DSS_DISPLAY_DISABLED
||
dssdev
->
state
==
OMAP_DSS_DISPLAY_SUSPENDED
)
omapdss_hdmi_display_disable
(
dssdev
);
if
(
need_enable
)
omapdss_hdmi_core_disable
(
dssdev
);
err:
mutex_unlock
(
&
hdmi
.
lock
);
...
...
@@ -427,8 +379,6 @@ static struct omap_dss_driver hdmi_driver = {
.
remove
=
hdmi_panel_remove
,
.
enable
=
hdmi_panel_enable
,
.
disable
=
hdmi_panel_disable
,
.
suspend
=
hdmi_panel_suspend
,
.
resume
=
hdmi_panel_resume
,
.
get_timings
=
hdmi_get_timings
,
.
set_timings
=
hdmi_set_timings
,
.
check_timings
=
hdmi_check_timings
,
...
...
drivers/video/omap2/dss/rfbi.c
浏览文件 @
9296dbd7
...
...
@@ -950,7 +950,7 @@ static int __init rfbi_init_display(struct omap_dss_device *dssdev)
static
struct
omap_dss_device
*
__init
rfbi_find_dssdev
(
struct
platform_device
*
pdev
)
{
struct
omap_dss_board_info
*
pdata
=
pdev
->
dev
.
platform_data
;
const
char
*
def_disp_name
=
dss_get_default_display_name
();
const
char
*
def_disp_name
=
omap
dss_get_default_display_name
();
struct
omap_dss_device
*
def_dssdev
;
int
i
;
...
...
drivers/video/omap2/dss/sdi.c
浏览文件 @
9296dbd7
...
...
@@ -205,7 +205,7 @@ static int __init sdi_init_display(struct omap_dss_device *dssdev)
static
struct
omap_dss_device
*
__init
sdi_find_dssdev
(
struct
platform_device
*
pdev
)
{
struct
omap_dss_board_info
*
pdata
=
pdev
->
dev
.
platform_data
;
const
char
*
def_disp_name
=
dss_get_default_display_name
();
const
char
*
def_disp_name
=
omap
dss_get_default_display_name
();
struct
omap_dss_device
*
def_dssdev
;
int
i
;
...
...
drivers/video/omap2/dss/venc.c
浏览文件 @
9296dbd7
...
...
@@ -744,7 +744,7 @@ static void venc_put_clocks(void)
static
struct
omap_dss_device
*
__init
venc_find_dssdev
(
struct
platform_device
*
pdev
)
{
struct
omap_dss_board_info
*
pdata
=
pdev
->
dev
.
platform_data
;
const
char
*
def_disp_name
=
dss_get_default_display_name
();
const
char
*
def_disp_name
=
omap
dss_get_default_display_name
();
struct
omap_dss_device
*
def_dssdev
;
int
i
;
...
...
drivers/video/omap2/dss/venc_panel.c
浏览文件 @
9296dbd7
...
...
@@ -157,12 +157,6 @@ static void venc_panel_disable(struct omap_dss_device *dssdev)
if
(
dssdev
->
state
==
OMAP_DSS_DISPLAY_DISABLED
)
goto
end
;
if
(
dssdev
->
state
==
OMAP_DSS_DISPLAY_SUSPENDED
)
{
/* suspended is the same as disabled with venc */
dssdev
->
state
=
OMAP_DSS_DISPLAY_DISABLED
;
goto
end
;
}
omapdss_venc_display_disable
(
dssdev
);
dssdev
->
state
=
OMAP_DSS_DISPLAY_DISABLED
;
...
...
@@ -170,17 +164,6 @@ static void venc_panel_disable(struct omap_dss_device *dssdev)
mutex_unlock
(
&
venc_panel
.
lock
);
}
static
int
venc_panel_suspend
(
struct
omap_dss_device
*
dssdev
)
{
venc_panel_disable
(
dssdev
);
return
0
;
}
static
int
venc_panel_resume
(
struct
omap_dss_device
*
dssdev
)
{
return
venc_panel_enable
(
dssdev
);
}
static
void
venc_panel_set_timings
(
struct
omap_dss_device
*
dssdev
,
struct
omap_video_timings
*
timings
)
{
...
...
@@ -222,8 +205,6 @@ static struct omap_dss_driver venc_driver = {
.
enable
=
venc_panel_enable
,
.
disable
=
venc_panel_disable
,
.
suspend
=
venc_panel_suspend
,
.
resume
=
venc_panel_resume
,
.
get_resolution
=
omapdss_default_get_resolution
,
.
get_recommended_bpp
=
omapdss_default_get_recommended_bpp
,
...
...
drivers/video/omap2/omapfb/omapfb-main.c
浏览文件 @
9296dbd7
...
...
@@ -1258,11 +1258,10 @@ static int omapfb_blank(int blank, struct fb_info *fbi)
switch
(
blank
)
{
case
FB_BLANK_UNBLANK
:
if
(
display
->
state
!=
OMAP_DSS_DISPLAY_SUSPENDED
)
if
(
display
->
state
==
OMAP_DSS_DISPLAY_ACTIVE
)
goto
exit
;
if
(
display
->
driver
->
resume
)
r
=
display
->
driver
->
resume
(
display
);
r
=
display
->
driver
->
enable
(
display
);
if
((
display
->
caps
&
OMAP_DSS_DISPLAY_CAP_MANUAL_UPDATE
)
&&
d
->
update_mode
==
OMAPFB_AUTO_UPDATE
&&
...
...
@@ -1283,8 +1282,7 @@ static int omapfb_blank(int blank, struct fb_info *fbi)
if
(
d
->
auto_update_work_enabled
)
omapfb_stop_auto_update
(
fbdev
,
display
);
if
(
display
->
driver
->
suspend
)
r
=
display
->
driver
->
suspend
(
display
);
display
->
driver
->
disable
(
display
);
break
;
...
...
@@ -2258,7 +2256,7 @@ static int omapfb_find_best_mode(struct omap_dss_device *display,
{
struct
fb_monspecs
*
specs
;
u8
*
edid
;
int
r
,
i
,
best_
xres
,
best_
idx
,
len
;
int
r
,
i
,
best_idx
,
len
;
if
(
!
display
->
driver
->
read_edid
)
return
-
ENODEV
;
...
...
@@ -2274,10 +2272,6 @@ static int omapfb_find_best_mode(struct omap_dss_device *display,
fb_edid_to_monspecs
(
edid
,
specs
);
if
(
edid
[
126
]
>
0
)
fb_edid_add_monspecs
(
edid
+
0x80
,
specs
);
best_xres
=
0
;
best_idx
=
-
1
;
for
(
i
=
0
;
i
<
specs
->
modedb_len
;
++
i
)
{
...
...
@@ -2293,16 +2287,20 @@ static int omapfb_find_best_mode(struct omap_dss_device *display,
if
(
m
->
xres
==
2880
||
m
->
xres
==
1440
)
continue
;
if
(
m
->
vmode
&
FB_VMODE_INTERLACED
||
m
->
vmode
&
FB_VMODE_DOUBLE
)
continue
;
fb_videomode_to_omap_timings
(
m
,
display
,
&
t
);
r
=
display
->
driver
->
check_timings
(
display
,
&
t
);
if
(
r
==
0
&&
best_xres
<
m
->
xres
)
{
best_xres
=
m
->
xres
;
if
(
r
==
0
)
{
best_idx
=
i
;
break
;
}
}
if
(
best_
xres
==
0
)
{
if
(
best_
idx
==
-
1
)
{
r
=
-
ENOENT
;
goto
err2
;
}
...
...
@@ -2371,15 +2369,52 @@ static int omapfb_init_display(struct omapfb2_device *fbdev,
return
0
;
}
static
int
omapfb_init_connections
(
struct
omapfb2_device
*
fbdev
,
struct
omap_dss_device
*
dssdev
)
{
int
i
,
r
;
struct
omap_overlay_manager
*
mgr
=
NULL
;
for
(
i
=
0
;
i
<
fbdev
->
num_managers
;
i
++
)
{
mgr
=
fbdev
->
managers
[
i
];
if
(
dssdev
->
channel
==
mgr
->
id
)
break
;
}
if
(
i
==
fbdev
->
num_managers
)
return
-
ENODEV
;
if
(
mgr
->
output
)
mgr
->
unset_output
(
mgr
);
r
=
mgr
->
set_output
(
mgr
,
dssdev
->
output
);
if
(
r
)
return
r
;
for
(
i
=
0
;
i
<
fbdev
->
num_overlays
;
i
++
)
{
struct
omap_overlay
*
ovl
=
fbdev
->
overlays
[
i
];
if
(
ovl
->
manager
)
ovl
->
unset_manager
(
ovl
);
r
=
ovl
->
set_manager
(
ovl
,
mgr
);
if
(
r
)
dev_warn
(
fbdev
->
dev
,
"failed to connect overlay %s to manager %s
\n
"
,
ovl
->
name
,
mgr
->
name
);
}
return
0
;
}
static
int
__init
omapfb_probe
(
struct
platform_device
*
pdev
)
{
struct
omapfb2_device
*
fbdev
=
NULL
;
int
r
=
0
;
int
i
;
struct
omap_overlay
*
ovl
;
struct
omap_dss_device
*
def_display
;
struct
omap_dss_device
*
dssdev
;
struct
omap_dss_device
*
ovl_device
;
DBG
(
"omapfb_probe
\n
"
);
...
...
@@ -2447,15 +2482,33 @@ static int __init omapfb_probe(struct platform_device *pdev)
for
(
i
=
0
;
i
<
fbdev
->
num_managers
;
i
++
)
fbdev
->
managers
[
i
]
=
omap_dss_get_overlay_manager
(
i
);
/* gfx overlay should be the default one. find a display
* connected to that, and use it as default display */
ovl
=
omap_dss_get_overlay
(
0
);
ovl_device
=
ovl
->
get_device
(
ovl
);
if
(
ovl_device
)
{
def_display
=
ovl_device
;
}
else
{
dev_warn
(
&
pdev
->
dev
,
"cannot find default display
\n
"
);
def_display
=
NULL
;
def_display
=
NULL
;
for
(
i
=
0
;
i
<
fbdev
->
num_displays
;
++
i
)
{
struct
omap_dss_device
*
dssdev
;
const
char
*
def_name
;
def_name
=
omapdss_get_default_display_name
();
dssdev
=
fbdev
->
displays
[
i
].
dssdev
;
if
(
def_name
==
NULL
||
(
dssdev
->
name
&&
strcmp
(
def_name
,
dssdev
->
name
)
==
0
))
{
def_display
=
dssdev
;
break
;
}
}
if
(
def_display
==
NULL
)
{
dev_err
(
fbdev
->
dev
,
"failed to find default display
\n
"
);
r
=
-
EINVAL
;
goto
cleanup
;
}
r
=
omapfb_init_connections
(
fbdev
,
def_display
);
if
(
r
)
{
dev_err
(
fbdev
->
dev
,
"failed to init overlay connections
\n
"
);
goto
cleanup
;
}
if
(
def_mode
&&
strlen
(
def_mode
)
>
0
)
{
...
...
include/video/omapdss.h
浏览文件 @
9296dbd7
...
...
@@ -158,7 +158,6 @@ enum omap_display_caps {
enum
omap_dss_display_state
{
OMAP_DSS_DISPLAY_DISABLED
=
0
,
OMAP_DSS_DISPLAY_ACTIVE
,
OMAP_DSS_DISPLAY_SUSPENDED
,
};
enum
omap_dss_audio_state
{
...
...
@@ -682,8 +681,6 @@ struct omap_dss_driver {
int
(
*
enable
)(
struct
omap_dss_device
*
display
);
void
(
*
disable
)(
struct
omap_dss_device
*
display
);
int
(
*
suspend
)(
struct
omap_dss_device
*
display
);
int
(
*
resume
)(
struct
omap_dss_device
*
display
);
int
(
*
run_test
)(
struct
omap_dss_device
*
display
,
int
test
);
int
(
*
update
)(
struct
omap_dss_device
*
dssdev
,
...
...
@@ -741,6 +738,8 @@ struct omap_dss_driver {
};
enum
omapdss_version
omapdss_get_version
(
void
);
int
omap_dss_register_driver
(
struct
omap_dss_driver
*
);
void
omap_dss_unregister_driver
(
struct
omap_dss_driver
*
);
...
...
@@ -750,6 +749,7 @@ void omap_dss_put_device(struct omap_dss_device *dssdev);
struct
omap_dss_device
*
omap_dss_get_next_device
(
struct
omap_dss_device
*
from
);
struct
omap_dss_device
*
omap_dss_find_device
(
void
*
data
,
int
(
*
match
)(
struct
omap_dss_device
*
dssdev
,
void
*
data
));
const
char
*
omapdss_get_default_display_name
(
void
);
int
omap_dss_start_device
(
struct
omap_dss_device
*
dssdev
);
void
omap_dss_stop_device
(
struct
omap_dss_device
*
dssdev
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录