From nobody Sun Jun 14 06:07:10 2026 Received: from mail-oa1-f45.google.com (mail-oa1-f45.google.com [209.85.160.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 6D9592E5B2A for ; Sat, 2 May 2026 21:03:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777755838; cv=none; b=CGoPB+1sVOYoxx1mOrASXxGQC/v8800eYFHSDXL3aU16N0V24kz1vwZJeSrEbIflt2FPx3ALiBcxfGkKLuUCaU3G5AXeFiUqUXd+fonTNO4tswuZejiZSN5+CEBxnSe72SYKF1azHGQEagWvTbQyIt+AB9vSCozltLJR/0Lxotg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777755838; c=relaxed/simple; bh=lZd9s9yoPsQUriY4xkanImtClh6pgHtvv7FRMhtvNXU=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=fx4fC1ET0xts3eLuF1iqOmR9159gyppSURsTacqFQ3gGP6dTJpiHlQ2wSKx4gHTteK9t+GIcba/vn41snZ4YLX/x1zfERu2UQjN6WWGWQgTeZmsde5ctLUWPLkP+F0w1Vk2C9Q6BmScJ5SjgZ+Kbp1mRak656SBGWilAsrVVFEc= 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=nQpkw0Sj; arc=none smtp.client-ip=209.85.160.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="nQpkw0Sj" Received: by mail-oa1-f45.google.com with SMTP id 586e51a60fabf-4043b27ddeaso1533979fac.1 for ; Sat, 02 May 2026 14:03:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777755836; x=1778360636; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=Rx4mDW/25vd+W+emY9Z3Sk1SnuGW0v8LhZC0rkW6q2o=; b=nQpkw0SjlpND0ViXAcuq7u1VJv1Y7kWUrsjPv9RYh6W3lDg339Wjk1Fm9lzsJhQb3l bMH3t2OAVgUoKqCp9uiIfqh9pYqR8Fu7P4ViXBEV1i9anzCOl1qsd17rgRsJvAJT592S 6ye6Xpdn4uP4Uay+EykpHS58Ha3ZUc4pplcvArg13Jxi1mulMmGZ/q45PGBTDA8HkyvI ldFa9NNa82xcHUEYGS9SVcT54pWHBO7cEWieZp7ghIQeCJ8AlJkcHbWXcNmE3WF757R/ A8Ar2SJBdMxhj7TCsLBvwd+PD+Fg6CfGIePZEvje9u6dmjSiC5NqNa2V4WDXgvj9B0K1 TCeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777755836; x=1778360636; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Rx4mDW/25vd+W+emY9Z3Sk1SnuGW0v8LhZC0rkW6q2o=; b=Lsj+Cc7ETUR7CJOunQd/0iLXogNXk/ixGfSCfMgL8q9gdrULWjNze95Id878Mc0LiJ 3KwQGsdxVgr4dr0RP/I0sPwNnhAy8/9durGenAggbT1Xn4RM0cM/mSDQ8TLEKyRPc4Gw FoBLzZgmMHNT1XI8ce0mObjKVyUDkUy/ycjEOTSJTMUtnP19RTXeStx9FAnPQigqItlX eSrkHvPZII71HJrBVqhTbYY0sXbu5K1y8vw3FVnvw0+Xa+dGUCJp1i43Q+dNzp7x225f ShpReBUzxZhKeMWWXUyU8LH/8q8Nv2dts7Vqe/ToaPuJGZIFVSMmBPI9T73q/1aeX5Ba 5XZg== X-Forwarded-Encrypted: i=1; AFNElJ9rYMvfT+khFdOFpkeDGjSqwiDNVRu76vBe4PMqdZbp1GYdUXv57u0CTwr4qtYwhrMfBTWVglMH91Z1c6Y=@vger.kernel.org X-Gm-Message-State: AOJu0YyYOTJLLj1JtgqM0oGVcBTiexyXElBOmkN6QNxQaK1ujgansB60 akxkqvN9+0CEWdf5AUaVrUCyc+c7knW0hsiJbi3+xCqhMCXBq1RzCqL3vJx0fRPR X-Gm-Gg: AeBDieswwmrCTCw85Tur9FjeN7iu1r1CseAjpURjCtHdfRvg51/sm9E/rh6dMx/lEG1 /E3K9NSWWfPYWWpJrPh9VBlYZ2BrATGl5oqd/PnFAVc7SyOLqrYIxpeRAgc+aE2agWfCmHIeKG3 MZxDTrNzy1A0mJBLSdvWrwh2SB9RnJ2JBRjD4XyOQ0fkaZieRo6Y8cN4Ou2uzHacKD7NWPY4V/f V3RI2XN57mI6FnoEJ8yrMA2ryM86e04HwHs+UeE0A1an2yXM51m5yoQ8FUS1/e3pyw/igY5w3bz BbExYUXBzN/oG5gnuLcw2UafAfSeFGPD891/nMMaezQ+MKw3x6jJ947PgEWwwdYWrIANnTPA3VR cRnx1V49/oBfu6svgY/BfN8dp7+kmvVDrDMCwmwM/FO4t9W4ufAv77U5NmCpmh/LW2HWovBD1+H GWuyybEhCt1/R7sxEd0aGep7q1Evd8pq5xKLpMEmS2dkGRs3pe6QNtR4sE46UrJDmNfIdZ2ny4x XJHlw0= X-Received: by 2002:a05:6870:9a26:b0:42e:49e1:e511 with SMTP id 586e51a60fabf-43476296ccdmr2427036fac.33.1777755836349; Sat, 02 May 2026 14:03:56 -0700 (PDT) Received: from linuxescape.lan (23-88-128-2.fttp.usinternet.com. [23.88.128.2]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-43454951a95sm6073821fac.7.2026.05.02.14.03.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 02 May 2026 14:03:56 -0700 (PDT) From: Maxwell Doose To: linusw@kernel.org, brgl@kernel.org Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] gpio: twl4030: Use guard(mutex)() over manual locking Date: Sat, 2 May 2026 16:03:54 -0500 Message-ID: <20260502210354.160439-1-m32285159@gmail.com> X-Mailer: git-send-email 2.53.0 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 mutex_lock() and mutex_unlock() pairs with the RAII macro guard(mutex)(). This keeps the driver up-to-date with the latest function macros. Remove now-redundant gotos and goto labels which will maintain readability. In addition, replace some gotos with direct returns where appropriate. Update certain control paths to make them more suited to the new locking. Signed-off-by: Maxwell Doose --- drivers/gpio/gpio-twl4030.c | 69 ++++++++++++++----------------------- 1 file changed, 26 insertions(+), 43 deletions(-) diff --git a/drivers/gpio/gpio-twl4030.c b/drivers/gpio/gpio-twl4030.c index a851702befde..df17f9c08817 100644 --- a/drivers/gpio/gpio-twl4030.c +++ b/drivers/gpio/gpio-twl4030.c @@ -23,6 +23,7 @@ #include #include #include +#include =20 #include =20 @@ -209,7 +210,7 @@ static int twl_request(struct gpio_chip *chip, unsigned= offset) struct gpio_twl4030_priv *priv =3D gpiochip_get_data(chip); int status =3D 0; =20 - mutex_lock(&priv->mutex); + guard(mutex)(&priv->mutex); =20 /* Support the two LED outputs as output-only GPIOs. */ if (offset >=3D TWL4030_GPIO_MAX) { @@ -227,30 +228,29 @@ static int twl_request(struct gpio_chip *chip, unsign= ed offset) /* Configure PWM OFF register first */ status =3D twl_i2c_write_u8(TWL4030_MODULE_LED, 0x7f, reg + 1); if (status < 0) - goto done; + return status; =20 /* Followed by PWM ON register */ status =3D twl_i2c_write_u8(TWL4030_MODULE_LED, 0x7f, reg); if (status < 0) - goto done; + return status; =20 /* init LED to not-driven (high) */ status =3D twl_i2c_read_u8(TWL4030_MODULE_LED, &cached_leden, TWL4030_LED_LEDEN_REG); if (status < 0) - goto done; + return status; cached_leden &=3D ~ledclr_mask; status =3D twl_i2c_write_u8(TWL4030_MODULE_LED, cached_leden, TWL4030_LED_LEDEN_REG); if (status < 0) - goto done; + return status; =20 status =3D 0; - goto done; } =20 /* on first use, turn GPIO module "on" */ - if (!priv->usage_count) { + else if (!priv->usage_count) { struct twl4030_gpio_platform_data *pdata; u8 value =3D MASK_GPIO_CTRL_GPIO_ON; =20 @@ -264,11 +264,9 @@ static int twl_request(struct gpio_chip *chip, unsigne= d offset) status =3D gpio_twl4030_write(REG_GPIO_CTRL, value); } =20 -done: if (!status) priv->usage_count |=3D BIT(offset); =20 - mutex_unlock(&priv->mutex); return status; } =20 @@ -276,10 +274,10 @@ static void twl_free(struct gpio_chip *chip, unsigned= offset) { struct gpio_twl4030_priv *priv =3D gpiochip_get_data(chip); =20 - mutex_lock(&priv->mutex); + guard(mutex)(&priv->mutex); if (offset >=3D TWL4030_GPIO_MAX) { WARN_ON_ONCE(twl4030_led_set_value(offset - TWL4030_GPIO_MAX, 1)); - goto out; + return; } =20 priv->usage_count &=3D ~BIT(offset); @@ -287,9 +285,6 @@ static void twl_free(struct gpio_chip *chip, unsigned o= ffset) /* on last use, switch off GPIO module */ if (!priv->usage_count) gpio_twl4030_write(REG_GPIO_CTRL, 0x0); - -out: - mutex_unlock(&priv->mutex); } =20 static int twl_direction_in(struct gpio_chip *chip, unsigned offset) @@ -297,17 +292,15 @@ static int twl_direction_in(struct gpio_chip *chip, u= nsigned offset) struct gpio_twl4030_priv *priv =3D gpiochip_get_data(chip); int ret; =20 - mutex_lock(&priv->mutex); + guard(mutex)(&priv->mutex); if (offset < TWL4030_GPIO_MAX) ret =3D twl4030_set_gpio_direction(offset, 1); else - ret =3D -EINVAL; /* LED outputs can't be set as input */ + return -EINVAL; /* LED outputs can't be set as input */ =20 if (!ret) priv->direction &=3D ~BIT(offset); =20 - mutex_unlock(&priv->mutex); - return ret; } =20 @@ -317,10 +310,9 @@ static int twl_get(struct gpio_chip *chip, unsigned of= fset) int ret; int status =3D 0; =20 - mutex_lock(&priv->mutex); + guard(mutex)(&priv->mutex); if (!(priv->usage_count & BIT(offset))) { - ret =3D -EPERM; - goto out; + return -EPERM; } =20 if (priv->direction & BIT(offset)) @@ -328,10 +320,7 @@ static int twl_get(struct gpio_chip *chip, unsigned of= fset) else status =3D twl4030_get_gpio_datain(offset); =20 - ret =3D (status < 0) ? status : !!status; -out: - mutex_unlock(&priv->mutex); - return ret; + return (status < 0) ? status : !!status; } =20 static int twl_set(struct gpio_chip *chip, unsigned int offset, int value) @@ -339,7 +328,7 @@ static int twl_set(struct gpio_chip *chip, unsigned int= offset, int value) struct gpio_twl4030_priv *priv =3D gpiochip_get_data(chip); int ret; =20 - mutex_lock(&priv->mutex); + guard(mutex)(&priv->mutex); if (offset < TWL4030_GPIO_MAX) ret =3D twl4030_set_gpio_dataout(offset, value); else @@ -350,8 +339,6 @@ static int twl_set(struct gpio_chip *chip, unsigned int= offset, int value) else priv->out_state &=3D ~BIT(offset); =20 - mutex_unlock(&priv->mutex); - return ret; } =20 @@ -360,21 +347,19 @@ static int twl_direction_out(struct gpio_chip *chip, = unsigned offset, int value) struct gpio_twl4030_priv *priv =3D gpiochip_get_data(chip); int ret =3D 0; =20 - mutex_lock(&priv->mutex); - if (offset < TWL4030_GPIO_MAX) { - ret =3D twl4030_set_gpio_direction(offset, 0); - if (ret) { - mutex_unlock(&priv->mutex); - return ret; + scoped_guard(mutex, &priv->mutex) { + if (offset < TWL4030_GPIO_MAX) { + ret =3D twl4030_set_gpio_direction(offset, 0); + if (ret) + return ret; } - } =20 - /* - * LED gpios i.e. offset >=3D TWL4030_GPIO_MAX are always output - */ + /* + * LED gpios i.e. offset >=3D TWL4030_GPIO_MAX are always output + */ =20 - priv->direction |=3D BIT(offset); - mutex_unlock(&priv->mutex); + priv->direction |=3D BIT(offset); + } =20 return twl_set(chip, offset, value); } @@ -388,15 +373,13 @@ static int twl_get_direction(struct gpio_chip *chip, = unsigned offset) */ int ret =3D GPIO_LINE_DIRECTION_OUT; =20 - mutex_lock(&priv->mutex); + guard(mutex)(&priv->mutex); if (offset < TWL4030_GPIO_MAX) { ret =3D twl4030_get_gpio_direction(offset); if (ret) { - mutex_unlock(&priv->mutex); return ret; } } - mutex_unlock(&priv->mutex); =20 return ret; } --=20 2.53.0