From patchwork Tue Feb 27 23:04:22 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandre Belloni X-Patchwork-Id: 207493 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:a81b:b0:108:e6aa:91d0 with SMTP id bq27csp3015672dyb; Tue, 27 Feb 2024 15:07:08 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCVcGb+OYF6AHnhIeXJvCJRAGv24f/+hV0NTFkw6K91iY1JfDvvWf6ik5Gfh5avDr2IaWZAD78blLURTXxr9YQhXSjOR8w== X-Google-Smtp-Source: AGHT+IGIdqt3ZlQdmESpPbYKjhEEcJernPZjJ1CnTEBQpY8ifkLoFUoGhVyMg1d/o4v5kV6CNQxF X-Received: by 2002:a05:6102:d8d:b0:471:e440:6604 with SMTP id d13-20020a0561020d8d00b00471e4406604mr7682300vst.32.1709075228452; Tue, 27 Feb 2024 15:07:08 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709075228; cv=pass; d=google.com; s=arc-20160816; b=LIkBuiywCPGHuWn7ZyBmqHl01bI2xoGnkl54C+kXKpvqgXi+q6FoSdznN38qc2++Hk rGZ2Eue8m8MH76iOMzKCUJ+hHKmDiRqhaUi5Ks//s3HK3i3DMsuZzXD5FseeBu3WLZSf 6CZVaoiM8wWExgI7MyFCgcCV6HZTdCxYvWxncx8jSdt4W0GI9YkmJy2Jd3ztZYvbmVQi DJjza1UTpVKbb7gTABgKXY343ar02YOiyyZwK0HnkS1/hBmy60gcsygaW+TrvcsYudks x1SvLbN8vRlTMxUpMQbgGixgPDl29H9JopYgGvfot14n03/JONlj755grO5HpGXzFf2d Mjww== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:references:in-reply-to:message-id :date:subject:cc:to:from:dkim-signature; bh=JDg0owEF3xlOehCDIXIEw25/GVMd5SHRx8SLPbdFUxk=; fh=v+fQpqqloRxheg66y6v5BEIIh4tqlWdyRuynNr5XQWo=; b=vFR5v2C398KoS7R4L/fMo8oClSvmmELAW3W/llF+EBD7P+pM/ucWRms42/56fUo3Zi H95xS1e2Gj74lg9q7kX7/AoDWlDcnTWMFgtuM2a1SnbZA0SHDf/3tImIB8H00F4Rat+x x96ebozL2g9UyvH4mV7gXETAgwQmBAvch++4vQycMuTFgYNv6ulRkZa4KOUNZKxIQZoK PxCP4cBWwdhYNpNAvIkx4hWkaKQ7aloEh5vFWZczBCCxh5fww0YzCjp+fsWkOm+5BVa+ 22gYdMqBc5CrESniZD+H5TRKo1gG4c3lFsnN4NLQPi36nNqFCmsUR+2gtzzm7uU4xG8z NDzg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=PPlYHwQh; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-84165-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-84165-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id s10-20020a056102108a00b004726dbba3f6si63vsr.782.2024.02.27.15.07.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 27 Feb 2024 15:07:08 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-84165-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=PPlYHwQh; arc=pass (i=1 spf=pass spfdomain=bootlin.com dkim=pass dkdomain=bootlin.com dmarc=pass fromdomain=bootlin.com); spf=pass (google.com: domain of linux-kernel+bounces-84165-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-84165-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com 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 045241C26C3C for ; Tue, 27 Feb 2024 23:06:20 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 4A0505646E; Tue, 27 Feb 2024 23:05:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="PPlYHwQh" Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) (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 1DCB758106; Tue, 27 Feb 2024 23:04:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.70.183.197 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709075100; cv=none; b=YlLYozk42eG0dVBsKZkxgbfWTVaHHIvont/zAXCIEtZOe5XD/6Ym461FugABNY/dcYZn8ttpZTDgUmoxzhMWTzbnxpst9N0LwVOq97zzpDKPq22tZbE5WZnQtCFZ0Zux0sV5lbV23XWaUjjZ/YeW+Z8cBDQHJptlW8IT5hwg+/Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709075100; c=relaxed/simple; bh=+TeOoQ8/EabvacRrcZs7lP1c51rVOFxgFfe2Z7f9Dyo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jXx/rKsPfErbgLWRXISxjwrPwt/D4Fw+LtirxVNgESKOfrzx0gRE1FQyczsF6i3fRePQrdMy2vyu/YWhJJaCzy83R/YCOZCtRHvaQh0dUJArxsLTWB8q5B1+cSiaA6JsJRVjOxPwVC42aZf/qyp6MdP7ja9KakV67PYYdsQ4Lq0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=PPlYHwQh; arc=none smtp.client-ip=217.70.183.197 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Received: by mail.gandi.net (Postfix) with ESMTPSA id 0A6F41C0003; Tue, 27 Feb 2024 23:04:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1709075096; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=JDg0owEF3xlOehCDIXIEw25/GVMd5SHRx8SLPbdFUxk=; b=PPlYHwQhknBlH6gzirfTHj3elUM7xQH0GVQfaAYNWr7FoeK2m9wi0qWPeCGdyol0Y8YgPI 6r5YyfsLd7nlyJLocw/unOcKlu3X9j/FanTf1N6KCZ8bt4/pG0ZV6TB2nGyRAABaxefekR WK9h8gzHRovivTIWZ/7FDj9uxN1lnWfngkiVZtAIdvfEMLxuf39GT5LjEdbL2G5EWqqUAv Gv9k3XqsDbpr2QO7DWm35/g0zqX9DiLMtwSRAAj2Q/zMYEU1NeMRvt6fsXFzNt7c4yEaFV D3OyIbG/rrjbkKUeIYXhdDpryAPEcZqSyDM80RKxFN1/NCvWN8iaDa4moCzvbg== From: alexandre.belloni@bootlin.com To: Alexandre Belloni Cc: linux-rtc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 07/12] rtc: ds1511: remove ds1511_rtc_update_alarm Date: Wed, 28 Feb 2024 00:04:22 +0100 Message-ID: <20240227230431.1837717-7-alexandre.belloni@bootlin.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240227230431.1837717-1-alexandre.belloni@bootlin.com> References: <20240227230431.1837717-1-alexandre.belloni@bootlin.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-GND-Sasl: alexandre.belloni@bootlin.com X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1792095266973818515 X-GMAIL-MSGID: 1792095266973818515 From: Alexandre Belloni ds1511_rtc_update_alarm is called twice but one of the call is overkill as it only has to enable or disable the alarm instead of updating all the alarm registers. Merge it in its main call site and introduce a new finction to enable or disable the alarm. Signed-off-by: Alexandre Belloni --- drivers/rtc/rtc-ds1511.c | 52 ++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 29 deletions(-) diff --git a/drivers/rtc/rtc-ds1511.c b/drivers/rtc/rtc-ds1511.c index 4ac8988d4124..b0dfdda2c8fc 100644 --- a/drivers/rtc/rtc-ds1511.c +++ b/drivers/rtc/rtc-ds1511.c @@ -178,35 +178,15 @@ static int ds1511_rtc_read_time(struct device *dev, struct rtc_time *rtc_tm) return 0; } -/* - * write the alarm register settings - * - * we only have the use to interrupt every second, otherwise - * known as the update interrupt, or the interrupt if the whole - * date/hours/mins/secs matches. the ds1511 has many more - * permutations, but the kernel doesn't. - */ -static void ds1511_rtc_update_alarm(struct rtc_plat_data *pdata) +static void ds1511_rtc_alarm_enable(unsigned int enabled) { - unsigned long flags; - - spin_lock_irqsave(&pdata->lock, flags); - rtc_write(pdata->alrm_mday < 0 ? 0x80 : bin2bcd(pdata->alrm_mday) & 0x3f, - DS1511_AM4_DATE); - rtc_write(pdata->alrm_hour < 0 ? 0x80 : bin2bcd(pdata->alrm_hour) & 0x3f, - DS1511_AM3_HOUR); - rtc_write(pdata->alrm_min < 0 ? 0x80 : bin2bcd(pdata->alrm_min) & 0x7f, - DS1511_AM2_MIN); - rtc_write(pdata->alrm_sec < 0 ? 0x80 : bin2bcd(pdata->alrm_sec) & 0x7f, - DS1511_AM1_SEC); - rtc_write(rtc_read(DS1511_CONTROL_B) | (pdata->irqen ? DS1511_TIE : 0), DS1511_CONTROL_B); - rtc_read(DS1511_CONTROL_A); /* clear interrupts */ - spin_unlock_irqrestore(&pdata->lock, flags); + rtc_write(rtc_read(DS1511_CONTROL_B) | (enabled ? DS1511_TIE : 0), DS1511_CONTROL_B); } static int ds1511_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) { struct rtc_plat_data *pdata = dev_get_drvdata(dev); + unsigned long flags; if (pdata->irq <= 0) return -EINVAL; @@ -218,7 +198,20 @@ static int ds1511_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) if (alrm->enabled) pdata->irqen |= RTC_AF; - ds1511_rtc_update_alarm(pdata); + spin_lock_irqsave(&pdata->lock, flags); + rtc_write(pdata->alrm_mday < 0 ? 0x80 : bin2bcd(pdata->alrm_mday) & 0x3f, + DS1511_AM4_DATE); + rtc_write(pdata->alrm_hour < 0 ? 0x80 : bin2bcd(pdata->alrm_hour) & 0x3f, + DS1511_AM3_HOUR); + rtc_write(pdata->alrm_min < 0 ? 0x80 : bin2bcd(pdata->alrm_min) & 0x7f, + DS1511_AM2_MIN); + rtc_write(pdata->alrm_sec < 0 ? 0x80 : bin2bcd(pdata->alrm_sec) & 0x7f, + DS1511_AM1_SEC); + ds1511_rtc_alarm_enable(alrm->enabled); + + rtc_read(DS1511_CONTROL_A); /* clear interrupts */ + spin_unlock_irqrestore(&pdata->lock, flags); + return 0; } @@ -258,14 +251,15 @@ static irqreturn_t ds1511_interrupt(int irq, void *dev_id) static int ds1511_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) { struct rtc_plat_data *pdata = dev_get_drvdata(dev); + unsigned long flags; if (pdata->irq <= 0) return -EINVAL; - if (enabled) - pdata->irqen |= RTC_AF; - else - pdata->irqen &= ~RTC_AF; - ds1511_rtc_update_alarm(pdata); + + spin_lock_irqsave(&pdata->lock, flags); + ds1511_rtc_alarm_enable(enabled); + spin_unlock_irqrestore(&pdata->lock, flags); + return 0; }