Received: by 10.213.65.68 with SMTP id h4csp1508258imn; Mon, 19 Mar 2018 06:12:27 -0700 (PDT) X-Google-Smtp-Source: AG47ELuSZX7GFNlMFHliyDMewmuHAJ+ZTa6Dq97DVwyV5CpIowqIVanW2VeMHydYP/L36mzjMQFS X-Received: by 2002:a17:902:ab84:: with SMTP id f4-v6mr12726627plr.239.1521465147325; Mon, 19 Mar 2018 06:12:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521465147; cv=none; d=google.com; s=arc-20160816; b=OBWX3YtLeGC7qwj4HtIRpyc9Q0vB9jmP5iNVGSjFFRoB//05BmMjTWSI0nb59nr1ql X0AAWACvqo7IMAF4stX/jIVl0zKbLjk3VkH01S+6Efo7n3H3E0/4itf0wXktO2xBl0Oc FsKQbFM3vVVyT9P78tQ+C/yds3R9znVlNSc75a+/NRGkLEDbNJZgso+0ACMt4ceXR9L+ xm+gFxjxtQ5OeUfbrpa7BvoEBRKntDZ8PknKyoDuM59lm/2la9crf1FqG7RslDX9aAZN uJsVjPTewDl+KeMwZ0qBhl+MKsPHbRcSEGuUcUYnWGyjTkPiN5vKJLd5I2bAEBR/zWPx s9xw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=CxH4+2kCwMZn1mwXz82tc4BbF6zZ/gjYOjf0bdKqZfs=; b=cOOpiRh25YV4QwFn1JdncOPIj6rZtjoeWfl8wcY/hyZ8JvNDVOSwSTDuwMUGTEsMu5 LscL2lyBYo/qkGKDI5vvIS9M6oEXpgTkhWJ/rOsx1eUAcWnmPsTKbyMKr2sb8gRZR3Ag Voe31Ws8t82piI4v+IakmvPBY6EP4TgVkhfzQU605+Arx/sw9T+lPjdb1Nsu45qd7Lta QBwuVxf+OanABwE3gz06I7+bs20HmybZmEjB+TQXeXcWP/3Og8s7nloS1RETgylqhZtB eZ5u/eNhWXuVXec859mkGcyBLW8K47yo+8jhiEmCPVKtr/nvTiEIPAn8rrWdcj1uLX0j 1qWQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=BPUPgFQl; 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 b6-v6si9315844plz.417.2018.03.19.06.12.11; Mon, 19 Mar 2018 06:12:27 -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=@gmail.com header.s=20161025 header.b=BPUPgFQl; 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 S932967AbeCSNJx (ORCPT + 99 others); Mon, 19 Mar 2018 09:09:53 -0400 Received: from mail-wr0-f195.google.com ([209.85.128.195]:38327 "EHLO mail-wr0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932415AbeCSNJw (ORCPT ); Mon, 19 Mar 2018 09:09:52 -0400 Received: by mail-wr0-f195.google.com with SMTP id l8so18529424wrg.5 for ; Mon, 19 Mar 2018 06:09:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=CxH4+2kCwMZn1mwXz82tc4BbF6zZ/gjYOjf0bdKqZfs=; b=BPUPgFQlUuJUxs9tkCzze3G8zDI4Fp2dZtILvC8BIhtZZ3tnmh1ZDONdvc8p76XEez I/4WtIJxtLitcRzd9+HXJXRQM4MRb2MB9B2LOUIcrptXFivuJcBYgRX6r9ihZvtPG+p2 uYXr9o9QkZcAGIFbAgzjnEGnkCPXFLWm6baB3hqQqHNT1OwRcj0LQLqJzwv3ZclMNSp/ NX423/yMMjvlPuFeKItuCQg6zeuaGbQwfuu8F5gVZtqeaCOW5Bg9+7eP5Kc6ehcSH5Lq 77/DyGrgXiAXwQaQgwpC/Yjkgoonoh7HXvQSLnJFGPbAf90WqW9/O1LLMF0KttVJhRh3 Y48w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=CxH4+2kCwMZn1mwXz82tc4BbF6zZ/gjYOjf0bdKqZfs=; b=Nl/fxpuWWULimW8P2odhaGB13zFhNBi5x8JlkP5+pEMGsn24r0LgFLdBs3s9Z3MQFg BgNecox1a1OOi0gDTPvhOalSWoDo2kJyhgRVVlperwZ5rsDq2SjjJkS/1gb7IOkdarf7 uwUl0iyRrC/ZaDft5ftQwFm9Xq/1jvOXGS2WwhMntl+u8BhViUH4uyVTxRNvL8RodsAL 4T/UDejUKLyN4qatkYX/g/Dcf/O5+eeQxboCoggjNwEOgngZ9gxZYDDkCJc9aZgJiYm8 TIOu7UW/rJliVbQNaNCWDrm5ryWxqTh8U4L1auwSeOnoNvITm9hKT6By0kWWUouSiDaw Pyiw== X-Gm-Message-State: AElRT7Fph38ofkew+GqP7SM/TYReGSv+jg4s1vyFWhsIAd9vNcTJNLoI xvn2ZD/TqaPV8dSYEBp4DcZ8p2WyXRstUBODlcM= X-Received: by 10.223.187.147 with SMTP id q19mr8793439wrg.150.1521464990736; Mon, 19 Mar 2018 06:09:50 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.179.86 with HTTP; Mon, 19 Mar 2018 06:09:49 -0700 (PDT) In-Reply-To: References: <1521018736-20980-1-git-send-email-hl@rock-chips.com> From: Emil Velikov Date: Mon, 19 Mar 2018 13:09:49 +0000 Message-ID: Subject: Re: [PATCH v4 1/3] drm/panel: refactor INNOLUX P079ZCA panel driver To: hl Cc: Thierry Reding , Brian Norris , Rob Herring , Sean Paul , David Airlie , "Linux-Kernel@Vger. Kernel. Org" , ML dri-devel Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 15 March 2018 at 02:35, hl wrote: > Hi Emil, > > > > On Wednesday, March 14, 2018 08:02 PM, Emil Velikov wrote: >> >> Hi Lin, >> >> On 14 March 2018 at 09:12, Lin Huang wrote: >>> >>> From: huang lin >>> >>> Refactor Innolux P079ZCA panel driver, let it support >>> multi panel. >>> >>> Change-Id: If89be5e56dba8cb498e2d50c1bbeb0e8016123a2 >>> Signed-off-by: Lin Huang >>> --- >>> Changes in v2: >>> - Change regulator property name to meet the panel datasheet >>> Changes in v3: >>> - this patch only refactor P079ZCA panel to support multi panel, support >>> P097PFG panel in another patch >>> Changes in v4: >>> - Modify the patch which suggest by Thierry >>> >> Thanks for splitting this up. I think there's another piece that fell >> through the cracks. >> I'm not deeply familiar with the driver, so just sharing some quick notes. >> >> >>> struct innolux_panel { >>> struct drm_panel base; >>> struct mipi_dsi_device *link; >>> + const struct panel_desc *desc; >>> >>> struct backlight_device *backlight; >>> - struct regulator *supply; >>> + struct regulator *vddi; >>> + struct regulator *avdd; >>> + struct regulator *avee; >> >> These two seem are new addition, as opposed to a dummy refactor. >> Are they optional, does one need them for the existing panel (separate >> patch?) or only for the new one (squash with the new panel code)? >> >> >>> struct gpio_desc *enable_gpio; >>> >>> bool prepared; >>> @@ -77,9 +93,9 @@ static int innolux_panel_unprepare(struct drm_panel >>> *panel) >>> /* T8: 80ms - 1000ms */ >>> msleep(80); >>> >>> - err = regulator_disable(innolux->supply); >>> - if (err < 0) >>> - return err; >> >> Good call on dropping the early return here. >> >> >>> @@ -207,19 +248,28 @@ static const struct drm_panel_funcs >>> innolux_panel_funcs = { >>> - innolux->supply = devm_regulator_get(dev, "power"); >>> - if (IS_ERR(innolux->supply)) >>> - return PTR_ERR(innolux->supply); >>> + innolux = devm_kzalloc(dev, sizeof(*innolux), GFP_KERNEL); >>> + if (!innolux) >>> + return -ENOMEM; >>> + >>> + innolux->desc = desc; >>> + innolux->vddi = devm_regulator_get(dev, "power"); >>> + innolux->avdd = devm_regulator_get(dev, "avdd"); >>> + innolux->avee = devm_regulator_get(dev, "avee"); >>> >> AFAICT devm_regulator_get returns a pointer which is unsuitable to be >> passed into regulator_{enable,disable}. >> Hence, the IS_ERR check should stay. If any of the regulators are >> optional, you want to call regulator_{enable,disable} only as >> applicable. > > > devm_regulator_get() will use dummy_regulator if there not regulator pass to > driver, so it not affect regulator_{enable, disable}. One of us is getting confused here: devm_regulator_get does not _use_ a regulator, it returns a pointer to a regulator, right? According to the 4.16-rc6 codebase - one error devm_regulator_get returns a ERR_PTR [1]. With the pointer dereferenced in regulator_enable [2], without a IS_ERR check, hence thing will go boom(?) > These three regulator are > optional, > the p079zca will use "power" and , > so i think it better not to check ERR here. > What should happen if p079zca is missing "power" or p097pgf - "avdd" and "avee"? Obviously the latter two should be introduced with the p097pgf support. HTH Emil [1] https://elixir.bootlin.com/linux/v4.16-rc6/source/drivers/regulator/devres.c#L27 [2] https://elixir.bootlin.com/linux/v4.16-rc6/source/drivers/regulator/core.c#L2189