From nobody Mon May 25 01:14:27 2026 Received: from mail-pg1-f180.google.com (mail-pg1-f180.google.com [209.85.215.180]) (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 624353B5306 for ; Tue, 19 May 2026 21:42:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.180 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779226969; cv=none; b=P9uxRWMKJIW2lUj3O6XhTz/bwmy4A44WlG26AuqUyQKPIcBHZz96KVD5/zAhQZwP8+J+xqcceqJIZBNdW5xYKLzKYEYrJE6CjgedF+jNwIindMlVEk/wqYm2LXE4WoXz/bzIcvv/g5NHnl+Szgw0PAFI7LWQIJNWe2vaSpFMsws= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779226969; c=relaxed/simple; bh=jKwoE7f+xHe2S/MA/4bEMucF7i7ljZauBbGXmqNgQUE=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=FqqvNXFU/J+i9D3btLcN9n9vhxkqnohVvWstyxUN0JKlu1NLE4ZzVz5vq7doL5NvBl85MhdQGUQDZw1CY5Xx8AaCgTgjXKRskDxoG1INnPtQVaDM/wQpg4fxl4RsrrIXVb/eIiEraiYLRiWELFADQmlbIq/mA6qL/GMexq5ryS8= 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=e4ekO/0f; arc=none smtp.client-ip=209.85.215.180 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="e4ekO/0f" Received: by mail-pg1-f180.google.com with SMTP id 41be03b00d2f7-c8173b2af32so3175478a12.0 for ; Tue, 19 May 2026 14:42:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779226968; x=1779831768; 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=KjYbSsnMBe85tT0ffPvsrkv+L06erhUlByiTI/tkbP8=; b=e4ekO/0fJDRc+eh3DlzFR/fpn/T6xeC4P40hik+71o9fu4WnefM7NMOva1eB7tBGtP 47J9y2sWeGscvNniHIHGVPMDvpWp2w5SCWTMMLb6rfWO+Pl0V5oJroAWT8GP20o6JjyD hCFeFmXSAERvBGk/Gc2Af/TKp17/RFpugNLIkuxZfwUUAbALHl15c/93H3OCdsuBwDRb I0vYqVgbJv/Ej3U26eV9TjcDHV8Jhain48ybDGw5vVWgFpa959Lr1mYh52/pA8t48n5M URVHEpy36hGB92RmfhuUd6XO+ernwC4rxkGF0kxqdr9QqLib0rJqNlxFpPPV0LqDQQFy Kb4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779226968; x=1779831768; 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=KjYbSsnMBe85tT0ffPvsrkv+L06erhUlByiTI/tkbP8=; b=gIPzG23RUPqZEhHTf1Gn5qn198D6KHZxg8U6ElJ4Hq+zYSsWCUBAiYNxGlp/tLlC+Y fp2ZgBGwo/g+3l/ctg4lquIdKXj48F4c9KX8x4hkK8Russe0UjOh2oSMKRf5XHDau8Dm pAjFUBjSQgSWp0jAivxHwSg69DwcZDI7zR7f6u2awAxWLHXBvzhcKtE6zJZYwY378s26 DI9qbfPp1hNGKAMJP9mesFHm1iAaJfw6wEViOks0jl8VakCSBVzs0bNosnIpKi4mE4LE TEPWfvn4FtzBhC6oS/xouXWLga3dxyCN6VHDV1CxIAWuwQdJ/hHFxpRdWzPkviFMylbd VDsA== X-Forwarded-Encrypted: i=1; AFNElJ+zHKhFy+mPvcdmWZ8dbxYLbqmJBcd0wa2HNuS8jq6VdxYZ3zYjY3BiD1k/awF1j1ei2zF4XBMNALFJRxc=@vger.kernel.org X-Gm-Message-State: AOJu0Yy7sgmHZ5uT4EZMy8g0GCPztAHzJCaXS9a7W3h7YHnLX+MssGXy 6zoi6loIUU4+o5evwGjQucnyoWP5T1jgUNIHdfxm9kyyDVyyzPpaYM7zLv/rvd0q X-Gm-Gg: Acq92OFEnnLB8i/GH+0tET61uzKpxYnQ1yzFqPSO38NyK7kS+lE/0tu05VvQXdLJ51Q nJvZ0Sv4tNhTziOzapy0aeWjLb2BLSajyn44spYOKGdDA5NlUfl+qUjy9dqpPLcC9AW0Ouqg5dX l0KwQE09flew3dINp/rs7P91BBNCgYOhhYIUPJp+syjXZaURu2oYxBkavOK1X/g0DXHatgvLD0Q ccGK6qxOQeVH84F+S2ZOOGyNL+zlItTMp29g6BEDwlX+aBVcsLLXUneU7oKD8Ka6CkQ+kPGylko A1vuJi/JAjrLuSzNsMOujYG0+tTj62r+zLioX8X0ndtyWAP9Umum7dd0xsj5wKjL6flVU4s3So/ HKM30WER7OJz+D3R0BclpjO8jzxas86EjPRwD8FEDCzBrVuxOQqG0u6W+jNeljyeqgcPdOvwWPC zcAcRQr9HlKn/i0Ccik8h7C+pnlvZWHWxB92ySHBnWS9zVYiudOzdMVJ45CjZHLHIhTbU9rHkii 3l3//6LHYWGj3MJhfTy0bsP1/A8cMXLkUQ= X-Received: by 2002:a05:6a20:e293:b0:39b:9644:6e94 with SMTP id adf61e73a8af0-3b22e7b13a6mr23601286637.9.1779226967594; Tue, 19 May 2026 14:42:47 -0700 (PDT) Received: from ryzen ([2601:644:8000:5b5d:7285:c2ff:fe45:8a32]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c82bb121cd6sm17601292a12.30.2026.05.19.14.42.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 14:42:46 -0700 (PDT) From: Rosen Penev To: linux-watchdog@vger.kernel.org Cc: Wim Van Sebroeck , Guenter Roeck , linux-kernel@vger.kernel.org (open list) Subject: [PATCH] watchdog: orion_wdt: Use devm APIs for clock and watchdog management Date: Tue, 19 May 2026 14:42:29 -0700 Message-ID: <20260519214229.16656-1-rosenp@gmail.com> X-Mailer: git-send-email 2.54.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 clk_get/clk_prepare_enable/clk_put with devm_clk_get_enabled and devm_clk_get_optional_enabled so the clock lifecycle is managed automatically. Switch to devm_watchdog_register_device to eliminate the manual remove callback and the disable_clk error path. Switching to devm in these functions is fine as the proper platform_device is passed in. Assisted-by: Claude:Sonnet-4.6 Signed-off-by: Rosen Penev --- drivers/watchdog/orion_wdt.c | 64 +++++++----------------------------- 1 file changed, 12 insertions(+), 52 deletions(-) diff --git a/drivers/watchdog/orion_wdt.c b/drivers/watchdog/orion_wdt.c index a92701ff2653..85e9877de952 100644 --- a/drivers/watchdog/orion_wdt.c +++ b/drivers/watchdog/orion_wdt.c @@ -80,14 +80,9 @@ static int orion_wdt_clock_init(struct platform_device *= pdev, { int ret; =20 - dev->clk =3D clk_get(&pdev->dev, NULL); + dev->clk =3D devm_clk_get_enabled(&pdev->dev, NULL); if (IS_ERR(dev->clk)) return PTR_ERR(dev->clk); - ret =3D clk_prepare_enable(dev->clk); - if (ret) { - clk_put(dev->clk); - return ret; - } =20 dev->clk_rate =3D clk_get_rate(dev->clk); return 0; @@ -98,14 +93,9 @@ static int armada370_wdt_clock_init(struct platform_devi= ce *pdev, { int ret; =20 - dev->clk =3D clk_get(&pdev->dev, NULL); + dev->clk =3D devm_clk_get_enabled(&pdev->dev, NULL); if (IS_ERR(dev->clk)) return PTR_ERR(dev->clk); - ret =3D clk_prepare_enable(dev->clk); - if (ret) { - clk_put(dev->clk); - return ret; - } =20 /* Setup watchdog input clock */ atomic_io_modify(dev->reg + TIMER_CTRL, @@ -121,14 +111,11 @@ static int armada375_wdt_clock_init(struct platform_d= evice *pdev, { int ret; =20 - dev->clk =3D of_clk_get_by_name(pdev->dev.of_node, "fixed"); - if (!IS_ERR(dev->clk)) { - ret =3D clk_prepare_enable(dev->clk); - if (ret) { - clk_put(dev->clk); - return ret; - } + dev->clk =3D devm_clk_get_optional_enabled(&pdev->dev, "fixed"); + if (IS_ERR(dev->clk)) + return PTR_ERR(dev->clk); =20 + if (dev->clk) { atomic_io_modify(dev->reg + TIMER_CTRL, WDT_AXP_FIXED_ENABLE_BIT, WDT_AXP_FIXED_ENABLE_BIT); @@ -138,16 +125,10 @@ static int armada375_wdt_clock_init(struct platform_d= evice *pdev, } =20 /* Mandatory fallback for proper devicetree backward compatibility */ - dev->clk =3D clk_get(&pdev->dev, NULL); + dev->clk =3D devm_clk_get_enabled(&pdev->dev, NULL); if (IS_ERR(dev->clk)) return PTR_ERR(dev->clk); =20 - ret =3D clk_prepare_enable(dev->clk); - if (ret) { - clk_put(dev->clk); - return ret; - } - atomic_io_modify(dev->reg + TIMER_CTRL, WDT_A370_RATIO_MASK(WDT_A370_RATIO_SHIFT), WDT_A370_RATIO_MASK(WDT_A370_RATIO_SHIFT)); @@ -162,14 +143,9 @@ static int armadaxp_wdt_clock_init(struct platform_dev= ice *pdev, int ret; u32 val; =20 - dev->clk =3D of_clk_get_by_name(pdev->dev.of_node, "fixed"); + dev->clk =3D devm_clk_get_enabled(&pdev->dev, "fixed"); if (IS_ERR(dev->clk)) return PTR_ERR(dev->clk); - ret =3D clk_prepare_enable(dev->clk); - if (ret) { - clk_put(dev->clk); - return ret; - } =20 /* Fix the wdt and timer1 clock frequency to 25MHz */ val =3D WDT_AXP_FIXED_ENABLE_BIT | TIMER1_FIXED_ENABLE_BIT; @@ -612,7 +588,7 @@ static int orion_wdt_probe(struct platform_device *pdev) pdev->name, dev); if (ret < 0) { dev_err(&pdev->dev, "failed to request IRQ\n"); - goto disable_clk; + return ret; } } =20 @@ -624,34 +600,19 @@ static int orion_wdt_probe(struct platform_device *pd= ev) 0, pdev->name, dev); if (ret < 0) { dev_err(&pdev->dev, "failed to request IRQ\n"); - goto disable_clk; + return ret; } } =20 =20 watchdog_set_nowayout(&dev->wdt, nowayout); - ret =3D watchdog_register_device(&dev->wdt); + ret =3D devm_watchdog_register_device(&pdev->dev, &dev->wdt); if (ret) - goto disable_clk; + return ret; =20 pr_info("Initial timeout %d sec%s\n", dev->wdt.timeout, nowayout ? ", nowayout" : ""); return 0; - -disable_clk: - clk_disable_unprepare(dev->clk); - clk_put(dev->clk); - return ret; -} - -static void orion_wdt_remove(struct platform_device *pdev) -{ - struct watchdog_device *wdt_dev =3D platform_get_drvdata(pdev); - struct orion_watchdog *dev =3D watchdog_get_drvdata(wdt_dev); - - watchdog_unregister_device(wdt_dev); - clk_disable_unprepare(dev->clk); - clk_put(dev->clk); } =20 static void orion_wdt_shutdown(struct platform_device *pdev) @@ -662,7 +623,6 @@ static void orion_wdt_shutdown(struct platform_device *= pdev) =20 static struct platform_driver orion_wdt_driver =3D { .probe =3D orion_wdt_probe, - .remove =3D orion_wdt_remove, .shutdown =3D orion_wdt_shutdown, .driver =3D { .name =3D "orion_wdt", --=20 2.54.0