From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.4 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5910BC83004 for ; Wed, 29 Apr 2020 14:13:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2DA8A2083B for ; Wed, 29 Apr 2020 14:13:46 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="QipFXpFv" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726949AbgD2ONp (ORCPT ); Wed, 29 Apr 2020 10:13:45 -0400 Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120]:28378 "EHLO us-smtp-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726937AbgD2ONp (ORCPT ); Wed, 29 Apr 2020 10:13:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1588169622; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1wYPs6TSNNxaxWMEB4zQHE/cQ8KW0LVX2QXVNewypBY=; b=QipFXpFvWdR74aeQJhLTdCexAovpkJPQlm8qKm4CYTYekTVZbsWcP1KpWXnZhJU2tSEAnq XyNT+ZqZ5GkY+JeNLPDY8rJvSDJH9puhFzNdR5zMrEpbkNrQuJlEtbrnk+VbdrZfqBvYoE 3sMHv0kEkbg6k+PHErrLPw4PVQ6VzzE= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-114--zkcQxxaPH6VpSO5Fia54w-1; Wed, 29 Apr 2020 10:13:30 -0400 X-MC-Unique: -zkcQxxaPH6VpSO5Fia54w-1 Received: by mail-wr1-f69.google.com with SMTP id r11so1783864wrx.21 for ; Wed, 29 Apr 2020 07:13:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=1wYPs6TSNNxaxWMEB4zQHE/cQ8KW0LVX2QXVNewypBY=; b=CydnVRb92vvFjDucdjcD8eAXwpROL5HKqZzd7q6d9CQB+1lJQR/Mt4LkO9ADIA4ApO nx6KKXhdBRdYeu5KSmXmrUJXeTRtZ9G8rJWV1dD2l1/PMGWjb5hG5M1s+FB0RJcYcm4y Egp2KcsH+LXWtzd4i0rqYhbs7QJcFBP1f9OF2euGjCng/zi4Kqy9ijMyuJ96Sy/O6A7s 4uOUUIoes5fjF/bStKaFCjQspmWgCgWa2RHrMHw7NjSx6+gIXM3GEqwyr3USXmZIIZxv ymSmaiF/IPaDqLUvwG7OVOw9Ez+jbuMNuituP0gzHQtFkT2VajZJiXpeEur6wOY39bK5 Yvzg== X-Gm-Message-State: AGi0PuZj+zvNmFCXoZFje1l/sgq4wDc11Oc0L++eR0l6u+nDCZUPNNbh ibcn7dNaJw3VpSxM2dwoGznoe1fAxED7/W6S8VZqolJzt4CEb8q/TZ+VEqItiicjxGV2tAiiE7g OmM36EPLeJmGkvvvuLEwj X-Received: by 2002:adf:db4d:: with SMTP id f13mr37689666wrj.289.1588169609516; Wed, 29 Apr 2020 07:13:29 -0700 (PDT) X-Google-Smtp-Source: APiQypIvNDQBf8W53LyG86hVoe5HOWOYomSis99HE27jo5K4Ow3ycSAnNVjfhs3gJxNx4bUsqPISOg== X-Received: by 2002:adf:db4d:: with SMTP id f13mr37689635wrj.289.1588169609181; Wed, 29 Apr 2020 07:13:29 -0700 (PDT) Received: from x1.localdomain (2001-1c00-0c0c-fe00-d2ea-f29d-118b-24dc.cable.dynamic.v6.ziggo.nl. [2001:1c00:c0c:fe00:d2ea:f29d:118b:24dc]) by smtp.gmail.com with ESMTPSA id 62sm21446228wro.65.2020.04.29.07.13.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 29 Apr 2020 07:13:28 -0700 (PDT) Subject: Re: [PATCH 02/10] drm: Add backlight helper To: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= , dri-devel@lists.freedesktop.org, linux-usb@vger.kernel.org Cc: Jani Nikula , Martin Peres , Daniel Thompson , Christian Kellner References: <20200429124830.27475-1-noralf@tronnes.org> <20200429124830.27475-3-noralf@tronnes.org> From: Hans de Goede Message-ID: Date: Wed, 29 Apr 2020 16:13:27 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20200429124830.27475-3-noralf@tronnes.org> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Hi Noralf, On 4/29/20 2:48 PM, Noralf Trønnes wrote: > This adds a function that creates a backlight device for a connector. > It does not deal with the KMS backlight ABI proposition[1] to add a > connector property. It only takes the current best practise to standardise > the creation of a backlight device for DRM drivers while we wait for the > property. > > The brightness value is set using a connector state variable and an atomic > commit. > > I have looked through some of the backlight users and this is what I've found: > > GNOME [2] > --------- > > Brightness range: 0-100 > Scale: Assumes perceptual I'm afraid that this is an incaccurate view of how GNOME handles the brightness. gnome-settings-daemon (g-s-d) exports a DBUS property which has a range of 0 - 100%. But it also offers step-up and step-down DBUS methods which are used for handling brightness hotkey presses. This is important because g-s-d internally also keeps a step_size variable which depends on the brightness_max value of the sysfs backlight interface, like this: BRIGHTNESS_STEP_AMOUNT(max) ((max) < 20 ? 1 : (max) / 20) This is important because some older laptops where we depend on the vendor specific ACPI method (from e.g. dell-laptop or thinkpad_acpi) there are only 8 levels. So if g-s-d where to simply fake a 1-100 range and would leave the stepping up to the DBus API user and that user would want 20 steps, so 5 % per step, then the user would get Start -> 100% -> level 8 Press down -> 95% -> level 7 Press down -> 90% -> level 7 *no change* etc. Somewhat related on some embedded ARM devices there are tricks where when the entire scene being rendered does not use 100% white as color, the entire scene has all its rgb values upscaled (too a curve) so that the brightest colors do hit 100% of one of r/g/b, combined with dimming the backlight a bit to save power. As you can imagine for tricks like these you want as much backlight control precision as possible. So any backlight infra we add must expose the true range of the backlight control and not normalize it to a 0-100 range. So sorry, but nack for the current version because of the hardcoding of the range. Also the scale really should be specified by the driver, or be hardcoded to BACKLIGHT_SCALE_UNKNOWN for now. In many cases we do not really know. But for e.g. the acpi_video firmware backlight interface a good guess is that it actually represents a perceptual scale rather then controlling the wattage. Where as the native i915 backlight interface really is controlling the wattage without any perceptual correction. Another problem with your proposal is that it seems to assume that the backlight is controlled by the drm/kms driver. On x86 we have atleast 3 different drivers for the backlight: 1) The i915 (or amd/nouveau) native driver which more or less directly pokes the PWM controller of the GPU. 2) The ACPI video standard backlight interface 3) Vendor specific ACPI interfaces from older laptops ATM we always register 1. which could remain unchanged with your code and then also register 2/3 if we (the kernel) think that will work better (*) and then rely on userspace prefering these (they have a different backlight_type) over 1. Ideally any infra we add will also offer the option to tie 2. or 3. to the connector... Regards, Hans *) e.g. it will work while the others will not work at all > > Avoids setting the sysfs brightness value to zero if max_brightness >= 99. > Can connect connector and backlight using the sysfs device. > > KDE [3] > ------- > > Brightness range: 0-100 > Scale: Assumes perceptual > > Weston [4] > ---------- > > Brightness range: 0-255 > Scale: Assumes perceptual > > Chromium OS [5] > --------------- > > Brightness range: 0-100 > Scale: Depends on the sysfs file 'scale' which is a recent addition (2019) > > xserver [6] > ----------- > > Brightness range: 0-x (driver specific) (1 is minimum, 0 is OFF) > Scale: Assumes perceptual > > The builtin modesetting driver[7] does not support Backlight, Intel[8] does. > > [1] https://lore.kernel.org/dri-devel/4b17ba08-39f3-57dd-5aad-d37d844b02c6@linux.intel.com/ > [2] https://gitlab.gnome.org/GNOME/gnome-settings-daemon/-/blob/master/plugins/power/gsd-backlight.c > [3] https://github.com/KDE/powerdevil/blob/master/daemon/backends/upower/backlighthelper.cpp > [4] https://gitlab.freedesktop.org/wayland/weston/-/blob/master/libweston/backend-drm/drm.c > [5] https://chromium.googlesource.com/chromiumos/platform2/+/refs/heads/master/power_manager/powerd/system/internal_backlight.cc > [6] https://github.com/freedesktop/xorg-randrproto/blob/master/randrproto.txt > [7] https://gitlab.freedesktop.org/xorg/xserver/-/blob/master/hw/xfree86/drivers/modesetting/drmmode_display.c > [8] https://gitlab.freedesktop.org/xorg/driver/xf86-video-intel/-/blob/master/src/backlight.c > > Cc: Hans de Goede > Cc: Jani Nikula > Cc: Martin Peres > Cc: Daniel Thompson > Signed-off-by: Noralf Trønnes > --- > Documentation/gpu/drm-kms-helpers.rst | 6 + > drivers/gpu/drm/Kconfig | 7 ++ > drivers/gpu/drm/Makefile | 1 + > drivers/gpu/drm/drm_backlight_helper.c | 154 +++++++++++++++++++++++++ > include/drm/drm_backlight_helper.h | 9 ++ > include/drm/drm_connector.h | 10 ++ > 6 files changed, 187 insertions(+) > create mode 100644 drivers/gpu/drm/drm_backlight_helper.c > create mode 100644 include/drm/drm_backlight_helper.h > > diff --git a/Documentation/gpu/drm-kms-helpers.rst b/Documentation/gpu/drm-kms-helpers.rst > index 9668a7fe2408..29a2f4b49fd2 100644 > --- a/Documentation/gpu/drm-kms-helpers.rst > +++ b/Documentation/gpu/drm-kms-helpers.rst > @@ -411,3 +411,9 @@ SHMEM GEM Helper Reference > > .. kernel-doc:: drivers/gpu/drm/drm_gem_shmem_helper.c > :export: > + > +Backlight Helper Reference > +========================== > + > +.. kernel-doc:: drivers/gpu/drm/drm_backlight_helper.c > + :export: > diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig > index d0aa6cff2e02..f6e13e18c9ca 100644 > --- a/drivers/gpu/drm/Kconfig > +++ b/drivers/gpu/drm/Kconfig > @@ -224,6 +224,13 @@ config DRM_GEM_SHMEM_HELPER > help > Choose this if you need the GEM shmem helper functions > > +config DRM_BACKLIGHT_HELPER > + bool > + depends on DRM > + select BACKLIGHT_CLASS_DEVICE > + help > + Choose this if you need the backlight device helper functions > + > config DRM_VM > bool > depends on DRM && MMU > diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile > index 6493088a0fdd..0d17662dde0a 100644 > --- a/drivers/gpu/drm/Makefile > +++ b/drivers/gpu/drm/Makefile > @@ -52,6 +52,7 @@ drm_kms_helper-$(CONFIG_DRM_FBDEV_EMULATION) += drm_fb_helper.o > drm_kms_helper-$(CONFIG_DRM_KMS_CMA_HELPER) += drm_fb_cma_helper.o > drm_kms_helper-$(CONFIG_DRM_DP_AUX_CHARDEV) += drm_dp_aux_dev.o > drm_kms_helper-$(CONFIG_DRM_DP_CEC) += drm_dp_cec.o > +drm_kms_helper-$(CONFIG_DRM_BACKLIGHT_HELPER) += drm_backlight_helper.o > > obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o > obj-$(CONFIG_DRM_DEBUG_SELFTEST) += selftests/ > diff --git a/drivers/gpu/drm/drm_backlight_helper.c b/drivers/gpu/drm/drm_backlight_helper.c > new file mode 100644 > index 000000000000..06e6a75d1d0a > --- /dev/null > +++ b/drivers/gpu/drm/drm_backlight_helper.c > @@ -0,0 +1,154 @@ > +// SPDX-License-Identifier: GPL-2.0 OR MIT > +/* > + * Copyright 2020 Noralf Trønnes > + */ > + > +#include > + > +#include > +#include > +#include > +#include > + > +static int drm_backlight_update_status(struct backlight_device *bd) > +{ > + struct drm_connector *connector = bl_get_data(bd); > + struct drm_connector_state *connector_state; > + struct drm_device *dev = connector->dev; > + struct drm_modeset_acquire_ctx ctx; > + struct drm_atomic_state *state; > + int ret; > + > + state = drm_atomic_state_alloc(dev); > + if (!state) > + return -ENOMEM; > + > + drm_modeset_acquire_init(&ctx, 0); > + state->acquire_ctx = &ctx; > +retry: > + connector_state = drm_atomic_get_connector_state(state, connector); > + if (IS_ERR(connector_state)) { > + ret = PTR_ERR(connector_state); > + goto out; > + } > + > + connector_state->backlight_brightness = bd->props.brightness; > + > + ret = drm_atomic_commit(state); > +out: > + if (ret == -EDEADLK) { > + drm_atomic_state_clear(state); > + drm_modeset_backoff(&ctx); > + goto retry; > + } > + > + drm_atomic_state_put(state); > + > + drm_modeset_drop_locks(&ctx); > + drm_modeset_acquire_fini(&ctx); > + > + return ret; > +} > + > +static int drm_backlight_get_brightness(struct backlight_device *bd) > +{ > + struct drm_connector *connector = bl_get_data(bd); > + struct drm_device *dev = connector->dev; > + int brightness; > + > + drm_modeset_lock(&dev->mode_config.connection_mutex, NULL); > + brightness = connector->state->backlight_brightness; > + drm_modeset_unlock(&dev->mode_config.connection_mutex); > + > + return brightness; > +} > + > +static const struct backlight_ops drm_backlight_ops = { > + .get_brightness = drm_backlight_get_brightness, > + .update_status = drm_backlight_update_status, > +}; > + > +/* Can be exported for drivers carrying a legacy name */ > +static int drm_backlight_register_with_name(struct drm_connector *connector, const char *name) > +{ > + struct backlight_device *bd; > + const struct backlight_properties props = { > + .type = BACKLIGHT_RAW, > + .scale = BACKLIGHT_SCALE_NON_LINEAR, > + .max_brightness = 100, > + }; > + > + if (WARN_ON(!drm_core_check_feature(connector->dev, DRIVER_MODESET) || > + !drm_drv_uses_atomic_modeset(connector->dev) || > + !connector->kdev)) > + return -EINVAL; > + > + bd = backlight_device_register(name, connector->kdev, connector, > + &drm_backlight_ops, &props); > + if (IS_ERR(bd)) > + return PTR_ERR(bd); > + > + connector->backlight = bd; > + > + return 0; > +} > + > +/** > + * drm_backlight_register() - Register a backlight device for a connector > + * @connector: Connector > + * > + * This function registers a backlight device for @connector with the following > + * characteristics: > + * > + * - The connector sysfs device is used as a parent device for the backlight device. > + * Userspace can use this to connect backlight device and connector. > + * - Name will be on the form: **card0-HDMI-A-1-backlight** > + * - Type is "raw" > + * - Scale is "non-linear" (perceptual) > + * - Max brightness is 100 giving a range of 0-100 inclusive > + * - Reading sysfs **brightness** returns the backlight device property > + * - Reading sysfs **actual_brightness** returns the connector state value > + * - Writing sysfs **bl_power** is ignored, the DPMS connector property should > + * be used to control power. > + * - Backlight device suspend/resume events are ignored. > + * > + * Note: > + * > + * Brightness zero should not turn off backlight it should be the minimum > + * brightness, DPMS handles power. > + * > + * This function must be called from &drm_connector_funcs->late_register() since > + * it depends on the sysfs device. > + * > + * Returns: > + * Zero on success or negative error code on failure. > + */ > +int drm_backlight_register(struct drm_connector *connector) > +{ > + const char *name = NULL; > + int ret; > + > + name = kasprintf(GFP_KERNEL, "card%d-%s-backlight", > + connector->dev->primary->index, connector->name); > + if (!name) > + return -ENOMEM; > + > + ret = drm_backlight_register_with_name(connector, name); > + kfree(name); > + > + return ret; > +} > +EXPORT_SYMBOL(drm_backlight_register); > + > +/** > + * drm_backlight_unregister() - Unregister backlight device > + * @connector: Connector > + * > + * Unregister a backlight device. This must be called from the > + * &drm_connector_funcs->early_unregister() callback. > + */ > +void drm_backlight_unregister(struct drm_connector *connector) > +{ > + backlight_device_unregister(connector->backlight); > +} > +EXPORT_SYMBOL(drm_backlight_unregister); > diff --git a/include/drm/drm_backlight_helper.h b/include/drm/drm_backlight_helper.h > new file mode 100644 > index 000000000000..4151b66eb0b4 > --- /dev/null > +++ b/include/drm/drm_backlight_helper.h > @@ -0,0 +1,9 @@ > +/* SPDX-License-Identifier: GPL-2.0 OR MIT */ > + > +#ifndef _LINUX_DRM_BACKLIGHT_HELPER_H > +#define _LINUX_DRM_BACKLIGHT_HELPER_H > + > +int drm_backlight_register(struct drm_connector *connector); > +void drm_backlight_unregister(struct drm_connector *connector); > + > +#endif > diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h > index 221910948b37..ce678b694f45 100644 > --- a/include/drm/drm_connector.h > +++ b/include/drm/drm_connector.h > @@ -32,6 +32,7 @@ > > #include > > +struct backlight_device; > struct drm_connector_helper_funcs; > struct drm_modeset_acquire_ctx; > struct drm_device; > @@ -656,6 +657,12 @@ struct drm_connector_state { > */ > u8 max_bpc; > > + /** > + * @backlight_brightness: Brightness value of the connector backlight > + * device. See drm_backlight_register(). > + */ > + u8 backlight_brightness; > + > /** > * @hdr_output_metadata: > * DRM blob property for HDR output metadata > @@ -1422,6 +1429,9 @@ struct drm_connector { > > /** @hdr_sink_metadata: HDR Metadata Information read from sink */ > struct hdr_sink_metadata hdr_sink_metadata; > + > + /** @backlight: Backlight device. See drm_backlight_register() */ > + struct backlight_device *backlight; > }; > > #define obj_to_connector(x) container_of(x, struct drm_connector, base) > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.1 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5C6ADC83000 for ; Wed, 29 Apr 2020 14:13:47 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 342692083B for ; Wed, 29 Apr 2020 14:13:47 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="YPuHYs7I" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 342692083B Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AC8886EE6A; Wed, 29 Apr 2020 14:13:46 +0000 (UTC) Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) by gabe.freedesktop.org (Postfix) with ESMTPS id 597C06EEA2 for ; Wed, 29 Apr 2020 14:13:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1588169624; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=5JrteLVgXe5yPdXf/r22GmxBbnY5BnTV9j0flu42ErY=; b=YPuHYs7IQ0liRwyHygVN2JbWd46UAwGm+TmNY65/3m2sw9YHc2w3RFzysW3XnQu3nDMm3E 2PBf/A7PL1bOmVUjHfr6FhsT0YOpbTy+Bs4bEDjvbs8qs2E8oT1AKwwmHikd3gOdSYMX8/ 9iurm/gkzlbfwRcp73psRsqC6nF+1Fg= Received: from mail-wr1-f70.google.com (mail-wr1-f70.google.com [209.85.221.70]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-55-N6QzKEJAMdOnUh931qd6ww-1; Wed, 29 Apr 2020 10:13:30 -0400 X-MC-Unique: N6QzKEJAMdOnUh931qd6ww-1 Received: by mail-wr1-f70.google.com with SMTP id e5so1776276wrs.23 for ; Wed, 29 Apr 2020 07:13:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=1wYPs6TSNNxaxWMEB4zQHE/cQ8KW0LVX2QXVNewypBY=; b=pR4OWoChcNqxoRfymNBDNYDsM47ocCGKpDGsRLGTLWpoWoSjceXl9lABVsb3VBKNad D9LRlEDVZkUKx7cBFYZ793BwlCR+XvdVNlfCeYBDoh/cQAUw7coAdmSpaZ0Tkv1UHvn1 EBQ4lDXdQcBVXJ1ZIx+lc2vy1e+VrhzLBl9H8bq+T3d5w0t7g4Jxbde+TZZDum4qwyp9 bMfVx5kiQceqU5MHrIffvUgEXeO8TbC4Xz7BijAs0atZskl2XrqKF67ABTyac+Hg5lv8 7QeWVqI3mG9SxLTq4qZu9Lrck7fr1lBfAr5RvITIbpjz2CTE5KYGQWgilFtMTwsoUlFQ pHbA== X-Gm-Message-State: AGi0PuYTe2RU+JMuaQjZhvPBd0AVn8Aj/+CLiVU6wh0eJkFxKI4kJXFV 60QqvNn2ih+mIu9Ghw3C5uYd0kulPbdWmJ3wyCzA3FIPfC1HI7u1xHtKba3AgsohUPVNRzRSezV rUg059Yymz9oJW77j9A97TpmiHXAI X-Received: by 2002:adf:db4d:: with SMTP id f13mr37689663wrj.289.1588169609515; Wed, 29 Apr 2020 07:13:29 -0700 (PDT) X-Google-Smtp-Source: APiQypIvNDQBf8W53LyG86hVoe5HOWOYomSis99HE27jo5K4Ow3ycSAnNVjfhs3gJxNx4bUsqPISOg== X-Received: by 2002:adf:db4d:: with SMTP id f13mr37689635wrj.289.1588169609181; Wed, 29 Apr 2020 07:13:29 -0700 (PDT) Received: from x1.localdomain (2001-1c00-0c0c-fe00-d2ea-f29d-118b-24dc.cable.dynamic.v6.ziggo.nl. [2001:1c00:c0c:fe00:d2ea:f29d:118b:24dc]) by smtp.gmail.com with ESMTPSA id 62sm21446228wro.65.2020.04.29.07.13.28 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 29 Apr 2020 07:13:28 -0700 (PDT) Subject: Re: [PATCH 02/10] drm: Add backlight helper To: =?UTF-8?Q?Noralf_Tr=c3=b8nnes?= , dri-devel@lists.freedesktop.org, linux-usb@vger.kernel.org References: <20200429124830.27475-1-noralf@tronnes.org> <20200429124830.27475-3-noralf@tronnes.org> From: Hans de Goede Message-ID: Date: Wed, 29 Apr 2020 16:13:27 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0 MIME-Version: 1.0 In-Reply-To: <20200429124830.27475-3-noralf@tronnes.org> Content-Language: en-US X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Daniel Thompson , Christian Kellner Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" SGkgTm9yYWxmLAoKT24gNC8yOS8yMCAyOjQ4IFBNLCBOb3JhbGYgVHLDuG5uZXMgd3JvdGU6Cj4g VGhpcyBhZGRzIGEgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGEgYmFja2xpZ2h0IGRldmljZSBmb3Ig YSBjb25uZWN0b3IuCj4gSXQgZG9lcyBub3QgZGVhbCB3aXRoIHRoZSBLTVMgYmFja2xpZ2h0IEFC SSBwcm9wb3NpdGlvblsxXSB0byBhZGQgYQo+IGNvbm5lY3RvciBwcm9wZXJ0eS4gSXQgb25seSB0 YWtlcyB0aGUgY3VycmVudCBiZXN0IHByYWN0aXNlIHRvIHN0YW5kYXJkaXNlCj4gdGhlIGNyZWF0 aW9uIG9mIGEgYmFja2xpZ2h0IGRldmljZSBmb3IgRFJNIGRyaXZlcnMgd2hpbGUgd2Ugd2FpdCBm b3IgdGhlCj4gcHJvcGVydHkuCj4gCj4gVGhlIGJyaWdodG5lc3MgdmFsdWUgaXMgc2V0IHVzaW5n IGEgY29ubmVjdG9yIHN0YXRlIHZhcmlhYmxlIGFuZCBhbiBhdG9taWMKPiBjb21taXQuCj4gCj4g SSBoYXZlIGxvb2tlZCB0aHJvdWdoIHNvbWUgb2YgdGhlIGJhY2tsaWdodCB1c2VycyBhbmQgdGhp cyBpcyB3aGF0IEkndmUgZm91bmQ6Cj4gCj4gR05PTUUgWzJdCj4gLS0tLS0tLS0tCj4gCj4gQnJp Z2h0bmVzcyByYW5nZTogMC0xMDAKPiBTY2FsZTogQXNzdW1lcyBwZXJjZXB0dWFsCgpJJ20gYWZy YWlkIHRoYXQgdGhpcyBpcyBhbiBpbmNhY2N1cmF0ZSB2aWV3IG9mIGhvdyBHTk9NRSBoYW5kbGVz IHRoZQpicmlnaHRuZXNzLiBnbm9tZS1zZXR0aW5ncy1kYWVtb24gKGctcy1kKSBleHBvcnRzIGEg REJVUyBwcm9wZXJ0eSB3aGljaCBoYXMKYSByYW5nZSBvZiAwIC0gMTAwJS4gIEJ1dCBpdCBhbHNv IG9mZmVycyBzdGVwLXVwIGFuZCBzdGVwLWRvd24gREJVUyBtZXRob2RzCndoaWNoIGFyZSB1c2Vk IGZvciBoYW5kbGluZyBicmlnaHRuZXNzIGhvdGtleSBwcmVzc2VzLgoKVGhpcyBpcyBpbXBvcnRh bnQgYmVjYXVzZSBnLXMtZCBpbnRlcm5hbGx5IGFsc28ga2VlcHMgYSBzdGVwX3NpemUgdmFyaWFi bGUKd2hpY2ggZGVwZW5kcyBvbiB0aGUgYnJpZ2h0bmVzc19tYXggdmFsdWUgb2YgdGhlIHN5c2Zz IGJhY2tsaWdodCBpbnRlcmZhY2UsCmxpa2UgdGhpczoKCkJSSUdIVE5FU1NfU1RFUF9BTU9VTlQo bWF4KSAoKG1heCkgPCAyMCA/IDEgOiAobWF4KSAvIDIwKQoKVGhpcyBpcyBpbXBvcnRhbnQgYmVj YXVzZSBzb21lIG9sZGVyIGxhcHRvcHMgd2hlcmUgd2UgZGVwZW5kIG9uIHRoZQp2ZW5kb3Igc3Bl Y2lmaWMgQUNQSSBtZXRob2QgKGZyb20gZS5nLiBkZWxsLWxhcHRvcCBvciB0aGlua3BhZF9hY3Bp KQp0aGVyZSBhcmUgb25seSA4IGxldmVscy4gU28gaWYgZy1zLWQgd2hlcmUgdG8gc2ltcGx5IGZh a2UgYSAxLTEwMApyYW5nZSBhbmQgd291bGQgbGVhdmUgdGhlIHN0ZXBwaW5nIHVwIHRvIHRoZSBE QnVzIEFQSSB1c2VyIGFuZCB0aGF0CnVzZXIgd291bGQgd2FudCAyMCBzdGVwcywgc28gNSAlIHBl ciBzdGVwLCB0aGVuIHRoZSB1c2VyIHdvdWxkIGdldAoKU3RhcnQgICAgICAtPiAxMDAlIC0+IGxl dmVsIDgKUHJlc3MgZG93biAtPiAgOTUlIC0+IGxldmVsIDcKUHJlc3MgZG93biAtPiAgOTAlIC0+ IGxldmVsIDcgKm5vIGNoYW5nZSoKZXRjLgoKU29tZXdoYXQgcmVsYXRlZCBvbiBzb21lIGVtYmVk ZGVkIEFSTSBkZXZpY2VzIHRoZXJlIGFyZSB0cmlja3Mgd2hlcmUKd2hlbiB0aGUgZW50aXJlIHNj ZW5lIGJlaW5nIHJlbmRlcmVkIGRvZXMgbm90IHVzZSAxMDAlIHdoaXRlIGFzIGNvbG9yLAp0aGUg ZW50aXJlIHNjZW5lIGhhcyBhbGwgaXRzIHJnYiB2YWx1ZXMgdXBzY2FsZWQgKHRvbyBhIGN1cnZl KSBzbyB0aGF0CnRoZSBicmlnaHRlc3QgY29sb3JzIGRvIGhpdCAxMDAlIG9mIG9uZSBvZiByL2cv YiwgY29tYmluZWQgd2l0aCBkaW1taW5nCnRoZSBiYWNrbGlnaHQgYSBiaXQgdG8gc2F2ZSBwb3dl ci4gQXMgeW91IGNhbiBpbWFnaW5lIGZvciB0cmlja3MgbGlrZQp0aGVzZSB5b3Ugd2FudCBhcyBt dWNoIGJhY2tsaWdodCBjb250cm9sIHByZWNpc2lvbiBhcyBwb3NzaWJsZS4KClNvIGFueSBiYWNr bGlnaHQgaW5mcmEgd2UgYWRkIG11c3QgZXhwb3NlIHRoZSB0cnVlIHJhbmdlIG9mIHRoZQpiYWNr bGlnaHQgY29udHJvbCBhbmQgbm90IG5vcm1hbGl6ZSBpdCB0byBhIDAtMTAwIHJhbmdlLgoKU28g c29ycnksIGJ1dCBuYWNrIGZvciB0aGUgY3VycmVudCB2ZXJzaW9uIGJlY2F1c2Ugb2YgdGhlIGhh cmRjb2RpbmcKb2YgdGhlIHJhbmdlLgoKQWxzbyB0aGUgc2NhbGUgcmVhbGx5IHNob3VsZCBiZSBz cGVjaWZpZWQgYnkgdGhlIGRyaXZlciwgb3IgYmUgaGFyZGNvZGVkCnRvIEJBQ0tMSUdIVF9TQ0FM RV9VTktOT1dOIGZvciBub3cuIEluIG1hbnkgY2FzZXMgd2UgZG8gbm90IHJlYWxseSBrbm93LgpC dXQgZm9yIGUuZy4gdGhlIGFjcGlfdmlkZW8gZmlybXdhcmUgYmFja2xpZ2h0IGludGVyZmFjZSBh IGdvb2QgZ3Vlc3MgaXMKdGhhdCBpdCBhY3R1YWxseSByZXByZXNlbnRzIGEgcGVyY2VwdHVhbCBz Y2FsZSByYXRoZXIgdGhlbiBjb250cm9sbGluZwp0aGUgd2F0dGFnZS4KCldoZXJlIGFzIHRoZSBu YXRpdmUgaTkxNSBiYWNrbGlnaHQgaW50ZXJmYWNlIHJlYWxseSBpcyBjb250cm9sbGluZwp0aGUg d2F0dGFnZSB3aXRob3V0IGFueSBwZXJjZXB0dWFsIGNvcnJlY3Rpb24uCgpBbm90aGVyIHByb2Js ZW0gd2l0aCB5b3VyIHByb3Bvc2FsIGlzIHRoYXQgaXQgc2VlbXMgdG8gYXNzdW1lIHRoYXQKdGhl IGJhY2tsaWdodCBpcyBjb250cm9sbGVkIGJ5IHRoZSBkcm0va21zIGRyaXZlci4gT24geDg2IHdl IGhhdmUKYXRsZWFzdCAzIGRpZmZlcmVudCBkcml2ZXJzIGZvciB0aGUgYmFja2xpZ2h0OgoKMSkg VGhlIGk5MTUgKG9yIGFtZC9ub3V2ZWF1KSBuYXRpdmUgZHJpdmVyIHdoaWNoIG1vcmUgb3IgbGVz cwpkaXJlY3RseSBwb2tlcyB0aGUgUFdNIGNvbnRyb2xsZXIgb2YgdGhlIEdQVS4KMikgVGhlIEFD UEkgdmlkZW8gc3RhbmRhcmQgYmFja2xpZ2h0IGludGVyZmFjZQozKSBWZW5kb3Igc3BlY2lmaWMg QUNQSSBpbnRlcmZhY2VzIGZyb20gb2xkZXIgbGFwdG9wcwoKQVRNIHdlIGFsd2F5cyByZWdpc3Rl ciAxLiB3aGljaCBjb3VsZCByZW1haW4gdW5jaGFuZ2VkIHdpdGgKeW91ciBjb2RlIGFuZCB0aGVu IGFsc28gcmVnaXN0ZXIgMi8zIGlmIHdlICh0aGUga2VybmVsKSB0aGluawp0aGF0IHdpbGwgd29y ayBiZXR0ZXIgKCopIGFuZCB0aGVuIHJlbHkgb24gdXNlcnNwYWNlIHByZWZlcmluZwp0aGVzZSAo dGhleSBoYXZlIGEgZGlmZmVyZW50IGJhY2tsaWdodF90eXBlKSBvdmVyIDEuCgpJZGVhbGx5IGFu eSBpbmZyYSB3ZSBhZGQgd2lsbCBhbHNvIG9mZmVyIHRoZSBvcHRpb24gdG8gdGllCjIuIG9yIDMu IHRvIHRoZSBjb25uZWN0b3IuLi4KClJlZ2FyZHMsCgpIYW5zCgoKCiopIGUuZy4gaXQgd2lsbCB3 b3JrIHdoaWxlIHRoZSBvdGhlcnMgd2lsbCBub3Qgd29yayBhdCBhbGwKCgoKCj4gCj4gQXZvaWRz IHNldHRpbmcgdGhlIHN5c2ZzIGJyaWdodG5lc3MgdmFsdWUgdG8gemVybyBpZiBtYXhfYnJpZ2h0 bmVzcyA+PSA5OS4KPiBDYW4gY29ubmVjdCBjb25uZWN0b3IgYW5kIGJhY2tsaWdodCB1c2luZyB0 aGUgc3lzZnMgZGV2aWNlLgo+IAo+IEtERSBbM10KPiAtLS0tLS0tCj4gCj4gQnJpZ2h0bmVzcyBy YW5nZTogMC0xMDAKPiBTY2FsZTogQXNzdW1lcyBwZXJjZXB0dWFsCj4gCj4gV2VzdG9uIFs0XQo+ IC0tLS0tLS0tLS0KPiAKPiBCcmlnaHRuZXNzIHJhbmdlOiAwLTI1NQo+IFNjYWxlOiBBc3N1bWVz IHBlcmNlcHR1YWwKPiAKPiBDaHJvbWl1bSBPUyBbNV0KPiAtLS0tLS0tLS0tLS0tLS0KPiAKPiBC cmlnaHRuZXNzIHJhbmdlOiAwLTEwMAo+IFNjYWxlOiBEZXBlbmRzIG9uIHRoZSBzeXNmcyBmaWxl ICdzY2FsZScgd2hpY2ggaXMgYSByZWNlbnQgYWRkaXRpb24gKDIwMTkpCj4gCj4geHNlcnZlciBb Nl0KPiAtLS0tLS0tLS0tLQo+IAo+IEJyaWdodG5lc3MgcmFuZ2U6IDAteCAoZHJpdmVyIHNwZWNp ZmljKSAoMSBpcyBtaW5pbXVtLCAwIGlzIE9GRikKPiBTY2FsZTogQXNzdW1lcyBwZXJjZXB0dWFs Cj4gCj4gVGhlIGJ1aWx0aW4gbW9kZXNldHRpbmcgZHJpdmVyWzddIGRvZXMgbm90IHN1cHBvcnQg QmFja2xpZ2h0LCBJbnRlbFs4XSBkb2VzLgo+IAo+IFsxXSBodHRwczovL2xvcmUua2VybmVsLm9y Zy9kcmktZGV2ZWwvNGIxN2JhMDgtMzlmMy01N2RkLTVhYWQtZDM3ZDg0NGIwMmM2QGxpbnV4Lmlu dGVsLmNvbS8KPiBbMl0gaHR0cHM6Ly9naXRsYWIuZ25vbWUub3JnL0dOT01FL2dub21lLXNldHRp bmdzLWRhZW1vbi8tL2Jsb2IvbWFzdGVyL3BsdWdpbnMvcG93ZXIvZ3NkLWJhY2tsaWdodC5jCj4g WzNdIGh0dHBzOi8vZ2l0aHViLmNvbS9LREUvcG93ZXJkZXZpbC9ibG9iL21hc3Rlci9kYWVtb24v YmFja2VuZHMvdXBvd2VyL2JhY2tsaWdodGhlbHBlci5jcHAKPiBbNF0gaHR0cHM6Ly9naXRsYWIu ZnJlZWRlc2t0b3Aub3JnL3dheWxhbmQvd2VzdG9uLy0vYmxvYi9tYXN0ZXIvbGlid2VzdG9uL2Jh Y2tlbmQtZHJtL2RybS5jCj4gWzVdIGh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9j aHJvbWl1bW9zL3BsYXRmb3JtMi8rL3JlZnMvaGVhZHMvbWFzdGVyL3Bvd2VyX21hbmFnZXIvcG93 ZXJkL3N5c3RlbS9pbnRlcm5hbF9iYWNrbGlnaHQuY2MKPiBbNl0gaHR0cHM6Ly9naXRodWIuY29t L2ZyZWVkZXNrdG9wL3hvcmctcmFuZHJwcm90by9ibG9iL21hc3Rlci9yYW5kcnByb3RvLnR4dAo+ IFs3XSBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcveG9yZy94c2VydmVyLy0vYmxvYi9t YXN0ZXIvaHcveGZyZWU4Ni9kcml2ZXJzL21vZGVzZXR0aW5nL2RybW1vZGVfZGlzcGxheS5jCj4g WzhdIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy94b3JnL2RyaXZlci94Zjg2LXZpZGVv LWludGVsLy0vYmxvYi9tYXN0ZXIvc3JjL2JhY2tsaWdodC5jCj4gCj4gQ2M6IEhhbnMgZGUgR29l ZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+Cj4gQ2M6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBs aW51eC5pbnRlbC5jb20+Cj4gQ2M6IE1hcnRpbiBQZXJlcyA8bWFydGluLnBlcmVzQGxpbnV4Lmlu dGVsLmNvbT4KPiBDYzogRGFuaWVsIFRob21wc29uIDxkYW5pZWwudGhvbXBzb25AbGluYXJvLm9y Zz4KPiBTaWduZWQtb2ZmLWJ5OiBOb3JhbGYgVHLDuG5uZXMgPG5vcmFsZkB0cm9ubmVzLm9yZz4K PiAtLS0KPiAgIERvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMtaGVscGVycy5yc3QgIHwgICA2ICsK PiAgIGRyaXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAgICAgIHwgICA3ICsrCj4gICBk cml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAgICB8ICAgMSArCj4gICBkcml2ZXJz L2dwdS9kcm0vZHJtX2JhY2tsaWdodF9oZWxwZXIuYyB8IDE1NCArKysrKysrKysrKysrKysrKysr KysrKysrCj4gICBpbmNsdWRlL2RybS9kcm1fYmFja2xpZ2h0X2hlbHBlci5oICAgICB8ICAgOSAr Kwo+ICAgaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oICAgICAgICAgICAgfCAgMTAgKysKPiAg IDYgZmlsZXMgY2hhbmdlZCwgMTg3IGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vZHJtX2JhY2tsaWdodF9oZWxwZXIuYwo+ICAgY3JlYXRlIG1vZGUg MTAwNjQ0IGluY2x1ZGUvZHJtL2RybV9iYWNrbGlnaHRfaGVscGVyLmgKPiAKPiBkaWZmIC0tZ2l0 IGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdCBiL0RvY3VtZW50YXRpb24v Z3B1L2RybS1rbXMtaGVscGVycy5yc3QKPiBpbmRleCA5NjY4YTdmZTI0MDguLjI5YTJmNGI0OWZk MiAxMDA2NDQKPiAtLS0gYS9Eb2N1bWVudGF0aW9uL2dwdS9kcm0ta21zLWhlbHBlcnMucnN0Cj4g KysrIGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy1oZWxwZXJzLnJzdAo+IEBAIC00MTEsMyAr NDExLDkgQEAgU0hNRU0gR0VNIEhlbHBlciBSZWZlcmVuY2UKPiAgIAo+ICAgLi4ga2VybmVsLWRv Yzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtX3NobWVtX2hlbHBlci5jCj4gICAgICA6ZXhwb3J0 Ogo+ICsKPiArQmFja2xpZ2h0IEhlbHBlciBSZWZlcmVuY2UKPiArPT09PT09PT09PT09PT09PT09 PT09PT09PT0KPiArCj4gKy4uIGtlcm5lbC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2JhY2ts aWdodF9oZWxwZXIuYwo+ICsgICA6ZXhwb3J0Ogo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gaW5kZXggZDBhYTZjZmYyZTAy Li5mNmUxM2UxOGM5Y2EgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiAr KysgYi9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+IEBAIC0yMjQsNiArMjI0LDEzIEBAIGNvbmZp ZyBEUk1fR0VNX1NITUVNX0hFTFBFUgo+ICAgCWhlbHAKPiAgIAkgIENob29zZSB0aGlzIGlmIHlv dSBuZWVkIHRoZSBHRU0gc2htZW0gaGVscGVyIGZ1bmN0aW9ucwo+ICAgCj4gK2NvbmZpZyBEUk1f QkFDS0xJR0hUX0hFTFBFUgo+ICsJYm9vbAo+ICsJZGVwZW5kcyBvbiBEUk0KPiArCXNlbGVjdCBC QUNLTElHSFRfQ0xBU1NfREVWSUNFCj4gKwloZWxwCj4gKwkgIENob29zZSB0aGlzIGlmIHlvdSBu ZWVkIHRoZSBiYWNrbGlnaHQgZGV2aWNlIGhlbHBlciBmdW5jdGlvbnMKPiArCj4gICBjb25maWcg RFJNX1ZNCj4gICAJYm9vbAo+ICAgCWRlcGVuZHMgb24gRFJNICYmIE1NVQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBp bmRleCA2NDkzMDg4YTBmZGQuLjBkMTc2NjJkZGUwYSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKPiBAQCAtNTIs NiArNTIsNyBAQCBkcm1fa21zX2hlbHBlci0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSAr PSBkcm1fZmJfaGVscGVyLm8KPiAgIGRybV9rbXNfaGVscGVyLSQoQ09ORklHX0RSTV9LTVNfQ01B X0hFTFBFUikgKz0gZHJtX2ZiX2NtYV9oZWxwZXIubwo+ICAgZHJtX2ttc19oZWxwZXItJChDT05G SUdfRFJNX0RQX0FVWF9DSEFSREVWKSArPSBkcm1fZHBfYXV4X2Rldi5vCj4gICBkcm1fa21zX2hl bHBlci0kKENPTkZJR19EUk1fRFBfQ0VDKSArPSBkcm1fZHBfY2VjLm8KPiArZHJtX2ttc19oZWxw ZXItJChDT05GSUdfRFJNX0JBQ0tMSUdIVF9IRUxQRVIpICs9IGRybV9iYWNrbGlnaHRfaGVscGVy Lm8KPiAgIAo+ICAgb2JqLSQoQ09ORklHX0RSTV9LTVNfSEVMUEVSKSArPSBkcm1fa21zX2hlbHBl ci5vCj4gICBvYmotJChDT05GSUdfRFJNX0RFQlVHX1NFTEZURVNUKSArPSBzZWxmdGVzdHMvCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYmFja2xpZ2h0X2hlbHBlci5jIGIvZHJp dmVycy9ncHUvZHJtL2RybV9iYWNrbGlnaHRfaGVscGVyLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMDZlNmE3NWQxZDBhCj4gLS0tIC9kZXYvbnVsbAo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYmFja2xpZ2h0X2hlbHBlci5jCj4gQEAgLTAsMCArMSwx NTQgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUCj4gKy8q Cj4gKyAqIENvcHlyaWdodCAyMDIwIE5vcmFsZiBUcsO4bm5lcwo+ICsgKi8KPiArCj4gKyNpbmNs dWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KPiArCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2F0b21pYy5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0b3IuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1f ZHJ2Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2ZpbGUuaD4KPiArCj4gK3N0YXRpYyBpbnQgZHJt X2JhY2tsaWdodF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKPiAr ewo+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9IGJsX2dldF9kYXRhKGJkKTsK PiArCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uZWN0b3Jfc3RhdGU7Cj4gKwlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gY29ubmVjdG9yLT5kZXY7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVz ZXRfYWNxdWlyZV9jdHggY3R4Owo+ICsJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlOwo+ ICsJaW50IHJldDsKPiArCj4gKwlzdGF0ZSA9IGRybV9hdG9taWNfc3RhdGVfYWxsb2MoZGV2KTsK PiArCWlmICghc3RhdGUpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJZHJtX21vZGVzZXRf YWNxdWlyZV9pbml0KCZjdHgsIDApOwo+ICsJc3RhdGUtPmFjcXVpcmVfY3R4ID0gJmN0eDsKPiAr cmV0cnk6Cj4gKwljb25uZWN0b3Jfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9jb25uZWN0b3Jfc3Rh dGUoc3RhdGUsIGNvbm5lY3Rvcik7Cj4gKwlpZiAoSVNfRVJSKGNvbm5lY3Rvcl9zdGF0ZSkpIHsK PiArCQlyZXQgPSBQVFJfRVJSKGNvbm5lY3Rvcl9zdGF0ZSk7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9 Cj4gKwo+ICsJY29ubmVjdG9yX3N0YXRlLT5iYWNrbGlnaHRfYnJpZ2h0bmVzcyA9IGJkLT5wcm9w cy5icmlnaHRuZXNzOwo+ICsKPiArCXJldCA9IGRybV9hdG9taWNfY29tbWl0KHN0YXRlKTsKPiAr b3V0Ogo+ICsJaWYgKHJldCA9PSAtRURFQURMSykgewo+ICsJCWRybV9hdG9taWNfc3RhdGVfY2xl YXIoc3RhdGUpOwo+ICsJCWRybV9tb2Rlc2V0X2JhY2tvZmYoJmN0eCk7Cj4gKwkJZ290byByZXRy eTsKPiArCX0KPiArCj4gKwlkcm1fYXRvbWljX3N0YXRlX3B1dChzdGF0ZSk7Cj4gKwo+ICsJZHJt X21vZGVzZXRfZHJvcF9sb2NrcygmY3R4KTsKPiArCWRybV9tb2Rlc2V0X2FjcXVpcmVfZmluaSgm Y3R4KTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRybV9iYWNr bGlnaHRfZ2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yID0gYmxfZ2V0X2RhdGEoYmQpOwo+ICsJ c3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2Owo+ICsJaW50IGJyaWdodG5l c3M7Cj4gKwo+ICsJZHJtX21vZGVzZXRfbG9jaygmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0aW9u X211dGV4LCBOVUxMKTsKPiArCWJyaWdodG5lc3MgPSBjb25uZWN0b3ItPnN0YXRlLT5iYWNrbGln aHRfYnJpZ2h0bmVzczsKPiArCWRybV9tb2Rlc2V0X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5j b25uZWN0aW9uX211dGV4KTsKPiArCj4gKwlyZXR1cm4gYnJpZ2h0bmVzczsKPiArfQo+ICsKPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBiYWNrbGlnaHRfb3BzIGRybV9iYWNrbGlnaHRfb3BzID0gewo+ ICsJLmdldF9icmlnaHRuZXNzID0gZHJtX2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcywKPiArCS51 cGRhdGVfc3RhdHVzCT0gZHJtX2JhY2tsaWdodF91cGRhdGVfc3RhdHVzLAo+ICt9Owo+ICsKPiAr LyogQ2FuIGJlIGV4cG9ydGVkIGZvciBkcml2ZXJzIGNhcnJ5aW5nIGEgbGVnYWN5IG5hbWUgKi8K PiArc3RhdGljIGludCBkcm1fYmFja2xpZ2h0X3JlZ2lzdGVyX3dpdGhfbmFtZShzdHJ1Y3QgZHJt X2Nvbm5lY3RvciAqY29ubmVjdG9yLCBjb25zdCBjaGFyICpuYW1lKQo+ICt7Cj4gKwlzdHJ1Y3Qg YmFja2xpZ2h0X2RldmljZSAqYmQ7Cj4gKwljb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRp ZXMgcHJvcHMgPSB7Cj4gKwkJLnR5cGUgPSBCQUNLTElHSFRfUkFXLAo+ICsJCS5zY2FsZSA9IEJB Q0tMSUdIVF9TQ0FMRV9OT05fTElORUFSLAo+ICsJCS5tYXhfYnJpZ2h0bmVzcyA9IDEwMCwKPiAr CX07Cj4gKwo+ICsJaWYgKFdBUk5fT04oIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoY29ubmVjdG9y LT5kZXYsIERSSVZFUl9NT0RFU0VUKSB8fAo+ICsJCSAgICAhZHJtX2Rydl91c2VzX2F0b21pY19t b2Rlc2V0KGNvbm5lY3Rvci0+ZGV2KSB8fAo+ICsJCSAgICAhY29ubmVjdG9yLT5rZGV2KSkKPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIo bmFtZSwgY29ubmVjdG9yLT5rZGV2LCBjb25uZWN0b3IsCj4gKwkJCQkgICAgICAgJmRybV9iYWNr bGlnaHRfb3BzLCAmcHJvcHMpOwo+ICsJaWYgKElTX0VSUihiZCkpCj4gKwkJcmV0dXJuIFBUUl9F UlIoYmQpOwo+ICsKPiArCWNvbm5lY3Rvci0+YmFja2xpZ2h0ID0gYmQ7Cj4gKwo+ICsJcmV0dXJu IDA7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcm1fYmFja2xpZ2h0X3JlZ2lzdGVyKCkgLSBSZWdp c3RlciBhIGJhY2tsaWdodCBkZXZpY2UgZm9yIGEgY29ubmVjdG9yCj4gKyAqIEBjb25uZWN0b3I6 IENvbm5lY3Rvcgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIGJhY2tsaWdo dCBkZXZpY2UgZm9yIEBjb25uZWN0b3Igd2l0aCB0aGUgZm9sbG93aW5nCj4gKyAqIGNoYXJhY3Rl cmlzdGljczoKPiArICoKPiArICogLSBUaGUgY29ubmVjdG9yIHN5c2ZzIGRldmljZSBpcyB1c2Vk IGFzIGEgcGFyZW50IGRldmljZSBmb3IgdGhlIGJhY2tsaWdodCBkZXZpY2UuCj4gKyAqICAgVXNl cnNwYWNlIGNhbiB1c2UgdGhpcyB0byBjb25uZWN0IGJhY2tsaWdodCBkZXZpY2UgYW5kIGNvbm5l Y3Rvci4KPiArICogLSBOYW1lIHdpbGwgYmUgb24gdGhlIGZvcm06ICoqY2FyZDAtSERNSS1BLTEt YmFja2xpZ2h0KioKPiArICogLSBUeXBlIGlzICJyYXciCj4gKyAqIC0gU2NhbGUgaXMgIm5vbi1s aW5lYXIiIChwZXJjZXB0dWFsKQo+ICsgKiAtIE1heCBicmlnaHRuZXNzIGlzIDEwMCBnaXZpbmcg YSByYW5nZSBvZiAwLTEwMCBpbmNsdXNpdmUKPiArICogLSBSZWFkaW5nIHN5c2ZzICoqYnJpZ2h0 bmVzcyoqIHJldHVybnMgdGhlIGJhY2tsaWdodCBkZXZpY2UgcHJvcGVydHkKPiArICogLSBSZWFk aW5nIHN5c2ZzICoqYWN0dWFsX2JyaWdodG5lc3MqKiByZXR1cm5zIHRoZSBjb25uZWN0b3Igc3Rh dGUgdmFsdWUKPiArICogLSBXcml0aW5nIHN5c2ZzICoqYmxfcG93ZXIqKiBpcyBpZ25vcmVkLCB0 aGUgRFBNUyBjb25uZWN0b3IgcHJvcGVydHkgc2hvdWxkCj4gKyAqICAgYmUgdXNlZCB0byBjb250 cm9sIHBvd2VyLgo+ICsgKiAtIEJhY2tsaWdodCBkZXZpY2Ugc3VzcGVuZC9yZXN1bWUgZXZlbnRz IGFyZSBpZ25vcmVkLgo+ICsgKgo+ICsgKiBOb3RlOgo+ICsgKgo+ICsgKiBCcmlnaHRuZXNzIHpl cm8gc2hvdWxkIG5vdCB0dXJuIG9mZiBiYWNrbGlnaHQgaXQgc2hvdWxkIGJlIHRoZSBtaW5pbXVt Cj4gKyAqIGJyaWdodG5lc3MsIERQTVMgaGFuZGxlcyBwb3dlci4KPiArICoKPiArICogVGhpcyBm dW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBmcm9tICZkcm1fY29ubmVjdG9yX2Z1bmNzLT5sYXRlX3Jl Z2lzdGVyKCkgc2luY2UKPiArICogaXQgZGVwZW5kcyBvbiB0aGUgc3lzZnMgZGV2aWNlLgo+ICsg Kgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBaZXJvIG9uIHN1Y2Nlc3Mgb3IgbmVnYXRpdmUgZXJyb3Ig Y29kZSBvbiBmYWlsdXJlLgo+ICsgKi8KPiAraW50IGRybV9iYWNrbGlnaHRfcmVnaXN0ZXIoc3Ry dWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiArewo+ICsJY29uc3QgY2hhciAqbmFtZSA9 IE5VTEw7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCW5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwg ImNhcmQlZC0lcy1iYWNrbGlnaHQiLAo+ICsJCQkgY29ubmVjdG9yLT5kZXYtPnByaW1hcnktPmlu ZGV4LCBjb25uZWN0b3ItPm5hbWUpOwo+ICsJaWYgKCFuYW1lKQo+ICsJCXJldHVybiAtRU5PTUVN Owo+ICsKPiArCXJldCA9IGRybV9iYWNrbGlnaHRfcmVnaXN0ZXJfd2l0aF9uYW1lKGNvbm5lY3Rv ciwgbmFtZSk7Cj4gKwlrZnJlZShuYW1lKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gK0VY UE9SVF9TWU1CT0woZHJtX2JhY2tsaWdodF9yZWdpc3Rlcik7Cj4gKwo+ICsvKioKPiArICogZHJt X2JhY2tsaWdodF91bnJlZ2lzdGVyKCkgLSBVbnJlZ2lzdGVyIGJhY2tsaWdodCBkZXZpY2UKPiAr ICogQGNvbm5lY3RvcjogQ29ubmVjdG9yCj4gKyAqCj4gKyAqIFVucmVnaXN0ZXIgYSBiYWNrbGln aHQgZGV2aWNlLiBUaGlzIG11c3QgYmUgY2FsbGVkIGZyb20gdGhlCj4gKyAqICZkcm1fY29ubmVj dG9yX2Z1bmNzLT5lYXJseV91bnJlZ2lzdGVyKCkgY2FsbGJhY2suCj4gKyAqLwo+ICt2b2lkIGRy bV9iYWNrbGlnaHRfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ ICt7Cj4gKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoY29ubmVjdG9yLT5iYWNrbGlnaHQp Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2JhY2tsaWdodF91bnJlZ2lzdGVyKTsKPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2JhY2tsaWdodF9oZWxwZXIuaCBiL2luY2x1ZGUvZHJt L2RybV9iYWNrbGlnaHRfaGVscGVyLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw MDAwMDAwMDAwMC4uNDE1MWI2NmViMGI0Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1ZGUv ZHJtL2RybV9iYWNrbGlnaHRfaGVscGVyLmgKPiBAQCAtMCwwICsxLDkgQEAKPiArLyogU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgT1IgTUlUICovCj4gKwo+ICsjaWZuZGVmIF9MSU5V WF9EUk1fQkFDS0xJR0hUX0hFTFBFUl9ICj4gKyNkZWZpbmUgX0xJTlVYX0RSTV9CQUNLTElHSFRf SEVMUEVSX0gKPiArCj4gK2ludCBkcm1fYmFja2xpZ2h0X3JlZ2lzdGVyKHN0cnVjdCBkcm1fY29u bmVjdG9yICpjb25uZWN0b3IpOwo+ICt2b2lkIGRybV9iYWNrbGlnaHRfdW5yZWdpc3RlcihzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiArCj4gKyNlbmRpZgo+IGRpZmYgLS1naXQg YS9pbmNsdWRlL2RybS9kcm1fY29ubmVjdG9yLmggYi9pbmNsdWRlL2RybS9kcm1fY29ubmVjdG9y LmgKPiBpbmRleCAyMjE5MTA5NDhiMzcuLmNlNjc4YjY5NGY0NSAxMDA2NDQKPiAtLS0gYS9pbmNs dWRlL2RybS9kcm1fY29ubmVjdG9yLmgKPiArKysgYi9pbmNsdWRlL2RybS9kcm1fY29ubmVjdG9y LmgKPiBAQCAtMzIsNiArMzIsNyBAQAo+ICAgCj4gICAjaW5jbHVkZSA8dWFwaS9kcm0vZHJtX21v ZGUuaD4KPiAgIAo+ICtzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZTsKPiAgIHN0cnVjdCBkcm1fY29u bmVjdG9yX2hlbHBlcl9mdW5jczsKPiAgIHN0cnVjdCBkcm1fbW9kZXNldF9hY3F1aXJlX2N0eDsK PiAgIHN0cnVjdCBkcm1fZGV2aWNlOwo+IEBAIC02NTYsNiArNjU3LDEyIEBAIHN0cnVjdCBkcm1f Y29ubmVjdG9yX3N0YXRlIHsKPiAgIAkgKi8KPiAgIAl1OCBtYXhfYnBjOwo+ICAgCj4gKwkvKioK PiArCSAqIEBiYWNrbGlnaHRfYnJpZ2h0bmVzczogQnJpZ2h0bmVzcyB2YWx1ZSBvZiB0aGUgY29u bmVjdG9yIGJhY2tsaWdodAo+ICsJICogZGV2aWNlLiBTZWUgZHJtX2JhY2tsaWdodF9yZWdpc3Rl cigpLgo+ICsJICovCj4gKwl1OCBiYWNrbGlnaHRfYnJpZ2h0bmVzczsKPiArCj4gICAJLyoqCj4g ICAJICogQGhkcl9vdXRwdXRfbWV0YWRhdGE6Cj4gICAJICogRFJNIGJsb2IgcHJvcGVydHkgZm9y IEhEUiBvdXRwdXQgbWV0YWRhdGEKPiBAQCAtMTQyMiw2ICsxNDI5LDkgQEAgc3RydWN0IGRybV9j b25uZWN0b3Igewo+ICAgCj4gICAJLyoqIEBoZHJfc2lua19tZXRhZGF0YTogSERSIE1ldGFkYXRh IEluZm9ybWF0aW9uIHJlYWQgZnJvbSBzaW5rICovCj4gICAJc3RydWN0IGhkcl9zaW5rX21ldGFk YXRhIGhkcl9zaW5rX21ldGFkYXRhOwo+ICsKPiArCS8qKiBAYmFja2xpZ2h0OiBCYWNrbGlnaHQg ZGV2aWNlLiBTZWUgZHJtX2JhY2tsaWdodF9yZWdpc3RlcigpICovCj4gKwlzdHJ1Y3QgYmFja2xp Z2h0X2RldmljZSAqYmFja2xpZ2h0Owo+ICAgfTsKPiAgIAo+ICAgI2RlZmluZSBvYmpfdG9fY29u bmVjdG9yKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciwgYmFzZSkKPiAK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZl bCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=