Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp394094imu; Tue, 8 Jan 2019 22:50:41 -0800 (PST) X-Google-Smtp-Source: ALg8bN4kS/v+LPu/gawZpDo2R3jsWIwK+kFzgSbrzAzv3phC+jBH1O37tcGAgbdBJg3puL/sOzHU X-Received: by 2002:a62:15d5:: with SMTP id 204mr4859605pfv.103.1547016641421; Tue, 08 Jan 2019 22:50:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547016641; cv=none; d=google.com; s=arc-20160816; b=tMoqQi7aKG/pmXj83e0yCQqh+BBaNwenTnUtI4LHTjHPxYQVYVX7AN/tFSeU9ldg4T 8uyjKY8inftEuI/A4OPPtHJfBUw7LtUZJjZt5E2SkUnFVpC07RjlbLL+Q2LUhlVLenGh 7zleTJuLofbnspy4cBnvGc6TzkSgHvHOovq46QEKRtCAnvukfTdBgVABe6ealK++BBTt hcIYg0EwgrAtU0Kj8ErXUST+lpwd4agvDRfvlXs3ycXwKN+7FyuoWSYvSGWZaESe+SE/ qSUdHVyq1yJ/hP7NFTMmeFF6NHf6hZX634EddQaIaDa6PDkQN7PeFqe+JVWBU5zANmmT mFnQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature; bh=NwWiQ1+29QsWVuypOOOv0ehLcXEcAGIFtX6xsUKLy1g=; b=FHLPZGEUrDCnHK3v79njtyxLTA9dtjZp7p55tlCn7g+4ERR+vPz/6NNzUHrEo2yFL4 jOB9GhfvFO5OQ4AJTsWR69dHxuXv+ML6QZKsO84/PMH8mv08jrX2ldhS9OI9FzcCOvON 2D9tqlKCQrg2NOQtDkUTKUvZXQwVexmAazM4ELI2P4lNMO97xKTCW5AkJmuZPdw1TXT2 arkR8Hz1mqOhDKxuVzV+rhwMoRpKnpoyftnUqZ3rE9bDXT2IRAO1k9zMbcGSnCrUUhnZ 5cA6dY3CF8OiNvtVN1d04h/26MF4SHUbQjELTcWnNXvOeOlVrsKjhip2PifSzXllXPx4 s85w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=lhwpsK+E; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g12si4056221pll.428.2019.01.08.22.50.25; Tue, 08 Jan 2019 22:50:41 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=lhwpsK+E; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729821AbfAIGqe (ORCPT + 99 others); Wed, 9 Jan 2019 01:46:34 -0500 Received: from mail-lf1-f68.google.com ([209.85.167.68]:44281 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728661AbfAIGqe (ORCPT ); Wed, 9 Jan 2019 01:46:34 -0500 Received: by mail-lf1-f68.google.com with SMTP id z13so4783388lfe.11; Tue, 08 Jan 2019 22:46:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=NwWiQ1+29QsWVuypOOOv0ehLcXEcAGIFtX6xsUKLy1g=; b=lhwpsK+Eidi98w1e/UQGUrpOO6u78XzZF/Yy2gNB7ecdHSQigsEFE53XElhjOyxWEw inFfQbSYRRFxbU6n5/Syxymb1PZ6gKjwg7um35iv/c+5VpM/MczukiVy9N3W2CgR1sIM q3TfC8M3z9fHTxxpmvNDsjMIGdkRJGCWTxgl2b993TDAR/jn8/8dDta7oI50sVygsbIh wrll1PScGbDhh5rKaDimJb4Gpls5pD5NPlc7ZCvZ0uqlz3z52nygki21p6Ro76xwIEeL phlTOd9gKnEtLpCJqO+Nx2i5XsyfGKWqAiqS613Yb1msFT4GY6p4RXQeUmfCZUmPxtHG fN5A== 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=NwWiQ1+29QsWVuypOOOv0ehLcXEcAGIFtX6xsUKLy1g=; b=ImZgiLhtWehshkFWUEXQPFor3k0BzLAcV8oT9ZB2rLOs3Huoeu2XiWUr0vWlTjdahp 1imWt0/mLEZQ0quIplfof/gI4iomkzNvsKC8qeoY+moa+t+TStvgnJ1WRPWkf4hUAt96 I4tlpS4MK3UAuY+2v9Cf0z2NmQ4V1I5+X2pn/r6MEpSrMPOWENiu3QtCbOFmGNivRHmp tE/+X0S701U/5z67XFH/SYtlV/3aTPhFeEN9NrJP6z8AlzSwvJYMleEU/u+JMv9KXNkV FfFIMjmQJ1OcloFashLf+vArn9Mj4zrA4EhdbDr4iv4HdKPN7uW8beHsB4CxtX0t/Wq7 H1Nw== X-Gm-Message-State: AJcUukczxPxRuyD2WiVajTYfwkVnNAYJhun0vPT84+B4iHU0MqcA2ftF /ix8m4bizz8/bLUrsnscgQqvq4loSvs= X-Received: by 2002:a19:a84e:: with SMTP id r75mr2794458lfe.45.1547016390278; Tue, 08 Jan 2019 22:46:30 -0800 (PST) Received: from ?IPv6:2001:14ba:8017:3300:884:4687:bd95:28f1? (dtynxhyyktvdkssp1gd4t-3.rev.dnainternet.fi. [2001:14ba:8017:3300:884:4687:bd95:28f1]) by smtp.googlemail.com with ESMTPSA id o68sm5927733lfe.59.2019.01.08.22.46.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 Jan 2019 22:46:29 -0800 (PST) Subject: Re: [PATCH 2/2] leds: lp5024: Add the LP5024/18 RGB LED driver To: Jacek Anaszewski , Pavel Machek Cc: Dan Murphy , robh+dt@kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-leds@vger.kernel.org References: <8740cfd6-a6b5-ad27-313b-984a9febf18a@ti.com> <20181219201047.GA23448@amd> <54f28115-0a7d-8e9c-3bec-6e91fb3981ec@gmail.com> <986b5105-2fdb-bd25-7c8a-ca8fd1ade821@gmail.com> <7f205102-e854-f1cb-cc03-1307d1cddc87@gmail.com> <20190104201256.GA2931@amd> <90a2ed79-b437-af14-4538-430d8723cc6b@gmail.com> <38daf022-e4e4-799d-4c75-ee851315290d@gmail.com> From: =?UTF-8?B?VmVzYSBKw6TDpHNrZWzDpGluZW4=?= Message-ID: <9ed1c2e6-62ff-6b4c-6b38-48d6176bcd88@gmail.com> Date: Wed, 9 Jan 2019 08:46:27 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 MIME-Version: 1.0 In-Reply-To: <38daf022-e4e4-799d-4c75-ee851315290d@gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Jacek, On 07/01/2019 23.13, Jacek Anaszewski wrote: > Hi Vesa, > > On 1/5/19 1:39 AM, Vesa Jääskeläinen wrote: >> Hi Jacek, >> >> On 04/01/2019 23.37, Jacek Anaszewski wrote: >>> But, aside from that hypothetic issue, we need a solution for >>> LEDn_BRIGHTNESS feature of lp5024, i.e. setting color intensity >>> via a single register write. How would you propose to address that? >> >> You could model it to something like this in device tree: >> >> led-module @ { >>      compatible = "lp5024"; >> >>      // There is in hardware setup to use either linear or >>      // logarithmic scaling: >>      //enable-logarithmic-brightness; >> >>      led0 { >>          // this will create led instance for LED0 in lp5024 >>          label = "lp-led0"; >> >>          // This specifies LED number within lp5024 >>          led-index = <0>;   // set output-base as 0*3 == 0 >> >>          element-red { >>              // refers to OUT0 >>              output-offset = <0>; >>          }; >> >>          element-green { >>              // refers to OUT1 >>              output-offset = <1>; >>          }; >> >>          element-blue { >>              // refers to OUT2 >>              output-offset = <2>; >>          }; >> >>      }; >> >>      led1 { >>          // this will create led instance for LED1 in lp5024 >>          label = "lp-led1"; >> >>          // This specifies LED number within lp5024 >>          led-index = <1>;   // set output-base as 1*3 == 3 >> >>          element-red { >>              // refers to OUT3 >>              output-offset = <0>; >>          }; >> >>          element-green { >>              // refers to OUT4 >>              output-offset = <1>; >>          }; >> >>          element-blue { >>              // refers to OUT5 >>              output-offset = <2>; >>          }; >> >>      }; >> >>      bank-led { >>          // this will create led instance for bank leds in lp5024 >>          label = "lp-bank-led"; >> >>          // configured bank led configuration >>          led-index = <2 3 4 5 6 7>; >>          // As here is list of led-indices this entry is >>          // assumed to be bank configuration. Bank mode is enable >>          // for the indices. >> >>          // set output-base as BANK A >> >>          element-red { >>              // refers to BANK A >>              output-offset = <0>; >>          }; >> >>          element-green { >>              // refers to BANK B >>              output-offset = <1>; >>          }; >> >>          element-blue { >>              // refers to BANK C >>              output-offset = <2>; >>          }; >>      }; >> }; >> >> This would then create three led instances and each led instance has >> brightness setting and that goes straight to hardware. >> >> If one would want to override hardware control for brightness then I >> suppose you would define in led node something like: >> >>      brightness-model = "hsl" >> >> This would then pick red, green and blue elements for hsl calculations >> and others color elements for linear. LED specific hardware brightness >> would then be either 0 or 0xFF depending if all of LED color elements >> are zero or not. >> >> Would that kind of model work? > > I'd prefer to have single RGB LED device. And your DT design > is unnecessarily complex and a bit confusing. As this chip series is kinda designed for N x RGB LED's my idea was that if from user space point of view we model it as N times of individual RGB LED instances that may not even have anything to do with together. Eg. could be used for different purposes and such. And in device tree one would define logical connections for the leds so they would be mapped logically correct to user space. If one would define it like: led1 { // this will create led instance for LED1 in lp5024 label = "lp-led1"; // This specifies LED number within lp5024 led-sources = <1>; }; (note changed led-index to led-sources as that is what Pavel had and preferred) We could assume that it is RGB led in this driver's case and create it automatically with elements "red", "green", and "blue". And this could then be mapped automatically to HSL color elements or what ever the model would be. If you would model it differently in your hardware design then you would need to define more device tree nodes. Eg. if your order of LEDs would not be red, green, blue. Or if you would have non-RGB led(s) in there. > Also, you provided scarce information about sysfs interface. > It would be nice to see the sequence of commands. In this case it could be: # Note: Updated color to value array model. $ ls /sys/class/leds lp-led0 lp-led1 lp-bank-led $ ls /sys/class/leds/lp-led0 brightness color $ ls /sys/class/leds/lp-led1 brightness color $ ls /sys/class/leds/lp-bank-led brightness color # Idea of above is that as brightness is for triplet: # OUT(LED*3 + 0), OUT(LED*3 + 1), OUT(LED*3 + 2), # Then if we model it like RGB LED then brightness would automatically # map to correct OUTputs and be grouped from user space point of view # logically in correct place. # set first led to red echo "255 0 0" > /sys/class/leds/lp-led0/color # set second led to green echo "0 255 0" > /sys/class/leds/lp-led1/color # set bank led to blue echo "0 0 255" > /sys/class/leds/lp-bank-led/color # Set hardware brightness control to middle echo "128" > /sys/class/leds/lp-bank-led/brightness # If we would have software controlled virtual brightness enabled for # particular led classdev then there would be some math in either user # or in kernel space. Thanks, Vesa Jääskeläinen