18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * GMA500 Backlight Interface 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (c) 2009-2011, Intel Corporation. 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * Authors: Eric Knopp 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#include "psb_drv.h" 118c2ecf20Sopenharmony_ci#include "psb_intel_reg.h" 128c2ecf20Sopenharmony_ci#include "psb_intel_drv.h" 138c2ecf20Sopenharmony_ci#include "intel_bios.h" 148c2ecf20Sopenharmony_ci#include "power.h" 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE 178c2ecf20Sopenharmony_cistatic void do_gma_backlight_set(struct drm_device *dev) 188c2ecf20Sopenharmony_ci{ 198c2ecf20Sopenharmony_ci struct drm_psb_private *dev_priv = dev->dev_private; 208c2ecf20Sopenharmony_ci backlight_update_status(dev_priv->backlight_device); 218c2ecf20Sopenharmony_ci} 228c2ecf20Sopenharmony_ci#endif 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_civoid gma_backlight_enable(struct drm_device *dev) 258c2ecf20Sopenharmony_ci{ 268c2ecf20Sopenharmony_ci#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE 278c2ecf20Sopenharmony_ci struct drm_psb_private *dev_priv = dev->dev_private; 288c2ecf20Sopenharmony_ci dev_priv->backlight_enabled = true; 298c2ecf20Sopenharmony_ci if (dev_priv->backlight_device) { 308c2ecf20Sopenharmony_ci dev_priv->backlight_device->props.brightness = dev_priv->backlight_level; 318c2ecf20Sopenharmony_ci do_gma_backlight_set(dev); 328c2ecf20Sopenharmony_ci } 338c2ecf20Sopenharmony_ci#endif 348c2ecf20Sopenharmony_ci} 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_civoid gma_backlight_disable(struct drm_device *dev) 378c2ecf20Sopenharmony_ci{ 388c2ecf20Sopenharmony_ci#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE 398c2ecf20Sopenharmony_ci struct drm_psb_private *dev_priv = dev->dev_private; 408c2ecf20Sopenharmony_ci dev_priv->backlight_enabled = false; 418c2ecf20Sopenharmony_ci if (dev_priv->backlight_device) { 428c2ecf20Sopenharmony_ci dev_priv->backlight_device->props.brightness = 0; 438c2ecf20Sopenharmony_ci do_gma_backlight_set(dev); 448c2ecf20Sopenharmony_ci } 458c2ecf20Sopenharmony_ci#endif 468c2ecf20Sopenharmony_ci} 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_civoid gma_backlight_set(struct drm_device *dev, int v) 498c2ecf20Sopenharmony_ci{ 508c2ecf20Sopenharmony_ci#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE 518c2ecf20Sopenharmony_ci struct drm_psb_private *dev_priv = dev->dev_private; 528c2ecf20Sopenharmony_ci dev_priv->backlight_level = v; 538c2ecf20Sopenharmony_ci if (dev_priv->backlight_device && dev_priv->backlight_enabled) { 548c2ecf20Sopenharmony_ci dev_priv->backlight_device->props.brightness = v; 558c2ecf20Sopenharmony_ci do_gma_backlight_set(dev); 568c2ecf20Sopenharmony_ci } 578c2ecf20Sopenharmony_ci#endif 588c2ecf20Sopenharmony_ci} 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_ciint gma_backlight_init(struct drm_device *dev) 618c2ecf20Sopenharmony_ci{ 628c2ecf20Sopenharmony_ci#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE 638c2ecf20Sopenharmony_ci struct drm_psb_private *dev_priv = dev->dev_private; 648c2ecf20Sopenharmony_ci dev_priv->backlight_enabled = true; 658c2ecf20Sopenharmony_ci return dev_priv->ops->backlight_init(dev); 668c2ecf20Sopenharmony_ci#else 678c2ecf20Sopenharmony_ci return 0; 688c2ecf20Sopenharmony_ci#endif 698c2ecf20Sopenharmony_ci} 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_civoid gma_backlight_exit(struct drm_device *dev) 728c2ecf20Sopenharmony_ci{ 738c2ecf20Sopenharmony_ci#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE 748c2ecf20Sopenharmony_ci struct drm_psb_private *dev_priv = dev->dev_private; 758c2ecf20Sopenharmony_ci if (dev_priv->backlight_device) { 768c2ecf20Sopenharmony_ci dev_priv->backlight_device->props.brightness = 0; 778c2ecf20Sopenharmony_ci backlight_update_status(dev_priv->backlight_device); 788c2ecf20Sopenharmony_ci backlight_device_unregister(dev_priv->backlight_device); 798c2ecf20Sopenharmony_ci } 808c2ecf20Sopenharmony_ci#endif 818c2ecf20Sopenharmony_ci} 82