Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp4134320ybg; Fri, 25 Oct 2019 13:53:01 -0700 (PDT) X-Google-Smtp-Source: APXvYqyAQVBhUznJRJgbxxaDOl19QOeYbGp2VINtaxcX59OuBAeX5oQrKGLvKQflYWoeSURF4Z5d X-Received: by 2002:a17:906:118d:: with SMTP id n13mr5236328eja.229.1572036781823; Fri, 25 Oct 2019 13:53:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1572036781; cv=none; d=google.com; s=arc-20160816; b=QStCI+iZkS9J+aJYus88pza5IDWzCySxXcHuRH8AYT8cnUpOAMDi7hbv1aQ3TO946l AjzsGgh/h38MJ+DQ1G99vCEWvbmhsWe5DnqyN6XFExI9fBPfr3HJqexm1NFgW9YI1af/ ilTKBPWvg3N9Yida1Dq2WnLwtRIhEPIJwFvsVOG/oYUeowQjOCmokxrTLgiGsX5+JOVy tfh0uJNFAHZAL8b/rrch+sXO1Quaq6dg3K5dhrJIRYZFM13OjmaA12QSl5ejt2NEn9YA MrnDnv4U45mc+gKen+Kpq4DObOXXunpe3zZdHbKCMwjMwAUFzIv0972CvCkfDDsTiPMX r1ew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature; bh=TyT7CBsVdCrw18MDYwdaL3xqrUebibyHgdcG9ptIpuw=; b=wwOtVfs6DVtXRXuuTRVd7k0h7nZs401O1+1xkEV8SyBt5NoasLkvZMFkVcdhmSFxEi TzC4H8T18E/SabuKYJUugs3c/AjeDtBRC74/M5HVwIrJ+i/wlOZgkAj7jRMxyTvlx6fw FMNtg6JW3pmgKzNal2nRHQ4RDWjB7ovy5OuooGCpyexZ1HIj9/c+dI+U+CzY5fMsZFG8 zuhjcEDgFKq0mQoB+x+z2k4xYNMYqTrSJeg5TaWWdv05YmJx8aTT5eGuEXwQoirTw9WC obR+leXd/NJG8XVN0juHR1UG8ZhVmn7sCUvxRw7i5hA0DmngkVFBy0RDlIag4Y31Z7Xn QJug== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@ti.com header.s=ti-com-17Q1 header.b=TDzmFhGt; 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=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z41si2087612edb.166.2019.10.25.13.52.38; Fri, 25 Oct 2019 13:53:01 -0700 (PDT) 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=@ti.com header.s=ti-com-17Q1 header.b=TDzmFhGt; 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=QUARANTINE sp=NONE dis=NONE) header.from=ti.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388651AbfJYSUB (ORCPT + 99 others); Fri, 25 Oct 2019 14:20:01 -0400 Received: from fllv0016.ext.ti.com ([198.47.19.142]:41288 "EHLO fllv0016.ext.ti.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388617AbfJYSTj (ORCPT ); Fri, 25 Oct 2019 14:19:39 -0400 Received: from fllv0035.itg.ti.com ([10.64.41.0]) by fllv0016.ext.ti.com (8.15.2/8.15.2) with ESMTP id x9PIJWlc048085; Fri, 25 Oct 2019 13:19:32 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ti.com; s=ti-com-17Q1; t=1572027572; bh=TyT7CBsVdCrw18MDYwdaL3xqrUebibyHgdcG9ptIpuw=; h=Subject:To:CC:References:From:Date:In-Reply-To; b=TDzmFhGtjj7z4qFUT32LfuoLaHy8OPWFQoKojGHCeKJRUQKE5YB6yNN1TVHYLmh3e +LAP2RxrbMQbybl3I4W1ETIavfP7JY+rRFFWZE4MtpdJJDpBts/h2YXO8Y7KkUVHKP O9L0hBvt1c2McRfPkBktxucsUvXp9SbT7Nx6Cf+Q= Received: from DFLE100.ent.ti.com (dfle100.ent.ti.com [10.64.6.21]) by fllv0035.itg.ti.com (8.15.2/8.15.2) with ESMTP id x9PIJWhM100154; Fri, 25 Oct 2019 13:19:32 -0500 Received: from DFLE107.ent.ti.com (10.64.6.28) by DFLE100.ent.ti.com (10.64.6.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5; Fri, 25 Oct 2019 13:19:21 -0500 Received: from fllv0040.itg.ti.com (10.64.41.20) by DFLE107.ent.ti.com (10.64.6.28) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1713.5 via Frontend Transport; Fri, 25 Oct 2019 13:19:21 -0500 Received: from [10.250.35.43] (ileax41-snat.itg.ti.com [10.172.224.153]) by fllv0040.itg.ti.com (8.15.2/8.15.2) with ESMTP id x9PIJVM8126062; Fri, 25 Oct 2019 13:19:32 -0500 Subject: Re: [PATCH v14 13/19] leds: lp55xx: Add multicolor framework support to lp55xx To: Jacek Anaszewski , CC: , References: <20191018122521.6757-1-dmurphy@ti.com> <20191018122521.6757-14-dmurphy@ti.com> <0cd2082a-16d7-c414-7bd2-708a97885da1@gmail.com> From: Dan Murphy Message-ID: <74868064-6a40-172e-ce28-94722e1f1aaf@ti.com> Date: Fri, 25 Oct 2019 13:18:46 -0500 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-EXCLAIMER-MD-CONFIG: e1e8a2fd-e40a-4ac6-ac9b-f7e9cc9ee180 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Jacek On 10/25/19 1:13 PM, Jacek Anaszewski wrote: > Dan, > > On 10/25/19 7:57 PM, Dan Murphy wrote: >> Jacek >> >> On 10/22/19 12:41 PM, Jacek Anaszewski wrote: >>> Dan, >>> >>> On 10/22/19 6:37 PM, Dan Murphy wrote: >>>> Jacek >>>> >>>> On 10/18/19 4:56 PM, Jacek Anaszewski wrote: >>>>> On 10/18/19 11:48 PM, Jacek Anaszewski wrote: >>>>>> Dan, >>>>> +        ret = lp5xx_parse_channel_child(child, cfg, i); >>>>>> I went into details of this parsing and finally came up with >>>>>> the code which is a bit greater in size, but IMHO cleaner. >>>>>> Note changes in variable naming. It is not even compile-tested. >>>>>> >>>>>> static int lp55xx_parse_common_child(struct device_node *np, >>>>>>                                       struct lp55xx_led_config *cfg, >>>>>>                                       int led_number, int *chan_nr) >>>>>> { >>>>>>           int ret; >>>>>> >>>>>>           of_property_read_string(np, "chan-name", >>>>>>                                   &cfg[led_number].name); >>>>>>           of_property_read_u8(np, "led-cur", >>>>>>                               &cfg[led_number].led_current); >>>>>>           of_property_read_u8(np, "max-cur", >>>>>>                               &cfg[led_number].max_current); >>>>>> >>>>>>           ret = of_property_read_u32(np, "reg", chan_nr); >>>>>>           if (ret) >>>>>>                   return ret; >>>>>> >>>>>>           if (chan_nr < 0 || chan_nr > cfg->max_chan_nr) /* side note: >>>>>> new >>>>>> max_chan_nr property needed in cfg */ >>>>>>                   return -EINVAL; >>>>>> >>>>>>           return 0; >>>>>> } >>>>>> >>>>>> static int lp55xx_parse_mutli_led_child(struct device_node *np, >>>>>>                                           struct lp55xx_led_config >>>>>> *cfg, >>>>>>                                           int child_number, >>>>>>                                           int color_number) >>>>>> { >>>>>>           int chan_nr, color_id; >>>>>> >>>>>>           ret = lp55xx_parse_common_child(child, cfg, child_number, >>>>>> color_number, >>>>>>                                           &chan_nr); >>>>>>           if (ret) >>>>>>                   return ret; >>>>>> >>>>>>           ret = of_property_read_u32(child, "color", &color_id); >>>>>>           if (ret) >>>>>>                  return ret; >>>>>> >>>>>>           cfg[child_number].color_components[color_number].color_id = >>>>>> color_id; >>>>>> >>>>>> cfg[child_number].color_components[color_number].output_num = >>>>>> chan_nr; >>>>>>           set_bit(color_id, &cfg[child_number].available_colors); >>>>>> >>>>>>           return 0; >>>>>> } >>>>>> >>>>>> staitc int lp55xx_parse_mutli_led(struct device_node *np, >>>>>>                                     struct lp55xx_led_config *cfg, >>>>>>                                     int child_number) >>>>>> { >>>>>>           struct device_node *child; >>>>>>           int num_colors = 0, i = 0; >>>>> s/, i = 0// >>>>> >>>>>>           for_each_child_of_node(np, child) { >>>>>>                   ret = lp55xx_parse_mutli_led_child(child, cfg, >>>>>> num_colors, >>>>>>                                                      child_number, i)) >>>>> Replace above call with below: >>>>> >>>>> ret = lp55xx_parse_mutli_led_child(child, cfg, child_number, >>>>> num_colors); >>>>> >>>> I applied your DT parser patch from the v13 series.  Which eliminates >>>> this comment correct? >>> Yes, it contains this fix. >>> >> OK I added your patch and it broke a lot of the DT parsing for the LP55xx. >> >> I would prefer to stick with the original code without having to >> re-write this again. > Let me test that with Qemu first. > max_channel is never set so not sure where that is supposed to come from since each child device has different number of channels.  And if the user has to populate that information from the DT then it does not make sense as the user would already be aware of the number of channels.  This information would have to come from the child device some how and the children do not have access to the structure to set it. In checking the chan_nr to the max_channels you are comparing a pointer to an integer.  Easy fix but did not solve the registration issues. cfg->num_colors is not set anywhere so the registration always goes to base led_registration.  Unless we key off a different value to determine to register to multicolor class or not.  Or we default this to the multi_class registration to figure out how to register based on available_colors. That is what I am seeing so far in my debugging and I still don't have it working. Dan