From nobody Tue Apr 7 09:46:55 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0A7A517BA2; Sat, 14 Mar 2026 12:12:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773490377; cv=none; b=YZDO/dl64+TOMV9ktQz4ek/yXc+ZlcaMG086C2gW8DYIT9xivxTBQ7YTmViU7jAUdNsks5i6bCP6Ijc46swKG69B4haAxxSygq18Gc3TS+4J1tVD03R8I73bBXIf3AnfFPygWpcoOBAon6yLbwVUa0glTbb9n6/iY+aCTdq9LcE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773490377; c=relaxed/simple; bh=MgnzSi2O40TkVkf3IA+ouB7bdnyDgrYLAeBVXp+Ohh0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=fHTTelueckYG8gRZWmSp1V6bIj3IwvxyTy4wCgydgfrltN3joHjAi36eYyiK9JWUsuvfYlX2CGTDD2pfkSClQHi3F/xMO8c1cqtqiEj56HgOg38aZRwHji/ypWd3DogdVXVdU76vbrlbNL1qK/drCuwWJM6IcpZoC8OL3gYDICs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=DEUKhBWd; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="DEUKhBWd" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7A7B9C116C6; Sat, 14 Mar 2026 12:12:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773490376; bh=MgnzSi2O40TkVkf3IA+ouB7bdnyDgrYLAeBVXp+Ohh0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DEUKhBWdSyu1Equ25k1GBsl6QKUrFOLahjeM9orTtoSxyACEjiOATXGE8s0Y+2uTA obaZ/Z+5wfC2jxH+bSaF/8LOeHE0vK1qFsHjtnrI7SmrR+MXH+NlsvxumwmQJESTMT 6SBYc27HXYDrlCoDtUKwlRNf4Ly2UQZzh/HeCoYXCTU+WtUOLf8xC+GQ/FYmUTxQc7 /C5JztQO7ezyEbGFsOjq2MXvXxeJqpo4H5FcyQLF5sRPuCVbE5ozj84E+d6ANlkRWV tZOBAmrAtri91fOy+6KXPzaMjJasqjbEF38gCZJj3xlsOW46KxBXKFXsrAXrddFiB8 jM1gmvba8OphQ== From: "Rafael J. Wysocki" To: linux-rtc@vger.kernel.org Cc: LKML , Linux ACPI , Alexandre Belloni , Mario Limonciello Subject: [PATCH v1 2/2] rtc: cmos: Do not require IRQ if ACPI alarm is used Date: Sat, 14 Mar 2026 13:12:44 +0100 Message-ID: <6168746.MhkbZ0Pkbq@rafael.j.wysocki> Organization: Linux Kernel Development In-Reply-To: <3964452.kQq0lBPeGt@rafael.j.wysocki> References: <3964452.kQq0lBPeGt@rafael.j.wysocki> 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: Rafael J. Wysocki If the ACPI RTC fixed event is used, a dedicated IRQ is not required for the CMOS RTC alarm to work, so allow the driver to use the alarm without a valid IRQ in that case. Signed-off-by: Rafael J. Wysocki Acked-by: Alexandre Belloni Reviewed-by: Mario Limonciello (AMD) --- drivers/rtc/rtc-cmos.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) --- a/drivers/rtc/rtc-cmos.c +++ b/drivers/rtc/rtc-cmos.c @@ -216,6 +216,11 @@ static inline void cmos_write_bank2(unsi =20 /*----------------------------------------------------------------*/ =20 +static bool cmos_no_alarm(struct cmos_rtc *cmos) +{ + return !is_valid_irq(cmos->irq) && !cmos_use_acpi_alarm(); +} + static int cmos_read_time(struct device *dev, struct rtc_time *t) { int ret; @@ -287,7 +292,7 @@ static int cmos_read_alarm(struct device }; =20 /* This not only a rtc_op, but also called directly */ - if (!is_valid_irq(cmos->irq)) + if (cmos_no_alarm(cmos)) return -ETIMEDOUT; =20 /* Basic alarms only support hour, minute, and seconds fields. @@ -520,7 +525,7 @@ static int cmos_set_alarm(struct device int ret; =20 /* This not only a rtc_op, but also called directly */ - if (!is_valid_irq(cmos->irq)) + if (cmos_no_alarm(cmos)) return -EIO; =20 ret =3D cmos_validate_alarm(dev, t); @@ -1096,7 +1101,7 @@ cmos_do_probe(struct device *dev, struct dev_dbg(dev, "IRQ %d is already in use\n", rtc_irq); goto cleanup1; } - } else { + } else if (!cmos_use_acpi_alarm()) { clear_bit(RTC_FEATURE_ALARM, cmos_rtc.rtc->features); } =20 @@ -1121,7 +1126,7 @@ cmos_do_probe(struct device *dev, struct acpi_rtc_event_setup(dev); =20 dev_info(dev, "%s%s, %d bytes nvram%s\n", - !is_valid_irq(rtc_irq) ? "no alarms" : + cmos_no_alarm(&cmos_rtc) ? "no alarms" : cmos_rtc.mon_alrm ? "alarms up to one year" : cmos_rtc.day_alrm ? "alarms up to one month" : "alarms up to one day", @@ -1147,7 +1152,7 @@ cleanup0: static void cmos_do_shutdown(int rtc_irq) { spin_lock_irq(&rtc_lock); - if (is_valid_irq(rtc_irq)) + if (!cmos_no_alarm(&cmos_rtc)) cmos_irq_disable(&cmos_rtc, RTC_IRQMASK); spin_unlock_irq(&rtc_lock); }