From 7238eca4cf18a5bba8679afc8c71a274e264f82e Mon Sep 17 00:00:00 2001 From: Ben Skeggs Date: Fri, 13 Jun 2014 14:17:09 +1000 Subject: drm/nouveau: expose pstate selection per-power source in sysfs echo ac:id >> pstate # select mode when on mains power echo dc:id >> pstate # select mode when on battery echo id >> pstate # select mode for both Signed-off-by: Ben Skeggs --- drivers/gpu/drm/nouveau/core/engine/device/ctrl.c | 25 +++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'drivers/gpu/drm/nouveau/core/engine/device') diff --git a/drivers/gpu/drm/nouveau/core/engine/device/ctrl.c b/drivers/gpu/drm/nouveau/core/engine/device/ctrl.c index 754fc1da6a0..fb546f3a1af 100644 --- a/drivers/gpu/drm/nouveau/core/engine/device/ctrl.c +++ b/drivers/gpu/drm/nouveau/core/engine/device/ctrl.c @@ -40,15 +40,16 @@ nouveau_control_mthd_pstate_info(struct nouveau_object *object, u32 mthd, return -EINVAL; if (clk) { - args->count = clk->state_nr; - if (clk->pwrsrc) - args->ustate = clk->ustate_ac; - else - args->ustate = clk->ustate_dc; + args->count = clk->state_nr; + args->ustate_ac = clk->ustate_ac; + args->ustate_dc = clk->ustate_dc; + args->pwrsrc = clk->pwrsrc; args->pstate = clk->pstate; } else { - args->count = 0; - args->ustate = NV_CONTROL_PSTATE_INFO_USTATE_DISABLE; + args->count = 0; + args->ustate_ac = NV_CONTROL_PSTATE_INFO_USTATE_DISABLE; + args->ustate_dc = NV_CONTROL_PSTATE_INFO_USTATE_DISABLE; + args->pwrsrc = -ENOSYS; args->pstate = NV_CONTROL_PSTATE_INFO_PSTATE_UNKNOWN; } @@ -122,11 +123,19 @@ nouveau_control_mthd_pstate_user(struct nouveau_object *object, u32 mthd, { struct nouveau_clock *clk = nouveau_clock(object); struct nv_control_pstate_user *args = data; + int ret = 0; if (size < sizeof(*args) || !clk) return -EINVAL; - return nouveau_clock_ustate(clk, args->state, clk->pwrsrc); + if (args->pwrsrc >= 0) { + ret |= nouveau_clock_ustate(clk, args->ustate, args->pwrsrc); + } else { + ret |= nouveau_clock_ustate(clk, args->ustate, 0); + ret |= nouveau_clock_ustate(clk, args->ustate, 1); + } + + return ret; } struct nouveau_oclass -- cgit v1.2.3-70-g09d2