Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
xcap
xcap-capability-linux
Commits
9232969e
Commit
9232969e
authored
Jul 28, 2011
by
Ben Skeggs
Browse files
drm/nv40/pm: implement first type of pwm fanspeed funcs
Signed-off-by:
Ben Skeggs
<
bskeggs@redhat.com
>
parent
0c101461
Changes
3
Hide whitespace changes
Inline
Side-by-side
drivers/gpu/drm/nouveau/nouveau_pm.h
View file @
9232969e
...
...
@@ -56,6 +56,8 @@ void nv04_pm_clock_set(struct drm_device *, void *);
int
nv40_pm_clocks_get
(
struct
drm_device
*
,
struct
nouveau_pm_level
*
);
void
*
nv40_pm_clocks_pre
(
struct
drm_device
*
,
struct
nouveau_pm_level
*
);
void
nv40_pm_clocks_set
(
struct
drm_device
*
,
void
*
);
int
nv40_pm_fanspeed_get
(
struct
drm_device
*
);
int
nv40_pm_fanspeed_set
(
struct
drm_device
*
,
int
percent
);
/* nv50_pm.c */
int
nv50_pm_clock_get
(
struct
drm_device
*
,
u32
id
);
...
...
drivers/gpu/drm/nouveau/nouveau_state.c
View file @
9232969e
...
...
@@ -292,6 +292,15 @@ static int nouveau_init_engine_ptrs(struct drm_device *dev)
engine
->
pm
.
voltage_get
=
nouveau_voltage_gpio_get
;
engine
->
pm
.
voltage_set
=
nouveau_voltage_gpio_set
;
engine
->
pm
.
temp_get
=
nv40_temp_get
;
switch
(
dev_priv
->
chipset
)
{
case
0x40
:
case
0x49
:
engine
->
pm
.
fanspeed_get
=
nv40_pm_fanspeed_get
;
engine
->
pm
.
fanspeed_set
=
nv40_pm_fanspeed_set
;
break
;
default:
break
;
}
engine
->
vram
.
init
=
nouveau_mem_detect
;
engine
->
vram
.
takedown
=
nouveau_stub_takedown
;
engine
->
vram
.
flags_valid
=
nouveau_mem_flags_valid
;
...
...
drivers/gpu/drm/nouveau/nv40_pm.c
View file @
9232969e
...
...
@@ -346,3 +346,29 @@ resume:
kfree
(
info
);
}
int
nv40_pm_fanspeed_get
(
struct
drm_device
*
dev
)
{
u32
reg
=
nv_rd32
(
dev
,
0x0010f0
);
if
(
reg
&
0x80000000
)
{
u32
duty
=
(
reg
&
0x7fff0000
)
>>
16
;
u32
divs
=
(
reg
&
0x00007fff
);
if
(
divs
&&
divs
>=
duty
)
return
((
divs
-
duty
)
*
100
)
/
divs
;
}
return
100
;
}
int
nv40_pm_fanspeed_set
(
struct
drm_device
*
dev
,
int
percent
)
{
struct
drm_nouveau_private
*
dev_priv
=
dev
->
dev_private
;
struct
nouveau_pm_engine
*
pm
=
&
dev_priv
->
engine
.
pm
;
u32
divs
=
pm
->
pwm_divisor
;
u32
duty
=
((
100
-
percent
)
*
divs
)
/
100
;
nv_wr32
(
dev
,
0x0010f0
,
0x80000000
|
(
duty
<<
16
)
|
divs
);
return
0
;
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment