From nobody Wed Dec 17 15:54:37 2025 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 C29E3130A5C for ; Mon, 24 Jun 2024 09:39:44 +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=1719221986; cv=none; b=GXHQo+rOL/wulEQEYHcMZx6z+yJQYpEcHSuqkSOOSHjC4hDNpStxbA8707DDZgv7u/vnXkEpT9kNbGy3bBqP/IJnZ5DsuC4lh+hUIyIhEAdWOGELeePrGLEPHs4+0YhFf67fs3SDgED1lJV3z0+lro9W/Mij5GQxotIVDXOyWSg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719221986; c=relaxed/simple; bh=A5DpDOGB5YJ5dDGPTBnxRtEIUltYaPmh9k8UX38ucjE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=G+MGeFxlscBmkn3jv9a5Ekxn2TGl9IIQz19vp2nwAhk2XjEwjKiNwr8pwM8C6gBriY3kHd7+tRUZak28NPM3veYo1qdF1tDho0zWUND7z4CpQcY6SRjvKNSYzVkpixHLaZNRM5QLu1qGGRlUd9mEgm/oF54Su4oyvW50paX1N7w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=fn+58yVh; arc=none smtp.client-ip=209.85.221.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="fn+58yVh" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-36226e98370so2497022f8f.3 for ; Mon, 24 Jun 2024 02:39:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1719221983; x=1719826783; 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=2JD6H/71ed+HgEm6na1DA8I9uAZ8qxNavgSQIFHLcZQ=; b=fn+58yVhY38N2gsMq7yvUqnwg2IZntLNHiCMKrJSmozRfPGmAq3wLRic/GOhGSedA1 IXnPyDxcxvqX5xkZ6qb3LO68k4Pv+4s22my0SakALtzI93Vmtbntq/gOMrOkyBOgQwBG h7MnMSfbOknb+1xg1kt5IHpFg/wUlOfytFS1s1FzJ2S889ZVwtQiCZkORdLTT2ZFEZMv BE4fe3SslRhTPzhrrzPL1607HHviXPJJwqloxqqzQMqf1QYeWtq408xjs16jNxSRjADS OHIkPQiUF7ewL8U+iS86+6L0DSiz4Nt3EB00vybkrwPirW29ctqE2EDhmZgsYhGGSLD0 CrNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719221983; x=1719826783; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2JD6H/71ed+HgEm6na1DA8I9uAZ8qxNavgSQIFHLcZQ=; b=EBAfRvD6AFVh1vaQFL1XbcIu36X4VmsfYm8oqESklEXD8muRlze+mUNhH1OtZlB6LU YnlLwq5O1yZFurgctUZBhTwypjr7+e+OMd+N5OewXzvdVN0gtze9pk9MAE+cYc4Z4PrX S5uS0rxPTWL/+xhUBV+49U33DnNxuM+0aihLua/kh/fDYvF2wFZv+8p6v32DD8qv1BV1 9OuukrZlOc7Y7kM8pG+GKO5D1Uy2Ss33OAilSFOOFO1t18jrxdzHAOudpPeunt+l49QL WCURb/TenZUm09wCiF0kfsNQJfPphPZLV4RglQfdq7NAeejVxKQUqdUqIu/XkGc/WhuP Qe/g== X-Forwarded-Encrypted: i=1; AJvYcCUX0a6PkA8ib6UnYFztY3MQMVJ5WYRRd7GY5Nuxo/BP/zbpqntrbYnu6ikqMGj/OZAxj8r2SFbzg1dxAii60vG+Lx9Cpty0qZH/rB44 X-Gm-Message-State: AOJu0YwG3Zbx3LDEQZa5bxYCOnU/idIpG6zwrjgRLv1IIPeCq0UjwW5f 48yvXCAf2YIm8wZJrCO/llVtxbYDMfluOGhRJD4Zpa12nZDf7uK0nhQUv5WR5GvCYuB21o4rWeM 3 X-Google-Smtp-Source: AGHT+IH4cJwn/Amj7JNX6uQlXorQJKTbtqauX/ruYqNWJxJBrNkmIF6ABTUDWnrxpcc2W7lwKXy0IQ== X-Received: by 2002:a05:6000:2a5:b0:366:ec30:adcc with SMTP id ffacd0b85a97d-366ec30ae4fmr2533851f8f.5.1719221983124; Mon, 24 Jun 2024 02:39:43 -0700 (PDT) Received: from brgl-uxlite.home ([2a01:cb1d:dc:7e00:b80e:a46a:7fb3:4e3a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-36638d9c1aasm9433138f8f.55.2024.06.24.02.39.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jun 2024 02:39:42 -0700 (PDT) From: Bartosz Golaszewski To: Linus Walleij , Thomas Gleixner Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH v2 1/2] genirq/irq_sim: add an extended irq_sim initializer Date: Mon, 24 Jun 2024 11:39:32 +0200 Message-ID: <20240624093934.17089-2-brgl@bgdev.pl> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240624093934.17089-1-brgl@bgdev.pl> References: <20240624093934.17089-1-brgl@bgdev.pl> 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" From: Bartosz Golaszewski Currently users of the interrupt simulator don't have any way of being notified about interrupts from the simulated domain being requested or released. This causes a problem for one of the users - the GPIO simulator - which is unable to lock the pins as interrupts. Define a structure containing callbacks to be executed on various irq_sim-related events (for now: irq request and release) and provide an extended function for creating simulated interrupt domains that takes it and a pointer to custom user data (to be passed to said callbacks) as arguments. Signed-off-by: Bartosz Golaszewski Acked-by: Linus Walleij Reviewed-by: Linus Walleij --- include/linux/irq_sim.h | 17 ++++++++++++ kernel/irq/irq_sim.c | 60 ++++++++++++++++++++++++++++++++++++++--- 2 files changed, 74 insertions(+), 3 deletions(-) diff --git a/include/linux/irq_sim.h b/include/linux/irq_sim.h index ab831e5ae748..89b4d8ff274b 100644 --- a/include/linux/irq_sim.h +++ b/include/linux/irq_sim.h @@ -16,11 +16,28 @@ * requested like normal irqs and enqueued from process context. */ =20 +struct irq_sim_ops { + int (*irq_sim_irq_requested)(struct irq_domain *domain, + irq_hw_number_t hwirq, void *data); + void (*irq_sim_irq_released)(struct irq_domain *domain, + irq_hw_number_t hwirq, void *data); +}; + struct irq_domain *irq_domain_create_sim(struct fwnode_handle *fwnode, unsigned int num_irqs); struct irq_domain *devm_irq_domain_create_sim(struct device *dev, struct fwnode_handle *fwnode, unsigned int num_irqs); +struct irq_domain *irq_domain_create_sim_full(struct fwnode_handle *fwnode, + unsigned int num_irqs, + const struct irq_sim_ops *ops, + void *data); +struct irq_domain * +devm_irq_domain_create_sim_full(struct device *dev, + struct fwnode_handle *fwnode, + unsigned int num_irqs, + const struct irq_sim_ops *ops, + void *data); void irq_domain_remove_sim(struct irq_domain *domain); =20 #endif /* _LINUX_IRQ_SIM_H */ diff --git a/kernel/irq/irq_sim.c b/kernel/irq/irq_sim.c index 38d6ae651ac7..3d4036db15ac 100644 --- a/kernel/irq/irq_sim.c +++ b/kernel/irq/irq_sim.c @@ -17,6 +17,8 @@ struct irq_sim_work_ctx { unsigned int irq_count; unsigned long *pending; struct irq_domain *domain; + struct irq_sim_ops ops; + void *user_data; }; =20 struct irq_sim_irq_ctx { @@ -88,6 +90,31 @@ static int irq_sim_set_irqchip_state(struct irq_data *da= ta, return 0; } =20 +static int irq_sim_request_resources(struct irq_data *data) +{ + struct irq_sim_irq_ctx *irq_ctx =3D irq_data_get_irq_chip_data(data); + struct irq_sim_work_ctx *work_ctx =3D irq_ctx->work_ctx; + irq_hw_number_t hwirq =3D irqd_to_hwirq(data); + + if (work_ctx->ops.irq_sim_irq_requested) + return work_ctx->ops.irq_sim_irq_requested(work_ctx->domain, + hwirq, + work_ctx->user_data); + + return 0; +} + +static void irq_sim_release_resources(struct irq_data *data) +{ + struct irq_sim_irq_ctx *irq_ctx =3D irq_data_get_irq_chip_data(data); + struct irq_sim_work_ctx *work_ctx =3D irq_ctx->work_ctx; + irq_hw_number_t hwirq =3D irqd_to_hwirq(data); + + if (work_ctx->ops.irq_sim_irq_released) + work_ctx->ops.irq_sim_irq_released(work_ctx->domain, hwirq, + work_ctx->user_data); +} + static struct irq_chip irq_sim_irqchip =3D { .name =3D "irq_sim", .irq_mask =3D irq_sim_irqmask, @@ -95,6 +122,8 @@ static struct irq_chip irq_sim_irqchip =3D { .irq_set_type =3D irq_sim_set_type, .irq_get_irqchip_state =3D irq_sim_get_irqchip_state, .irq_set_irqchip_state =3D irq_sim_set_irqchip_state, + .irq_request_resources =3D irq_sim_request_resources, + .irq_release_resources =3D irq_sim_release_resources, }; =20 static void irq_sim_handle_irq(struct irq_work *work) @@ -163,6 +192,15 @@ static const struct irq_domain_ops irq_sim_domain_ops = =3D { */ struct irq_domain *irq_domain_create_sim(struct fwnode_handle *fwnode, unsigned int num_irqs) +{ + return irq_domain_create_sim_full(fwnode, num_irqs, NULL, NULL); +} +EXPORT_SYMBOL_GPL(irq_domain_create_sim); + +struct irq_domain *irq_domain_create_sim_full(struct fwnode_handle *fwnode, + unsigned int num_irqs, + const struct irq_sim_ops *ops, + void *data) { struct irq_sim_work_ctx *work_ctx __free(kfree) =3D kmalloc(sizeof(*work_ctx), GFP_KERNEL); @@ -183,10 +221,14 @@ struct irq_domain *irq_domain_create_sim(struct fwnod= e_handle *fwnode, work_ctx->irq_count =3D num_irqs; work_ctx->work =3D IRQ_WORK_INIT_HARD(irq_sim_handle_irq); work_ctx->pending =3D no_free_ptr(pending); + work_ctx->user_data =3D data; + + if (ops) + memcpy(&work_ctx->ops, ops, sizeof(*ops)); =20 return no_free_ptr(work_ctx)->domain; } -EXPORT_SYMBOL_GPL(irq_domain_create_sim); +EXPORT_SYMBOL_GPL(irq_domain_create_sim_full); =20 /** * irq_domain_remove_sim - Deinitialize the interrupt simulator domain: fr= ee @@ -227,11 +269,23 @@ static void devm_irq_domain_remove_sim(void *data) struct irq_domain *devm_irq_domain_create_sim(struct device *dev, struct fwnode_handle *fwnode, unsigned int num_irqs) +{ + return devm_irq_domain_create_sim_full(dev, fwnode, num_irqs, + NULL, NULL); +} +EXPORT_SYMBOL_GPL(devm_irq_domain_create_sim); + +struct irq_domain * +devm_irq_domain_create_sim_full(struct device *dev, + struct fwnode_handle *fwnode, + unsigned int num_irqs, + const struct irq_sim_ops *ops, + void *data) { struct irq_domain *domain; int ret; =20 - domain =3D irq_domain_create_sim(fwnode, num_irqs); + domain =3D irq_domain_create_sim_full(fwnode, num_irqs, ops, data); if (IS_ERR(domain)) return domain; =20 @@ -241,4 +295,4 @@ struct irq_domain *devm_irq_domain_create_sim(struct de= vice *dev, =20 return domain; } -EXPORT_SYMBOL_GPL(devm_irq_domain_create_sim); +EXPORT_SYMBOL_GPL(devm_irq_domain_create_sim_full); --=20 2.43.0 From nobody Wed Dec 17 15:54:37 2025 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.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 50E7A132116 for ; Mon, 24 Jun 2024 09:39:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719221987; cv=none; b=PXKkBGGAdcDr4BmC0qgrwcXctSvPvIY1A2Qbp/fL4gDa/0zp6QSodMIlCpgD2EHsh7KBRHCIE47zFSWZKdCEeMSHj6jRhg6U7U7QDjxDpBQvdwFYlCvh3MQr4SM6FXwWsAUjktM84Zi0i/JpNhaCF/WZMUYMDZIWKUKsAEeoE5c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1719221987; c=relaxed/simple; bh=ZToJsqy3HaH/2CQ4Ri3rb7/ITG47bOqRmRyHXkIcB9E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BzGT/w4ibSa379MoiDNptUxC6A8za05c7U2mmxFrg2iujU4lUWUnuDBru8SQvcsaCs1ndY0v01BA55Nl0qonFW2Dxky8tye32NUlrwjzbxPhfZ8TeNgnb3ymB1E74i6ecoWtCjXZ/SLJJaNl6tsBHzVVtDmIYcLZHVrjvCn0EIE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl; spf=none smtp.mailfrom=bgdev.pl; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b=VmcDwblC; arc=none smtp.client-ip=209.85.221.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=bgdev.pl Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bgdev-pl.20230601.gappssmtp.com header.i=@bgdev-pl.20230601.gappssmtp.com header.b="VmcDwblC" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-362b32fbb3bso2777846f8f.2 for ; Mon, 24 Jun 2024 02:39:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bgdev-pl.20230601.gappssmtp.com; s=20230601; t=1719221985; x=1719826785; 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=VBNm9BKUEMH7BT7HuL0JVF8taCtuzuPG7CgzS2A8+KI=; b=VmcDwblCPY/JqLpra5GW1JOJMI4cFf8IJsYrfChKPclUObpHJ9OeYNtLI9Nltv0UyO enSOJTskDS2VlzxLz1wkI70Z/2UcIwDMi7NKUm6ug74jaSsY7+cSeYsMrytMZvzn0Zxr f+RNFCuP8mFYxXXVNHGmLUafJbEeDvfSMATlxnROhZMOtiBiyrhs76A3oMXjdd0HyBuC Tk+eMqqtl4riKQfF+/9o20OT5lsX2FrY7RE9AXolFxRAttrpwr/kzWjEY6fwBmSZJbc2 AtOP0aIzUFBcshB38QGXVoUbJbKYJD6cGNArDKdDPACcqVFHbk/3W0iRbzBjCSGCAwDf anPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1719221985; x=1719826785; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VBNm9BKUEMH7BT7HuL0JVF8taCtuzuPG7CgzS2A8+KI=; b=go/n0P0vVNmnuFtB6vo34i1VR2ZCz2RPzc62cOv5bZ9URr+aT9l9bvunbN23BVWTN0 TckyJiWYYhgBEE1+NoHMd0ogIRTWSL0WyNKjZ4aWe0uPM6bJx1vBLdZ11vLI6kvYk6Ak HHfDsZnkf9L5ZjCE1m0KKo6XshtmpOGOsjk+H6HPWo84l1xF+6ArPVVMXRiWp2D3vPKG 2/QpGbbE1v0KQEo0XmYmGmwMc/Gr30sG6uWANg6tV6il4fnAHVi3Hv5q+1bJQIxEbVRO IzjG33SUb8l5y0f8arZbtMem6rdu0ma9ScMq+7PdOvU+qzGB2qCEQl3w0DTTLN5LQe47 4dxA== X-Forwarded-Encrypted: i=1; AJvYcCVUFZmd3a/xQlFzSzW/S82SNE0nUzM+Bzau7hir+urBz3gmMZ6bsNfKg9IlCD4X2GvphoEmIrAyqEffGMlJ8pS4sQRYlvotX0Dn35+M X-Gm-Message-State: AOJu0YwdMVm8Har60GYcRdXa3xc9jd69HqXGiFW1M93/KlqcHZtwisaq FRuUyAKZwATVomlK0xZgN/1CUydTjItpfHPR45ORt42QUkDaTYsu6f8WkNRJAhtdY1kNRYKZMga Y X-Google-Smtp-Source: AGHT+IEIIGHqe+Y5cI+4HYZZmg5AfyBiSyyrpJdmK2y3V900vYjwih+OvsIkiER4BOomFOwkOnxQ2Q== X-Received: by 2002:a5d:6487:0:b0:362:5a6e:2649 with SMTP id ffacd0b85a97d-366e7a56dedmr4598801f8f.56.1719221984625; Mon, 24 Jun 2024 02:39:44 -0700 (PDT) Received: from brgl-uxlite.home ([2a01:cb1d:dc:7e00:b80e:a46a:7fb3:4e3a]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-36638d9c1aasm9433138f8f.55.2024.06.24.02.39.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jun 2024 02:39:43 -0700 (PDT) From: Bartosz Golaszewski To: Linus Walleij , Thomas Gleixner Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski Subject: [PATCH v2 2/2] gpio: sim: lock GPIOs as interrupts when they are requested Date: Mon, 24 Jun 2024 11:39:33 +0200 Message-ID: <20240624093934.17089-3-brgl@bgdev.pl> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240624093934.17089-1-brgl@bgdev.pl> References: <20240624093934.17089-1-brgl@bgdev.pl> 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" From: Bartosz Golaszewski Use the extended irq_sim interface to supply the simulated interrupt domain with callbacks allowing the GPIO sim to lock/unlock GPIOs requested as interrupts. Signed-off-by: Bartosz Golaszewski Acked-by: Linus Walleij Reviewed-by: Linus Walleij --- drivers/gpio/gpio-sim.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/drivers/gpio/gpio-sim.c b/drivers/gpio/gpio-sim.c index 4157735ea791..dcca1d7f173e 100644 --- a/drivers/gpio/gpio-sim.c +++ b/drivers/gpio/gpio-sim.c @@ -227,6 +227,27 @@ static void gpio_sim_free(struct gpio_chip *gc, unsign= ed int offset) } } =20 +static int gpio_sim_irq_requested(struct irq_domain *domain, + irq_hw_number_t hwirq, void *data) +{ + struct gpio_sim_chip *chip =3D data; + + return gpiochip_lock_as_irq(&chip->gc, hwirq); +} + +static void gpio_sim_irq_released(struct irq_domain *domain, + irq_hw_number_t hwirq, void *data) +{ + struct gpio_sim_chip *chip =3D data; + + gpiochip_unlock_as_irq(&chip->gc, hwirq); +} + +static const struct irq_sim_ops gpio_sim_irq_sim_ops =3D { + .irq_sim_irq_requested =3D gpio_sim_irq_requested, + .irq_sim_irq_released =3D gpio_sim_irq_released, +}; + static void gpio_sim_dbg_show(struct seq_file *seq, struct gpio_chip *gc) { struct gpio_sim_chip *chip =3D gpiochip_get_data(gc); @@ -443,7 +464,9 @@ static int gpio_sim_add_bank(struct fwnode_handle *swno= de, struct device *dev) if (!chip->pull_map) return -ENOMEM; =20 - chip->irq_sim =3D devm_irq_domain_create_sim(dev, swnode, num_lines); + chip->irq_sim =3D devm_irq_domain_create_sim_full(dev, swnode, num_lines, + &gpio_sim_irq_sim_ops, + chip); if (IS_ERR(chip->irq_sim)) return PTR_ERR(chip->irq_sim); =20 --=20 2.43.0