brintos

brintos / linux-shallow public Read only

0
0
Text · 2.8 KiB · 8711a7a Raw
118 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2/*3 * GMA500 Backlight Interface4 *5 * Copyright (c) 2009-2011, Intel Corporation.6 *7 * Authors: Eric Knopp8 */9 10#include <linux/backlight.h>11 12#include <acpi/video.h>13 14#include "psb_drv.h"15#include "psb_intel_reg.h"16#include "psb_intel_drv.h"17#include "intel_bios.h"18#include "power.h"19 20void gma_backlight_enable(struct drm_device *dev)21{22	struct drm_psb_private *dev_priv = to_drm_psb_private(dev);23 24	dev_priv->backlight_enabled = true;25	dev_priv->ops->backlight_set(dev, dev_priv->backlight_level);26}27 28void gma_backlight_disable(struct drm_device *dev)29{30	struct drm_psb_private *dev_priv = to_drm_psb_private(dev);31 32	dev_priv->backlight_enabled = false;33	dev_priv->ops->backlight_set(dev, 0);34}35 36void gma_backlight_set(struct drm_device *dev, int v)37{38	struct drm_psb_private *dev_priv = to_drm_psb_private(dev);39 40	dev_priv->backlight_level = v;41	if (dev_priv->backlight_enabled)42		dev_priv->ops->backlight_set(dev, v);43}44 45static int gma_backlight_get_brightness(struct backlight_device *bd)46{47	struct drm_device *dev = bl_get_data(bd);48	struct drm_psb_private *dev_priv = to_drm_psb_private(dev);49 50	if (dev_priv->ops->backlight_get)51		return dev_priv->ops->backlight_get(dev);52 53	return dev_priv->backlight_level;54}55 56static int gma_backlight_update_status(struct backlight_device *bd)57{58	struct drm_device *dev = bl_get_data(bd);59	int level = backlight_get_brightness(bd);60 61	/* Percentage 1-100% being valid */62	if (level < 1)63		level = 1;64 65	gma_backlight_set(dev, level);66	return 0;67}68 69static const struct backlight_ops gma_backlight_ops __maybe_unused = {70	.get_brightness = gma_backlight_get_brightness,71	.update_status  = gma_backlight_update_status,72};73 74int gma_backlight_init(struct drm_device *dev)75{76	struct drm_psb_private *dev_priv = to_drm_psb_private(dev);77	struct backlight_properties props __maybe_unused = {};78	int ret;79 80	dev_priv->backlight_enabled = true;81	dev_priv->backlight_level = 100;82 83	ret = dev_priv->ops->backlight_init(dev);84	if (ret)85		return ret;86 87	if (!acpi_video_backlight_use_native()) {88		drm_info(dev, "Skipping %s backlight registration\n",89			 dev_priv->ops->backlight_name);90		return 0;91	}92 93#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE94	props.brightness = dev_priv->backlight_level;95	props.max_brightness = PSB_MAX_BRIGHTNESS;96	props.type = BACKLIGHT_RAW;97 98	dev_priv->backlight_device =99		backlight_device_register(dev_priv->ops->backlight_name,100					  dev->dev, dev,101					  &gma_backlight_ops, &props);102	if (IS_ERR(dev_priv->backlight_device))103		return PTR_ERR(dev_priv->backlight_device);104#endif105 106	return 0;107}108 109void gma_backlight_exit(struct drm_device *dev)110{111#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE112	struct drm_psb_private *dev_priv = to_drm_psb_private(dev);113 114	if (dev_priv->backlight_device)115		backlight_device_unregister(dev_priv->backlight_device);116#endif117}118