From nobody Mon Jun 8 22:53:29 2026 Received: from mail-dy1-f173.google.com (mail-dy1-f173.google.com [74.125.82.173]) (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 CB9371BD9C9 for ; Mon, 25 May 2026 17:18:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779729500; cv=none; b=C++nIjPShP9R/xj35yMdT7fM9E6o5wrlVevY/bTMlsHcWZyYfeUGwVjDwyP9meRQvLnudInKMQ5hF5dVLcgYhlej4zbc0iH+t+SB8MXi92gObJ1nBhrpWKW2JqEVt/60n2GqKa3d1akTCKkMfoZwemr9w0/x2QZIfeaDH9zRtUA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779729500; c=relaxed/simple; bh=Y5ct2xe4700wkCZz6smFN4AilbfcF42fH7SEOXqP+bg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:To:Cc; b=CGDt886ADAFn/EslAv6vhLHPazqBIs8LQxGmpKKn0YjZLXcdo4xiOdKvLRTuacCV+8L8bvsSwchEmWFKoFCEhP2MusxAMJ9rxfmihBNrDiAP69fLNnRwZuWr0V1TEiEdTtzECEPeZO65U2XtPAEljccKLjR1CdCHRW0efYNoc8c= 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=oGcwgZnt; arc=none smtp.client-ip=74.125.82.173 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="oGcwgZnt" Received: by mail-dy1-f173.google.com with SMTP id 5a478bee46e88-30246cfd41aso1579677eec.1 for ; Mon, 25 May 2026 10:18:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779729498; x=1780334298; darn=vger.kernel.org; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:from:to:cc:subject:date:message-id:reply-to; bh=vt66IeI9nKEEWLlFAgUegYdGwX2EcKUI70hfZtYIxuc=; b=oGcwgZnt1xrkzarj4cBgdxaDVC5gyGmfiQK1B6TZBXwOt5Rp0+UN9FyNEdUYcNnT3M suNG0Z5fqJdj9OGADQEIJeZd7EMprVX6bU9oSWSxBSy2flm0r7vY4bvtil2Y/HwodfTC 1J+AUUcPZH/7nguUoAGfqD/Z7se3vuiyQMhuszguKUk8n0ZIwjj1EqNhDKQn8fag2qlV WpCDLtL+dLlmZoWESdPY7WIR9QZxJfGinlPeIlgFOsjQQ89TmEMI96IefslYk8RUryZj V+I9K39mu0DTFdZMDwbg7D1pTXymXY00eQVQpY1DGbL9JUT0fR4hiiNzpkd5Py17LiNn ARqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779729498; x=1780334298; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=vt66IeI9nKEEWLlFAgUegYdGwX2EcKUI70hfZtYIxuc=; b=oWT1VWKVaE1xk21Te/Lf15SBQsrhK+MBZceJQT+RLrWF6U5v/9wAfteqP85jH3IpYh dzNNFFp1tvBWjSGB8rGjhLskdObu4LuJZ4FCv+pbK8gIw7mjyyJ6M2CoQQJu4ho4ztLa zzUK2sw5n4BtTZL/TTnVOmRUVzW12HQYFB2CtSnCeTmtLGJru5DYNLjkWPSo6ZhQZPSW 81aP58d+l9oimCYC9Hibm2rfLKqgS+XXDo1WTMds2GebwJaldpK2NKMrgOkhkaTqJu65 eUmT8Gtw+nPBLhv4YB64yD91O3nUzS4quairifyw9x/Ai7hykNS7VZNBfS/gr6P4KD86 +VDQ== X-Forwarded-Encrypted: i=1; AFNElJ+HQLT+x1GKn7WvJtX9Qaguu0NNv57Czju9T9VYmWJplDsvFYyI0l/6S0lusR1e0dFuIlzhsHbAoaEfFUk=@vger.kernel.org X-Gm-Message-State: AOJu0Yy7VxNj4RELRHRdQUSDNRZMRZs6mHuE5jBR17keXnUtNAHY8i/A QakafvloPjVBCoOFHXZ9qNEUjZicKB2aN6KWvjgw5E0hUbQ600ind0Df X-Gm-Gg: Acq92OHWJsZXG5HJeLFUQWs1G2c/saMpVMzwJ3O3G4G5339eFT9UUJPHWBfUpucRLa0 4NNUUawjNTzLGMRUIUn2HTn3dHVqSycCe0NKbtJGXPT7JFqSBoPc9lEmvTAW43cIx38/STjG6zN McUCDu+rZ/8m/re1bT/zgCnlUaAZbfm7+RY2w0u7wGGKny45urs87h2bTKbYXr+jl5zd/OXqtfM izvRfqEPn9TKfEA0SV3h9NMNYkMd/fDUlteJwS/zaEXgGdsx8ijvdwerK70OPT/5VvVChpbU4uS NxMtf4jYp4ymGDxnnZsTXA9oy4x/XrQZRnwyUkkicqy9OdnnqfwMuqGfqtw3tcI8wXSoPrRIYfU dC26uKK7lZIPng1XM70pN33i16lGlqsIe+IfJIK9wpRaxxdidGRuV43p+DwlHLNWA7kJcqdvWlQ TJXwjFyenbx/EdMj2o7rrTWZTc7aQuuKNvcjUqBYVZzbxIIcQYs8y8QVsYdtOPTCSuFhMtTfE0d JV23ekiMdrq/EixR0vMum0= X-Received: by 2002:a05:7301:6589:b0:2ed:e12:3770 with SMTP id 5a478bee46e88-304491f622amr6819022eec.32.1779729497731; Mon, 25 May 2026 10:18:17 -0700 (PDT) Received: from [192.168.1.18] (177-4-162-74.user3p.v-tal.net.br. [177.4.162.74]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-3045245d6aesm7842090eec.26.2026.05.25.10.18.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 May 2026 10:18:17 -0700 (PDT) From: =?utf-8?q?C=C3=A1ssio_Gabriel?= Date: Mon, 25 May 2026 14:18:03 -0300 Subject: [PATCH] ASoC: codecs: rk3328: Use managed GPIO and clock helpers Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260525-asoc-rk3328-devm-resources-v1-1-2abde0006f89@gmail.com> X-B4-Tracking: v=1; b=H4sIAAAAAAAC/yXMQQrCMBAF0KuUWTvQpE0RryIu4uRXo9jIjC1C6 d2Nunybt5JBM4wOzUqKJVsuU4XbNSTXOF3AOVWTb/3QBtdztCKs967ze05YHqywMqvAOLiAmAa MkJ5q8FSM+f3Lj6e/bT7fIK/vSNv2AZSe0Z1+AAAA X-Change-ID: 20260514-asoc-rk3328-devm-resources-515ead6efec4 To: Mark Brown , Liam Girdwood , Takashi Iwai , Jaroslav Kysela Cc: linux-sound@vger.kernel.org, linux-kernel@vger.kernel.org, =?utf-8?q?C=C3=A1ssio_Gabriel?= X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4208; i=cassiogabrielcontato@gmail.com; h=from:subject:message-id; bh=Y5ct2xe4700wkCZz6smFN4AilbfcF42fH7SEOXqP+bg=; b=owGbwMvMwCV2IdZeKur/u2bG02pJDFkiLWHeN+JVQi0FDJbu2+S9Oym6xatgb4nPVysDNaV1b EUW8q86SlkYxLgYZMUUWVYnLbLc0/Xgan3cCg+YOaxMIEMYuDgFYCLhkQx/pW6WPGdz6XwVo37p 2bTzTLPzj62Jiqi5ffDYrw1x62qmKTIyXGH/uPDJXLl8C6cnBfzp1ao3tTcanZq+gWFG3beyjC2 7uAA= X-Developer-Key: i=cassiogabrielcontato@gmail.com; a=openpgp; fpr=AB62A239BC8AE0D57F5EA848D05D3F1A5AFFEE83 rk3328_platform_probe() acquires the mute GPIO with gpiod_get_optional() but never releases it. It also enables mclk and pclk manually while relying on probe error labels for unwind, and the driver has no platform remove callback to disable those clocks after a successful unbind. This path has already needed fixes for missing clock unwinds on probe errors. Use devm_gpiod_get_optional() and devm_clk_get_enabled() so the GPIO and enabled clock lifetimes are tied to the device. This removes the manual error labels and makes both probe failure and driver unbind follow the normal devres cleanup path. Signed-off-by: C=C3=A1ssio Gabriel --- sound/soc/codecs/rk3328_codec.c | 54 ++++++++++---------------------------= ---- 1 file changed, 13 insertions(+), 41 deletions(-) diff --git a/sound/soc/codecs/rk3328_codec.c b/sound/soc/codecs/rk3328_code= c.c index 9697aefc6e03..5871b5a81975 100644 --- a/sound/soc/codecs/rk3328_codec.c +++ b/sound/soc/codecs/rk3328_codec.c @@ -425,7 +425,6 @@ static int rk3328_platform_probe(struct platform_device= *pdev) struct rk3328_codec_priv *rk3328; struct regmap *grf; void __iomem *base; - int ret =3D 0; =20 rk3328 =3D devm_kzalloc(&pdev->dev, sizeof(*rk3328), GFP_KERNEL); if (!rk3328) @@ -441,14 +440,13 @@ static int rk3328_platform_probe(struct platform_devi= ce *pdev) regmap_write(grf, RK3328_GRF_SOC_CON2, (BIT(14) << 16 | BIT(14))); =20 - ret =3D of_property_read_u32(rk3328_np, "spk-depop-time-ms", - &rk3328->spk_depop_time); - if (ret < 0) { + if (of_property_read_u32(rk3328_np, "spk-depop-time-ms", + &rk3328->spk_depop_time)) { dev_info(&pdev->dev, "spk_depop_time use default value.\n"); rk3328->spk_depop_time =3D 200; } =20 - rk3328->mute =3D gpiod_get_optional(&pdev->dev, "mute", GPIOD_OUT_HIGH); + rk3328->mute =3D devm_gpiod_get_optional(&pdev->dev, "mute", GPIOD_OUT_HI= GH); if (IS_ERR(rk3328->mute)) return PTR_ERR(rk3328->mute); /* @@ -461,57 +459,31 @@ static int rk3328_platform_probe(struct platform_devi= ce *pdev) regmap_write(grf, RK3328_GRF_SOC_CON10, BIT(17) | BIT(1)); } =20 - rk3328->mclk =3D devm_clk_get(&pdev->dev, "mclk"); + rk3328->mclk =3D devm_clk_get_enabled(&pdev->dev, "mclk"); if (IS_ERR(rk3328->mclk)) return PTR_ERR(rk3328->mclk); =20 - ret =3D clk_prepare_enable(rk3328->mclk); - if (ret) - return ret; clk_set_rate(rk3328->mclk, INITIAL_FREQ); =20 - rk3328->pclk =3D devm_clk_get(&pdev->dev, "pclk"); - if (IS_ERR(rk3328->pclk)) { - dev_err(&pdev->dev, "can't get acodec pclk\n"); - ret =3D PTR_ERR(rk3328->pclk); - goto err_unprepare_mclk; - } - - ret =3D clk_prepare_enable(rk3328->pclk); - if (ret < 0) { - dev_err(&pdev->dev, "failed to enable acodec pclk\n"); - goto err_unprepare_mclk; - } + rk3328->pclk =3D devm_clk_get_enabled(&pdev->dev, "pclk"); + if (IS_ERR(rk3328->pclk)) + return dev_err_probe(&pdev->dev, PTR_ERR(rk3328->pclk), + "failed to get or enable acodec pclk\n"); =20 base =3D devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(base)) { - ret =3D PTR_ERR(base); - goto err_unprepare_pclk; - } + if (IS_ERR(base)) + return PTR_ERR(base); =20 rk3328->regmap =3D devm_regmap_init_mmio(&pdev->dev, base, &rk3328_codec_regmap_config); - if (IS_ERR(rk3328->regmap)) { - ret =3D PTR_ERR(rk3328->regmap); - goto err_unprepare_pclk; - } + if (IS_ERR(rk3328->regmap)) + return PTR_ERR(rk3328->regmap); =20 platform_set_drvdata(pdev, rk3328); =20 - ret =3D devm_snd_soc_register_component(&pdev->dev, &soc_codec_rk3328, + return devm_snd_soc_register_component(&pdev->dev, &soc_codec_rk3328, rk3328_dai, ARRAY_SIZE(rk3328_dai)); - if (ret) - goto err_unprepare_pclk; - - return 0; - -err_unprepare_pclk: - clk_disable_unprepare(rk3328->pclk); - -err_unprepare_mclk: - clk_disable_unprepare(rk3328->mclk); - return ret; } =20 static const struct of_device_id rk3328_codec_of_match[] __maybe_unused = =3D { --- base-commit: 8cd773d4f8235aaf0b04927b3c9d2d0326def09b change-id: 20260514-asoc-rk3328-devm-resources-515ead6efec4 Best regards, -- =20 C=C3=A1ssio Gabriel