From nobody Fri Apr 3 01:22:51 2026 Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CCE0E2F5308 for ; Sun, 15 Feb 2026 14:14:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771164884; cv=none; b=aYE7oD3mv/ZcJzrBIvGTY/192z8H5LN9f8E7cfpDqcgD4dP/RJACngDGCLAx7vSRbx/pvlflej+oMqBwTvqv7VDJlXBoMzxBXwkvI/kl1/BOXKhpHfu2z7JIrA1gh4Evn36239DcCv630tUUzd4oUcL34rbBXvbN9E0FthwPNhk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771164884; c=relaxed/simple; bh=jcchjRNCvGfItTeDkLXOz0hsgTUAvNyiOuc4FYzs1hc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AM6kJJRwIdGdI7TpXHV5969PjtLWq0NJGrmyIRwWJoMDM6YjQKN5d9dzN5RUO5Bfuj2B6Z46bYiK3A2HSClDVTazydkEX02yO3GikvnhcfEluMgKgzfSep3irt6UXAGYriqfl9o7k5SYNcGR2Ii8GuIHSMnVIwxR3m4EMvOiQ+w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=MvUWp5gh; arc=none smtp.client-ip=209.85.208.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="MvUWp5gh" Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-65bfc858561so438578a12.2 for ; Sun, 15 Feb 2026 06:14:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771164881; x=1771769681; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=DooOO52QZ+8TB3pgOr/A4ea8lODlOP66uM7pu3OXrv4=; b=MvUWp5ghKbViYw73qLUbDZo0dnpS9AiGx3Hp4ILLu4qpwCAeVH2VGoGN41/Hh1oTx9 Ii0ZXVYhOmOXFUtXTA9B1O3BeeUcgw6YNA8xLO/O7r3Q/Xezv0iFrCs7gQteW8JdrtWT knjZvINHl1KH6QBQ6WciAosLYWlR66yKEUVXJp4vzc0o2d/Vg4+Tu4aVMEEbS4j+OV/K yifuCuFaVPd4wxVZT1afYrJjjb1EuL6M6vVTGj2u5VZnzXWZ7WlTnzN5b3DXwtS5Ogqe thb4wlijr9jkLVvwN+WNgjGoGbhUq5hBuyY5+rPIJKt4ceIvmszVN44lPwrBZKJQeMGo Bflg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771164881; x=1771769681; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=DooOO52QZ+8TB3pgOr/A4ea8lODlOP66uM7pu3OXrv4=; b=OrZwmjlylTsxM62q+7u5eO7eIatYwrVxXso6aq1pRl1Gw5aIier4gKxpp/4BHV18sl E6ACqSTyTLumVMe7YmuYc2Em3pQlmKOAoScq7f/dh3ly4p7NGHzoVfRm+YEHypm8tLMw nwrmtnYL8/TpdgQQxApMJp/mKX7P+wcXpxoeUvWaM1o1DAz9SseFZLsE9PTCVAvLqR9h KCoJ/0b7nbY69PmStnP+T6NVNNiCsKeu8P00aXe81itj/fS6kuiBYpDqvcGk1vJTsTTp To9lGaLuXpaWLF7MdcOH4qMas2GmA+sZMCPY5LWeQwCWgwv/17xdYjLS6e32E9uWyADi r1QQ== X-Gm-Message-State: AOJu0YxTXJZxC2LwcljGqH256Cs62M1sZAGXpPjYxlZSQZ7cJBY8PlAJ IC4/2FzuPnXwTFzz01HO8j6Jcvn0i1npFMcWmaAHX3NIk9ipljlzX5ew X-Gm-Gg: AZuq6aLgfk9rc3dol9+S6RmHOYujp/RoF0jUiAeYBE2rYODoxpYbT31rCrhYMdIIWx3 yOqXGsGuqZwCugB3efnQtfSoCnBu1rTU9/zyANsXbeun7uGbBbca8sWLd8QE/20cbC4i9j1crNp xjrrKSn6PC+c0Ku0Qjadr+dEpU4k3YNzBqPKu59Vyd72WlCjZ3RYDWmvQSEAEr0OSyCI0Kt6Iuf J5Ty+Ta9uulhWkadQrDXLf9zhM/8defV8Uy4Ff+emxvJ1GssFnDdtOppd3Vt+bbJKAPxAsQ59fU tCOX6M8K2MNAfQlK48D9qAn/4VjPU41Qq8MzEjCffoqrim0pULOz/TBu2R1DFE1jHhyeXm88P94 9XU29D+7GTh7Bl+pnxJJbqOEJjbtFP0fNP0Rpk3NsNm8DXKR/ta4qoail2EJx7ouUC4LN6XSQt2 e1FgLAoMnsNFOher3gnr0RGlQE X-Received: by 2002:a05:6402:27d3:b0:659:4a1f:c6a8 with SMTP id 4fb4d7f45d1cf-65bc785cd09mr2229711a12.12.1771164881195; Sun, 15 Feb 2026 06:14:41 -0800 (PST) Received: from jekhomev ([46.251.53.180]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-65bad29df12sm1518889a12.14.2026.02.15.06.14.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 15 Feb 2026 06:14:40 -0800 (PST) From: Yauhen Kharuzhy To: Dmitry Torokhov , linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Hans de Goede Subject: [PATCH v2 5/5] input: drv260x: Handle calibration timeout Date: Sun, 15 Feb 2026 16:14:35 +0200 Message-ID: <20260215141435.727872-6-jekhor@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260215141435.727872-1-jekhor@gmail.com> References: <20260215141435.727872-1-jekhor@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If something goes wrong during calibration (for instance, if the 'enable' GPIO was not properly defined), the GO bit may not be cleared after some time, causing the driver to get stuck. To prevent this, add a timeout check to the waiting loop and return an error if it times out. Signed-off-by: Yauhen Kharuzhy --- drivers/input/misc/drv260x.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/input/misc/drv260x.c b/drivers/input/misc/drv260x.c index 71fbdabc6589..7ab891210fad 100644 --- a/drivers/input/misc/drv260x.c +++ b/drivers/input/misc/drv260x.c @@ -166,6 +166,12 @@ #define DRV260X_AUTOCAL_TIME_500MS (2 << 4) #define DRV260X_AUTOCAL_TIME_1000MS (3 << 4) =20 +/* + * Timeout for waiting for the GO status bit, in seconds. Should be reason= ably + * large to wait for a auto-calibration cycle completion. + */ +#define DRV260X_GO_TIMEOUT_S 5 + /** * struct drv260x_data - * @input_dev: Pointer to the input device @@ -309,6 +315,7 @@ static int drv260x_init(struct drv260x_data *haptics) { int error; unsigned int cal_buf; + unsigned long timeout; =20 error =3D regmap_write(haptics->regmap, DRV260X_RATED_VOLT, haptics->rated_voltage); @@ -398,6 +405,7 @@ static int drv260x_init(struct drv260x_data *haptics) return error; } =20 + timeout =3D jiffies + DRV260X_GO_TIMEOUT_S * HZ; do { usleep_range(15000, 15500); error =3D regmap_read(haptics->regmap, DRV260X_GO, &cal_buf); @@ -407,6 +415,11 @@ static int drv260x_init(struct drv260x_data *haptics) error); return error; } + if (time_after(jiffies, timeout)) { + dev_err(&haptics->client->dev, + "Calibration timeout. The device cannot be used.\n"); + return -ETIMEDOUT; + } } while (cal_buf =3D=3D DRV260X_GO_BIT); =20 return 0; --=20 2.51.0