From nobody Mon May 25 05:55:54 2026 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (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 B42FE3DDDC9 for ; Mon, 18 May 2026 07:54:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090848; cv=none; b=OUVFtbiPHCbvwYK/bci3uyeoVddLbI3EEypf6/L2Vne+bGaPK5+Q19a8d51Wc7Hl/oUOHwDFA+u6azE9WoToHgA+9IxCnEMna5oEWEFiWH2XZ5xDM2wwS/7RDTqAOQuifXyegIgY2bI96zeqPw4Jhs/7nAJF9mG/nAfnF5mL0IE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090848; c=relaxed/simple; bh=iTm+CAQk66ngIKIctcP1U8DkyFnXKgU8LB2KAj4Nf48=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=q7pQq8D9DqZMTUs9vM/bv6VmBaJl2Ukso/6aqE6scBzPso8yP8z8SXGf3Q7mQf2X+SG90RsVv7RsmWIgNAIj1HGmbwwRYzXNurXLteEGBA2vSUoq+gRF6urI2BXCjxHKvCy4e835ozV0BiYD8MttswhJGUoLlq0ZrJ9wlsYyR60= 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=duBsM5ka; arc=none smtp.client-ip=209.85.221.46 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="duBsM5ka" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-43fe62837baso977390f8f.3 for ; Mon, 18 May 2026 00:54:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779090842; x=1779695642; 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=XwWV/qMNurIkUDOKP/bbi2uYeI9zTRHL+F4n5fG2Tvg=; b=duBsM5kaIA9mJw5OtKtwGoa2FhM/zdp8B22IgETjl8ieFIXlIXTVbuSqRuLLhau3Bc ZfvJolWeIQ5DNyfG0BMOAN5hdIOZu3LdJHMLBJpxaiVTF9zO4sr/1W8w5ZuCK5YO9KHO VCtLA+Y7ZPKSYdL1rRjTZ1UD5mJpPouBpX3Q5rEvyZn63IUkgaRY85PyO0FulhASRz8a TPxQBX4mdL1Ije/XcCmGA3RvKz3nXCZyqcP+tf8aRvNNoSWwd7x9KANAGtpomT5qmDCJ wEazdIZsW8xKL3tkQy6noYcQxzPhKcg4lLR9Ol99YCvD57v3nZnMcblVKa6EIyXCdnYR 49ng== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779090842; x=1779695642; 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=XwWV/qMNurIkUDOKP/bbi2uYeI9zTRHL+F4n5fG2Tvg=; b=dRCLQPqMvPjlrW8VRUzCanzSw85l2lEltR/ufti5+eSMmHLtnY2Y0WPu7vDjLnMJ7u JlfgJRhhdt2UebFs1koD2Nh+bnoF9YlIBDmvMZPVQWEB4r9TBeFgJ80QnI3NirmUKlfk h37gNfPb9tQEzSUlTEhs2ijZhRZh4/aAD1FXU9M7c+elFJvBek+k5otVO9745sd3XMrY C1WCXceAj+zajhFdEkW3zo/7CVgOg/fakTH3HILJN+7kLKAalr5IAsTBr+zfVu9QRbAs yfcZ03bGxf1YgcV8q0lEYg47UeOQ1m3Zu0mL3OPSHtt+Acz3HovA2xEc9I2h4fHf4IT+ lDTg== X-Forwarded-Encrypted: i=1; AFNElJ8nf4D+nXFjKruvWSxg267dsJIK1+3YdC0Y8o8KAasbyTcQvPgx5l93c+6sElZqZE+vTYMGP4k0jzVPoYY=@vger.kernel.org X-Gm-Message-State: AOJu0Yy5bbpsmzIKPHmJceENCqWo1bzZwI6LIZdYM+fvp3e8tY5ixYOi L5EiaIn8n/5mj5QWQlb/DtVzOA5x2GbHlt724zKWQdjZgsF3s15wk+OY X-Gm-Gg: Acq92OERdmSLZnJSlLnLh/MGYekw9xan38zv+gllG/pq8gUtSX1BcmB6d23myHoR2nM CtJ9AksbpGT/miKu1qBVrQ/A96wqAqSanAVtA2S+sEvzWdeiZnwgjVJVwCJU3ZlGmk8/oZ23+UC iRfNYaDEipejBjmOAgkh6uMLLHdJ5crljHzRaraOmWZIYiiu8C57eSkOD1Gn/ZRhg1dpYjj5ior 2J7gcRKvqQTP8hUBSV6DZYdALSbKGKm8Ut85OTqlr7cU2b588Z8HD59r5303yZwbIfQA6/q4sIO vSExcv4rT0FxQklKmH4XZw9csGMQx2cNkdYsuqr1wGeWHS67dcwKTLeUAzzIR7rzcsvBYHUb29F ZLIgWb45uO1f7ohFF3y43ngbVDRJxcFB1/+cBdFD5JfgEFQra6PEZDaFPtO8upRepg5134EzM5G e4MvNxCWqtNcT+CFs= X-Received: by 2002:a05:600c:49a2:b0:48f:e6de:1cbb with SMTP id 5b1f17b1804b1-48fe6de1de1mr132113575e9.28.1779090841718; Mon, 18 May 2026 00:54:01 -0700 (PDT) Received: from ROG ([2a01:e11:202b:40:328e:213e:a3da:580f]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48feaf14d22sm102788835e9.3.2026.05.18.00.54.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 00:54:00 -0700 (PDT) From: "Marco Scardovi (scardracs)" To: Linus Walleij , Bartosz Golaszewski Cc: Mika Westerberg , Andy Shevchenko , linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, "Marco Scardovi (scardracs)" Subject: [PATCH 01/12] gpiolib: acpi: Use snprintf() for ACPI event name formatting Date: Mon, 18 May 2026 09:53:46 +0200 Message-ID: <20260518075357.112584-2-mscardovi95@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518075357.112584-1-mscardovi95@gmail.com> References: <20260518075357.112584-1-mscardovi95@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" Replace sprintf() with snprintf() when formatting ACPI GPIO event names and fix minor formatting inconsistencies. Assisted-by: Antigravity:gemini-3-flash Signed-off-by: Marco Scardovi --- drivers/gpio/gpiolib-acpi-core.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/gpio/gpiolib-acpi-core.c b/drivers/gpio/gpiolib-acpi-c= ore.c index eb8a40cfb7a9..64040b098e91 100644 --- a/drivers/gpio/gpiolib-acpi-core.c +++ b/drivers/gpio/gpiolib-acpi-core.c @@ -372,9 +372,10 @@ static acpi_status acpi_gpiochip_alloc_event(struct ac= pi_resource *ares, =20 if (pin <=3D 255) { char ev_name[8]; - sprintf(ev_name, "_%c%02X", - agpio->triggering =3D=3D ACPI_EDGE_SENSITIVE ? 'E' : 'L', - pin); + + snprintf(ev_name, sizeof(ev_name), "_%c%02X", + agpio->triggering =3D=3D ACPI_EDGE_SENSITIVE ? 'E' : 'L', + pin); if (ACPI_SUCCESS(acpi_get_handle(handle, ev_name, &evt_handle))) handler =3D acpi_gpio_irq_handler; } @@ -645,7 +646,7 @@ __acpi_gpio_update_gpiod_flags(enum gpiod_flags *flags,= enum gpiod_flags update) } =20 static int acpi_gpio_update_gpiod_flags(enum gpiod_flags *flags, - struct acpi_gpio_info *info) + struct acpi_gpio_info *info) { struct device *dev =3D &info->adev->dev; enum gpiod_flags old =3D *flags; @@ -1206,7 +1207,7 @@ static void acpi_gpiochip_request_regions(struct acpi= _gpio_chip *achip) NULL, achip); if (ACPI_FAILURE(status)) dev_err(chip->parent, - "Failed to install GPIO OpRegion handler\n"); + "Failed to install GPIO OpRegion handler\n"); } =20 static void acpi_gpiochip_free_regions(struct acpi_gpio_chip *achip) --=20 2.54.0 From nobody Mon May 25 05:55:54 2026 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (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 048383E122C for ; Mon, 18 May 2026 07:54:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090851; cv=none; b=B6H+D7LdeLQaatuVIYFZoQ3/weM9jMIiGs7Yspz20xQKeHGPgi/ReSiSLpOz1nhfASF66uIVh5L7snAW3mnpEi5TsOLJWc+C2DKq6rLUXNR8w99dlFDo+dHoBdxQOqlyP+AobsaMw+w819lEnnapmYQg2Tw40iRZdsvpdxiRzB4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090851; c=relaxed/simple; bh=8WXTBqMNIFhnx+3wevtqjrf8Oa5MXDmznN+ABA2Tczo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MKkq7oR/QhVHYp1EgVJ/X07tFSWbSdpYrAk+pI3LRiNN7ehfTaCtYcxspeXrWn8gO1wYYpr5NZzniWE3QcuFi/gGcKKpvclO0K8hdZTLLCGVflr6Mx6iKQ1RsfqR5e9rHbeSOlDtiXTzq7lmL2Kap1A5cAKu4hgoub9U0mAPBCU= 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=i2keNu9O; arc=none smtp.client-ip=209.85.128.49 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="i2keNu9O" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-4891d7164ddso10161995e9.3 for ; Mon, 18 May 2026 00:54:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779090843; x=1779695643; 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=okI3jpGXkOilPpvASVElza3EnDJyjYuX7GFWIHz3VNk=; b=i2keNu9OWdFMUlDbwio69D4tRisuVmYEXpIDfycV7XuF59QdfBWFiKMTm8LsMc+pDX GXwhynpcQmFKp8cVqAwAVZg6fHxnsN6SeC2dg8007zfIJsz4PDVWx4zZeyktKO9Gt4zn hxiXArqgb3fi92voRUkzBwTUt7kE9sRIgceGaQ9/qNZW26QEj7uyYOVpYhA74B+zFRnd Te9xYL64lVT2WmegkWyon1/jyc4hPlVhXfr2xypVHglE/v4CGqR6ZBFXuYn+gPibyB3Y oMpAIW+W61IvC8p5+snstsyPUecpUoVgh6vfquaFQwoNRhFTgtX/+m9AZsKFKCeJvUri CG+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779090843; x=1779695643; 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=okI3jpGXkOilPpvASVElza3EnDJyjYuX7GFWIHz3VNk=; b=mZxz5IkPmV+3gVBEsJnKw/SlSQL3odVt4VaDtE0q7vUjNiHg0BFh7RDOh3nm+CMOQT 6D3X8vvnb9s+Yf7aeH7koYy6cu9j6NkuVy3NZ2YjpnZzxwlnc6piFI9EFjUn5/I+eemH dQtbA0AYx3Ee2nNP7DzM9imKaY70une2rsNbZmoCok93F1VxA40i4TJPQXd3QwCk05tv ZV5eAMxqvjheeZex+2JarQI4DKJThZ7arFOM8Lvlobmhl/ImHO7bUiRiS7+0NX7c8e6T 0hwP39o57+yatNKNdjof0/yHa0v3XK+1uC5EfUW/2mx4yWsmW5ku5zOfFKYn4+dR+Q9S 11xA== X-Forwarded-Encrypted: i=1; AFNElJ9gzYDfOJFtQxSi7IcUn4c0bRPWppKE8bMSDGlRfx+fKRKI/O3KFXnlQ0dJdj3sqsV4KcWe/PXzA9IlVxM=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+q7jePePNGzYvYpfxCJQMAHfWVitqRl8+sqRvS6P9lULcNoP8 wQNYp+3ywAfPUe2+aIJrbjF2RNJcPcFN45xhW4WbjoJ7vFn0MnjbLdPiLh5+FB+uoGc= X-Gm-Gg: Acq92OHSu8smSaSfmA87uv+pj+almSXa42R0TQUUz+Gjs6kSqHwLQpdBN7OzY8zRjQ6 D+IZY++PG5Lzo812bHtx/hl67i3bvRJ+JmiptMPhtwFg73nAAfuVNOJfRifVoBx17LWDyaVLQ00 smSs8s5UKqg/bGwwIbhqm9LG1+wBQRb0IMq6f6T9erURnjH21vwhXKOmmNCFYhiuqELU3qkRtWm wGTVgFFLv1XmQj/drGLGOaKFzIfbiMGgMAXXomUyxJPJNMwRIbzxT1dAGvuib2MZNf5eBmtIffP TexIAF7Ck+55n23kisZR55RfaKagn51opitCOSR/cHA6OlkKnsLfxm7bARV5EFqu9OcA/hEne1p OfRYKKK3+He8LqIjXmPQbwvC4f259i5+Ok9Gh7Dd0cOZbXB4oa1OEhyhFNQsNJkh14Hcqn6WlI8 4TqhUjRe85NDEcxm0= X-Received: by 2002:a05:600c:858d:b0:48e:82b4:b54 with SMTP id 5b1f17b1804b1-48fe6514873mr166371845e9.23.1779090843109; Mon, 18 May 2026 00:54:03 -0700 (PDT) Received: from ROG ([2a01:e11:202b:40:328e:213e:a3da:580f]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48feaf14d22sm102788835e9.3.2026.05.18.00.54.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 00:54:02 -0700 (PDT) From: "Marco Scardovi (scardracs)" To: Linus Walleij , Bartosz Golaszewski Cc: Mika Westerberg , Andy Shevchenko , linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, "Marco Scardovi (scardracs)" Subject: [PATCH 02/12] gpiolib: acpi: Modernize string parsing in quirks layer Date: Mon, 18 May 2026 09:53:47 +0200 Message-ID: <20260518075357.112584-3-mscardovi95@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518075357.112584-1-mscardovi95@gmail.com> References: <20260518075357.112584-1-mscardovi95@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" Assisted-by: Antigravity:gemini-3-flash Signed-off-by: Marco Scardovi --- drivers/gpio/gpiolib-acpi-quirks.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/drivers/gpio/gpiolib-acpi-quirks.c b/drivers/gpio/gpiolib-acpi= -quirks.c index a0116f004975..761ef49b5314 100644 --- a/drivers/gpio/gpiolib-acpi-quirks.c +++ b/drivers/gpio/gpiolib-acpi-quirks.c @@ -24,14 +24,12 @@ MODULE_PARM_DESC(run_edge_events_on_boot, static char *ignore_wake; module_param(ignore_wake, charp, 0444); MODULE_PARM_DESC(ignore_wake, - "controller@pin combos on which to ignore the ACPI wake flag " - "ignore_wake=3Dcontroller@pin[,controller@pin[,...]]"); + "controller@pin combos on which to ignore the ACPI wake flag ignore_wak= e=3Dcontroller@pin[,controller@pin[,...]]"); =20 static char *ignore_interrupt; module_param(ignore_interrupt, charp, 0444); MODULE_PARM_DESC(ignore_interrupt, - "controller@pin combos on which to ignore interrupt " - "ignore_interrupt=3Dcontroller@pin[,controller@pin[,...]]"); + "controller@pin combos on which to ignore interrupt ignore_interrupt=3D= controller@pin[,controller@pin[,...]]"); =20 /* * For GPIO chips which call acpi_gpiochip_request_interrupts() before lat= e_init @@ -75,7 +73,6 @@ bool acpi_gpio_in_ignore_list(enum acpi_gpio_ignore_list = list, { const char *ignore_list, *controller, *pin_str; unsigned int pin; - char *endp; int len; =20 switch (list) { @@ -98,8 +95,20 @@ bool acpi_gpio_in_ignore_list(enum acpi_gpio_ignore_list= list, len =3D pin_str - controller; if (len =3D=3D strlen(controller_in) && strncmp(controller, controller_in, len) =3D=3D 0) { - pin =3D simple_strtoul(pin_str + 1, &endp, 10); - if (*endp !=3D 0 && *endp !=3D ',') + char pin_buf[16]; + size_t pin_len =3D 0; + const char *p =3D pin_str + 1; + + while (*p && *p !=3D ',') { + if (pin_len < sizeof(pin_buf) - 1) + pin_buf[pin_len++] =3D *p; + else + goto err; + p++; + } + pin_buf[pin_len] =3D '\0'; + + if (kstrtouint(pin_buf, 10, &pin)) goto err; =20 if (pin =3D=3D pin_in) --=20 2.54.0 From nobody Mon May 25 05:55:54 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (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 9A7E13E1684 for ; Mon, 18 May 2026 07:54:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090857; cv=none; b=mJNsGgAZQXQmf2ZWUMxKqnBFXJWu+PXEyo8Btx5biF9VIfpiSZPn1f+fJkPK3+s+ZXiuLuQF2PFYhM+BUNQfjO1ekJgW+7OlDwgnzlPwR0yl89Ive7t0RGRLxTFrdh1GdiVatGhWzyaM7u6s6opswCV6xM0Mt45R4lXBOrAxJTs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090857; c=relaxed/simple; bh=dRrJpo/RFBlXKEJiWCWaT5Y8j+cfkW+t5EzYx2I3Jmg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jv/nEAaMc3NSV1v5HnGeiybkRU+PUijqYgGDWYE19Elou3p9rspj/K49ipUK/wDFOjPmp0c+WASDmE2XzsHOjzseoxhrHb/oWxvd2cbK6LIZUrEzvtHcHvaQZljSJeLVZNWzM8vL5uumvQWZPKry5tp9FdA2rwZDD2bYxMZcqB8= 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=Tn8D4q2j; arc=none smtp.client-ip=209.85.128.47 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="Tn8D4q2j" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-48a7fe4f40bso24326745e9.0 for ; Mon, 18 May 2026 00:54:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779090844; x=1779695644; 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=9i+l+TnhrZLaF02FWG+gAPSZUlHwak2ucKtwF5XZOc0=; b=Tn8D4q2jqPgE4EZ5gygR+L6CaAbdXKFUcHGG/hysH0xJtyBuGu9t18KN0oPiRdjfal MIgR+fqyexVR9cEPwveWuhmvhdej/Owe8yl+iFoBxgTBZkVc83QbYvjBMuja0f+1pzcY VoMS+d24YKOd3By4eybhilnxofTcVdSXbv3FpsnY3ze+dbshVG5sDv3lc510SHmnSz9W cmi3bKvIVXI8inmmnNE6PpPansQUkOMgs9fELnS9oCXoBn2jdxq7JUGW9mCrqVundyWK znCe8nFQ0367Kzf98EX6m3v1kLU4lXZAbW5U89Mvi5qWZj43CbvjUR0bOQpJeEe9wmuZ 8+vA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779090844; x=1779695644; 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=9i+l+TnhrZLaF02FWG+gAPSZUlHwak2ucKtwF5XZOc0=; b=D4+631zi0z+L6LLXVPxyHScdKNaBbzOOtfamfAsNBlUdVvq/4kDHAs7OymNyDJwPua y5tIBPk4VHV9J4j2NnBArj5fYR1WPAgRO/scqHwb4tRqb1Waeg1jeS0TmwYEmq6k81X5 o7BsTSf3hHGPz30jzlpKbBXb/bvHDiOSoi6GQui4gb8f4+mElx+oLtJWkp4DtpegmB3K pXY+5WDMinuKoDZywXW6nxH5HTkFjOYqz2gDmWiYGTfnlp4KUc74vyfog+snDF0p6hj5 GSjKWcooC/Txi/pjVJTU4QFMKPLYswDc8hEOdYVXLvbrxo8Xq4Dgvwm8TDhrmD5hKtXj zSyw== X-Forwarded-Encrypted: i=1; AFNElJ/X7AAxXs3USodAtdDKW0S/ldBhyRExij4iZxrSKVTHd7Wbl07+xsvtkcinLnhPGb8E9Svh/gM+NZmoi4Q=@vger.kernel.org X-Gm-Message-State: AOJu0YxADc5MYfyR9UqTMWC87HnRBMXdpywKG9PpaLiTq+6FK89f+S0Y e5Vqb9jl9OOfEWFczd5lBCfDETm0k4JhaUXIozxCqCDom24nMzXGASa+ X-Gm-Gg: Acq92OEkew3VQ6ZjiP7PhsuXf99vXCdK+OGK6jR/LrBvOJxhgmkvvCyBNovJ2BfNRHJ cmqiD4HV71ZEJnnZQnF3vATrNuQ2mIDOdc6f/unQs4uqWgmvW+E0QsUZntg63FO4SOL68cb9znY IKYVtnOEllCZDzKo856G6+wR/oFRbjNw+y1gX4fvDlf37kwhTZOklm/Zn9XwBt2boCOqc3qC2CD aM5XFpeVlu7laAnjyIpe5tzBVSunVyJ+Zgij55V0zaMLkh1nx/35MaTASq6R/PX6g13Lv+m2j50 JPGX9in4x5tYoAvDVdaK2oYM8DI8uveLog+6U7GAiZj7wx3R61UY5phbEYqczCB8aJGxEX4k4dt i2QZkuBdQMRavYToB5xlV7BHgqeFhg2MtM7yYQjRk5yk2DsA71ahV7O/k8gdEJiNEhOry7dyY4l 1tcbI9BDwlQ81jxyg= X-Received: by 2002:a05:600c:4692:b0:48f:d5e8:758c with SMTP id 5b1f17b1804b1-48fe6325792mr216525115e9.16.1779090844437; Mon, 18 May 2026 00:54:04 -0700 (PDT) Received: from ROG ([2a01:e11:202b:40:328e:213e:a3da:580f]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48feaf14d22sm102788835e9.3.2026.05.18.00.54.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 00:54:03 -0700 (PDT) From: "Marco Scardovi (scardracs)" To: Linus Walleij , Bartosz Golaszewski Cc: Mika Westerberg , Andy Shevchenko , linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, "Marco Scardovi (scardracs)" Subject: [PATCH 03/12] gpiolib: acpi: Add robust bounds-checking for GPIO pin resources Date: Mon, 18 May 2026 09:53:48 +0200 Message-ID: <20260518075357.112584-4-mscardovi95@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518075357.112584-1-mscardovi95@gmail.com> References: <20260518075357.112584-1-mscardovi95@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" Assisted-by: Antigravity:gemini-3-flash Signed-off-by: Marco Scardovi --- drivers/gpio/gpiolib-acpi-core.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/drivers/gpio/gpiolib-acpi-core.c b/drivers/gpio/gpiolib-acpi-c= ore.c index 64040b098e91..90bda2d7da57 100644 --- a/drivers/gpio/gpiolib-acpi-core.c +++ b/drivers/gpio/gpiolib-acpi-core.c @@ -322,9 +322,14 @@ static struct gpio_desc *acpi_request_own_gpiod(struct= gpio_chip *chip, { int polarity =3D GPIO_ACTIVE_HIGH; enum gpiod_flags flags =3D acpi_gpio_to_gpiod_flags(agpio, polarity); - unsigned int pin =3D agpio->pin_table[index]; + unsigned int pin; struct gpio_desc *desc; =20 + if (index >=3D agpio->pin_table_length) + return ERR_PTR(-EINVAL); + + pin =3D agpio->pin_table[index]; + desc =3D gpiochip_request_own_desc(chip, pin, label, polarity, flags); if (IS_ERR(desc)) return desc; @@ -337,7 +342,12 @@ static struct gpio_desc *acpi_request_own_gpiod(struct= gpio_chip *chip, static bool acpi_gpio_irq_is_wake(struct device *parent, const struct acpi_resource_gpio *agpio) { - unsigned int pin =3D agpio->pin_table[0]; + unsigned int pin; + + if (agpio->pin_table_length =3D=3D 0) + return false; + + pin =3D agpio->pin_table[0]; =20 if (agpio->wake_capable !=3D ACPI_WAKE_CAPABLE) return false; @@ -367,6 +377,9 @@ static acpi_status acpi_gpiochip_alloc_event(struct acp= i_resource *ares, if (!acpi_gpio_get_irq_resource(ares, &agpio)) return AE_OK; =20 + if (agpio->pin_table_length =3D=3D 0) + return AE_OK; + handle =3D ACPI_HANDLE(chip->parent); pin =3D agpio->pin_table[0]; =20 @@ -1111,6 +1124,11 @@ acpi_gpio_adr_space_handler(u32 function, acpi_physi= cal_address address, return AE_BAD_PARAMETER; } =20 + if (pin_index >=3D agpio->pin_table_length) { + ACPI_FREE(ares); + return AE_BAD_PARAMETER; + } + length =3D min(agpio->pin_table_length, pin_index + bits); for (i =3D pin_index; i < length; ++i) { unsigned int pin =3D agpio->pin_table[i]; --=20 2.54.0 From nobody Mon May 25 05:55:54 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (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 BD7F33E0231 for ; Mon, 18 May 2026 07:54:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090856; cv=none; b=idiLG3EQ3N24smuGeoOnVvrEfbxUAHbuZqAXvW4I4gMie0Vk4V0EGO1/a+FcO4qJJnjc9HGYs5ommyl94OhYqURi9fzvGDZD6IMFR15y1tEzKovjNYwReGs72anfrMRDlzawOGQWRxJw97qDy7PQTWlIKuKfJLPOPHK+DQtXs0g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090856; c=relaxed/simple; bh=aPiBeLh3lG8cPL7Jg0LLmBRWc+do16dLJX/xIZLlA8k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MBWBs8fmn4E13zLpYhgIPSum8TbIbZ9RwHc3jO7WiiMT9pM9hFbUhw1UO2vUHYLK6rdGeVafXGdSlncPMUOHPH0A5l9QlXsoAB1uDEGsoIFuvu1I0H5YO8F0mrW1hWPKVaNxpJdCoTRa3JSbv4nUSsPg+XF6jCljhfaVZJgPCPg= 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=P0Zj9g+o; arc=none smtp.client-ip=209.85.128.45 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="P0Zj9g+o" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-48a563e4ef7so14736835e9.0 for ; Mon, 18 May 2026 00:54:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779090846; x=1779695646; 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=kZIry/uS8ZFI2nZX4B4am8kKwMyHaZt8EZw4IRUQPLU=; b=P0Zj9g+ovGFgKOw3UnqgrUclw66/GYvhgCTM3YFrbNIX0/fCp6QcAnp8WoYHDUw7Iv TkNbvkQAuoEIfw/dlqttv4qpS5QD+VSGU76T1phXUG4ZjvbGLG0ju35H5aAej9DJyOWV d8FE+7JRenK144OoW7ck/JK/z75SYJFRQ0XewUewLYVQQ+gNGTTynoJeK2OfCy46IRHf VyYlF35LcNTR5Q2QaurVP2//vjG1An+fLgLRS7h7Fwt/NJrxduapgpa7sREHOWySl5sR w3hCozRuZ5txmOqmxcbS+ULKxL/DbV1CKWO9khwBsmybZs1N2e2wCo7CvhfTsTCB0ZYP ceuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779090846; x=1779695646; 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=kZIry/uS8ZFI2nZX4B4am8kKwMyHaZt8EZw4IRUQPLU=; b=ZWtGr81GPLFzB5qRE41Ku9rk/qoleDJCKR+Z24/6hE5oZnCHYEKC7//uBwEkrk2ObL qIU/ovRkQMx2EJx/kV5xoemmLAAHnsz0vAbmQzZERS2ciy1HZs/OKHwSeLPc/k28CVgW hbTNvMArDOgGhL4NIXNwV+t8XLRb+NST/L0hOyFt6RdgXsytNB8RF7gxvEh7slvMzLe1 aYz1GDtwxtGcCdN2CCOFRE3AX6s9MHWaSTF/QEJj3G65kwRylkN5kv0DgChOU/ndxtFD IBalUcqmcJm0UZy0JA82m5OJgsTwgBHEIcjgxQhi8fRIC7UCTuiSyAo46RST7bn1NElS vmlQ== X-Forwarded-Encrypted: i=1; AFNElJ8kZyXLU5c+Yp2/rje1/Xpi5O4RJ2bpWP5bJiKQLGu620LFPtn+h5RIXHM+x5rF1FHUtT2zUMky/Fwo/UY=@vger.kernel.org X-Gm-Message-State: AOJu0Yxl+mmTeODeBGuTeB+DLhzu2PWAEnnUn5pEnBn+bTToR3gUvGss hPE9hlqJ36Lul6cEcJJ4PYNDk+Dr7C12BnRtZjFbCOoVA9o+X8PmxuRA X-Gm-Gg: Acq92OGvYqcaZQCOGxJyPrfy7LWNGalcMmAyI1+F+XH4bNBUdNRfilKno6XlYi+epM1 4FjNP+JRj8Z5x/4u7K77cpu7qVEwhZhGRbh/BJA/Ns9L5uuQm1kwr/4IM44TaQe8rvDkxfs+MKm TFS6uU+4xhYbyhqCv6Ohs6fuSAU+dn3iixhpRx8K5aqyqCRL/3MrvWgGP82NNFPyiHejomTDzqB smmWDW5c4j8h7rdNUQ3zlSxeS3EtGFk65Sii4LNQGbcT9hslTdUZAG/MftBqvAAP5IVM9ditKlv qu+0oMhmpoY1mvISuSv/DyGq8mZZK5qG+vcNN9r+NWLXTxsusrmrtqifmPjATb/VOMZcsnmMMJc Uz545/o4H2ZAB4hcfiLXtm3QYg8D96FUILjOWIBx7EZO0tl/tgbNXIhSNiTSLevl/2bY4o1YR3q 0+ijFbRtTN8PlYiUU= X-Received: by 2002:a05:600c:34cf:b0:48e:5990:9698 with SMTP id 5b1f17b1804b1-48fe651588fmr217217785e9.24.1779090845805; Mon, 18 May 2026 00:54:05 -0700 (PDT) Received: from ROG ([2a01:e11:202b:40:328e:213e:a3da:580f]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48feaf14d22sm102788835e9.3.2026.05.18.00.54.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 00:54:05 -0700 (PDT) From: "Marco Scardovi (scardracs)" To: Linus Walleij , Bartosz Golaszewski Cc: Mika Westerberg , Andy Shevchenko , linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, "Marco Scardovi (scardracs)" Subject: [PATCH 04/12] gpiolib: acpi: Fix resource leak in OpRegion cleanup path Date: Mon, 18 May 2026 09:53:49 +0200 Message-ID: <20260518075357.112584-5-mscardovi95@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518075357.112584-1-mscardovi95@gmail.com> References: <20260518075357.112584-1-mscardovi95@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" Assisted-by: Antigravity:gemini-3-flash Signed-off-by: Marco Scardovi --- drivers/gpio/gpiolib-acpi-core.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/gpio/gpiolib-acpi-core.c b/drivers/gpio/gpiolib-acpi-c= ore.c index 90bda2d7da57..4c8cd2038aa1 100644 --- a/drivers/gpio/gpiolib-acpi-core.c +++ b/drivers/gpio/gpiolib-acpi-core.c @@ -1240,7 +1240,6 @@ static void acpi_gpiochip_free_regions(struct acpi_gp= io_chip *achip) if (ACPI_FAILURE(status)) { dev_err(chip->parent, "Failed to remove GPIO OpRegion handler\n"); - return; } =20 list_for_each_entry_safe_reverse(conn, tmp, &achip->conns, node) { --=20 2.54.0 From nobody Mon May 25 05:55:54 2026 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) (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 EE9253E0C78 for ; Mon, 18 May 2026 07:54:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090856; cv=none; b=lOH/QmMGiqog68QbO6Y0sXU1h1s3E+aqGB70qjqBX2pTtChyNcnU4pd6ikttj75uVdKoD+wfhBZIITnsoiM1M3L3dO0IzR/6r+O9zqaC0uZMQ09vKyVRQi5pNiuq5MnZPIMjq+gUJ4bR/938Bv5hZC61VWTxVUEiV3wllXWIUbQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090856; c=relaxed/simple; bh=uhZ27U3v2eIZ0NhfXUZbpGVdOwqMl7qp6vCvulhWUwk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=i3GS06owO3ETJmuCPmJjTFfQObqMPoxQFsdCHvLpMLAN5oAR5+IbpvmzgeStakEy+fzYiZ0zbbZHkUF/R3tdT3oC1+mBFxBbAHkw7dFgJjBVU1w++WSBr23trjCax4LFu1hBaB2MmKPAPT96mvWpgX5CMJEdLmNGANS7rg8sSr0= 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=rEwQimiI; arc=none smtp.client-ip=209.85.128.44 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="rEwQimiI" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-48e8132c6d0so10952425e9.1 for ; Mon, 18 May 2026 00:54:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779090847; x=1779695647; 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=lodDQ5HjiyAy7FWFWZrwQQYQkHD0GGXCtZQuFp7Bmbw=; b=rEwQimiIiCUgiyyeBngjdrFRMgkWn9NbMbMGSHM5IoaKiVqIDLGQvBLuoI6WCVXVuJ JLZ6CLtuCjbQulNbrEZ1Kus7CBEKTIfTBEix3PNw7PCNY0MR5j5Af5F7T8q9skDsJkjq K9dq0XRY9XTYyHii2XwSbH6u1RYemiP6dutwVpFImhCia0e2FKf5FHGTjuPJ1/3np/NM 2M8ao1dBcnWczgaxwLFL+dPowv+C1XaY91UrlGoSLwTSvpooC+T4vZOwgq5P3qKhocIr sl3VcjnHhdmtY1XqzHOwiH9KzLXpUOo8DII+C1it2vK9ANm4bXuotESZyycJVC/8lYtW 4rmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779090847; x=1779695647; 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=lodDQ5HjiyAy7FWFWZrwQQYQkHD0GGXCtZQuFp7Bmbw=; b=k8NrsHdI3V4nxYbSIIBiwGXCI+kqgq6m800RSEpGdwn++RiGl78mrYN/jDJdE1i5Dx eFCmlhRWqbaLtbUaxc7QexK5aDT9NEn3qJ2sPxJj31QrzVuIQ0iDDLem/Ua6XVTQUlEd 6SnGsnK0+D0g9GJv6XzWHfBuhOZKqME27RKhARTZka8Pe3uxgUG7mQDTdVtNa2lulmuG iIFdn0s66XFRZxzbyJnFnmMspby4zjZnazrHfJ3S2v256edJ9C21yZSrEy27kOrIIf2r TVRuoNAe0JTmycZXSws2D7Kssods2q6/K4JM0s1oHtqNTRP6RHksjOrfR+eaanXERVEB 0S/g== X-Forwarded-Encrypted: i=1; AFNElJ/7UDk9bnrbJ3xlC1cx817EVKSNUz4uzCmnlciXcUx8gMXm2MAPsJp0OvQM3LUR5DlBB6VdY/hA78Cv8KI=@vger.kernel.org X-Gm-Message-State: AOJu0YxoFsktKgq+tGNZrq3lfHpY/eCt4adb+6Nhgulry4gMd+PK1Q88 6GOeBdxuxintFC+1yFFzwodu0xs+UrBh0JGmFUu3N/3uXjS0FkYKFPGH X-Gm-Gg: Acq92OHWgWArj4UrajiHU0sbNpJaBEYXXAnnIAU8EYeWkEr8w327qFfWMZ2aSPJdeBe FjUs8O16dEre4vjv/kGVgIV9EPk0kItm0ntGSNZsGnCyq+WxVxmL+xVgwLy/yE/ajDNGdsVRUZ9 PdcrLWwkH5xlf1cQTLbR7NsH9mVITrhesPbKAih1HyrdyRjd/CPJbHM6yT3B7ISbAAUZSuEFU86 ZGzORGsBQLoUlcO8hxpx5/RPlis3lPThbHkG+kclZrWhL73tMkgfT+rx9DcAKPh95xDKr5OYAEJ Vupezk3a0Ji3Z8wvWQYxWdh0iRDSOACRnjcE+CXbvppW4qVoR6mNnfy7l7neW526Fv7RsmPZIDM GyAcyph1dV8ITsxeBUN4R62RKui24xxOFwfkJxkmNRaCRBUuOyxpzuP3jWOcYCx9V2cpvpFV56P lhb3rhB0H5xsmLw0Sn5yImut3r7Q== X-Received: by 2002:a05:600c:a406:b0:48e:5fb8:f80f with SMTP id 5b1f17b1804b1-48fe6514865mr169798555e9.24.1779090847293; Mon, 18 May 2026 00:54:07 -0700 (PDT) Received: from ROG ([2a01:e11:202b:40:328e:213e:a3da:580f]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48feaf14d22sm102788835e9.3.2026.05.18.00.54.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 00:54:06 -0700 (PDT) From: "Marco Scardovi (scardracs)" To: Linus Walleij , Bartosz Golaszewski Cc: Mika Westerberg , Andy Shevchenko , linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, "Marco Scardovi (scardracs)" Subject: [PATCH 05/12] gpiolib: acpi: Declare shared structures in gpiolib-acpi.h Date: Mon, 18 May 2026 09:53:50 +0200 Message-ID: <20260518075357.112584-6-mscardovi95@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518075357.112584-1-mscardovi95@gmail.com> References: <20260518075357.112584-1-mscardovi95@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" Assisted-by: Antigravity:gemini-3-flash Signed-off-by: Marco Scardovi --- drivers/gpio/gpiolib-acpi-core.c | 43 -------------------------------- drivers/gpio/gpiolib-acpi.h | 39 +++++++++++++++++++++++++++-- 2 files changed, 37 insertions(+), 45 deletions(-) diff --git a/drivers/gpio/gpiolib-acpi-core.c b/drivers/gpio/gpiolib-acpi-c= ore.c index 4c8cd2038aa1..7217ec5c7fae 100644 --- a/drivers/gpio/gpiolib-acpi-core.c +++ b/drivers/gpio/gpiolib-acpi-core.c @@ -23,50 +23,7 @@ #include "gpiolib.h" #include "gpiolib-acpi.h" =20 -/** - * struct acpi_gpio_event - ACPI GPIO event handler data - * - * @node: list-entry of the events list of the struct acpi_gpio_chip - * @handle: handle of ACPI method to execute when the IRQ triggers - * @handler: handler function to pass to request_irq() when requesting t= he IRQ - * @pin: GPIO pin number on the struct gpio_chip - * @irq: Linux IRQ number for the event, for request_irq() / free_irq() - * @irqflags: flags to pass to request_irq() when requesting the IRQ - * @irq_is_wake: If the ACPI flags indicate the IRQ is a wakeup source - * @irq_requested:True if request_irq() has been done - * @desc: struct gpio_desc for the GPIO pin for this event - */ -struct acpi_gpio_event { - struct list_head node; - acpi_handle handle; - irq_handler_t handler; - unsigned int pin; - unsigned int irq; - unsigned long irqflags; - bool irq_is_wake; - bool irq_requested; - struct gpio_desc *desc; -}; =20 -struct acpi_gpio_connection { - struct list_head node; - unsigned int pin; - struct gpio_desc *desc; -}; - -struct acpi_gpio_chip { - /* - * ACPICA requires that the first field of the context parameter - * passed to acpi_install_address_space_handler() is large enough - * to hold struct acpi_connection_info. - */ - struct acpi_connection_info conn_info; - struct list_head conns; - struct mutex conn_lock; - struct gpio_chip *chip; - struct list_head events; - struct list_head deferred_req_irqs_list_entry; -}; =20 /** * struct acpi_gpio_info - ACPI GPIO specific information diff --git a/drivers/gpio/gpiolib-acpi.h b/drivers/gpio/gpiolib-acpi.h index a90267470a4e..bd857ead9dcc 100644 --- a/drivers/gpio/gpiolib-acpi.h +++ b/drivers/gpio/gpiolib-acpi.h @@ -8,10 +8,13 @@ #ifndef GPIOLIB_ACPI_H #define GPIOLIB_ACPI_H =20 +#include #include -#include - #include +#include +#include +#include +#include =20 struct device; struct fwnode_handle; @@ -20,6 +23,38 @@ struct gpio_chip; struct gpio_desc; struct gpio_device; =20 +struct acpi_gpio_event { + struct list_head node; + acpi_handle handle; + irq_handler_t handler; + unsigned int pin; + unsigned int irq; + unsigned long irqflags; + bool irq_is_wake; + bool irq_requested; + struct gpio_desc *desc; +}; + +struct acpi_gpio_connection { + struct list_head node; + unsigned int pin; + struct gpio_desc *desc; +}; + +struct acpi_gpio_chip { + /* + * ACPICA requires that the first field of the context parameter + * passed to acpi_install_address_space_handler() is large enough + * to hold struct acpi_connection_info. + */ + struct acpi_connection_info conn_info; + struct list_head conns; + struct mutex conn_lock; + struct gpio_chip *chip; + struct list_head events; + struct list_head deferred_req_irqs_list_entry; +}; + #ifdef CONFIG_ACPI void acpi_gpiochip_add(struct gpio_chip *chip); void acpi_gpiochip_remove(struct gpio_chip *chip); --=20 2.54.0 From nobody Mon May 25 05:55:54 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (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 E70C43E0090 for ; Mon, 18 May 2026 07:54:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090858; cv=none; b=DnbZRWd02umZUHCjIzLU3+I3fwQAu00qInRLpv3gRM8laqEEdLJw3eRd/30/SvGCib+bTosf3yRTU/2lfRT6N123bpNFLbZkBUCAVikKFIoXYKL+2i9ZKkkQOHKPMmAezorXqs5Bzqjo40zVrr6w6dqsP1JpGcs1LQ5ye3qOkDs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090858; c=relaxed/simple; bh=MSoorrxg8uzper7S6y38HW3VXpbkdEo9+GwAwliU7VQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ec9IlUrhFaicTDtBl933jXDbAVUvYS7ZDqFdEjmF8wSf1oO0YUXwzOyhWmR01c2j3v7zHTVnXqttpuWgvYLUHwLgdOapsChwlM8n0+10PSo9sZ9zixh/ivhEBYHyLI8G+8krHok43iDiV00Ztc56dss937GwzOlwLtGJWXKWc/Y= 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=n0m7rbk9; arc=none smtp.client-ip=209.85.128.50 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="n0m7rbk9" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-488b3f8fa2bso22447955e9.1 for ; Mon, 18 May 2026 00:54:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779090849; x=1779695649; 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=QN7GTrvsqw+xYYoyO+iJ1HbUPl2cSRua7bHIZ6rl0Bw=; b=n0m7rbk9USHwhdkt4AyqCT7X0V8CpLwysC7v6bqFg9lqnMKusqUpqdZOfi7RHoYUxU sOmjb1/BGbANeFWSI7IhTltQ8n7NbYXPeIBzsfu+1YxCHXjI/y/g84BFCQeeuWx7EV/4 5lfJ3cB6HYh6t0s0gRJTZep7+FYNouf3P/SeZ3XzEwFhAXehAdT8QJdilt8M9PO5dC/n s/8R5bIpbTua/w60Nj5ylw8Uz/pB4rn5LgvPJD2u8UI4MUHFXpPLL1ILeuPgbMfuPjxm sD5XD3iWI0Euo6fdICQDOzeYOaQm7DWYfyeRtbTdT+px6mnNcSKy1+YMy/K+oalY3HXs R52g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779090849; x=1779695649; 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=QN7GTrvsqw+xYYoyO+iJ1HbUPl2cSRua7bHIZ6rl0Bw=; b=ngAIbTBeS4GnjKBwxL+aTpcPBqU3xKc/6pTmRV/51yark1y/NFBLPZ8A4+xsi0BSD/ b3XNg6QDTWSHYqJSlB3lNV1QbTKJXhShyBL8Mb6/kXeAReZa8ENd8JG1tr63VgXhEgek uShM+Nah3GhNcbe4L6ApqAYVTLOLJwNUOBZZsq0lXxj/x/+N/wCgvXzNXVUheZejr472 En15vRxOMtpm/nj+yyT4rBX5ACXCo5qw8lDyPH4Wh3gx1QEI7e6hXP9WVw+1fwxPBCMz 9YjgD5LNwekrQVdduTugZ12Y5UoOhzS7efmzWOOACGrpBUrEF7DTlUm/ZznL/YI/UkWg xJjg== X-Forwarded-Encrypted: i=1; AFNElJ/9NK8U7sb+Pl3SuOuuELMbdDK+FeLX66U6a9aCoTvA4rTbDDTaP/unzF1Z60fE1Rj0YOmpiHDeBaK2SeQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxdD7FXNxjhjlmjbIv3wUyIuXWj7U2wgcQb2Nw3GppE0pz36izk yxusmOa2G+9M+OJYOEoO3yqswpAoaIN8n9VDc9dvlgQScB5PJVzv03K5 X-Gm-Gg: Acq92OGuxXQ8Ol4650rtAfGkhdeaKXdaU5DZfnx/qHpjmXh+4QpZWh/R5LrB8eQmcTu S0PM3Q4lm/bd/AUanDh9y3tAxy5wR4l6xcrFB6wW/gGqvKG3Rq6yYsej4YRgtPvJsNUQGYWXyAz 5iuo36K/mN22zR3Bvop8vnyLwLuk3tiiHQ97Dji6+dczH7KPM7zbcc53rjCkN54tyhg34MrImof LHQxnjLXSHUQBwkpyMPCBp+uCDr1fNZWphHsurfc9iip28R+qakdNJyelaqdqSLyTLwFSFdG3Z0 Va6aXFQtD4B9j48UuF6FXXD0OO7ucEfkOzCKuOf/eo8F6xboMJAe5U5I9P+Wftyb5qm0vXA1QK6 hrftmSsFX8/DV5Yw9evLtswesiWCf6mYSsZVmS5oUbsAWrcB9xl/xh5ltMzEsRUTVh/A9LV9xiC /4R8mTxhIPEcJ92H8= X-Received: by 2002:a05:600c:a09:b0:485:3cef:d6ea with SMTP id 5b1f17b1804b1-48fe539198fmr198503155e9.13.1779090848818; Mon, 18 May 2026 00:54:08 -0700 (PDT) Received: from ROG ([2a01:e11:202b:40:328e:213e:a3da:580f]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48feaf14d22sm102788835e9.3.2026.05.18.00.54.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 00:54:08 -0700 (PDT) From: "Marco Scardovi (scardracs)" To: Linus Walleij , Bartosz Golaszewski Cc: Mika Westerberg , Andy Shevchenko , linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, "Marco Scardovi (scardracs)" Subject: [PATCH 06/12] gpiolib: acpi: Expose core GPIO resource and OpRegion helpers Date: Mon, 18 May 2026 09:53:51 +0200 Message-ID: <20260518075357.112584-7-mscardovi95@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518075357.112584-1-mscardovi95@gmail.com> References: <20260518075357.112584-1-mscardovi95@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" Assisted-by: Antigravity:gemini-3-flash Signed-off-by: Marco Scardovi --- drivers/gpio/gpiolib-acpi-core.c | 12 ++++++------ drivers/gpio/gpiolib-acpi.h | 8 ++++++++ 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/drivers/gpio/gpiolib-acpi-core.c b/drivers/gpio/gpiolib-acpi-c= ore.c index 7217ec5c7fae..afd76301c41f 100644 --- a/drivers/gpio/gpiolib-acpi-core.c +++ b/drivers/gpio/gpiolib-acpi-core.c @@ -272,10 +272,10 @@ static void acpi_gpio_set_debounce_timeout(struct gpi= o_desc *desc, acpi_debounce, ret); } =20 -static struct gpio_desc *acpi_request_own_gpiod(struct gpio_chip *chip, - struct acpi_resource_gpio *agpio, - unsigned int index, - const char *label) +struct gpio_desc *acpi_request_own_gpiod(struct gpio_chip *chip, + struct acpi_resource_gpio *agpio, + unsigned int index, + const char *label) { int polarity =3D GPIO_ACTIVE_HIGH; enum gpiod_flags flags =3D acpi_gpio_to_gpiod_flags(agpio, polarity); @@ -1169,7 +1169,7 @@ acpi_gpio_adr_space_handler(u32 function, acpi_physic= al_address address, return status; } =20 -static void acpi_gpiochip_request_regions(struct acpi_gpio_chip *achip) +void acpi_gpiochip_request_regions(struct acpi_gpio_chip *achip) { struct gpio_chip *chip =3D achip->chip; acpi_handle handle =3D ACPI_HANDLE(chip->parent); @@ -1185,7 +1185,7 @@ static void acpi_gpiochip_request_regions(struct acpi= _gpio_chip *achip) "Failed to install GPIO OpRegion handler\n"); } =20 -static void acpi_gpiochip_free_regions(struct acpi_gpio_chip *achip) +void acpi_gpiochip_free_regions(struct acpi_gpio_chip *achip) { struct gpio_chip *chip =3D achip->chip; acpi_handle handle =3D ACPI_HANDLE(chip->parent); diff --git a/drivers/gpio/gpiolib-acpi.h b/drivers/gpio/gpiolib-acpi.h index bd857ead9dcc..6729da5a6fb7 100644 --- a/drivers/gpio/gpiolib-acpi.h +++ b/drivers/gpio/gpiolib-acpi.h @@ -55,6 +55,14 @@ struct acpi_gpio_chip { struct list_head deferred_req_irqs_list_entry; }; =20 +struct gpio_desc *acpi_request_own_gpiod(struct gpio_chip *chip, + struct acpi_resource_gpio *agpio, + unsigned int index, + const char *label); + +void acpi_gpiochip_request_regions(struct acpi_gpio_chip *achip); +void acpi_gpiochip_free_regions(struct acpi_gpio_chip *achip); + #ifdef CONFIG_ACPI void acpi_gpiochip_add(struct gpio_chip *chip); void acpi_gpiochip_remove(struct gpio_chip *chip); --=20 2.54.0 From nobody Mon May 25 05:55:54 2026 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (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 42F463E1232 for ; Mon, 18 May 2026 07:54:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090860; cv=none; b=iJhBeMx9b7uLfegxr6CnXHg7vdyNOAUDg+LNrEjuwl5qRncslA3JaoUvoluRStcnkMos81n/G783EtIk195oVBi5G5tqloosu22ZaAjFINuF4SGrgBvg4QJu0LtZGdHzcYLsox8YSM+CXWlNVcjLVT1c5Alk6vQdCEknAjOmW/4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090860; c=relaxed/simple; bh=6jCkAsjud1Zew6Eupayu3eGAx57fbcfqT17ig7jDJGY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AsSbizAUwaNsl0pSJNvfG0kFD8SVCfak4tYMQ52R8SnZdbmwS+gy2Z8cxZbrSo6ovsBY6dJ+zNwzXWFvLTmkRCzRbmOsMTxgd9Vf6d61sb2rchfuEwroDdopYKKuTOgzA8+/zh3RR3smydh/ZE5msuzGIwOF9B1uJx0VJfuyaz8= 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=RTSk2XB/; arc=none smtp.client-ip=209.85.128.43 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="RTSk2XB/" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-4891b0786beso13644585e9.1 for ; Mon, 18 May 2026 00:54:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779090850; x=1779695650; 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=L5wcBSnBAu4P8z9YIJvNxTD5MJsyGPmP5qLZmGh8Sm4=; b=RTSk2XB/vaONKiSbrM2zaYxrumw6CiWDS9e/1XasylTFHSfO+luANnkW+eKb9fJTMO ROPqp1iHy/mzeV7tjE9P6sfxjAcXe98YBSPdDIl3srkL/VwCcnaJszdkMlJYsBdmOtBr dCGu8q1lQG86VLgHxv1zCT6N/YhWfSk+oWkGNjWQPt2O3ajlu/BLO2sHin9rJ0TJxYI3 8obA28yblKjpIKNCBJuKplGTHhSaSHnmPADZA3eW+4/PO4tcURd8sITFHA9uj3zxWBfU /Xl5M1MMjhznho8VdZX9PiY7mmRTPTSuGzynWP9J2LEQUA3CqPo0XFSNYtkXk4V/fTAq 2ljA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779090850; x=1779695650; 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=L5wcBSnBAu4P8z9YIJvNxTD5MJsyGPmP5qLZmGh8Sm4=; b=OgPidZ2cL7yYdd5L/Bhg5oQKG9/ePJbtPk4IkWId3Z/+CC9PI98EFT/zNwbSYrM5/B perOOnbvAFktuK6Zae2RXHPt8QuUE+RePrF7/JqRL2kp5tBYmW2u8A8BUbvHyKI/dYmz +BwVBAMvHcUb7hDfHOo3ONs7zQ1p2nvp74MnFUFVurLfWNwhsO4nB03vsik4VAVpu1Qb Bp6Fi2Abgn7JAowD4c1F/movnaO2TPz8LCIXHbfh5w5MWEcO9r9GqguqknPOQvUWuDYo FUjIyw5t0dHmmWWLPppMz7D3tMstXpGoKNXhpn9K5q/va1A+DxyXrPYCIstyDpuu4Pxf Bb+A== X-Forwarded-Encrypted: i=1; AFNElJ+flOLjAI5OWm0VmKvm1KStK48GlkHMa0dt2A2ZmSBrnQU7o8e6b7ypPrTop+Rjm5SJX3jomDe8QSDJzI0=@vger.kernel.org X-Gm-Message-State: AOJu0Yxn8YaBPicA9avQIy0U5f3eiA2wXtYl/YgjHu7H2RVk0IPiW6+B rlv0Q+vrx9b9i2nAYH8rVoIhG32yzbYDu7n5EmUJ+gsFCeeWz4rFtELK X-Gm-Gg: Acq92OF2Myx20CSS4bliQ+t2cM7ir6xhaJUW54aQkU/2JGP3xsFIfCEy6I28HRPPV6E jEbtzkrOcrGIc9gJDRO8dw3dgTRoLMDA6tuDouz+qcjrh94Y7RE4s4hq1u1IdNYDs8VfhVdPhwz IWY2rO5S9p31min4qLYfCPzkspyv8rwjPZ1cVdTZsmCyD1lZZgmtZBWSMnBJEIj9j9AA5vL+plU rLzPl+Xsv1ENOAFeOgjxQyDadPfaa8gQbgpl7ZrRgL4w/UmkWXI7LYWQmE9rgzxZgvQeXtYTiQE zhFdZbGHsOTbxXSwubBY18rszynbkEcZjJsyh2pZLp7P3733A6sG+gFtFQUcDRADVUNtzVewmIn HgGwZSGXqmQu31liBiCIhcEzFa4Z0JmBsr7PcKywnGtZfBONi98Ww16R1tYkiKapNLS0AfpRNeq NG800Q76zCX6G2a8s= X-Received: by 2002:a05:600c:528c:b0:48f:d612:3c6e with SMTP id 5b1f17b1804b1-48fe60de745mr205788715e9.2.1779090850135; Mon, 18 May 2026 00:54:10 -0700 (PDT) Received: from ROG ([2a01:e11:202b:40:328e:213e:a3da:580f]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48feaf14d22sm102788835e9.3.2026.05.18.00.54.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 00:54:09 -0700 (PDT) From: "Marco Scardovi (scardracs)" To: Linus Walleij , Bartosz Golaszewski Cc: Mika Westerberg , Andy Shevchenko , linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, "Marco Scardovi (scardracs)" Subject: [PATCH 07/12] gpiolib: acpi: Add dedicated Operation Region module Date: Mon, 18 May 2026 09:53:52 +0200 Message-ID: <20260518075357.112584-8-mscardovi95@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518075357.112584-1-mscardovi95@gmail.com> References: <20260518075357.112584-1-mscardovi95@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" Assisted-by: Antigravity:gemini-3-flash Signed-off-by: Marco Scardovi --- drivers/gpio/Makefile | 2 +- drivers/gpio/gpiolib-acpi-opregion.c | 175 +++++++++++++++++++++++++++ 2 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 drivers/gpio/gpiolib-acpi-opregion.c diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile index b267598b517d..1a416305465b 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -10,7 +10,7 @@ obj-$(CONFIG_OF_GPIO) +=3D gpiolib-of.o obj-$(CONFIG_GPIO_CDEV) +=3D gpiolib-cdev.o obj-$(CONFIG_GPIO_SYSFS) +=3D gpiolib-sysfs.o obj-$(CONFIG_GPIO_ACPI) +=3D gpiolib-acpi.o -gpiolib-acpi-y :=3D gpiolib-acpi-core.o gpiolib-acpi-quirks.o +gpiolib-acpi-y :=3D gpiolib-acpi-core.o gpiolib-acpi-quirks.o gpiolib-ac= pi-opregion.o obj-$(CONFIG_GPIOLIB) +=3D gpiolib-swnode.o obj-$(CONFIG_GPIO_SHARED) +=3D gpiolib-shared.o =20 diff --git a/drivers/gpio/gpiolib-acpi-opregion.c b/drivers/gpio/gpiolib-ac= pi-opregion.c new file mode 100644 index 000000000000..77b1ee32ddce --- /dev/null +++ b/drivers/gpio/gpiolib-acpi-opregion.c @@ -0,0 +1,175 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * ACPI Operation Region helper for GPIO API + * + * Copyright (C) 2026, Intel Corporation + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "gpiolib.h" +#include "gpiolib-acpi.h" + +static acpi_status +acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address, + u32 bits, u64 *value, void *handler_context, + void *region_context) +{ + struct acpi_gpio_chip *achip =3D region_context; + struct gpio_chip *chip =3D achip->chip; + struct acpi_resource_gpio *agpio; + struct acpi_resource *ares; + u16 pin_index =3D address; + acpi_status status; + int length; + int i; + + status =3D acpi_buffer_to_resource(achip->conn_info.connection, + achip->conn_info.length, &ares); + if (ACPI_FAILURE(status)) + return status; + + if (WARN_ON(ares->type !=3D ACPI_RESOURCE_TYPE_GPIO)) { + ACPI_FREE(ares); + return AE_BAD_PARAMETER; + } + + agpio =3D &ares->data.gpio; + + if (WARN_ON(agpio->io_restriction =3D=3D ACPI_IO_RESTRICT_INPUT && + function =3D=3D ACPI_WRITE)) { + ACPI_FREE(ares); + return AE_BAD_PARAMETER; + } + + if (pin_index >=3D agpio->pin_table_length) { + ACPI_FREE(ares); + return AE_BAD_PARAMETER; + } + + length =3D min(agpio->pin_table_length, pin_index + bits); + for (i =3D pin_index; i < length; ++i) { + unsigned int pin =3D agpio->pin_table[i]; + struct acpi_gpio_connection *conn; + struct gpio_desc *desc; + u16 word, shift; + bool found; + + mutex_lock(&achip->conn_lock); + + found =3D false; + list_for_each_entry(conn, &achip->conns, node) { + if (conn->pin =3D=3D pin) { + found =3D true; + desc =3D conn->desc; + break; + } + } + + /* + * The same GPIO can be shared between operation region and + * event but only if the access here is ACPI_READ. In that + * case we "borrow" the event GPIO instead. + */ + if (!found && agpio->shareable =3D=3D ACPI_SHARED && + function =3D=3D ACPI_READ) { + struct acpi_gpio_event *event; + + list_for_each_entry(event, &achip->events, node) { + if (event->pin =3D=3D pin) { + desc =3D event->desc; + found =3D true; + break; + } + } + } + + if (!found) { + desc =3D acpi_request_own_gpiod(chip, agpio, i, "ACPI:OpRegion"); + if (IS_ERR(desc)) { + mutex_unlock(&achip->conn_lock); + status =3D AE_ERROR; + goto out; + } + + conn =3D kzalloc_obj(*conn); + if (!conn) { + gpiochip_free_own_desc(desc); + mutex_unlock(&achip->conn_lock); + status =3D AE_NO_MEMORY; + goto out; + } + + conn->pin =3D pin; + conn->desc =3D desc; + list_add_tail(&conn->node, &achip->conns); + } + + mutex_unlock(&achip->conn_lock); + + /* + * For the cases when OperationRegion() consists of more than + * 64 bits calculate the word and bit shift to use that one to + * access the value. + */ + word =3D i / 64; + shift =3D i % 64; + + if (function =3D=3D ACPI_WRITE) { + gpiod_set_raw_value_cansleep(desc, value[word] & BIT_ULL(shift)); + } else { + if (gpiod_get_raw_value_cansleep(desc)) + value[word] |=3D BIT_ULL(shift); + else + value[word] &=3D ~BIT_ULL(shift); + } + } + +out: + ACPI_FREE(ares); + return status; +} + +void acpi_gpiochip_request_regions(struct acpi_gpio_chip *achip) +{ + struct gpio_chip *chip =3D achip->chip; + acpi_handle handle =3D ACPI_HANDLE(chip->parent); + acpi_status status; + + INIT_LIST_HEAD(&achip->conns); + mutex_init(&achip->conn_lock); + + status =3D acpi_install_address_space_handler(handle, ACPI_ADR_SPACE_GPIO, + acpi_gpio_adr_space_handler, + NULL, achip); + if (ACPI_FAILURE(status)) + dev_err(chip->parent, + "Failed to install GPIO OpRegion handler\n"); +} + +void acpi_gpiochip_free_regions(struct acpi_gpio_chip *achip) +{ + struct gpio_chip *chip =3D achip->chip; + acpi_handle handle =3D ACPI_HANDLE(chip->parent); + struct acpi_gpio_connection *conn, *tmp; + acpi_status status; + + status =3D acpi_remove_address_space_handler(handle, ACPI_ADR_SPACE_GPIO, + acpi_gpio_adr_space_handler); + if (ACPI_FAILURE(status)) { + dev_err(chip->parent, + "Failed to remove GPIO OpRegion handler\n"); + } + + list_for_each_entry_safe_reverse(conn, tmp, &achip->conns, node) { + gpiochip_free_own_desc(conn->desc); + list_del(&conn->node); + kfree(conn); + } +} --=20 2.54.0 From nobody Mon May 25 05:55:54 2026 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) (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 D7B7D3E121D for ; Mon, 18 May 2026 07:54:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090859; cv=none; b=hdx8vnvip9I0hShWALp45nzOBh5WvndrIpy358HBcNMeRBCVDl0o9RtmakGUSfAKIXHDunyHDPO+Ym7UUz96OE/fpf14kTEzqZzY1nItFX8ReJeKA6thkeStqqEyh1zkHyuMifbNd5tp330463KAobpYnVGpM8KmFEerZDEgJsg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090859; c=relaxed/simple; bh=iv39VAslRAqgad6LKrBKdc0Y2gyQhR958hGtPNBwDEs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TGkwz4jMEZpVbXX9pmPUg2Ky+YFf+DSv7aZxgwDxhBPxXoVATGbwzNnOYSl/lsP3Dd5051lCN4Z6rWmuLkP3MpMO+GOfo4GHSyLO1pYgpffV8QGdv6PS4C03fH/lE0BGgyk2qgK/90JSlXqBXZ2iN8/+yPcnj9UGG9PTVuACDrA= 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=qdsIoJM/; arc=none smtp.client-ip=209.85.221.45 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="qdsIoJM/" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-43d77f6092eso930202f8f.2 for ; Mon, 18 May 2026 00:54:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779090851; x=1779695651; 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=+iV4KXyAPK+K+KWzEeqIiwRK0AcdSNjQuvN9IpFfq6U=; b=qdsIoJM/B+ozEXaiNBGGQtM61pt2v/z2YKCqEKvI9UkVIH3eMlMg+qywxpQx0uqYP+ k5G9UccDVSQ+0k0Ubtvn59YqqGisr7wx531JGOvPX7xIrS5dynawka8Mkm7+tcTtLshe 06llZrBQEGZz4iQvA93fBtHzzh7Z6y0qCmLxvtxovl+hLMDxC3TquW5O2/Ye2kgmLxVm JylqUG7f3CVjSRvkdCpIKNyiAylwaxdiveVHVQ8vLT7MUxqXpIWlpQUrwaKBqLUp82pO LY4UFxw6U+UsJW+8HlvQ7HGo+Egs6YY87CQBXZCSl/7CvgLVNTE4m70YPR64YmmsykIk 27KA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779090851; x=1779695651; 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=+iV4KXyAPK+K+KWzEeqIiwRK0AcdSNjQuvN9IpFfq6U=; b=lvdMZtI3ZQ+YP1xBaD9NnI75mptaAG+8MqlLXSmr2F69blUc8buT2H3kvQf3IdilDa HNTtUVMj28KN8XM+e5Lp4Tn9bFZ3jjaBNc5VYlMV5ExCm+kaqu4+bE7Du/fMbX3maSwC anLpScpX/gl926oU9SOuH51+6ItBO4MT3ciOEGy2avYu1Osq37I+gc+Eq2xaFrHItQMA UyKDTbNMdj2HgNf2jttkoaAdIS+8yETbkZ6WXjG5Q02dMGaaMREfQuOb9OdmVSkg3Emt PQKr8GeYE90WA3NLzRZA2K2hqWPsX0UCcwayUiwRixmci54TOw0CqamK0G0eYPNjM1gZ npeg== X-Forwarded-Encrypted: i=1; AFNElJ+UrSD3IH2tW6wjN4DxZH+YIXjV4q2U4hdwpt4ueaz6Smw65me1SKDVDGtdkPphSJzzHX+z2M2x2TFy1kQ=@vger.kernel.org X-Gm-Message-State: AOJu0YyBbd0TFwITbMi6sl2rJ82v9gEot+7LoJFzz6wveDDsFznjMxeH fHH6lvoRGyc+BuDyVmzqzd4E88cE6OqJyvc4XsLJtmAx3aNristqMvYk X-Gm-Gg: Acq92OFRiXDzyoZr8TKVm2CihAerXhsIFcptKCrAPQ5uNrRGemsb++ON0VvHixYggDH CiDEn7rFRpOeSiSXp0gA2pAbFXUq+xtHQXA7MWJmxXg9NEfGgryFY4fAWDxv2ydFnWtIK8UwehD pgxUfFo5P+2DsgHjFYkZ+VwbrmLT8lrH1hoTnIahJptjWqBRcaADvZmyEDlgPoSuBaR9fGSwXrp tbimuaS1n+iVoKLUMn53CDA4ltIirYiCv3ACCRExphrjhee5mxnOMm535LUMZ8hZXgSInKcQuPB WgRq5ibJbo5Bawn14LKEj14ngyBSgxbXeIvFVmeG9JgI1i+D+VFm7+ikKbgOArezpTfOu0/pCEB st63M+oXgNnYAjuQXgF3bigku6aUPo5ywp7asO5yXgJjhC4OJ4oR7oRAJYFG8Mk2iHD+m8BxZwA +e1ZHoy32sWD07OZ0= X-Received: by 2002:a05:600c:8b6e:b0:485:9a50:3370 with SMTP id 5b1f17b1804b1-48fe60ecc24mr220895185e9.8.1779090851593; Mon, 18 May 2026 00:54:11 -0700 (PDT) Received: from ROG ([2a01:e11:202b:40:328e:213e:a3da:580f]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48feaf14d22sm102788835e9.3.2026.05.18.00.54.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 00:54:10 -0700 (PDT) From: "Marco Scardovi (scardracs)" To: Linus Walleij , Bartosz Golaszewski Cc: Mika Westerberg , Andy Shevchenko , linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, "Marco Scardovi (scardracs)" Subject: [PATCH 08/12] gpiolib: acpi: Divert OpRegion registration callbacks from core Date: Mon, 18 May 2026 09:53:53 +0200 Message-ID: <20260518075357.112584-9-mscardovi95@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518075357.112584-1-mscardovi95@gmail.com> References: <20260518075357.112584-1-mscardovi95@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" Assisted-by: Antigravity:gemini-3-flash Signed-off-by: Marco Scardovi --- drivers/gpio/gpiolib-acpi-core.c | 36 -------------------------------- 1 file changed, 36 deletions(-) diff --git a/drivers/gpio/gpiolib-acpi-core.c b/drivers/gpio/gpiolib-acpi-c= ore.c index afd76301c41f..4802d4948f89 100644 --- a/drivers/gpio/gpiolib-acpi-core.c +++ b/drivers/gpio/gpiolib-acpi-core.c @@ -1169,42 +1169,6 @@ acpi_gpio_adr_space_handler(u32 function, acpi_physi= cal_address address, return status; } =20 -void acpi_gpiochip_request_regions(struct acpi_gpio_chip *achip) -{ - struct gpio_chip *chip =3D achip->chip; - acpi_handle handle =3D ACPI_HANDLE(chip->parent); - acpi_status status; - - INIT_LIST_HEAD(&achip->conns); - mutex_init(&achip->conn_lock); - status =3D acpi_install_address_space_handler(handle, ACPI_ADR_SPACE_GPIO, - acpi_gpio_adr_space_handler, - NULL, achip); - if (ACPI_FAILURE(status)) - dev_err(chip->parent, - "Failed to install GPIO OpRegion handler\n"); -} - -void acpi_gpiochip_free_regions(struct acpi_gpio_chip *achip) -{ - struct gpio_chip *chip =3D achip->chip; - acpi_handle handle =3D ACPI_HANDLE(chip->parent); - struct acpi_gpio_connection *conn, *tmp; - acpi_status status; - - status =3D acpi_remove_address_space_handler(handle, ACPI_ADR_SPACE_GPIO, - acpi_gpio_adr_space_handler); - if (ACPI_FAILURE(status)) { - dev_err(chip->parent, - "Failed to remove GPIO OpRegion handler\n"); - } - - list_for_each_entry_safe_reverse(conn, tmp, &achip->conns, node) { - gpiochip_free_own_desc(conn->desc); - list_del(&conn->node); - kfree(conn); - } -} =20 void acpi_gpiochip_add(struct gpio_chip *chip) { --=20 2.54.0 From nobody Mon May 25 05:55:54 2026 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 EE2323D25BC for ; Mon, 18 May 2026 07:54:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090863; cv=none; b=LQzBJF8WeK24NJVEY/7BKTx5QxAV5vlwrC3vz9YJLgl/nHzS3uq8kYarVVO8fEgD+EECI1pDhG0T2RQDh42N572nfywlTOK7DschjxpIzB8GO4/FoLluTlNtfodOVcc/ziZ66tJ9S2ZjjcQZoZdFyMavQDr7Hu1Us+1Bld/Vi5s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090863; c=relaxed/simple; bh=7VBmQ0QxJnGExiUhZKQxvKL2TL1+qN9rL/V2s5flKv0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aij4JrOKvVn5ffOk6+UxPo01NzOAdcbPlLBj94NdEoWkpcwCtA5bIwi+Ou1UGuPT0s4/cMMZQRZiPeffofosLY8M3ZKMZfcoULjtp1e9gzIvF4FHaeT9J64BYKGtwrBxM6kpnQ8un32VGIxRxtT4xEV0YfYZbmt6KkgCJ+SQNbY= 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=Zw5DVKb4; arc=none smtp.client-ip=209.85.128.46 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="Zw5DVKb4" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-4891d7164ddso10163695e9.3 for ; Mon, 18 May 2026 00:54:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779090853; x=1779695653; 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=k0KmdNrJVMFxKN/kI/cbQSQ7h8U+WxFfpCT2ri4hO5g=; b=Zw5DVKb4+txjkFU/tlwjr4UrSFVvdElZXQqBKvoTXLQifQweWhsJZFNCW2nnojKBHa RT+vXKwYUmU1qQ12aKHbCCatF5qytjK6EeZBkQ6HK/fGZweYuNLchJpty/NHDiOLDiZJ t5ZO7ptH/vwSLSxS2TRvv0SC8bOIv6NFMAaOBxXx7dq2R5y9sqTQk9jYJT/PbOFZ2MbN W9UZjsgYhHsj0QOS0p1f15f6Exp0c8UdKidX1xp0TeUXkp7F6NbNlG+f345W/hPrL1O+ b/3VWKOCwB8A9g/7pSef8SQLh7ylHA8ka/AdwGQsTWIqHIfUw7la5dyC70crrxcQodJx 6bzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779090853; x=1779695653; 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=k0KmdNrJVMFxKN/kI/cbQSQ7h8U+WxFfpCT2ri4hO5g=; b=J7DNSFkLpnJXeDM0RCir5ZYLRlThSp9QkLKX74KUnnQZng4kGJvBBqGuZ494JRWDzh 1cgT5xlfF5kT9iJqIHiYxPCi6BvUd5N2byz4l6C3v3jY5s9zhw7QenJR3ywuLgr7qC3F MCZ+mPo8cr42BoUrBVJWguOu5vmVfyiPShHJVKdKXuiJ0AfCJ2xPfBFjAfEarF/Syx0o WMntOePbtpwnIj4cym2imxvZP23vqfsX+i+XVhwDUPgeSobBjQPbTogh2/pPg1iYorhm uv7TBRpOwWIAVodpsXP11eq18H0NseXAK+mJrqDomH8JgeF+SIZ6kF0USWBqbeUsbyph VZ/Q== X-Forwarded-Encrypted: i=1; AFNElJ/qBB1SbrA+XhS0G4bNLGA2oGOa5oGOHBkvlPh67uiO0vdcmdwigzHggNKz5U7HlKDrEt7xPD4AYMJl2pE=@vger.kernel.org X-Gm-Message-State: AOJu0YxkQATtxy5FcM4SS5Lrx9heMD8q96qP7lz5VzNsfuW849igYJJz LwZAYwj29wRmI4KO3thJPd88j55Tbj+Cc1NkISERZ6g9kt8NKsIG4Qun X-Gm-Gg: Acq92OHZsd2WBdj3hh35e0fA53WzD2m7D2JfHZR/mfzHkOp9k5MgI6CoS7NbpSF6TEj YE37JCs6DCOzXDLNP7WjnCH6cDsdoAJNZQ41oQLESxJ3WpgYnJ57iYsCn4dDCYpsv2YI9lKlhDe 0B7HvBNnTHl8n6mT6Xw3TyoqWuIn+dnqaY7pY3RMB+m65GyZCn8ChArga8BRzCz2ndXlcwP0FIa z/Q1rKK/UWLvJ8YLLZ+W6DByx+nNQBD8MDCZtND/on+cCNJflSc4wvBBj7OwABAsqyMszwSMvjU RBv6jUx6oRhYZx4R3TyjemPevQLuf5w8Vv+IV8FhhDOhfJI6D3GON//JQHh0i5+ezF9dyLEwsV9 gb3mhxuCTl8cfiY/Itv9fXwdLG/EYWzJDUcruW65tQew+wrEYxxdITyqez7HId7uOxH6PaIyoOH pxNzu/Uf0F5txDLXE= X-Received: by 2002:a05:600c:4455:b0:487:2671:fb8f with SMTP id 5b1f17b1804b1-48fe60ea92dmr193027845e9.8.1779090852710; Mon, 18 May 2026 00:54:12 -0700 (PDT) Received: from ROG ([2a01:e11:202b:40:328e:213e:a3da:580f]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48feaf14d22sm102788835e9.3.2026.05.18.00.54.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 00:54:12 -0700 (PDT) From: "Marco Scardovi (scardracs)" To: Linus Walleij , Bartosz Golaszewski Cc: Mika Westerberg , Andy Shevchenko , linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, "Marco Scardovi (scardracs)" Subject: [PATCH 09/12] gpiolib: acpi: Remove unused static address space emulation from core Date: Mon, 18 May 2026 09:53:54 +0200 Message-ID: <20260518075357.112584-10-mscardovi95@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518075357.112584-1-mscardovi95@gmail.com> References: <20260518075357.112584-1-mscardovi95@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" Assisted-by: Antigravity:gemini-3-flash Signed-off-by: Marco Scardovi --- drivers/gpio/gpiolib-acpi-core.c | 120 ------------------------------- 1 file changed, 120 deletions(-) diff --git a/drivers/gpio/gpiolib-acpi-core.c b/drivers/gpio/gpiolib-acpi-c= ore.c index 4802d4948f89..b8976a0c798e 100644 --- a/drivers/gpio/gpiolib-acpi-core.c +++ b/drivers/gpio/gpiolib-acpi-core.c @@ -1049,126 +1049,6 @@ int acpi_dev_gpio_irq_wake_get_by(struct acpi_devic= e *adev, const char *con_id, } EXPORT_SYMBOL_GPL(acpi_dev_gpio_irq_wake_get_by); =20 -static acpi_status -acpi_gpio_adr_space_handler(u32 function, acpi_physical_address address, - u32 bits, u64 *value, void *handler_context, - void *region_context) -{ - struct acpi_gpio_chip *achip =3D region_context; - struct gpio_chip *chip =3D achip->chip; - struct acpi_resource_gpio *agpio; - struct acpi_resource *ares; - u16 pin_index =3D address; - acpi_status status; - int length; - int i; - - status =3D acpi_buffer_to_resource(achip->conn_info.connection, - achip->conn_info.length, &ares); - if (ACPI_FAILURE(status)) - return status; - - if (WARN_ON(ares->type !=3D ACPI_RESOURCE_TYPE_GPIO)) { - ACPI_FREE(ares); - return AE_BAD_PARAMETER; - } - - agpio =3D &ares->data.gpio; - - if (WARN_ON(agpio->io_restriction =3D=3D ACPI_IO_RESTRICT_INPUT && - function =3D=3D ACPI_WRITE)) { - ACPI_FREE(ares); - return AE_BAD_PARAMETER; - } - - if (pin_index >=3D agpio->pin_table_length) { - ACPI_FREE(ares); - return AE_BAD_PARAMETER; - } - - length =3D min(agpio->pin_table_length, pin_index + bits); - for (i =3D pin_index; i < length; ++i) { - unsigned int pin =3D agpio->pin_table[i]; - struct acpi_gpio_connection *conn; - struct gpio_desc *desc; - u16 word, shift; - bool found; - - mutex_lock(&achip->conn_lock); - - found =3D false; - list_for_each_entry(conn, &achip->conns, node) { - if (conn->pin =3D=3D pin) { - found =3D true; - desc =3D conn->desc; - break; - } - } - - /* - * The same GPIO can be shared between operation region and - * event but only if the access here is ACPI_READ. In that - * case we "borrow" the event GPIO instead. - */ - if (!found && agpio->shareable =3D=3D ACPI_SHARED && - function =3D=3D ACPI_READ) { - struct acpi_gpio_event *event; - - list_for_each_entry(event, &achip->events, node) { - if (event->pin =3D=3D pin) { - desc =3D event->desc; - found =3D true; - break; - } - } - } - - if (!found) { - desc =3D acpi_request_own_gpiod(chip, agpio, i, "ACPI:OpRegion"); - if (IS_ERR(desc)) { - mutex_unlock(&achip->conn_lock); - status =3D AE_ERROR; - goto out; - } - - conn =3D kzalloc_obj(*conn); - if (!conn) { - gpiochip_free_own_desc(desc); - mutex_unlock(&achip->conn_lock); - status =3D AE_NO_MEMORY; - goto out; - } - - conn->pin =3D pin; - conn->desc =3D desc; - list_add_tail(&conn->node, &achip->conns); - } - - mutex_unlock(&achip->conn_lock); - - /* - * For the cases when OperationRegion() consists of more than - * 64 bits calculate the word and bit shift to use that one to - * access the value. - */ - word =3D i / 64; - shift =3D i % 64; - - if (function =3D=3D ACPI_WRITE) { - gpiod_set_raw_value_cansleep(desc, value[word] & BIT_ULL(shift)); - } else { - if (gpiod_get_raw_value_cansleep(desc)) - value[word] |=3D BIT_ULL(shift); - else - value[word] &=3D ~BIT_ULL(shift); - } - } - -out: - ACPI_FREE(ares); - return status; -} - =20 void acpi_gpiochip_add(struct gpio_chip *chip) { --=20 2.54.0 From nobody Mon May 25 05:55:54 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (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 86C563E0250 for ; Mon, 18 May 2026 07:54:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090863; cv=none; b=tUn0O37aQWbIgFDabkYBx3QJ8nQIAHzo9a9783W0pOR8HigFY10mpV9YbaGiPCK2Cvf2SyikPBAUkZqCYQMde5eMYVnFytMaeLHivxN6CJqilhKZlIhkTYkRdfqmlYWbzJBhPAaG6RwCFwsjGTXuY3Fs8l82M0TE7fRqnjHEVJY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090863; c=relaxed/simple; bh=TzAiXOXdFdd5ooTM1upT2oXPj+V4/6Q8UObelMDcd6U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZRVSwSKIuAXre01ABYJM9yjTikN5RJ0bVSChh5PQVgVV1U0OgTIIohYQXo3rMTGL5P9p41PLQBhn0fDVS1nAME8VKFCVJT5KEnm1BRwVKlECCW1uOBTeBwPIaLV1TVs1i+P/uCgrwt1VZ4hgcF8t3iNzr3CZw9fx9+3dHAH9VIo= 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=eOVn2SWn; arc=none smtp.client-ip=209.85.128.52 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="eOVn2SWn" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-48896199cbaso15044595e9.1 for ; Mon, 18 May 2026 00:54:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779090854; x=1779695654; 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=3JK4uuLcystNEzU6NVyAqom5nzqSXsoYns1Ebnwqzbs=; b=eOVn2SWnZ0MMOxLDBT5aqn5j7APb+AerAJla7lAarjqoEy7/WsTIpdSXYN9p9Eba8Q yAhbV6Ic33n86am7D7GpMAVz67KVVOsyISgWSC4SmgCEvjiUHLWXMBj1BDMB0QvhEne6 BxVnIXaGmbxtF379P71QaNuuZ7RACxRId48l/Uzo/7fb0zTqM5bU+KDXNN5nGX9iY/Og mNVuymRoEXynMHrcD1ChNXhRZc+Hzvlei44WdL24siwiPJYgBvT4KxXTQ6iYVdKHYayx vdjw3797cMcxuTMnQZyRPvbXu+Ig1L3Iri9s7N++BU/EIIjBpcApEZEbCofLwvikWnNy ztcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779090854; x=1779695654; 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=3JK4uuLcystNEzU6NVyAqom5nzqSXsoYns1Ebnwqzbs=; b=qfuoKsVTczNFGnj14B09ZAstAQFBKB/0g2DidihXNK/31uQQBz0t2lC8bxrS2P5XAM /NW0x83P+aPVGlsUuya+VVUFIMKILnKf3TDXELdxGqVEy3J0XvwxN/6e6XtF7+eDXi3P EKwco353alfLDHcHtaDqisNa2VbPXd8VypTqfKiITj1f5gBPBKBT0Xn6MpTXyMlhvPWx Pq06nnuj/mXeKkIWEk7bgdboynn6rn0cpNVKR/j+3s55EgVScTjlHnvNoKcDGFXXD7lx bAQbq3H4nwE2+NKdxGwrt2OAuTvqDxhRiRuMVgO9cIRNLzueRjR891LZuf9KyFNy1okg OgTA== X-Forwarded-Encrypted: i=1; AFNElJ8gQ1dv6g3pSxvrxMQXVIpxiOl+sttMtMjYpXoerFPiui3lLzkPtGjuN20A5dYbNc35d5jfIcYpQN4P9Gs=@vger.kernel.org X-Gm-Message-State: AOJu0YxSSP+w8+r4sx+OS9tcZMU93wEN3/t75lvkshinsFbYwtzEwCgK 3gqOKQ+DTuvUfO7cLy/gHZqNuZKoqiXDRPnbeu/dxnGmKyjzcn0xI/Zw X-Gm-Gg: Acq92OGXWKKiG0TkByGLeZmmd8Bz/gy9aVF1R91JXID1H897RzGOIvSMVFHR0iHrWEV +/KVrkRE2/mCp90+DjX4QInMHHtAaNw8D+sDvQMJkb8exM0kvMLthkgcufWCfEBMjIVlwBpV2KP vRn9FMjcmfFLRswQUQMfUc7AaxpxvzNE3TrEdmMYwYFEcfVz9ExQdJCAh8VGbM3ol/Tl4hSG/fU TzRfeAogulO0FdIo7Tbn1jdStXGdyhmzeDGOfWIM5PlH5X2KOngbqwFrQT7T8BCIs+vbuf6wvH4 N7eLOPC8LOEZubgU9V4iP/HAp+GD82my3E9kGIcMv7LjbEiCos7JxJcFEkmTTOQ6+McDEQOe5bG eiVD7FT0V5FotZG2oWhzhWbGASUz2yYkVq2IyIOlSCECe2lTZ5l9PWoz37Urm1V+ys/XPtLuYtR Z44VvegK9Knmkc0tmJyHd0OmQR4BW+3OhWYORP X-Received: by 2002:a05:600c:6290:b0:48f:f199:7a33 with SMTP id 5b1f17b1804b1-48ff1997b3emr175348915e9.28.1779090854005; Mon, 18 May 2026 00:54:14 -0700 (PDT) Received: from ROG ([2a01:e11:202b:40:328e:213e:a3da:580f]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48feaf14d22sm102788835e9.3.2026.05.18.00.54.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 00:54:13 -0700 (PDT) From: "Marco Scardovi (scardracs)" To: Linus Walleij , Bartosz Golaszewski Cc: Mika Westerberg , Andy Shevchenko , linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, "Marco Scardovi (scardracs)" Subject: [PATCH 10/12] gpiolib: acpi: Declare shared event helpers in gpiolib-acpi.h Date: Mon, 18 May 2026 09:53:55 +0200 Message-ID: <20260518075357.112584-11-mscardovi95@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518075357.112584-1-mscardovi95@gmail.com> References: <20260518075357.112584-1-mscardovi95@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" Assisted-by: Antigravity:gemini-3-flash Signed-off-by: Marco Scardovi --- drivers/gpio/gpiolib-acpi.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/gpio/gpiolib-acpi.h b/drivers/gpio/gpiolib-acpi.h index 6729da5a6fb7..d209a4edb936 100644 --- a/drivers/gpio/gpiolib-acpi.h +++ b/drivers/gpio/gpiolib-acpi.h @@ -63,6 +63,9 @@ struct gpio_desc *acpi_request_own_gpiod(struct gpio_chip= *chip, void acpi_gpiochip_request_regions(struct acpi_gpio_chip *achip); void acpi_gpiochip_free_regions(struct acpi_gpio_chip *achip); =20 +void acpi_gpio_chip_dh(acpi_handle handle, void *data); +bool acpi_gpio_irq_is_wake(struct device *parent, + const struct acpi_resource_gpio *agpio); #ifdef CONFIG_ACPI void acpi_gpiochip_add(struct gpio_chip *chip); void acpi_gpiochip_remove(struct gpio_chip *chip); --=20 2.54.0 From nobody Mon May 25 05:55:54 2026 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (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 12E753E0731 for ; Mon, 18 May 2026 07:54:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090865; cv=none; b=qF8XRxyuce5n6QLxF0cS6pYsTEsEtQHV2k3xqkllMa/cgfAzEocr283es4huVgZXdwiEHXvnOvhVHpVdzIMXywX6QRNJa/YCzNuNKWs2DUmyVl0ehuJOMstnNCsV/AwTKXlJ5Widhz9zjfFvnPJ7uF2rB92HFogs0jBtVyJxCZI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090865; c=relaxed/simple; bh=0Ql4zhqEbzWhChTeZAt2EIiNi5Xy/ATG7jBTZ+u2HiE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cqcvQHTu6X0l5p9E1U7Gk8QZyKwUvuisOMQkAAGHdXRavxKL4Jj8F9sOoFGcWieVIvY0EuK7JXCtnYoONJt3HlGSZ6rUABQR5ZiqWGj/lyibGGrrw8eI6PDc4SLCzfm3MzXMcVhl3Ti1nRDG1kEz25q4L0QULgRM1W6DCX6mYbU= 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=KOaeFW0i; arc=none smtp.client-ip=209.85.128.49 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="KOaeFW0i" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-488a8ca4aadso18558875e9.3 for ; Mon, 18 May 2026 00:54:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779090857; x=1779695657; 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=MfcbstpMvRSx72dJXMaVqWlJDHj2JQ/oVsq/+KO1blw=; b=KOaeFW0iCzkX1Dqof4VEtHBjs+eRFQD/PZTTNStzpbl9mjm2fHZW2siSJAHJ87z2c4 /T1lof9asA1wY+BBbFZ+CokaNNDLY4jA/wuYg/6PYUJluHn18DQzsUtX/dkF+r8/BUFd oX94IZp92B7V81VFQy2v337d5dZ0qRTROUDyhPkApxxL+PbqRUQnq+5y2xJFLwXP3Wee cT6zZxbb3YtKU9TdRnyqigUcs6XtkiqgfBG1G65rXe3YFFVz8RV/4+R9YgBeISvVSjf+ WBypruy1pnmqVGOYdnmJd63P0/pWPJYhR4XLUnw8s8XeavfuPEmUHMS2oBtgRYeFMEJr VH4w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779090857; x=1779695657; 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=MfcbstpMvRSx72dJXMaVqWlJDHj2JQ/oVsq/+KO1blw=; b=XT13KxDwJWwp67Gu9VsNm6s24sHLPM2ycNqOF7S2isn54u1xjQBcO4/AFJ3wMMtUie WH6jkH16QFuHdlrCPEdKE5mVouHsHguTdFvuE/v0xWxILonCd06ZniZmAG5Th9Enjvfk jzK8Pd2i7KsgFt8e1wgc/auaKlvDHzdcQzBqexImWvneuUrD+ybqtbpw4nJkCLJckBZ7 3OOT2bS86TciLJgYf26iyQBfcp89RcLCFMHUZxHRWmnD5qcjBkeI0eDmP3QkNtEPT8ya 2iKZuQqRgMpRrHPPeW5Ci8kA9OVlRmTP6v0wbARnVZKvAssYkuR2tS2zijwL4NuN+qNW ib6g== X-Forwarded-Encrypted: i=1; AFNElJ/uZzPOViCYmafb9vrH6mvWQBiHQiDCCahaEuBBBbblJ4KAwf1DbpkyxIrz2IGzRKPPQuDOqi16bb9RXqY=@vger.kernel.org X-Gm-Message-State: AOJu0YwJEJ/kFo9Kz5KJEQd58FBUzm5XR9QvTQt8vrPhPFFLnmmn8ptP 9OnnKp3LuNRp++9MfAlY7DUTrb9uND4/qKNJkGrxxh1O/0aaOUwiuTIJ X-Gm-Gg: Acq92OGn8HBkotir29LJjt5IpoVO4ZT7yFKjMi1Ke8FJIhUAPJfTlc+En0ilOZ+7dbR zPa8xci0WKKNLkbeeEXVksavUC9NZBvR5FFGcpgSMlR3uGAXd1E1O12Cq9GQreeqikXa49f1PHE ksnS0HckQ1A7k3njXnynptbTmOzqjCxUAf2OVZhfIBJ+zFzmBd3xxVVortyUQQxbDEiLz7U6HQa Z0jU+M6pBI7WPEEdJM1lEMd8D24jpbD4EFQza5vg8WnQGS5wsUPOFuxj9lnTss2v04PE14abMRF EmMItJJ2zu6e7p/fGch1XpCkH7cvOIHSqVIvQwrZadfjOzlrXuee+SVtjQlVRc8s8CxGYHjatkO zI4u2ZRBM8Xz3xEzFlUgm8YTyTMSshGMjHh8u4BlQtp/cEKeY/st3MpVFEdlSvjheBNrIx0Jeix yQoHfABSuk9YdWlQ1Jl3jUtlW8LA== X-Received: by 2002:a05:600c:628d:b0:490:1642:3d4d with SMTP id 5b1f17b1804b1-49016423dd1mr6494975e9.22.1779090856639; Mon, 18 May 2026 00:54:16 -0700 (PDT) Received: from ROG ([2a01:e11:202b:40:328e:213e:a3da:580f]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48feaf14d22sm102788835e9.3.2026.05.18.00.54.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 00:54:14 -0700 (PDT) From: "Marco Scardovi (scardracs)" To: Linus Walleij , Bartosz Golaszewski Cc: Mika Westerberg , Andy Shevchenko , linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, "Marco Scardovi (scardracs)" Subject: [PATCH 11/12] gpiolib: acpi: Add dedicated ACPI GPIO events module Date: Mon, 18 May 2026 09:53:56 +0200 Message-ID: <20260518075357.112584-12-mscardovi95@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518075357.112584-1-mscardovi95@gmail.com> References: <20260518075357.112584-1-mscardovi95@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" Assisted-by: Antigravity:gemini-3-flash Signed-off-by: Marco Scardovi --- drivers/gpio/Makefile | 2 +- drivers/gpio/gpiolib-acpi-events.c | 309 +++++++++++++++++++++++++++++ 2 files changed, 310 insertions(+), 1 deletion(-) create mode 100644 drivers/gpio/gpiolib-acpi-events.c diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile index 1a416305465b..75b38577b328 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -10,7 +10,7 @@ obj-$(CONFIG_OF_GPIO) +=3D gpiolib-of.o obj-$(CONFIG_GPIO_CDEV) +=3D gpiolib-cdev.o obj-$(CONFIG_GPIO_SYSFS) +=3D gpiolib-sysfs.o obj-$(CONFIG_GPIO_ACPI) +=3D gpiolib-acpi.o -gpiolib-acpi-y :=3D gpiolib-acpi-core.o gpiolib-acpi-quirks.o gpiolib-ac= pi-opregion.o +gpiolib-acpi-y :=3D gpiolib-acpi-core.o gpiolib-acpi-quirks.o gpiolib-ac= pi-opregion.o gpiolib-acpi-events.o obj-$(CONFIG_GPIOLIB) +=3D gpiolib-swnode.o obj-$(CONFIG_GPIO_SHARED) +=3D gpiolib-shared.o =20 diff --git a/drivers/gpio/gpiolib-acpi-events.c b/drivers/gpio/gpiolib-acpi= -events.c new file mode 100644 index 000000000000..317528a25c92 --- /dev/null +++ b/drivers/gpio/gpiolib-acpi-events.c @@ -0,0 +1,309 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * ACPI Event and Interrupt helper for GPIO API + * + * Copyright (C) 2026, Intel Corporation + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "gpiolib.h" +#include "gpiolib-acpi.h" + +static irqreturn_t acpi_gpio_irq_handler(int irq, void *data) +{ + struct acpi_gpio_event *event =3D data; + + acpi_evaluate_object(event->handle, NULL, NULL, NULL); + + return IRQ_HANDLED; +} + +static irqreturn_t acpi_gpio_irq_handler_evt(int irq, void *data) +{ + struct acpi_gpio_event *event =3D data; + + acpi_execute_simple_method(event->handle, NULL, event->pin); + + return IRQ_HANDLED; +} + +static void acpi_gpiochip_request_irq(struct acpi_gpio_chip *acpi_gpio, + struct acpi_gpio_event *event) +{ + struct device *parent =3D acpi_gpio->chip->parent; + int ret, value; + + ret =3D request_threaded_irq(event->irq, NULL, event->handler, + event->irqflags | IRQF_ONESHOT, "ACPI:Event", event); + if (ret) { + dev_err(parent, "Failed to setup interrupt handler for %d\n", event->irq= ); + return; + } + + if (event->irq_is_wake) + enable_irq_wake(event->irq); + + event->irq_requested =3D true; + + /* + * Make sure we trigger the initial state of ActiveBoth IRQs. + * + * According to the Microsoft GPIO documentation, triggering GPIO + * interrupts marked as ActiveBoth during initialization is correct + * as long as the associated GPIO line is already "asserted" + * (logic level low). We should not trigger edge-based GPIO + * interrupts not marked as ActiveBoth. + * + * See: https://learn.microsoft.com/en-us/windows-hardware/drivers/bringu= p/general-purpose-i-o--gpio- + * Section: "GPIO controllers and ActiveBoth interrupts" + */ + if (acpi_gpio_need_run_edge_events_on_boot() && + ((event->irqflags & (IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING)) =3D= =3D + (IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING))) { + value =3D gpiod_get_raw_value_cansleep(event->desc); + if (value =3D=3D 0) + event->handler(event->irq, event); + } +} + +static void acpi_gpiochip_request_irqs(struct acpi_gpio_chip *acpi_gpio) +{ + struct acpi_gpio_event *event; + + list_for_each_entry(event, &acpi_gpio->events, node) + acpi_gpiochip_request_irq(acpi_gpio, event); +} + +bool acpi_gpio_irq_is_wake(struct device *parent, + const struct acpi_resource_gpio *agpio) +{ + unsigned int pin; + + if (agpio->pin_table_length =3D=3D 0) + return false; + + pin =3D agpio->pin_table[0]; + + if (agpio->wake_capable !=3D ACPI_WAKE_CAPABLE) + return false; + + if (acpi_gpio_in_ignore_list(ACPI_GPIO_IGNORE_WAKE, dev_name(parent), pin= )) { + dev_info(parent, "Ignoring wakeup on pin %u\n", pin); + return false; + } + + return true; +} + +/* Always returns AE_OK so that we keep looping over the resources */ +static acpi_status acpi_gpiochip_alloc_event(struct acpi_resource *ares, + void *context) +{ + struct acpi_gpio_chip *acpi_gpio =3D context; + struct gpio_chip *chip =3D acpi_gpio->chip; + struct acpi_resource_gpio *agpio; + acpi_handle handle, evt_handle; + struct acpi_gpio_event *event; + irq_handler_t handler =3D NULL; + struct gpio_desc *desc; + unsigned int pin; + int ret, irq; + + if (!acpi_gpio_get_irq_resource(ares, &agpio)) + return AE_OK; + + if (agpio->pin_table_length =3D=3D 0) + return AE_OK; + + handle =3D ACPI_HANDLE(chip->parent); + pin =3D agpio->pin_table[0]; + + if (pin <=3D 255) { + char ev_name[8]; + + snprintf(ev_name, sizeof(ev_name), "_%c%02X", + agpio->triggering =3D=3D ACPI_EDGE_SENSITIVE ? 'E' : 'L', + pin); + if (ACPI_SUCCESS(acpi_get_handle(handle, ev_name, &evt_handle))) + handler =3D acpi_gpio_irq_handler; + } + if (!handler) { + if (ACPI_SUCCESS(acpi_get_handle(handle, "_EVT", &evt_handle))) + handler =3D acpi_gpio_irq_handler_evt; + } + if (!handler) + return AE_OK; + + if (acpi_gpio_in_ignore_list(ACPI_GPIO_IGNORE_INTERRUPT, dev_name(chip->p= arent), pin)) { + dev_info(chip->parent, "Ignoring interrupt on pin %u\n", pin); + return AE_OK; + } + + desc =3D acpi_request_own_gpiod(chip, agpio, 0, "ACPI:Event"); + if (IS_ERR(desc)) { + dev_err(chip->parent, + "Failed to request GPIO for pin 0x%04X, err %pe\n", + pin, desc); + return AE_OK; + } + + ret =3D gpiochip_lock_as_irq(chip, pin); + if (ret) { + dev_err(chip->parent, + "Failed to lock GPIO pin 0x%04X as interrupt, err %d\n", + pin, ret); + goto fail_free_desc; + } + + irq =3D gpiod_to_irq(desc); + if (irq < 0) { + dev_err(chip->parent, + "Failed to translate GPIO pin 0x%04X to IRQ, err %d\n", + pin, irq); + goto fail_unlock_irq; + } + + event =3D kzalloc_obj(*event); + if (!event) + goto fail_unlock_irq; + + event->irqflags =3D IRQF_ONESHOT; + if (agpio->triggering =3D=3D ACPI_LEVEL_SENSITIVE) { + if (agpio->polarity =3D=3D ACPI_ACTIVE_HIGH) + event->irqflags |=3D IRQF_TRIGGER_HIGH; + else + event->irqflags |=3D IRQF_TRIGGER_LOW; + } else { + switch (agpio->polarity) { + case ACPI_ACTIVE_HIGH: + event->irqflags |=3D IRQF_TRIGGER_RISING; + break; + case ACPI_ACTIVE_LOW: + event->irqflags |=3D IRQF_TRIGGER_FALLING; + break; + default: + event->irqflags |=3D IRQF_TRIGGER_RISING | + IRQF_TRIGGER_FALLING; + break; + } + } + + event->handle =3D evt_handle; + event->handler =3D handler; + event->irq =3D irq; + event->irq_is_wake =3D acpi_gpio_irq_is_wake(chip->parent, agpio); + event->pin =3D pin; + event->desc =3D desc; + + list_add_tail(&event->node, &acpi_gpio->events); + + return AE_OK; + +fail_unlock_irq: + gpiochip_unlock_as_irq(chip, pin); +fail_free_desc: + gpiochip_free_own_desc(desc); + + return AE_OK; +} + +/** + * acpi_gpiochip_request_interrupts() - Register isr for gpio chip ACPI ev= ents + * @chip: GPIO chip + * + * ACPI5 platforms can use GPIO signaled ACPI events. These GPIO interrupt= s are + * handled by ACPI event methods which need to be called from the GPIO + * chip's interrupt handler. acpi_gpiochip_request_interrupts() finds out = which + * GPIO pins have ACPI event methods and assigns interrupt handlers that c= alls + * the ACPI event methods for those pins. + */ +void acpi_gpiochip_request_interrupts(struct gpio_chip *chip) +{ + struct acpi_gpio_chip *acpi_gpio; + acpi_handle handle; + acpi_status status; + + if (!chip->parent || !chip->to_irq) + return; + + handle =3D ACPI_HANDLE(chip->parent); + if (!handle) + return; + + status =3D acpi_get_data(handle, acpi_gpio_chip_dh, (void **)&acpi_gpio); + if (ACPI_FAILURE(status)) + return; + + if (acpi_quirk_skip_gpio_event_handlers()) + return; + + acpi_walk_resources(handle, METHOD_NAME__AEI, + acpi_gpiochip_alloc_event, acpi_gpio); + + if (acpi_gpio_add_to_deferred_list(&acpi_gpio->deferred_req_irqs_list_ent= ry)) + return; + + acpi_gpiochip_request_irqs(acpi_gpio); +} +EXPORT_SYMBOL_GPL(acpi_gpiochip_request_interrupts); + +/** + * acpi_gpiochip_free_interrupts() - Free GPIO ACPI event interrupts. + * @chip: GPIO chip + * + * Free interrupts associated with GPIO ACPI event method for the given + * GPIO chip. + */ +void acpi_gpiochip_free_interrupts(struct gpio_chip *chip) +{ + struct acpi_gpio_chip *acpi_gpio; + struct acpi_gpio_event *event, *ep; + acpi_handle handle; + acpi_status status; + + if (!chip->parent || !chip->to_irq) + return; + + handle =3D ACPI_HANDLE(chip->parent); + if (!handle) + return; + + status =3D acpi_get_data(handle, acpi_gpio_chip_dh, (void **)&acpi_gpio); + if (ACPI_FAILURE(status)) + return; + + acpi_gpio_remove_from_deferred_list(&acpi_gpio->deferred_req_irqs_list_en= try); + + list_for_each_entry_safe_reverse(event, ep, &acpi_gpio->events, node) { + if (event->irq_requested) { + if (event->irq_is_wake) + disable_irq_wake(event->irq); + + free_irq(event->irq, event); + } + + gpiochip_unlock_as_irq(chip, event->pin); + gpiochip_free_own_desc(event->desc); + list_del(&event->node); + kfree(event); + } +} +EXPORT_SYMBOL_GPL(acpi_gpiochip_free_interrupts); + +void __init acpi_gpio_process_deferred_list(struct list_head *list) +{ + struct acpi_gpio_chip *acpi_gpio, *tmp; + + list_for_each_entry_safe(acpi_gpio, tmp, list, deferred_req_irqs_list_ent= ry) + acpi_gpiochip_request_irqs(acpi_gpio); +} --=20 2.54.0 From nobody Mon May 25 05:55:54 2026 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.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 691C13DEADE for ; Mon, 18 May 2026 07:54:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090867; cv=none; b=tgUlrigmu3l6C4qLyK6krkoBfSV6AErHse908t4i8s288khHYdLIkUy2waXn64pmm84bqhAxb0lYKAnkkLuOXAL7DoAOZms1F7rTh+cE8Cla6atgabM4eGrDqem0RDYHo1aDLjuY+OttMSLpa+A6lGILGwn4T8xhTtwiZWz5Uqw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779090867; c=relaxed/simple; bh=rWUS7nTXrVlK5crZ0DjajElGR3QIsEMB1YpNIqFMkRs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g4ugXE48wnUljTGspmu/TaPt7pI/M+3jmSUwtjlqBSmdV/GLFjp1oTs7bRH9Ee9emffqgWiyxnvutTsh94YdC0L8ZKpRN7xW+Vw35X5SB6tBlbDxNx57UdBG364MRFwGNq/T4oxm3ctk67nVlhLHKUdpQnoVfdTVsDTpeieTygU= 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=DpjGekCJ; arc=none smtp.client-ip=209.85.128.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="DpjGekCJ" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-48fe26a177cso12051165e9.1 for ; Mon, 18 May 2026 00:54:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779090858; x=1779695658; 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=bjJqGoIGjYsGu2tQdH7B+cO6snJCjh0eC3SCgTOpXs0=; b=DpjGekCJX/y6FtC1BMif9q9RdhiJglm7spfZD0JgCwbcQH6g4886kXSM0XrMJ+G/aF Fm3zI/P1yAQcv+eei1QY8ranTH2cV9JDfpdvtZx96ULPVEDmcQRaxME2vxlG9a462ox/ ChkR6QBHVVSPYFapksCQyq0Ue8yaI+tNa/ov0Go7C6HcYD9hjWhLl5KAiB6l2EDRUapE oKGKoA4XB/0Ir2oQugxfEfr/0GDplX/SgGPWwnnE9ttmJh4dMXhOAoWV0iCeLjXa+eCw 6YZp2y61Qn0FbmH4oUX8AS3Rpv4zniY/Y3K80Am63t0+u29uUiC+ddIOpdUwDQdeGz25 LozA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779090858; x=1779695658; 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=bjJqGoIGjYsGu2tQdH7B+cO6snJCjh0eC3SCgTOpXs0=; b=W66mO291vhu19Q89QjXMSHszm5itsMtOnW2w5N6uNYmadc4ai50g+M8rTMMcrGhsjU RSw7em8IKj3mWlXGeQNtYHoJj1Wq5ZuHROPm1yoDBV1jpdkvdgcU1AXLTkjMGTN0iO8q b2KSmawlc0ioYRi8s/is01Oap0fpWZ7BL0B5toCRi1C26HHEoaMsVZBIKLYv9t8yzBz2 RY9pRWyJYVc0KYQLzGmqrFHvhmT3i+B3pCMshPuTGilc0nChXRYFMdK88Zi4hh8W8uSY hLPfZjCPWPxgqt5Ae4eQKR3jbsGubirgcoEi03Ku8EVz1TM15MASlfDjS3f9c+KzFP3M N5HQ== X-Forwarded-Encrypted: i=1; AFNElJ9eeYjHj2oasjxk9QA4GU/eW5GWsTlJZqc+eRL11ubUyQPYxsBN1fhYtA9K7rbzItX6wr1WQE/lCIWbz70=@vger.kernel.org X-Gm-Message-State: AOJu0YymGdOEmVNdt37S+5VDuD194Lu+CiP7/Cu1Brf/J2FOL7kd6FqE x19Jo50fl7V6jgXR9e9MC+QvgCsaq8yScwa5/y/lUmmng880Y2iqfJEO X-Gm-Gg: Acq92OHWOD8mHFfw/LRjgXjW8effkBVqZFKMdMNLRvQFrc6LYiFl62q76MAoMtF0fgJ ZbUoAmiRncYhQcOimCIxZoyJMFQqBATCOHZF1+KwNc9yvdTJgi2tksid2/AI8Y3xvRtVS18k+ES kd22GeTZvRvyXy4umnWLbXEUTG+Ii13zqLonvoxe1zeGMIH0mNNVWTwukF8zcWT4k1SaoDvGYD5 9+kllsKTVelT4nEIVH9g4bVaZympkDD5O9bklf3hNV8Z18cw2gA2Tjb/cdUkjbDAxft7Mxrzvvm GTVc+GyLKEd13UXOFRsh3GHr/gceKBxzgK6QqCMSM2RPHt230Mz8+KYFRopARkB6ekQKPBJZO94 y0hJsOsOgnu/jqaFw6aBqKCr3eh1OFkx7gPdBgsbKxdFvYkiWmL9V+BtywD7is36zSCugHKdkNw eWfIBEzyx1IoMQ1FuKXJRE5QGwU4cBSOTYTOc2 X-Received: by 2002:a05:600c:828d:b0:48e:6db3:ff2e with SMTP id 5b1f17b1804b1-48fe61eb313mr203218885e9.15.1779090858347; Mon, 18 May 2026 00:54:18 -0700 (PDT) Received: from ROG ([2a01:e11:202b:40:328e:213e:a3da:580f]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48feaf14d22sm102788835e9.3.2026.05.18.00.54.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 May 2026 00:54:17 -0700 (PDT) From: "Marco Scardovi (scardracs)" To: Linus Walleij , Bartosz Golaszewski Cc: Mika Westerberg , Andy Shevchenko , linux-gpio@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, "Marco Scardovi (scardracs)" Subject: [PATCH 12/12] gpiolib: acpi: Decouple Event and Interrupt handling from core Date: Mon, 18 May 2026 09:53:57 +0200 Message-ID: <20260518075357.112584-13-mscardovi95@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260518075357.112584-1-mscardovi95@gmail.com> References: <20260518075357.112584-1-mscardovi95@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" Assisted-by: Antigravity:gemini-3-flash Signed-off-by: Marco Scardovi --- drivers/gpio/gpiolib-acpi-core.c | 285 +------------------------------ 1 file changed, 1 insertion(+), 284 deletions(-) diff --git a/drivers/gpio/gpiolib-acpi-core.c b/drivers/gpio/gpiolib-acpi-c= ore.c index b8976a0c798e..99b7b0409810 100644 --- a/drivers/gpio/gpiolib-acpi-core.c +++ b/drivers/gpio/gpiolib-acpi-core.c @@ -106,25 +106,7 @@ static struct gpio_desc *acpi_get_gpiod(char *path, un= signed int pin) return gpio_device_get_desc(gdev, pin); } =20 -static irqreturn_t acpi_gpio_irq_handler(int irq, void *data) -{ - struct acpi_gpio_event *event =3D data; - - acpi_evaluate_object(event->handle, NULL, NULL, NULL); - - return IRQ_HANDLED; -} - -static irqreturn_t acpi_gpio_irq_handler_evt(int irq, void *data) -{ - struct acpi_gpio_event *event =3D data; - - acpi_execute_simple_method(event->handle, NULL, event->pin); - - return IRQ_HANDLED; -} - -static void acpi_gpio_chip_dh(acpi_handle handle, void *data) +void acpi_gpio_chip_dh(acpi_handle handle, void *data) { /* The address of this function is used as a key. */ } @@ -172,52 +154,7 @@ bool acpi_gpio_get_io_resource(struct acpi_resource *a= res, } EXPORT_SYMBOL_GPL(acpi_gpio_get_io_resource); =20 -static void acpi_gpiochip_request_irq(struct acpi_gpio_chip *acpi_gpio, - struct acpi_gpio_event *event) -{ - struct device *parent =3D acpi_gpio->chip->parent; - int ret, value; - - ret =3D request_threaded_irq(event->irq, NULL, event->handler, - event->irqflags | IRQF_ONESHOT, "ACPI:Event", event); - if (ret) { - dev_err(parent, "Failed to setup interrupt handler for %d\n", event->irq= ); - return; - } - - if (event->irq_is_wake) - enable_irq_wake(event->irq); =20 - event->irq_requested =3D true; - - /* - * Make sure we trigger the initial state of ActiveBoth IRQs. - * - * According to the Microsoft GPIO documentation, triggering GPIO - * interrupts marked as ActiveBoth during initialization is correct - * as long as the associated GPIO line is already "asserted" - * (logic level low). We should not trigger edge-based GPIO - * interrupts not marked as ActiveBoth. - * - * See: https://learn.microsoft.com/en-us/windows-hardware/drivers/bringu= p/general-purpose-i-o--gpio- - * Section: "GPIO controllers and ActiveBoth interrupts" - */ - if (acpi_gpio_need_run_edge_events_on_boot() && - ((event->irqflags & (IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING)) =3D= =3D - (IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING))) { - value =3D gpiod_get_raw_value_cansleep(event->desc); - if (value =3D=3D 0) - event->handler(event->irq, event); - } -} - -static void acpi_gpiochip_request_irqs(struct acpi_gpio_chip *acpi_gpio) -{ - struct acpi_gpio_event *event; - - list_for_each_entry(event, &acpi_gpio->events, node) - acpi_gpiochip_request_irq(acpi_gpio, event); -} =20 static enum gpiod_flags acpi_gpio_to_gpiod_flags(const struct acpi_resource_gpio *agpio, int polar= ity) @@ -296,229 +233,9 @@ struct gpio_desc *acpi_request_own_gpiod(struct gpio_= chip *chip, return desc; } =20 -static bool acpi_gpio_irq_is_wake(struct device *parent, - const struct acpi_resource_gpio *agpio) -{ - unsigned int pin; - - if (agpio->pin_table_length =3D=3D 0) - return false; =20 - pin =3D agpio->pin_table[0]; =20 - if (agpio->wake_capable !=3D ACPI_WAKE_CAPABLE) - return false; - - if (acpi_gpio_in_ignore_list(ACPI_GPIO_IGNORE_WAKE, dev_name(parent), pin= )) { - dev_info(parent, "Ignoring wakeup on pin %u\n", pin); - return false; - } =20 - return true; -} - -/* Always returns AE_OK so that we keep looping over the resources */ -static acpi_status acpi_gpiochip_alloc_event(struct acpi_resource *ares, - void *context) -{ - struct acpi_gpio_chip *acpi_gpio =3D context; - struct gpio_chip *chip =3D acpi_gpio->chip; - struct acpi_resource_gpio *agpio; - acpi_handle handle, evt_handle; - struct acpi_gpio_event *event; - irq_handler_t handler =3D NULL; - struct gpio_desc *desc; - unsigned int pin; - int ret, irq; - - if (!acpi_gpio_get_irq_resource(ares, &agpio)) - return AE_OK; - - if (agpio->pin_table_length =3D=3D 0) - return AE_OK; - - handle =3D ACPI_HANDLE(chip->parent); - pin =3D agpio->pin_table[0]; - - if (pin <=3D 255) { - char ev_name[8]; - - snprintf(ev_name, sizeof(ev_name), "_%c%02X", - agpio->triggering =3D=3D ACPI_EDGE_SENSITIVE ? 'E' : 'L', - pin); - if (ACPI_SUCCESS(acpi_get_handle(handle, ev_name, &evt_handle))) - handler =3D acpi_gpio_irq_handler; - } - if (!handler) { - if (ACPI_SUCCESS(acpi_get_handle(handle, "_EVT", &evt_handle))) - handler =3D acpi_gpio_irq_handler_evt; - } - if (!handler) - return AE_OK; - - if (acpi_gpio_in_ignore_list(ACPI_GPIO_IGNORE_INTERRUPT, dev_name(chip->p= arent), pin)) { - dev_info(chip->parent, "Ignoring interrupt on pin %u\n", pin); - return AE_OK; - } - - desc =3D acpi_request_own_gpiod(chip, agpio, 0, "ACPI:Event"); - if (IS_ERR(desc)) { - dev_err(chip->parent, - "Failed to request GPIO for pin 0x%04X, err %pe\n", - pin, desc); - return AE_OK; - } - - ret =3D gpiochip_lock_as_irq(chip, pin); - if (ret) { - dev_err(chip->parent, - "Failed to lock GPIO pin 0x%04X as interrupt, err %d\n", - pin, ret); - goto fail_free_desc; - } - - irq =3D gpiod_to_irq(desc); - if (irq < 0) { - dev_err(chip->parent, - "Failed to translate GPIO pin 0x%04X to IRQ, err %d\n", - pin, irq); - goto fail_unlock_irq; - } - - event =3D kzalloc_obj(*event); - if (!event) - goto fail_unlock_irq; - - event->irqflags =3D IRQF_ONESHOT; - if (agpio->triggering =3D=3D ACPI_LEVEL_SENSITIVE) { - if (agpio->polarity =3D=3D ACPI_ACTIVE_HIGH) - event->irqflags |=3D IRQF_TRIGGER_HIGH; - else - event->irqflags |=3D IRQF_TRIGGER_LOW; - } else { - switch (agpio->polarity) { - case ACPI_ACTIVE_HIGH: - event->irqflags |=3D IRQF_TRIGGER_RISING; - break; - case ACPI_ACTIVE_LOW: - event->irqflags |=3D IRQF_TRIGGER_FALLING; - break; - default: - event->irqflags |=3D IRQF_TRIGGER_RISING | - IRQF_TRIGGER_FALLING; - break; - } - } - - event->handle =3D evt_handle; - event->handler =3D handler; - event->irq =3D irq; - event->irq_is_wake =3D acpi_gpio_irq_is_wake(chip->parent, agpio); - event->pin =3D pin; - event->desc =3D desc; - - list_add_tail(&event->node, &acpi_gpio->events); - - return AE_OK; - -fail_unlock_irq: - gpiochip_unlock_as_irq(chip, pin); -fail_free_desc: - gpiochip_free_own_desc(desc); - - return AE_OK; -} - -/** - * acpi_gpiochip_request_interrupts() - Register isr for gpio chip ACPI ev= ents - * @chip: GPIO chip - * - * ACPI5 platforms can use GPIO signaled ACPI events. These GPIO interrupt= s are - * handled by ACPI event methods which need to be called from the GPIO - * chip's interrupt handler. acpi_gpiochip_request_interrupts() finds out = which - * GPIO pins have ACPI event methods and assigns interrupt handlers that c= alls - * the ACPI event methods for those pins. - */ -void acpi_gpiochip_request_interrupts(struct gpio_chip *chip) -{ - struct acpi_gpio_chip *acpi_gpio; - acpi_handle handle; - acpi_status status; - - if (!chip->parent || !chip->to_irq) - return; - - handle =3D ACPI_HANDLE(chip->parent); - if (!handle) - return; - - status =3D acpi_get_data(handle, acpi_gpio_chip_dh, (void **)&acpi_gpio); - if (ACPI_FAILURE(status)) - return; - - if (acpi_quirk_skip_gpio_event_handlers()) - return; - - acpi_walk_resources(handle, METHOD_NAME__AEI, - acpi_gpiochip_alloc_event, acpi_gpio); - - if (acpi_gpio_add_to_deferred_list(&acpi_gpio->deferred_req_irqs_list_ent= ry)) - return; - - acpi_gpiochip_request_irqs(acpi_gpio); -} -EXPORT_SYMBOL_GPL(acpi_gpiochip_request_interrupts); - -/** - * acpi_gpiochip_free_interrupts() - Free GPIO ACPI event interrupts. - * @chip: GPIO chip - * - * Free interrupts associated with GPIO ACPI event method for the given - * GPIO chip. - */ -void acpi_gpiochip_free_interrupts(struct gpio_chip *chip) -{ - struct acpi_gpio_chip *acpi_gpio; - struct acpi_gpio_event *event, *ep; - acpi_handle handle; - acpi_status status; - - if (!chip->parent || !chip->to_irq) - return; - - handle =3D ACPI_HANDLE(chip->parent); - if (!handle) - return; - - status =3D acpi_get_data(handle, acpi_gpio_chip_dh, (void **)&acpi_gpio); - if (ACPI_FAILURE(status)) - return; - - acpi_gpio_remove_from_deferred_list(&acpi_gpio->deferred_req_irqs_list_en= try); - - list_for_each_entry_safe_reverse(event, ep, &acpi_gpio->events, node) { - if (event->irq_requested) { - if (event->irq_is_wake) - disable_irq_wake(event->irq); - - free_irq(event->irq, event); - } - - gpiochip_unlock_as_irq(chip, event->pin); - gpiochip_free_own_desc(event->desc); - list_del(&event->node); - kfree(event); - } -} -EXPORT_SYMBOL_GPL(acpi_gpiochip_free_interrupts); - -void __init acpi_gpio_process_deferred_list(struct list_head *list) -{ - struct acpi_gpio_chip *acpi_gpio, *tmp; - - list_for_each_entry_safe(acpi_gpio, tmp, list, deferred_req_irqs_list_ent= ry) - acpi_gpiochip_request_irqs(acpi_gpio); -} =20 int acpi_dev_add_driver_gpios(struct acpi_device *adev, const struct acpi_gpio_mapping *gpios) --=20 2.54.0