Received: by 2002:a05:6358:7058:b0:131:369:b2a3 with SMTP id 24csp5925408rwp; Mon, 17 Jul 2023 11:39:40 -0700 (PDT) X-Google-Smtp-Source: APBJJlG25RPSXTvJ6jL9mD4B9+A2xSyIGsfZTJQTXNR5zpgZDwypbxZ677Wy95RsZ/nHq7Aeq5C8 X-Received: by 2002:a17:902:e80e:b0:1b8:8702:1e7c with SMTP id u14-20020a170902e80e00b001b887021e7cmr13392248plg.33.1689619179771; Mon, 17 Jul 2023 11:39:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689619179; cv=none; d=google.com; s=arc-20160816; b=NGAkP5CMfk1qP/FBUXjz9IT1FWJb575jT4hOxDqHcCwpR4XNDhwPSmToZPCu5hzEtW znGvHKuy+c4QfaxevWi5Qg/ztNXkZXJmIibWXFzn4IKMJ1jIYSjO0q5ttcKG9QrR751l ETGGslEVf1Qcn3J3F18nxl3oQCfXll8scrA6UYaIj8jFxy09DK8jUG8dqXU+wuD3MHeF s3e4POgaSJykWK0epbDxfHqdUWUrE7FwwGeEfidt23TLOhPKcNupZtSro58Nxnx2Fzqq tmIyUH1MoRjdvD6538/7OXf6A8lqDnTNwEfpW1qZPr9qcjg+vT//KNxZrvD/zAC+3gg6 EAcA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=gBT59eXOnf3KTalJp8jVCEWyvpGqdiSZWUb72TIw1fk=; fh=JOPhLKnuxpzKPfE1jphcv5GLQjdU2Hc+xMZK6t10rAM=; b=JjYJIMDEqP9RmzVuU9nzT4Jsd1frHhJ6LydTd46nM/eAEGAxrgKkrjsLzmr3ZEL+Tn GpoiE0dD6QPTdlpim4ADG9CRM9jC9ZUuWbLykwK4zof2Fa2MWeulc+/D/1FghkwwaX46 74M0FeolfodNgh4bHnQ4QpHfjzSDVEq38VhtcCc5gNmm2D4Fgnum2WmPci6i7LeNTnm5 wtK1RiK7eeUVMNk/A6VVdGKbKDh1x854cs383Iux6RIuQqHrpdvZ7p6+gd1tDIO6BCCo CvgCtEUiZcdmcYu9z2z5Gi61NE+Nz300/uu2+wdLPa1wr7PGHIOnIvDPcGM7iOjaGL9G x69Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=KJu3CcBw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id lc11-20020a170902fa8b00b001b9db68a5fesi230273plb.164.2023.07.17.11.39.26; Mon, 17 Jul 2023 11:39:39 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=KJu3CcBw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229926AbjGQSXS (ORCPT + 99 others); Mon, 17 Jul 2023 14:23:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52590 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231896AbjGQSWy (ORCPT ); Mon, 17 Jul 2023 14:22:54 -0400 Received: from mail-ed1-x52a.google.com (mail-ed1-x52a.google.com [IPv6:2a00:1450:4864:20::52a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1CD7919B2 for ; Mon, 17 Jul 2023 11:22:44 -0700 (PDT) Received: by mail-ed1-x52a.google.com with SMTP id 4fb4d7f45d1cf-51e28b299adso6762430a12.2 for ; Mon, 17 Jul 2023 11:22:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1689618162; x=1692210162; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=gBT59eXOnf3KTalJp8jVCEWyvpGqdiSZWUb72TIw1fk=; b=KJu3CcBwU39wnjlg6pfQM/DeSyqEnbwuTWdTqLVFeJ6tpceErInaaLx9UpxizS8hxG ILaYm8c9xi6az3dfvpcdnZ0NIcU0mKShfbmetZFecyXZEtaAg2wsUKeigYMX61IrQ2+f LRIdENBIugSSNcjfyjObkSx/+eYsoCgIkyAEg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689618162; x=1692210162; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gBT59eXOnf3KTalJp8jVCEWyvpGqdiSZWUb72TIw1fk=; b=hDDKbalwXrzhMGAO1QrJJv2O9BjmYNISR62plAeIryWwXFiCjb/N0fr5vDYExzh4Ox usYnuOl2jOXmDOuqN/MyFPc1PXH068sFELZ/fPpbQ00ngeu08rdsYN6WD0k7YXLKzFVV BPE55P23e1sXZhg52kD7tFusJWbIhFi99M69yYP5kk6O4fPu+o4RRxvAiC2QIiauRk6t K0diLdVq/F2H35vGlWNjNHPMuVmMEW5llMrF2Dp823kUY+bzmbTLioU5Qnlrp4jsIN5Z /ft8uM8r3vseY4z0n1Rlq5L7aSx4zr0H/igx68WBUjKeRCuODU4/0Tr02BaXZCj3i0b9 bKaw== X-Gm-Message-State: ABy/qLaDINeeih4MSnr/CMW7s47kOoSO84PmdIMUyieWE2zrs6JJFUzi bhgw6TvK6PhUM5UzgP+cXZ1ClZLRbAfoSG+hhQmL9SMT X-Received: by 2002:aa7:c387:0:b0:51e:26dc:b35e with SMTP id k7-20020aa7c387000000b0051e26dcb35emr9431546edq.21.1689618162196; Mon, 17 Jul 2023 11:22:42 -0700 (PDT) Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com. [209.85.128.47]) by smtp.gmail.com with ESMTPSA id r16-20020aa7d150000000b0051e19bf66a4sm10371476edo.83.2023.07.17.11.22.42 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 17 Jul 2023 11:22:42 -0700 (PDT) Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-3fbd200d354so9515e9.1 for ; Mon, 17 Jul 2023 11:22:42 -0700 (PDT) X-Received: by 2002:a50:c242:0:b0:50b:c48c:8a25 with SMTP id t2-20020a50c242000000b0050bc48c8a25mr7850edf.6.1689617747640; Mon, 17 Jul 2023 11:15:47 -0700 (PDT) MIME-Version: 1.0 References: <20230607215224.2067679-1-dianders@chromium.org> <20230607144931.v2.8.Ib1a98309c455cd7e26b931c69993d4fba33bbe15@changeid> In-Reply-To: From: Doug Anderson Date: Mon, 17 Jul 2023 11:15:35 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: [PATCH v2 08/10] HID: i2c-hid: Support being a panel follower To: Benjamin Tissoires Cc: Jiri Kosina , Bjorn Andersson , Konrad Dybcio , Rob Herring , Frank Rowand , Krzysztof Kozlowski , Conor Dooley , Neil Armstrong , Sam Ravnborg , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , dri-devel@lists.freedesktop.org, Dmitry Torokhov , linux-input@vger.kernel.org, Daniel Vetter , linux-kernel@vger.kernel.org, hsinyi@google.com, cros-qcom-dts-watchers@chromium.org, devicetree@vger.kernel.org, yangcong5@huaqin.corp-partner.google.com, linux-arm-msm@vger.kernel.org, Chris Morgan Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Benjamin, On Mon, Jun 26, 2023 at 3:49=E2=80=AFPM Doug Anderson wrote: > > Benjamin, > > On Thu, Jun 8, 2023 at 8:37=E2=80=AFAM Benjamin Tissoires > wrote: > > > > > +static const struct drm_panel_follower_funcs i2c_hid_core_panel_foll= ower_funcs =3D { > > > + .panel_prepared =3D i2c_hid_core_panel_prepared, > > > + .panel_unpreparing =3D i2c_hid_core_panel_unpreparing, > > > +}; > > > > Can we make that above block at least behind a Kconfig? > > > > i2c-hid is often used for touchpads, and the notion of drm panel has > > nothing to do with them. So I'd be more confident if we could disable > > that code if not required. > > Now that other concerns are addressed, I started trying to write up a > v3 and I found myself writing this as the description of the Kconfig > entry: > > -- > config I2C_HID_SUPPORT_PANEL_FOLLOWER > bool "Support i2c-hid devices that must be power sequenced with a panel" > > Say Y here if you want support for i2c-hid devices that need to > coordinate power sequencing with a panel. This is typically important > when you have a panel and a touchscreen that share power rails or > reset GPIOs. If you say N here then the kernel will not try to honor > any shared power sequencing for your hardware. In the best case, > ignoring power sequencing when it's needed will draw extra power. In > the worst case this will prevent your hardware from functioning or > could even damage your hardware. > > If unsure, say Y. > > -- > > I can certainly go that way, but I just wanted to truly make sure > that's what we want. Specifically: > > 1. If we put the panel follower code behind a Kconfig then we actually > have no idea if a touchscreen was intended to be a panel follower. > Specifically the panel follower API is the one that detects the > connection between the panel and the i2c-hid device, so without being > able to call the panel follower API we have no idea that an i2c-hid > device was supposed to be a panel follower. > > 2. It is conceivable that power sequencing a device incorrectly could > truly cause hardware damage. > > Together, those points mean that if you turn off the Kconfig entry and > then try to boot on a device that needed that Kconfig setting that you > might damage hardware. I can code it up that way if you want, but it > worries me... > > > Alternatives that I can think of: > > a) I could change the panel follower API so that panel followers are > in charge of detecting the panel that they follow. Today, that looks > like: > > panel_np =3D of_parse_phandle(dev->of_node, "panel", 0); > if (panel_np) > /* It's a panel follower */ > of_node_put(panel_np); > > ...so we could put that code in each touchscreen driver and then fail > to probe i2c-hid if we detect that we're supposed to be a panel > follower but the Kconfig is turned off. The above doesn't seem > massively ideal since it duplicates code. Also, one reason why I put > that code in drm_panel_add_follower() is that I think this concept > will eventually be needed even for non-DT cases. I don't know how to > write the non-DT code right now, though... > > > b) I could open-code detect the panel follower case but leave the > actual linking to the panel follower API. AKA add to i2c-hid: > > if (of_property_read_bool(dev->of_node, "panel")) > /* It's a panel follower */ > > ...that's a smaller bit of code, but feels like an abstraction > violation. It also would need to be updated if/when we added support > for non-DT panel followers. > > > c) I could add a "static inline" implementation of b) to "drm_panel.h". > > That sounds great and I started doing it. ...but then realized that it > means adding to drm_panel.h: > > #include > #include > > ...because otherwise of_property_read_bool() isn't defined and "struct > device" can't be dereferenced. That might be OK, but it looks as if > folks have been working hard to avoid things like this in header > files. Presumably it would get uglier if/when we added the non-DT > case, as well. That being said, I can give it a shot... > > -- > > At this point, I'm hoping for some advice. How important is it for you > to have a Kconfig for "I2C_HID_SUPPORT_PANEL_FOLLOWER"? > > NOTE: even if I don't add the Kconfig, I could at least create a > function for registering the panel follower that would get most of the > panel follower logic out of the probe function. Would that be enough? I'd love to send a new version of this patch series, but I'm still stuck with the above issue. I'm hoping you might have a minute to provide your thoughts. If I don't hear anything, I'll try a v3 where I don't have the Kconfig for "I2C_HID_SUPPORT_PANEL_FOLLOWER" but just try to pull a little more of the code out of the probe function. Thanks for your time! -Doug