From patchwork Tue May 28 16:13:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q3PDs2vDoXMgQmVuY2U=?= X-Patchwork-Id: 1940638 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (4096-bit key; unprotected) header.d=prolan.hu header.i=@prolan.hu header.a=rsa-sha256 header.s=mail header.b=MGDH8O1H; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2604:1380:45d1:ec00::1; helo=ny.mirrors.kernel.org; envelope-from=linux-rtc+bounces-1218-incoming=patchwork.ozlabs.org@vger.kernel.org; receiver=patchwork.ozlabs.org) Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org [IPv6:2604:1380:45d1:ec00::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VpcyD5jh3z20Pb for ; Wed, 29 May 2024 02:13:40 +1000 (AEST) Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id EF2101C23674 for ; Tue, 28 May 2024 16:13:38 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id ACDD5171E54; Tue, 28 May 2024 16:13:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (4096-bit key) header.d=prolan.hu header.i=@prolan.hu header.b="MGDH8O1H" X-Original-To: linux-rtc@vger.kernel.org Received: from fw2.prolan.hu (fw2.prolan.hu [193.68.50.107]) (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 F35C332C60 for ; Tue, 28 May 2024 16:13:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.68.50.107 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1716912812; cv=none; b=ApMJAKRi+bOUZ3vooS5HUhRgmdxloSz300ertqjkYCa+Gy7yGBnA9ukYeQKjWoC4aM5upZ5EIrJ6pio0z0yDmZAzOT+35/kgpgmE3XClLiOV8XpyhXVkS4DYjGDo0jZPNTEgsrd++P1TG6XKtHFmLRU5ff43gW6Ei1/w0frsNzA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1716912812; c=relaxed/simple; bh=+wN0e271L/t/wx/sJDWT4BtMAvIfz+xHX5fck+lFHxM=; h=From:To:CC:Subject:Date:Message-ID:MIME-Version:Content-Type; b=BKEgchS7wyM7VnRrsXol2chGhJtQN3oB0u0E6HAIYOUtuPdkeTxQ4uT29cmhJXpN6JLrHAMcKTwyTp5NYOBB9F6EZ62vLcKEZkczNH2nuGg8Qr6XFzKD2ImeDcvWa1FQp543g5YGiw9CV6y4xOkPMaKlFgcKTDKtVfraeYEjsgU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=prolan.hu; spf=pass smtp.mailfrom=prolan.hu; dkim=pass (4096-bit key) header.d=prolan.hu header.i=@prolan.hu header.b=MGDH8O1H; arc=none smtp.client-ip=193.68.50.107 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=prolan.hu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=prolan.hu Received: from proxmox-mailgw.intranet.prolan.hu (localhost.localdomain [127.0.0.1]) by proxmox-mailgw.intranet.prolan.hu (Proxmox) with ESMTP id E9D87A0314; Tue, 28 May 2024 18:13:27 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=prolan.hu; h=cc :cc:content-transfer-encoding:content-type:content-type:date :from:from:message-id:mime-version:reply-to:subject:subject:to :to; s=mail; bh=TvEc2xJY0IuFeMki+N/9BPo4VzXUdWZ9op3N9ZH/nYM=; b= MGDH8O1HzMgnZbjaMX0YgF2Gi8HKFavRRzO7SCPJXDjIVwvamJ6BEQsj/QWZCeZY ajkvUeeHMYHRAHuPVd0VLIEbu08L5/dVeSta6zcj9AFC5Z6IxyjsbuZ0jQKSowiZ MUuBfviYT5an1N9ci0tPLZRCQ/LfwFJahlMLIPcgiyZ6ZFI4jGCVSuQdN7PwUGaF hq7kRdi2yTabjKVw5qTSgxWK8/xRNlkU6/Uo/MTuKsqz4THYM2NsMxmtZuFSmyP/ mx7b8Y2MksqN3x1ZEgKmZ4DRSYcoDRJLsoynhGO326+KhmoFIa/lB6cT5MmpYM/S nn25sFtcaera2pqExNPtGqcBwUH3lesKV4++nyBVZyy8U2QWtkehkJpwx2eYCgUA Pp9Y1zsj5wUgxBaO0ZNx/myiwsKFNJ5pxKgFrjCFYujTYHMNTeDrhIgjB8aj0xJ0 H1cFe0MMjR8h7Myw2lGVefgXRHo9snHL7CK5CC7YbvuFOtXxp2xo3PFZjEd0l85g hIymQc61U75IALrwrRyel6Z2zJbSdpcywWx9dCO/9yvPCi0BnUDt88Yk4AE3S/P4 KhSUvp7Q6EHqTN6cidRQy9C5RObApgwQgpkNZrKBYwuF0l77BQ/fBYDks3Ub3KnG BN9ggHA4mDVqkUw+VkyjP2TJrA3jw5R+sUhA94RPCKM= From: =?utf-8?b?Q3PDs2vDoXMsIEJlbmNl?= To: CC: Alexandre Belloni , =?utf-8?b?Q3PDs2s=?= =?utf-8?b?w6FzLCBCZW5jZQ==?= Subject: [PATCH 1/2] rtc: Add UIE handling ability to rtc_class_ops Date: Tue, 28 May 2024 18:13:14 +0200 Message-ID: <20240528161314.404383-2-csokas.bence@prolan.hu> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-rtc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ESET-AS: R=OK;S=0;OP=CALC;TIME=1716912807;VERSION=7972;MC=2547996780;ID=93593;TRN=0;CRV=0;IPC=;SP=0;SIPS=0;PI=3;F=0 X-ESET-Antispam: OK X-EsetResult: clean, is OK X-EsetId: 37303A2945A12957637165 Currently, Update Interrupt Enable is performed by emulating it with either polling, or alarm interrupts. Some RTCs, however, can directly provide Update Interrupts. Signed-off-by: "Csókás, Bence" --- drivers/rtc/interface.c | 8 ++++++++ include/linux/rtc.h | 1 + 2 files changed, 9 insertions(+) diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c index 1b63111cdda2..9e1eac441c54 100644 --- a/drivers/rtc/interface.c +++ b/drivers/rtc/interface.c @@ -581,6 +581,14 @@ int rtc_update_irq_enable(struct rtc_device *rtc, unsigned int enabled) #endif } + if (rtc->ops && rtc->ops->update_irq_enable) { + err = rtc->ops->update_irq_enable(rtc->dev.parent, enabled); + if (!err) + rtc->uie_rtctimer.enabled = enabled; + if (err != -EINVAL) + goto out; + } + if (enabled) { struct rtc_time tm; ktime_t now, onesec; diff --git a/include/linux/rtc.h b/include/linux/rtc.h index 5f8e438a0312..63dad8dfe278 100644 --- a/include/linux/rtc.h +++ b/include/linux/rtc.h @@ -68,6 +68,7 @@ struct rtc_class_ops { int (*set_offset)(struct device *, long offset); int (*param_get)(struct device *, struct rtc_param *param); int (*param_set)(struct device *, struct rtc_param *param); + int (*update_irq_enable)(struct device *, unsigned int enabled); }; struct rtc_device; From patchwork Tue May 28 16:13:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?Q3PDs2vDoXMgQmVuY2U=?= X-Patchwork-Id: 1940639 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (4096-bit key; unprotected) header.d=prolan.hu header.i=@prolan.hu header.a=rsa-sha256 header.s=mail header.b=Helwf6bZ; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org (client-ip=2604:1380:45e3:2400::1; helo=sv.mirrors.kernel.org; envelope-from=linux-rtc+bounces-1219-incoming=patchwork.ozlabs.org@vger.kernel.org; receiver=patchwork.ozlabs.org) Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org [IPv6:2604:1380:45e3:2400::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4Vpcyp6J5qz20Pb for ; Wed, 29 May 2024 02:14:10 +1000 (AEST) Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id 7644A287233 for ; Tue, 28 May 2024 16:14:09 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 31C23171E60; Tue, 28 May 2024 16:14:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (4096-bit key) header.d=prolan.hu header.i=@prolan.hu header.b="Helwf6bZ" X-Original-To: linux-rtc@vger.kernel.org Received: from fw2.prolan.hu (fw2.prolan.hu [193.68.50.107]) (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 C9D9532C60 for ; Tue, 28 May 2024 16:14:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.68.50.107 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1716912847; cv=none; b=T3xWzf2E0FBjEslDC6yCRwJ6LgjOnXDCaibwHISUkhNm9u22XOJHoG0PMu7MKYW8qFx5BQnMADh9QwUR+ixIb8HSFtbIWMo15Yx8Mfbe85ak+IJU3aPdGgI649/5g+3icDVgZwbGBCAqkJZEcgUEIJEnfl4SKJlh/N4stYyCaJg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1716912847; c=relaxed/simple; bh=KwD892QOPII8MTSdjAkOVQhjbHcL8pYS06NWssSkCxg=; h=From:To:CC:Subject:Date:Message-ID:MIME-Version:Content-Type; b=ojAwBH4ytQ3yUvFhMAzGGHegdb44/DOZ2DHTq03JDNBosMrk6vZ0dig5G4DyUVWhnfbA/AYnzGA5WfGAlBp1VYanysyS1q7USXo+Oft33WElqpxnPVmRuYPDErPHeBn25q26MChJPIZ1lBbZMJoO4z1KmUoT/PGJoiI0El+nALU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=prolan.hu; spf=pass smtp.mailfrom=prolan.hu; dkim=pass (4096-bit key) header.d=prolan.hu header.i=@prolan.hu header.b=Helwf6bZ; arc=none smtp.client-ip=193.68.50.107 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=prolan.hu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=prolan.hu Received: from proxmox-mailgw.intranet.prolan.hu (localhost.localdomain [127.0.0.1]) by proxmox-mailgw.intranet.prolan.hu (Proxmox) with ESMTP id 5822EA0314; Tue, 28 May 2024 18:13:55 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=prolan.hu; h=cc :cc:content-transfer-encoding:content-type:content-type:date :from:from:message-id:mime-version:reply-to:subject:subject:to :to; s=mail; bh=fylrPX9Znd89K1BJKAURRQL5g+I8RhACQLbb7ipCv/0=; b= Helwf6bZDJ5DCWEhMnt4CUcLDsBSW1utKqh8Dp9yX60vIw1gWQNujZaW1RWm0TK8 jckUYjcwRVoj8csOIGfqJ+aeoMt2EGzz0cNlpdUSWupd9rSbr1OC748wDuoAIoGq PCf3qAxM3wnulQqGG4ipdmVGndsU1yPSUDoZZ75kRk/1sUS0tXQdI+QLGd1kZPHt QKJOyKG7uuRJsAsbDeB/EhTiqsyVnh3EO/Bc4bTHI4GVc/1VyPxlMoYWJINYfXog 9U/TBZgTkOfpleeeTcIu0bLao39Tw0ehCg+vAQoC9RI4T2Qxga9yjbqwyvT4NMqt PomAQp3XJ3z0Bj8Y6suph2J1gYYyU1NAMQXj+G8LgdEkawJTyxK6Cp+i8THxqvUH SqnQpxfWFrLfZwNT69BPb5iNn3CfQijcZp34lTdPfgKF3/SYFtmFeXu4uYWrUZwH GkV6b5WcbYIMnXIoJWQm9cJN0LokBuRX7E0Cc254KKLLXgeSN4YW10OQQif0NV6N HXbVHr6PYp7hnqpSc6umd4QtXHmYE3kF3Qni6WeVW/KQx6/C6v8u0dVdU/Iih+RJ uteOOW4S/QP58UFKWLJthJfvkYm9WIz3pqXz9YG42XTb/T3BeEymzBH2aaa8Zgrq 7v/J2R/hmIRA1W+CHulEhPWDkkZCFkc/0oS4rkZmLVY= From: =?utf-8?b?Q3PDs2vDoXMsIEJlbmNl?= To: CC: Alexandre Belloni , =?utf-8?b?Q3PDs2s=?= =?utf-8?b?w6FzLCBCZW5jZQ==?= , =?utf-8?q?Szentendre?= =?utf-8?q?i=2C_Tam=C3=A1s?= Subject: [PATCH 2/2] rtc: pcf2127: Add UIE capability through Seconds Interrupt Date: Tue, 28 May 2024 18:13:42 +0200 Message-ID: <20240528161341.404407-3-csokas.bence@prolan.hu> X-Mailer: git-send-email 2.34.1 Precedence: bulk X-Mailing-List: linux-rtc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ESET-AS: R=OK;S=0;OP=CALC;TIME=1716912834;VERSION=7972;MC=2323033567;ID=648213;TRN=0;CRV=0;IPC=;SP=0;SIPS=0;PI=3;F=0 X-ESET-Antispam: OK X-EsetResult: clean, is OK X-EsetId: 37303A29916D3B54637165 PCF2127/29/31 is capable of generating an interrupt on every second (SI) or minute (MI) change. It signals this through the Minute/Second Flag (MSF) as well, which needs to be cleared. Co-developed-by: "Szentendrei, Tamás" Signed-off-by: "Szentendrei, Tamás" Signed-off-by: "Csókás, Bence" --- drivers/rtc/rtc-pcf2127.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/rtc/rtc-pcf2127.c b/drivers/rtc/rtc-pcf2127.c index 9c04c4e1a49c..7efff014a58d 100644 --- a/drivers/rtc/rtc-pcf2127.c +++ b/drivers/rtc/rtc-pcf2127.c @@ -31,6 +31,10 @@ /* Control register 1 */ #define PCF2127_REG_CTRL1 0x00 +/* Change interrupt. 1=seconds change, 2=minutes */ +#define PCF2127_CTRL1_MSI_MASK GENMASK(1, 0) +#define PCF2127_BIT_CTRL1_SI BIT(0) +#define PCF2127_BIT_CTRL1_MI BIT(1) #define PCF2127_BIT_CTRL1_POR_OVRD BIT(3) #define PCF2127_BIT_CTRL1_TSF1 BIT(4) #define PCF2127_BIT_CTRL1_STOP BIT(5) @@ -41,6 +45,7 @@ #define PCF2127_BIT_CTRL2_AF BIT(4) #define PCF2127_BIT_CTRL2_TSF2 BIT(5) #define PCF2127_BIT_CTRL2_WDTF BIT(6) +#define PCF2127_BIT_CTRL2_MSF BIT(7) /* Control register 3 */ #define PCF2127_REG_CTRL3 0x02 #define PCF2127_BIT_CTRL3_BLIE BIT(0) @@ -92,6 +97,7 @@ /* Mask for currently enabled interrupts */ #define PCF2127_CTRL1_IRQ_MASK (PCF2127_BIT_CTRL1_TSF1) #define PCF2127_CTRL2_IRQ_MASK ( \ + PCF2127_CTRL1_MSI_MASK | \ PCF2127_BIT_CTRL2_AF | \ PCF2127_BIT_CTRL2_WDTF | \ PCF2127_BIT_CTRL2_TSF2) @@ -143,6 +149,7 @@ #define PCF2131_BIT_INT_SI BIT(4) #define PCF2131_BIT_INT_MI BIT(5) #define PCF2131_CTRL2_IRQ_MASK ( \ + PCF2127_CTRL1_MSI_MASK | \ PCF2127_BIT_CTRL2_AF | \ PCF2127_BIT_CTRL2_WDTF) #define PCF2131_CTRL4_IRQ_MASK ( \ @@ -604,6 +611,20 @@ static int pcf2127_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) return pcf2127_rtc_alarm_irq_enable(dev, alrm->enabled); } +static int pcf2127_rtc_update_irq_enable(struct device *dev, u32 enable) +{ + struct pcf2127 *pcf2127 = dev_get_drvdata(dev); + int ret; + + ret = regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL1, + PCF2127_CTRL1_MSI_MASK, + enable ? PCF2127_BIT_CTRL1_SI : 0); + if (ret) + return ret; + + return pcf2127_wdt_active_ping(&pcf2127->wdd); +} + /* * This function reads one timestamp function data, caller is responsible for * calling pcf2127_wdt_active_ping() @@ -728,6 +749,8 @@ static irqreturn_t pcf2127_rtc_irq(int irq, void *dev) if (ctrl2 & PCF2127_BIT_CTRL2_AF) rtc_update_irq(pcf2127->rtc, 1, RTC_IRQF | RTC_AF); + else if (ctrl2 & PCF2127_BIT_CTRL2_MSF) + rtc_update_irq(pcf2127->rtc, 1, RTC_IRQF | RTC_UF); pcf2127_wdt_active_ping(&pcf2127->wdd); @@ -741,6 +764,7 @@ static const struct rtc_class_ops pcf2127_rtc_ops = { .read_alarm = pcf2127_rtc_read_alarm, .set_alarm = pcf2127_rtc_set_alarm, .alarm_irq_enable = pcf2127_rtc_alarm_irq_enable, + .update_irq_enable = pcf2127_rtc_update_irq_enable, }; /* sysfs interface */