From patchwork Thu Jul 28 06:05:59 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joonyoung Shim X-Patchwork-Id: 1014502 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by demeter1.kernel.org (8.14.4/8.14.4) with ESMTP id p6S6DPr3031164 for ; Thu, 28 Jul 2011 06:13:45 GMT Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AE9129F72D for ; Wed, 27 Jul 2011 23:13:24 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Thu, 28 Jul 2011 06:13:46 +0000 (UTC) X-Greylist: delayed 601 seconds by postgrey-1.31 at gabe; Wed, 27 Jul 2011 23:13:14 PDT Received: from mailout1.samsung.com (mailout1.samsung.com [203.254.224.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 7446E9E78B for ; Wed, 27 Jul 2011 23:13:14 -0700 (PDT) Received: from epcpsbgm1.samsung.com (mailout1.samsung.com [203.254.224.24]) by mailout1.samsung.com (Oracle Communications Messaging Exchange Server 7u4-19.01 64bit (built Sep 7 2010)) with ESMTP id <0LP1006FH4SH2YB0@mailout1.samsung.com> for dri-devel@lists.freedesktop.org; Thu, 28 Jul 2011 15:03:05 +0900 (KST) X-AuditID: cbfee61a-b7cf0ae000006bc6-f8-4e30fb993979 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm1.samsung.com (MMPCPMTA) with SMTP id 4F.5A.27590.99BF03E4; Thu, 28 Jul 2011 15:03:05 +0900 (KST) Received: from TNRNDGASPAPP1.tn.corp.samsungelectronics.net ([165.213.149.150]) by mmp2.samsung.com (iPlanet Messaging Server 5.2 Patch 2 (built Jul 14 2004)) with ESMTPA id <0LP1002CW4T5YM@mmp2.samsung.com> for dri-devel@lists.freedesktop.org; Thu, 28 Jul 2011 15:03:05 +0900 (KST) Received: from dofmind-linux ([165.213.219.123]) by TNRNDGASPAPP1.tn.corp.samsungelectronics.net with Microsoft SMTPSVC(6.0.3790.4675); Thu, 28 Jul 2011 15:03:25 +0900 Date: Thu, 28 Jul 2011 15:05:59 +0900 From: Joonyoung Shim Subject: [RFC PATCH] DRM: Add drm backlight dpms interface To: dri-devel@lists.freedesktop.org Message-id: <1311833159-32142-1-git-send-email-jy0922.shim@samsung.com> X-Mailer: git-send-email 1.7.1 X-OriginalArrivalTime: 28 Jul 2011 06:03:25.0990 (UTC) FILETIME=[1082C460:01CC4CEC] X-Brightmail-Tracker: AAAAAA== Cc: inki.dae@samsung.com, kyungmin.park@samsung.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org Errors-To: dri-devel-bounces+patchwork-dri-devel=patchwork.kernel.org@lists.freedesktop.org The backlight devices have the ability to control their power levels and it is supported by backlight framework or lcd framework. This helps use to drm the functions to control power levels of the existing backlight framework or lcd framework. Signed-off-by: Joonyoung Shim Signed-off-by: Kyungmin Park --- drivers/gpu/drm/Makefile | 2 +- drivers/gpu/drm/drm_backlight.c | 127 +++++++++++++++++++++++++++++++++++++++ include/drm/drm_backlight.h | 19 ++++++ 3 files changed, 147 insertions(+), 1 deletions(-) create mode 100644 drivers/gpu/drm/drm_backlight.c create mode 100644 include/drm/drm_backlight.h diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile index 89cf05a..d752618 100644 --- a/drivers/gpu/drm/Makefile +++ b/drivers/gpu/drm/Makefile @@ -12,7 +12,7 @@ drm-y := drm_auth.o drm_buffer.o drm_bufs.o drm_cache.o \ drm_platform.o drm_sysfs.o drm_hashtab.o drm_sman.o drm_mm.o \ drm_crtc.o drm_modes.o drm_edid.o \ drm_info.o drm_debugfs.o drm_encoder_slave.o \ - drm_trace_points.o drm_global.o drm_usb.o + drm_trace_points.o drm_global.o drm_usb.o drm_backlight.o drm-$(CONFIG_COMPAT) += drm_ioc32.o diff --git a/drivers/gpu/drm/drm_backlight.c b/drivers/gpu/drm/drm_backlight.c new file mode 100644 index 0000000..83b9e65 --- /dev/null +++ b/drivers/gpu/drm/drm_backlight.c @@ -0,0 +1,127 @@ +/* + * Copyright (C) 2011 Samsung Electronics Co.Ltd + * Author: Joonyoung Shim + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + */ + +#include +#include + +#include "drm_backlight.h" +#include "drm_mode.h" + +static DEFINE_MUTEX(drm_bl_mutex); +static LIST_HEAD(drm_bl_list); + +struct drm_bl_data { + struct device *dev; + struct list_head list; + int type; +}; + +/** + * drm_bl_register(): register device of backlight or lcd to drm backlight + * + * @dev: backlight or lcd device + * @type: type of the device + */ +int drm_bl_register(struct device *dev, int type) +{ + struct drm_bl_data *data; + + switch (type) { + case BL_BACKLIGHT_CLASS: + case BL_LCD_CLASS: + break; + default: + return -EINVAL; + } + + data = kzalloc(sizeof(struct drm_bl_data), GFP_KERNEL); + if (!data) + return -ENOMEM; + + data->dev = dev; + data->type = type; + + mutex_lock(&drm_bl_mutex); + list_add(&data->list, &drm_bl_list); + mutex_unlock(&drm_bl_mutex); + + return 0; +} +EXPORT_SYMBOL_GPL(drm_bl_register); + +/** + * drm_bl_unregister(): unregister previously registered device to drm backlight + * + * @dev: backlight or lcd device + */ +void drm_bl_unregister(struct device *dev) +{ + struct drm_bl_data *data; + + list_for_each_entry(data, &drm_bl_list, list) { + if (data->dev == dev) { + mutex_lock(&drm_bl_mutex); + list_del(&data->list); + mutex_unlock(&drm_bl_mutex); + kfree(data); + break; + } + } +} +EXPORT_SYMBOL_GPL(drm_bl_unregister); + + +/** + * drm_bl_dpms(): control power levels of registered drm backlights + * + * @mode: DPMS mode of DRM + * + * This function is called from dpms function of CRTC or encoder. + */ +void drm_bl_dpms(int mode) +{ + struct drm_bl_data *data; + struct backlight_device *bd; + struct lcd_device *ld; + int blank; + + switch (mode) { + case DRM_MODE_DPMS_ON: + blank = FB_BLANK_UNBLANK; + break; + case DRM_MODE_DPMS_STANDBY: + case DRM_MODE_DPMS_SUSPEND: + case DRM_MODE_DPMS_OFF: + /* TODO */ + default: + blank = FB_BLANK_POWERDOWN; + break; + } + + list_for_each_entry(data, &drm_bl_list, list) { + switch (data->type) { + case BL_BACKLIGHT_CLASS: + bd = container_of(data->dev, struct backlight_device, + dev); + bd->props.power = blank; + bd->props.fb_blank = blank; + backlight_update_status(bd); + break; + case BL_LCD_CLASS: + ld = container_of(data->dev, struct lcd_device, dev); + if (!ld->ops->set_power) + break; + ld->ops->set_power(ld, blank); + break; + } + } +} +EXPORT_SYMBOL_GPL(drm_bl_dpms); diff --git a/include/drm/drm_backlight.h b/include/drm/drm_backlight.h new file mode 100644 index 0000000..a601095 --- /dev/null +++ b/include/drm/drm_backlight.h @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2011 Samsung Electronics Co.Ltd + * Author: Joonyoung Shim + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + */ + +enum drm_bl_class_type { + BL_BACKLIGHT_CLASS, + BL_LCD_CLASS, +}; + +extern int drm_bl_register(struct device *dev, int type); +extern void drm_bl_unregister(struct device *dev); +extern void drm_bl_dpms(int mode);