Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
5024c54b
K
Kernel
项目概览
openeuler
/
Kernel
接近 2 年 前同步成功
通知
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看板
提交
5024c54b
编写于
8月 03, 2011
作者:
B
Ben Skeggs
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
drm/nva3/backlight: add suppport for newer style backlight regs
Signed-off-by:
N
Ben Skeggs
<
bskeggs@redhat.com
>
上级
09461459
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
64 addition
and
12 deletion
+64
-12
drivers/gpu/drm/nouveau/nouveau_backlight.c
drivers/gpu/drm/nouveau/nouveau_backlight.c
+58
-9
drivers/gpu/drm/nouveau/nouveau_reg.h
drivers/gpu/drm/nouveau/nouveau_reg.h
+6
-3
未找到文件。
drivers/gpu/drm/nouveau/nouveau_backlight.c
浏览文件 @
5024c54b
...
@@ -103,7 +103,8 @@ nv50_get_intensity(struct backlight_device *bd)
...
@@ -103,7 +103,8 @@ nv50_get_intensity(struct backlight_device *bd)
u32
div
=
1025
;
u32
div
=
1025
;
u32
val
;
u32
val
;
val
=
nv_rd32
(
dev
,
NV50_PDISPLAY_SOR_BACKLIGHT
+
(
or
*
0x800
));
val
=
nv_rd32
(
dev
,
NV50_PDISP_SOR_PWM_CTL
(
or
));
val
&=
NV50_PDISP_SOR_PWM_CTL_VAL
;
return
((
val
*
100
)
+
(
div
/
2
))
/
div
;
return
((
val
*
100
)
+
(
div
/
2
))
/
div
;
}
}
...
@@ -116,8 +117,8 @@ nv50_set_intensity(struct backlight_device *bd)
...
@@ -116,8 +117,8 @@ nv50_set_intensity(struct backlight_device *bd)
u32
div
=
1025
;
u32
div
=
1025
;
u32
val
=
(
bd
->
props
.
brightness
*
div
)
/
100
;
u32
val
=
(
bd
->
props
.
brightness
*
div
)
/
100
;
nv_wr32
(
dev
,
NV50_PDISP
LAY_SOR_BACKLIGHT
+
(
or
*
0x800
),
nv_wr32
(
dev
,
NV50_PDISP
_SOR_PWM_CTL
(
or
),
val
|
NV50_PDISPLAY_SOR_BACKLIGHT_ENABLE
);
NV50_PDISP_SOR_PWM_CTL_NEW
|
val
);
return
0
;
return
0
;
}
}
...
@@ -127,6 +128,49 @@ static const struct backlight_ops nv50_bl_ops = {
...
@@ -127,6 +128,49 @@ static const struct backlight_ops nv50_bl_ops = {
.
update_status
=
nv50_set_intensity
,
.
update_status
=
nv50_set_intensity
,
};
};
static
int
nva3_get_intensity
(
struct
backlight_device
*
bd
)
{
struct
nouveau_encoder
*
nv_encoder
=
bl_get_data
(
bd
);
struct
drm_device
*
dev
=
nv_encoder
->
base
.
base
.
dev
;
int
or
=
nv_encoder
->
or
;
u32
div
,
val
;
div
=
nv_rd32
(
dev
,
NV50_PDISP_SOR_PWM_DIV
(
or
));
val
=
nv_rd32
(
dev
,
NV50_PDISP_SOR_PWM_CTL
(
or
));
val
&=
NVA3_PDISP_SOR_PWM_CTL_VAL
;
if
(
div
&&
div
>=
val
)
return
((
val
*
100
)
+
(
div
/
2
))
/
div
;
return
100
;
}
static
int
nva3_set_intensity
(
struct
backlight_device
*
bd
)
{
struct
nouveau_encoder
*
nv_encoder
=
bl_get_data
(
bd
);
struct
drm_device
*
dev
=
nv_encoder
->
base
.
base
.
dev
;
int
or
=
nv_encoder
->
or
;
u32
div
,
val
;
div
=
nv_rd32
(
dev
,
NV50_PDISP_SOR_PWM_DIV
(
or
));
val
=
(
bd
->
props
.
brightness
*
div
)
/
100
;
if
(
div
)
{
nv_wr32
(
dev
,
NV50_PDISP_SOR_PWM_CTL
(
or
),
val
|
NV50_PDISP_SOR_PWM_CTL_NEW
|
NVA3_PDISP_SOR_PWM_CTL_UNK
);
return
0
;
}
return
-
EINVAL
;
}
static
const
struct
backlight_ops
nva3_bl_ops
=
{
.
options
=
BL_CORE_SUSPENDRESUME
,
.
get_brightness
=
nva3_get_intensity
,
.
update_status
=
nva3_set_intensity
,
};
static
int
static
int
nv50_backlight_init
(
struct
drm_connector
*
connector
)
nv50_backlight_init
(
struct
drm_connector
*
connector
)
{
{
...
@@ -135,7 +179,7 @@ nv50_backlight_init(struct drm_connector *connector)
...
@@ -135,7 +179,7 @@ nv50_backlight_init(struct drm_connector *connector)
struct
nouveau_encoder
*
nv_encoder
;
struct
nouveau_encoder
*
nv_encoder
;
struct
backlight_properties
props
;
struct
backlight_properties
props
;
struct
backlight_device
*
bd
;
struct
backlight_device
*
bd
;
int
or
;
const
struct
backlight_ops
*
ops
;
nv_encoder
=
find_encoder
(
connector
,
OUTPUT_LVDS
);
nv_encoder
=
find_encoder
(
connector
,
OUTPUT_LVDS
);
if
(
!
nv_encoder
)
{
if
(
!
nv_encoder
)
{
...
@@ -144,21 +188,26 @@ nv50_backlight_init(struct drm_connector *connector)
...
@@ -144,21 +188,26 @@ nv50_backlight_init(struct drm_connector *connector)
return
-
ENODEV
;
return
-
ENODEV
;
}
}
or
=
nv_encoder
->
or
;
if
(
!
nv_rd32
(
dev
,
NV50_PDISP_SOR_PWM_CTL
(
nv_encoder
->
or
)))
if
(
!
nv_rd32
(
dev
,
NV50_PDISPLAY_SOR_BACKLIGHT
+
(
or
*
0x800
)))
return
0
;
return
0
;
if
(
dev_priv
->
chipset
<=
0xa0
||
dev_priv
->
chipset
==
0xaa
||
dev_priv
->
chipset
==
0xac
)
ops
=
&
nv50_bl_ops
;
else
ops
=
&
nva3_bl_ops
;
memset
(
&
props
,
0
,
sizeof
(
struct
backlight_properties
));
memset
(
&
props
,
0
,
sizeof
(
struct
backlight_properties
));
props
.
type
=
BACKLIGHT_RAW
;
props
.
type
=
BACKLIGHT_RAW
;
props
.
max_brightness
=
100
;
props
.
max_brightness
=
100
;
bd
=
backlight_device_register
(
"nv_backlight"
,
&
connector
->
kdev
,
bd
=
backlight_device_register
(
"nv_backlight"
,
&
connector
->
kdev
,
nv_encoder
,
&
nv50_bl_
ops
,
&
props
);
nv_encoder
,
ops
,
&
props
);
if
(
IS_ERR
(
bd
))
if
(
IS_ERR
(
bd
))
return
PTR_ERR
(
bd
);
return
PTR_ERR
(
bd
);
dev_priv
->
backlight
=
bd
;
dev_priv
->
backlight
=
bd
;
bd
->
props
.
brightness
=
nv50_get_intensity
(
bd
);
bd
->
props
.
brightness
=
bd
->
ops
->
get_brightness
(
bd
);
backlight_update_status
(
bd
);
backlight_update_status
(
bd
);
return
0
;
return
0
;
}
}
...
...
drivers/gpu/drm/nouveau/nouveau_reg.h
浏览文件 @
5024c54b
...
@@ -826,9 +826,12 @@
...
@@ -826,9 +826,12 @@
#define NV50_PDISPLAY_SOR_DPMS_STATE_ACTIVE 0x00030000
#define NV50_PDISPLAY_SOR_DPMS_STATE_ACTIVE 0x00030000
#define NV50_PDISPLAY_SOR_DPMS_STATE_BLANKED 0x00080000
#define NV50_PDISPLAY_SOR_DPMS_STATE_BLANKED 0x00080000
#define NV50_PDISPLAY_SOR_DPMS_STATE_WAIT 0x10000000
#define NV50_PDISPLAY_SOR_DPMS_STATE_WAIT 0x10000000
#define NV50_PDISPLAY_SOR_BACKLIGHT 0x0061c084
#define NV50_PDISP_SOR_PWM_DIV(i) (0x0061c080 + (i) * 0x800)
#define NV50_PDISPLAY_SOR_BACKLIGHT_ENABLE 0x80000000
#define NV50_PDISP_SOR_PWM_CTL(i) (0x0061c084 + (i) * 0x800)
#define NV50_PDISPLAY_SOR_BACKLIGHT_LEVEL 0x00000fff
#define NV50_PDISP_SOR_PWM_CTL_NEW 0x80000000
#define NVA3_PDISP_SOR_PWM_CTL_UNK 0x40000000
#define NV50_PDISP_SOR_PWM_CTL_VAL 0x000007ff
#define NVA3_PDISP_SOR_PWM_CTL_VAL 0x00ffffff
#define NV50_SOR_DP_CTRL(i, l) (0x0061c10c + (i) * 0x800 + (l) * 0x80)
#define NV50_SOR_DP_CTRL(i, l) (0x0061c10c + (i) * 0x800 + (l) * 0x80)
#define NV50_SOR_DP_CTRL_ENABLED 0x00000001
#define NV50_SOR_DP_CTRL_ENABLED 0x00000001
#define NV50_SOR_DP_CTRL_ENHANCED_FRAME_ENABLED 0x00004000
#define NV50_SOR_DP_CTRL_ENHANCED_FRAME_ENABLED 0x00004000
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录