Received: by 2002:a05:6a10:8395:0:0:0:0 with SMTP id n21csp550090pxh; Wed, 10 Nov 2021 05:56:40 -0800 (PST) X-Google-Smtp-Source: ABdhPJw6yvGR4YGiLQP6QnfSRaju65kalSfICQsoctLuWP7DbAUW4tQGQw//TOjUu6dqprFwhbAM X-Received: by 2002:a17:906:309b:: with SMTP id 27mr20651997ejv.129.1636552599888; Wed, 10 Nov 2021 05:56:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636552599; cv=none; d=google.com; s=arc-20160816; b=pV8K+MZJCWbe7yixuyEYFuWJU76SUmcllKbtfoQpOGttnheD4/nPLs3SpkaUdxlIVi WELNaQ7wy8ON/DJgn7XQ+lGnUMXY2XB34Kqnzga2Ic7ut3Ys6yOmeWZDywNc9RkEGyCi +wmJXwZcMTD6aYtUmGVZm3NWYYC/Mg+asY/a04oPsf4ZSEbFARkJVDPYC88JesnnBIfG UILV/ih/UEB+RNeOCsIIsrjWwTGPqXpETeT7ERGSsdNIdu8cgJq8x1BRigiMbVVj1udj bkhTIWkKaibnUWhhLRg+Xl6t5eBRwVrNRy/Ck7OCWayKfrROm/3b8/xHg1lLk5M3w6ID Z93Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date; bh=9doJHVZWj1P3nPIyfuybeTYezBZeQvDzqwCOmbBkDFA=; b=fW0B/bnwzJw3GQTg8LOXsYqRKG6Sn9zqh9zuxPi7BBAdh+XXJbGGTvF8oI3o4gYKvf X51U5mcz709KrL+9JF4kNJJOZ+NkwN0EB/0hnug8VW93c51gZ3oo1ffqVPgS/bMVMauj qwrp5G603V2E+yvaAZ5/8gczZQPWvokcWGDs3doKD4SrXtqmaU8ktU00TSWWkuGKzUM4 eCxwKyV8xisDpArx5zpVS90S6GMq12Nvc1gkjWaIPzL+Vgg15ICxpGwBkz5fJ+SvEI9U 6+vl2ium7Lq5vabFek5PU3u3uzAVXgdrjIiLFtnPlVMHJIUTaQtslTZvEk+Wz4ZTJuCZ eHJA== 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 jz26si11350540ejc.693.2021.11.10.05.56.13; Wed, 10 Nov 2021 05:56:39 -0800 (PST) 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 S232041AbhKJN5J (ORCPT + 99 others); Wed, 10 Nov 2021 08:57:09 -0500 Received: from relay4-d.mail.gandi.net ([217.70.183.196]:42757 "EHLO relay4-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231607AbhKJN5I (ORCPT ); Wed, 10 Nov 2021 08:57:08 -0500 Received: (Authenticated sender: alexandre.belloni@bootlin.com) by relay4-d.mail.gandi.net (Postfix) with ESMTPSA id 8DA7CE0009; Wed, 10 Nov 2021 13:54:17 +0000 (UTC) Date: Wed, 10 Nov 2021 14:54:17 +0100 From: Alexandre Belloni To: Camel Guo Cc: Alessandro Zummo , kernel@axis.com, Camel Guo , linux-rtc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH] rtc: rs5c372: Add RTC_VL_READ, RTC_VL_CLR ioctls Message-ID: References: <20211110115455.18699-1-camel.guo@axis.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20211110115455.18699-1-camel.guo@axis.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello, On 10/11/2021 12:54:54+0100, Camel Guo wrote: > From: Camel Guo > > In order to make it possible to get battery voltage status, this commit > adds RTC_VL_READ, RTC_VL_CLR ioctl commands to rtc-rs5c372. > > Signed-off-by: Camel Guo > --- > drivers/rtc/rtc-rs5c372.c | 66 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 66 insertions(+) > > diff --git a/drivers/rtc/rtc-rs5c372.c b/drivers/rtc/rtc-rs5c372.c > index 80980414890c..5a96e5d3663a 100644 > --- a/drivers/rtc/rtc-rs5c372.c > +++ b/drivers/rtc/rtc-rs5c372.c > @@ -485,6 +485,71 @@ static int rs5c372_rtc_proc(struct device *dev, struct seq_file *seq) > #define rs5c372_rtc_proc NULL > #endif > > +#ifdef CONFIG_RTC_INTF_DEV > +static int rs5c372_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) > +{ > + struct rs5c372 *rs5c = i2c_get_clientdata(to_i2c_client(dev)); > + unsigned char ctrl2; > + int addr; > + unsigned int flags; > + > + dev_dbg(dev, "%s: cmd=%x\n", __func__, cmd); > + > + addr = RS5C_ADDR(RS5C_REG_CTRL2); > + ctrl2 = i2c_smbus_read_byte_data(rs5c->client, addr); > + > + switch (cmd) { > + case RTC_VL_READ: > + flags = 0; > + > + switch (rs5c->type) { > + case rtc_r2025sd: > + case rtc_r2221tl: > + if ((rs5c->type == rtc_r2025sd && !(ctrl2 & R2x2x_CTRL2_XSTP)) || > + (rs5c->type == rtc_r2221tl && (ctrl2 & R2x2x_CTRL2_XSTP))) { > + flags |= RTC_VL_DATA_INVALID; > + } > + if (ctrl2 & R2x2x_CTRL2_VDET) > + flags |= RTC_VL_ACCURACY_LOW; Shouldn't that be RTC_VL_BACKUP_LOW? > + break; > + default: > + if (ctrl2 & RS5C_CTRL2_XSTP) > + flags |= RTC_VL_DATA_INVALID; > + break; > + } > + > + return put_user(flags, (unsigned int __user *)arg); > + case RTC_VL_CLR: > + /* clear rtc VDET, PON and XSTP bits */ > + switch (rs5c->type) { > + case rtc_r2025sd: > + case rtc_r2221tl: > + ctrl2 &= ~(R2x2x_CTRL2_VDET | R2x2x_CTRL2_PON); > + if (rs5c->type == rtc_r2025sd) > + ctrl2 |= R2x2x_CTRL2_XSTP; > + else > + ctrl2 &= ~R2x2x_CTRL2_XSTP; > + break; > + default: > + ctrl2 &= ~RS5C_CTRL2_XSTP; You can clear VDET but you must nt clear PON or XSTP as they are used to know whether the time on the RTC has been set correctly. Clearing those can only be done in .set_time. > + break; > + } > + > + if (i2c_smbus_write_byte_data(rs5c->client, addr, ctrl2) < 0) { > + dev_dbg(&rs5c->client->dev, "%s: write error in line %i\n", > + __func__, __LINE__); > + return -EIO; > + } > + return 0; > + default: > + return -ENOIOCTLCMD; > + } > + return 0; > +} > +#else > +#define rs5c372_ioctl NULL > +#endif > + > static const struct rtc_class_ops rs5c372_rtc_ops = { > .proc = rs5c372_rtc_proc, > .read_time = rs5c372_rtc_read_time, > @@ -492,6 +557,7 @@ static const struct rtc_class_ops rs5c372_rtc_ops = { > .read_alarm = rs5c_read_alarm, > .set_alarm = rs5c_set_alarm, > .alarm_irq_enable = rs5c_rtc_alarm_irq_enable, > + .ioctl = rs5c372_ioctl, > }; > > #if IS_ENABLED(CONFIG_RTC_INTF_SYSFS) > -- > 2.20.1 > -- Alexandre Belloni, co-owner and COO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com