Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- sys/dev/drm2/i915/i915_debug.c.orig (revision 277487)
- +++ sys/dev/drm2/i915/i915_debug.c (working copy)
- @@ -1590,6 +1590,40 @@
- return (0);
- }
- +static int
- +i915_backlight(SYSCTL_HANDLER_ARGS)
- +{
- + struct drm_device *dev;
- + drm_i915_private_t *dev_priv;
- + int error;
- + u32 val, min, max;
- +
- + dev = arg1;
- + dev_priv = dev->dev_private;
- + if(dev_priv == NULL)
- + return (EBUSY);
- + DRM_LOCK(dev);
- + val = intel_panel_get_backlight(dev);
- + max = intel_panel_get_max_backlight(dev);
- + DRM_UNLOCK(dev);
- +
- + // XXX specific devices, works fine on ivy bridge though
- + val = 0.5 + val * 100.0 / max;
- + error = sysctl_handle_int(oidp, &val, 0, req);
- + if (error || !req->newptr)
- + return (error);
- + min = 0.5 + 0.5 * max / 100.0; // 0.5%
- + val = 0.5 + val * max / 100.0;
- + if (val < min)
- + val = min;
- + else if (val > max)
- + val = max;
- + DRM_LOCK(dev);
- + intel_panel_set_backlight(dev, val);
- + DRM_UNLOCK(dev);
- + return (0);
- +}
- +
- static struct i915_info_sysctl_list {
- const char *name;
- int (*ptr)(struct drm_device *dev, struct sbuf *m, void *data);
- @@ -1753,7 +1787,12 @@
- CTLFLAG_RW, &i915_intr_pf, 0, NULL);
- if (oid == NULL)
- return (ENOMEM);
- -
- + oid = SYSCTL_ADD_PROC(ctx, SYSCTL_CHILDREN(top), OID_AUTO,
- + "i915_backlight", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, dev,
- + 0, i915_backlight, "I", NULL);
- + if (oid == NULL)
- + return (ENOMEM);
- +
- error = drm_add_busid_modesetting(dev, ctx, top);
- if (error != 0)
- return (error);
Add Comment
Please, Sign In to add comment