Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp2408599pxb; Sun, 17 Oct 2021 14:08:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwOhgCNFFcGKs9u+Yn71fDEqX2i8Cmiv2uOTLRETjlEvcPuwfy2500GyptKCi+1PQWvxrUO X-Received: by 2002:a63:1d10:: with SMTP id d16mr19467473pgd.156.1634504880691; Sun, 17 Oct 2021 14:08:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1634504880; cv=none; d=google.com; s=arc-20160816; b=zD1fXK5Dag4IwIKRssW1fAm5qJ4PhNFa65Et/Sbnth6ZveUTLANX6jDqHVsmWGkAHd q/bOgraK85eTL8p2HG7i9SZwM2YYWMM/z7PADUu4KldD1oEJQJ8tTmtztdQOBRGDBRYd EewLni6wwevIYOeYNwQulZxw4cIMs4VUWM4cMz/WYqdqvjK9CSlKQaCqXiFkBfvwwf8g 9y6EPypck0BkXpxNd/YwThYDEEgbAfezfE3sqU/d29iwrs81sf9qQdjIP853tj87PTjP mB4L3lVTWQROioY6q16zWITg5XS45QtMDVR56jCCv9ysa/JLSHEENcdbozqXxbn59vgn TAMg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=RBudWSYX54o4NipwCxDaIkJ9haA0a8NTQvDAfPRyHfk=; b=w0sQX2uG8Yb3UUb+uEKdAIiUxr4FRNHGQLOMnhXrG2Nom5Kqt1IkJCY/BRPO8ZkRFr 23wy0EOcNxHulIZtY7gyw1tCjZrDrfNA8B3Wp7y0TvUiv0tKKcZufAX3o03B1SQy1J9E EBNSvMfBkIwyzX2NnLnXVQsFkyLDt2LHEM2klgQ661HHMPbnv63hfoRDrpvQXwrYS6vM VW0n6Be34N4Ep9pJPUa8Ml/cyelGIGD3EA6l4pm5rzqtAm4Bo8FcCNA2x9EXaVYUAtpQ S334KVnl8EmYGITFJt/hY1asQdRaPap5EhVKNU0682jzhyDBgdeWLqTQ0K8WaM1coTMN WdtQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 84si17678374pgc.601.2021.10.17.14.07.45; Sun, 17 Oct 2021 14:08:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242679AbhJOTXi (ORCPT + 99 others); Fri, 15 Oct 2021 15:23:38 -0400 Received: from relay10.mail.gandi.net ([217.70.178.230]:44819 "EHLO relay10.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242537AbhJOTXh (ORCPT ); Fri, 15 Oct 2021 15:23:37 -0400 Received: (Authenticated sender: alexandre.belloni@bootlin.com) by relay10.mail.gandi.net (Postfix) with ESMTPSA id 92AEC240006; Fri, 15 Oct 2021 19:21:29 +0000 (UTC) From: Alexandre Belloni To: Alessandro Zummo , Alexandre Belloni Cc: linux-rtc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 5/7] rtc: add BSM parameter Date: Fri, 15 Oct 2021 21:21:18 +0200 Message-Id: <20211015192121.817642-6-alexandre.belloni@bootlin.com> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211015192121.817642-1-alexandre.belloni@bootlin.com> References: <20211015192121.817642-1-alexandre.belloni@bootlin.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org BSM or Backup Switch Mode is a common feature on RTCs, allowing to select how the RTC will decide when to switch from its primary power supply to the backup power supply. It is necessary to be able to set it from userspace as there are uses cases where it has to be done dynamically. Supported values are: RTC_BSM_DISABLED: disabled RTC_BSM_DIRECT: switching will happen as soon as Vbackup > Vdd RTC_BSM_LEVEL: switching will happen around a threshold, usually with an hysteresis RTC_BSM_STANDBY: switching will not happen until Vdd > Vbackup, this is useful to ensure the RTC doesn't draw any power until the device is first powered on. Signed-off-by: Alexandre Belloni --- drivers/rtc/dev.c | 10 ++++++++-- include/linux/rtc.h | 2 ++ include/uapi/linux/rtc.h | 9 ++++++++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/drivers/rtc/dev.c b/drivers/rtc/dev.c index abee1fc4705e..e104972a28fd 100644 --- a/drivers/rtc/dev.c +++ b/drivers/rtc/dev.c @@ -409,7 +409,10 @@ static long rtc_dev_ioctl(struct file *file, break; default: - err = -EINVAL; + if (rtc->ops->param_get) + err = rtc->ops->param_get(rtc->dev.parent, ¶m); + else + err = -EINVAL; } if (!err) @@ -436,7 +439,10 @@ static long rtc_dev_ioctl(struct file *file, return rtc_set_offset(rtc, param.svalue); default: - err = -EINVAL; + if (rtc->ops->param_set) + err = rtc->ops->param_set(rtc->dev.parent, ¶m); + else + err = -EINVAL; } break; diff --git a/include/linux/rtc.h b/include/linux/rtc.h index 354e0843ab17..47fd1c2d3a57 100644 --- a/include/linux/rtc.h +++ b/include/linux/rtc.h @@ -66,6 +66,8 @@ struct rtc_class_ops { int (*alarm_irq_enable)(struct device *, unsigned int enabled); int (*read_offset)(struct device *, long *offset); 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); }; struct rtc_device; diff --git a/include/uapi/linux/rtc.h b/include/uapi/linux/rtc.h index 04da6c3082b3..dbbab0dbc8c8 100644 --- a/include/uapi/linux/rtc.h +++ b/include/uapi/linux/rtc.h @@ -132,11 +132,18 @@ struct rtc_param { #define RTC_FEATURE_UPDATE_INTERRUPT 3 #define RTC_FEATURE_NEED_WEEK_DAY 4 #define RTC_FEATURE_CORRECTION 5 -#define RTC_FEATURE_CNT 6 +#define RTC_FEATURE_BACKUP_SWITCH_MODE 6 +#define RTC_FEATURE_CNT 7 /* parameter list */ #define RTC_PARAM_FEATURES 0 #define RTC_PARAM_CORRECTION 1 +#define RTC_PARAM_BACKUP_SWITCH_MODE 2 + +#define RTC_BSM_DISABLED 0 +#define RTC_BSM_DIRECT 1 +#define RTC_BSM_LEVEL 2 +#define RTC_BSM_STANDBY 3 #define RTC_MAX_FREQ 8192 -- 2.31.1