Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753913AbdIDPfT (ORCPT ); Mon, 4 Sep 2017 11:35:19 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:46158 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753880AbdIDPfQ (ORCPT ); Mon, 4 Sep 2017 11:35:16 -0400 From: Enric Balletbo i Serra To: Lee Jones , Daniel Thompson , Jingoo Han , Richard Purdie , Jacek Anaszewski , Pavel Machek , Rob Herring , Mark Rutland , Doug Anderson , Brian Norris , Guenter Roeck Cc: linux-leds@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC 1/2] dt-bindings: pwm-backlight: add brightness-levels-scale property Date: Mon, 4 Sep 2017 17:35:03 +0200 Message-Id: <20170904153504.27963-2-enric.balletbo@collabora.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170904153504.27963-1-enric.balletbo@collabora.com> References: <20170904153504.27963-1-enric.balletbo@collabora.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2747 Lines: 57 Brightness is not perceived linearly; rather, it typically follows some kind of parabolic curve. We can support this by skipping values in the brightness-levels array in a pseudo-quadratic curve. Typically we used less than 256 levels, which yields no more than 1KiB of memory in our device tree. But, we've noticed that on some devices the backlight performs much smoother at lower ranges if we have more than 256-levels of granularity. On kevin device, for example, if we support all 64K, that will waste us at least 256KiB in our device tree. Let's avoid to waste memory and have a huge table of numbers in our device tree of numbers by adding a brightness-levels-scale property to let the driver compute the brightness levels based on one algorithm and their property parameters. Signed-off-by: Enric Balletbo i Serra --- .../bindings/leds/backlight/pwm-backlight.txt | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/Documentation/devicetree/bindings/leds/backlight/pwm-backlight.txt b/Documentation/devicetree/bindings/leds/backlight/pwm-backlight.txt index 764db86..11c5583 100644 --- a/Documentation/devicetree/bindings/leds/backlight/pwm-backlight.txt +++ b/Documentation/devicetree/bindings/leds/backlight/pwm-backlight.txt @@ -17,6 +17,16 @@ Optional properties: "pwms" property (see PWM binding[0]) - enable-gpios: contains a single GPIO specifier for the GPIO which enables and disables the backlight (see GPIO binding[1]) + - brightness-levels-scale: this can be used instead of 'brightness-levels', + to represent the perceived luminance. So rather + than specifying 'brightness-levels = <0 + 1 2 ... 65535>', one can simply say + 'brightness-levels-scale = <255 65535>', where the + first number is the max number of levels and the + second number is the max PWM value that represent a + 100% duty cycle (brightest). The result is a + correction table for PWM values to create linear + brightness based on the CIE1931 algorithm. [0]: Documentation/devicetree/bindings/pwm/pwm.txt [1]: Documentation/devicetree/bindings/gpio/gpio.txt @@ -33,3 +43,14 @@ Example: power-supply = <&vdd_bl_reg>; enable-gpios = <&gpio 58 0>; }; + + backlight { + compatible = "pwm-backlight"; + pwms = <&pwm 0 5000000>; + + brightness-levels-scale = <255 65535>; + default-brightness-level = <128>; + + power-supply = <&vdd_bl_reg>; + enable-gpios = <&gpio 58 0>; + }; -- 2.9.3