From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 637B1C9830E for ; Fri, 25 Sep 2026 20:36:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type:MIME-Version:Message-ID:References:In-Reply-To:Subject:CC:To: From:Date:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=4RNJ5nQR9k5gmyuH0UoJLYl6j03ODsgZ0SnhdOWBbVs=; b=czLftz/3coQ6YGmC4X9e6epwZm qSENDT0nmfcXsOO91wJE8qSfIyhF5GcDC+5VBSYGmrjoEEfX8sUAUNbT3aLhFQ/dMnR+jZajMLFKX WlHMiwAVQFLRXj8yBrbxA9kP3y+3oEV8EDGI3MTJTiz8t/SIvylJlOB5htFlYlIK1TDEKpXSrhZP3 KuMrNasrsIB3MORmDtY+PkjTxFu6IsqdudpHikfmJPdhoHfg3fR+8hpumIoGcF8JCGxShlJt+9ryI Xlufkhbq4IHIngHKMZ5h6QpRqXW5M5Kz92135tGBjzh4Hdgzq5IBdKTf/I7OPVw0scDllnON/93Zq 2b4PV3vg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1xACei-0000000EOtQ-30ul; Fri, 25 Sep 2026 20:36:28 +0000 Received: from mail-dl2-x10.google.com ([2607:f8b0:4864:38::10]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1xACeg-0000000EOsq-15R9 for linux-arm-kernel@lists.infradead.org; Fri, 25 Sep 2026 20:36:27 +0000 Received: by mail-dl2-x10.google.com with SMTP id a92af1059eb24-142dd04f7f2so1098636c88.0 for ; Fri, 25 Sep 2026 13:36:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790368585; x=1790973385; darn=lists.infradead.org; h=content-transfer-encoding:content-type:mime-version:message-id :references:in-reply-to:user-agent:subject:cc:to:from:date:from:to :cc:subject:date:message-id:reply-to:content-type; bh=4RNJ5nQR9k5gmyuH0UoJLYl6j03ODsgZ0SnhdOWBbVs=; b=XiazYPKqQiFh8Isv3wiII3toimdIyzv4Fy358xJmffmPUTVCaS1kQl4HyhwA57Egy8 xHVXGzaS5RR5fCy5POz1a6hY0f3GYRQsSNAES672pAw0WvD8Yd5gSwl40QZ8+c/ME5ZF YM+JIkOFmY4qhhz+EsDo+0lBIzfRhUdQaZK8ELVnRNOGCZxFFMVa4TTCUYV7+sJKxHZ3 gG7a7ys4Mce6L6GBvG9zTC7KCetMZezuj3Np3ytvWherPcnTftIw6Xan3k7gT92uY+ZF 4I6XuXPlHHGjtrv9qqqoiKtB1Avxy7Eu6nPX9U9IjESISQRjCHtCWtiQDH5qkqUbqJQh +2yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790368585; x=1790973385; h=content-transfer-encoding:content-type:mime-version:message-id :references:in-reply-to:user-agent:subject:cc:to:from:date:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=4RNJ5nQR9k5gmyuH0UoJLYl6j03ODsgZ0SnhdOWBbVs=; b=tC8nIP+fZf/ssHesRX7PN+sB4Bf5+/KIsgWoGm1h4N6CmafqBtSNCEAeQ9c0Y41QHO rFngg5o/EhvjFBBh+fNsD6VTzwhX1Gk6XukzhxCoFVnuMZqixI6nk1m6CG5LU8CQrbCt M+VrCChX4taKTBfXH3OjZF0B+cwAJUS2Vj2y+gLMoiqwSpSA9T21Itz056DVJeyoEuFt onR/LHeEJ6kfaQ0VqjJ8LluJ9bOFMYpdot+KzTdI2aoOzmqSLIowLrlaxpctZlKkv8M2 UnGNt16/c31KUDWdjWscAkSPjRp+lp1LBQvuM3kYCevLhcvf/QkL/O+T45Y1MxQd3aZX 6QeA== X-Forwarded-Encrypted: i=1; AKwUvBzblyIsYzZPBjkqY6ytCJDpfPjFvSp3wnx7frJJHAfED+2Lr1M74yfP2l1SAz36oHc9qGmnIdM4bJpxH2ciBI4o@lists.infradead.org X-Gm-Message-State: AFuF++kLzEwEQU2yAwZPJQhNdsWDpGkHD36mVqjrqZu6nzQtSNgPZ1xO qYhMlLfIScRAisqCvP9YT+eLl+kS0KM83feUIkpkrqMWJzqcFqtRbbsH X-Gm-Gg: AYBFou1tDtWPAhUKP6EkNjvoWs5hJZed0+9E2MjnV3bfZNgw6Sf5dwtQXkHU+ifMdb0 Yd2PdmjGDEdwyvhTiOn8rgC1brAwkxw0VihgR2D3IRNVD/z/vimR2Y1o+xj3C7ztqcoVakGMfKq YPEz8w6uRCi+R/9iHqR4QaWYcSbz9/hN1rOP7pZCrVP51VsSzCKG38CdtDCnjYhh3n01svz3+LN x27+0eoXq7kXlBxwPn1CpWG6VZqRBa3NxwYtj62xBV0YHFxcj/2GnZuracF/UN0erwtAnkmbmIC n48sBqnOCjESBpTxsTZbd72Phekak4jMIHxhRidGBADItyw05Z9SvpT6JUECzFOUNIZXXVw/NcJ haTpj1vmYrCIqaWkezqpdNUzNqrWsKerJC3Pcn6DlWDoV6IooJ+naEJEZ+VpK1o5KXdANiGc0Gn ZfY2/JOw3u/hBTZoyPBn/DJ8RXOCBXF84PXqQNvmNwLW1xmDiIzDYGWxHR/6jxLjdf7NATYxEU5 JhiZ4MfT61c87jrotQ/JVsQqliPESraqfUW755UroPU6PyOF55xCFGwoALgq+sSuAjUPA== X-Received: by 2002:a05:701b:4346:b0:13e:aa58:89f8 with SMTP id a92af1059eb24-146ce86dbddmr949798c88.15.1790368585236; Fri, 25 Sep 2026 13:36:25 -0700 (PDT) Received: from ehlo.thunderbird.net ([2a00:79e1:2e00:6c01:e929:591c:a76d:ca9c]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-145ad9e097fsm8107732c88.13.2026.09.25.13.36.24 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 25 Sep 2026 13:36:24 -0700 (PDT) Date: Fri, 25 Sep 2026 13:36:24 -0700 From: Dmitry Torokhov To: David Heidelberg CC: Maxime Coquelin , Alexandre Torgue , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Henrik Rydberg , Bjorn Andersson , Konrad Dybcio , Petr Hodina , linux-input@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, stable@vger.kernel.org Subject: =?US-ASCII?Q?Re=3A_=5BPATCH_v7_1/4=5D_Input=3A_stmfts_-_w?= =?US-ASCII?Q?ait_for_controller_ready_after_reset?= User-Agent: K-9 Mail for Android In-Reply-To: References: <20260907-stmfts5-v7-0-4a53381cd038@ixit.cz> <20260907-stmfts5-v7-1-4a53381cd038@ixit.cz> Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260925_133626_304162_56446F54 X-CRM114-Status: GOOD ( 22.26 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On September 25, 2026 1:20:56 PM PDT, David Heidelberg wr= ote: >On 25/09/2026 21:27, Dmitry Torokhov wrote: >> Hi David, >>=20 >> On Mon, Sep 07, 2026 at 12:50:19PM +0200, David Heidelberg via B4 Relay= wrote: >>> -static void stmfts_reset(struct stmfts_data *sdata) >>> +static int stmfts_reset(struct stmfts_data *sdata) >>> { >>> gpiod_set_value_cansleep(sdata->reset_gpio, 1); >>> msleep(20); >>> + reinit_completion(&sdata->cmd_done); >>> gpiod_set_value_cansleep(sdata->reset_gpio, 0); >>> - msleep(50); >>> + enable_irq(sdata->client->irq); >>> + >>> + if (!wait_for_completion_timeout(&sdata->cmd_done, >>> + msecs_to_jiffies(STMFTS_RESET_TIMEOUT_MS))) >>> + return -ETIMEDOUT; >>> + >>> + return 0; >>> } >>> static int stmfts_configure(struct stmfts_data *sdata) >>> { >>> int err; >>> err =3D stmfts_command(sdata, STMFTS_SYSTEM_RESET); >>> if (err) >>> @@ -593,42 +602,47 @@ static int stmfts_power_on(struct stmfts_data *s= data) >>> return err; >>> /* >>> * The datasheet does not specify the power on time, but considerin= g >>> * that the reset time is < 10ms, I sleep 20ms to be sure >>> */ >>> msleep(20); >>> - if (sdata->reset_gpio) >>> - stmfts_reset(sdata); >>> + if (sdata->reset_gpio) { >>> + err =3D stmfts_reset(sdata); >>> + if (err) { >>> + dev_err(&sdata->client->dev, >>> + "controller not ready after reset: %d\n", err); >>> + goto err_disable_irq; >>> + } >>> + } else { >>> + enable_irq(sdata->client->irq); >>> + msleep(50); >>> + } >>> err =3D stmfts_read_system_info(sdata); >>> if (err) >>> - goto err_disable_regulators; >>> - >>> - enable_irq(sdata->client->irq); >>> - >>> - msleep(50); >>> + goto err_disable_irq; >>=20 >>=20 >> I think the logic is becoming quite convoluted here, and factored out >> stmfts_reset() does not help=2E How about we make it look like this: >>=20 >> static int stmfts_power_on(struct stmfts_data *sdata) >> { >> int err; >>=20 >> if (sdata->reset_gpio) { >> gpiod_set_value_cansleep(sdata->reset_gpio, 1); >> /* a short delay before powering up */ >> usleep_range(1000, 1500); >> } >>=20 >> err =3D regulator_bulk_enable(ARRAY_SIZE(stmfts_supplies), >> sdata->supplies); >> if (err) >> return err; >>=20 >> if (sdata->reset_gpio) { >> reinit_completion(&sdata->cmd_done); >>=20 >> /* >> * The datasheet does not specify the power on time, but >> * considering that the reset time is < 10ms, sleep for 20ms >> * to be sure before releasing reset line=2E >> */ >> msleep(20); >> gpiod_set_value_cansleep(sdata->reset_gpio, 0); >>=20 >> enable_irq(sdata->client->irq); >>=20 >> if (!wait_for_completion_timeout(&sdata->cmd_done, >> msecs_to_jiffies(STMFTS_RESET_TIMEOUT_MS))) { >> dev_err(&sdata->client->dev, "controller not ready after reset"); >> err =3D -ETIMEDOUT; >> goto err_disable_irq; >> } >> } else { >> /* >> * We do not know the real controller state (was it powered >> * off or reset)=2E Let's hope that this is enough time to >> * initialize=2E >> */ >> msleep(70); >>=20 >> enable_irq(sdata->client->irq); >> } >>=20 >> err =3D sdata->ops->configure(sdata); >> if (err) >> goto err_disable_irq; >>=20 >> /* >> * At this point no one is using the touchscreen >> * and I don't really care about the return value >> */ >> (void)i2c_smbus_write_byte(sdata->client, STMFTS_SLEEP_IN); >>=20 >> return 0; >>=20 >> err_disable_irq: >> disable_irq(sdata->client->irq); >>=20 >> regulator_bulk_disable(ARRAY_SIZE(stmfts_supplies), sdata->supplies); >> return err; >> } > >Thanks, it seems to be better (thou would be nicer if we didn't have two = branches, but=2E=2E=2E what we can do)=2E That's that enable_irq() in the middle=2E=2E=2E We could have more "ifs" b= ut that also looks ugly=2E=20 > >I added you as Co-developed-by :) Thanks but I don't think the change was large enough to warrant it=2E --=20 Dmitry