From patchwork Wed Jul 12 05:49:37 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Kallweit X-Patchwork-Id: 787012 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3x6p292P8rz9sNx for ; Wed, 12 Jul 2017 15:50:09 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="SUORB+PV"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756692AbdGLFuJ (ORCPT ); Wed, 12 Jul 2017 01:50:09 -0400 Received: from mail-wr0-f196.google.com ([209.85.128.196]:34593 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756691AbdGLFuI (ORCPT ); Wed, 12 Jul 2017 01:50:08 -0400 Received: by mail-wr0-f196.google.com with SMTP id k67so3202451wrc.1 for ; Tue, 11 Jul 2017 22:50:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:subject:to:cc:references:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding; bh=95SmO2t5W4PpDwD44TzqvN1PnnPKQ1FwW4sOELYdsfw=; b=SUORB+PVdxSJwxP4iIlRt3T0lrkx+BgFp5eWMNpZHL3gqx3z79/5iGS3x5OpVgsTRf BmfKpYALpDqxtQJmbmrpZuW3d8N0ePcYcns6YCtvBat1xiPdRUQ0SUYVbTbIjg24NW8/ b1/xss+wyq5t4SAo4mqU9jnokQlnYBjG/5MKm/Ebad0IkA0neKCh4MwldnGhmgtkw0PQ Mgd+hEyIRbkQGm2AEyxgJrMfjiY/LyLTej3pf35auiWfsVs24yRMbxWGDa/kwZCM6lDI Hs0EbBceuVPfPNAuMJ8MsHRDHbji+mIN+OaeVa25rC97WK7NXZ26aJ/SDbqw67oULUTq k+WA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:cc:references:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding; bh=95SmO2t5W4PpDwD44TzqvN1PnnPKQ1FwW4sOELYdsfw=; b=Uig8IrT+nCdoYS18/h04g1/LwRzQp8Qf5v0b4IaSw3heyecYpE9VpSQR8kM/O4FVM3 1eIf8+VeKrD89GKi1wwS0lom22JGwAc90mHOnbEf/QznObQk60H3kExs9R/bR1EOHhJO a+IB1IwrdHjI+CJgm7ep7W6s/en2st8X8tF7J6VwmaT/MK2LGmn8YN4ioPac9cw2qf86 Hc4DdsLDkMhAeRYbvEYJMNG0r1MukN17jwsc+aidBtFYKbGusqErximevwqa4GKUHlG/ +SnEQQdvKF2+C54Gu51sJG3jTeNqemr2N9+9Qi+lhfNQsFi/+t6l9J9plR/qiGLEjRzX AM1A== X-Gm-Message-State: AIVw110EpJsEXwtofMNClG2CrfkJjKO8srNNaKDtgvwsD5aEVAEacXsG drKhtFxDWrEnHyRI X-Received: by 10.28.23.1 with SMTP id 1mr1204709wmx.106.1499838606561; Tue, 11 Jul 2017 22:50:06 -0700 (PDT) Received: from ?IPv6:2003:c6:ebc1:e200:4:ce91:c82d:34f2? (p200300C6EBC1E2000004CE91C82D34F2.dip0.t-ipconnect.de. [2003:c6:ebc1:e200:4:ce91:c82d:34f2]) by smtp.googlemail.com with ESMTPSA id z195sm1548986wmz.28.2017.07.11.22.50.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 11 Jul 2017 22:50:06 -0700 (PDT) From: Heiner Kallweit Subject: [PATCH 5/9] rtc: ds1307: improve irq setup To: Alexandre Belloni Cc: linux-rtc@vger.kernel.org References: Message-ID: Date: Wed, 12 Jul 2017 07:49:37 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: Sender: linux-rtc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rtc@vger.kernel.org Change the usage of variable want_irq to reflect its name. Don't set it to true in case wakeup is enabled but no interrupt number is given. In addition set variable ds1307_can_wakeup_device if chip->alarm is set only. This allows to simplify the code and make it better understandable. Signed-off-by: Heiner Kallweit --- drivers/rtc/rtc-ds1307.c | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c index 115fe1c5..5aec1761 100644 --- a/drivers/rtc/rtc-ds1307.c +++ b/drivers/rtc/rtc-ds1307.c @@ -1312,7 +1312,7 @@ static int ds1307_probe(struct i2c_client *client, int err = -ENODEV; int tmp, wday; const struct chip_desc *chip; - bool want_irq = false; + bool want_irq; bool ds1307_can_wakeup_device = false; unsigned char *buf; struct ds1307_platform_data *pdata = dev_get_platdata(&client->dev); @@ -1358,6 +1358,8 @@ static int ds1307_probe(struct i2c_client *client, ds1307->type = acpi_id->driver_data; } + want_irq = client->irq > 0 && chip->alarm; + if (!pdata) trickle_charger_setup = ds1307_trickle_init(ds1307, chip); else if (pdata->trickle_charger_setup) @@ -1383,7 +1385,8 @@ static int ds1307_probe(struct i2c_client *client, * This will guarantee the 'wakealarm' sysfs entry is available on the device, * if supported by the RTC. */ - if (of_property_read_bool(client->dev.of_node, "wakeup-source")) + if (chip->alarm && of_property_read_bool(client->dev.of_node, + "wakeup-source")) ds1307_can_wakeup_device = true; #endif @@ -1409,12 +1412,9 @@ static int ds1307_probe(struct i2c_client *client, * For some variants, be sure alarms can trigger when we're * running on Vbackup (BBSQI/BBSQW) */ - if (chip->alarm && (client->irq > 0 || - ds1307_can_wakeup_device)) { + if (want_irq || ds1307_can_wakeup_device) { ds1307->regs[0] |= DS1337_BIT_INTCN | chip->bbsqi_bit; ds1307->regs[0] &= ~(DS1337_BIT_A2IE | DS1337_BIT_A1IE); - - want_irq = true; } regmap_write(ds1307->regmap, DS1337_REG_CONTROL, @@ -1493,21 +1493,16 @@ static int ds1307_probe(struct i2c_client *client, case rx_8130: ds1307->offset = 0x10; /* Seconds starts at 0x10 */ rtc_ops = &rx8130_rtc_ops; - if (chip->alarm && client->irq > 0) { + if (want_irq) irq_handler = rx8130_irq; - want_irq = true; - } break; case ds_1388: ds1307->offset = 1; /* Seconds starts at 1 */ break; case mcp794xx: rtc_ops = &mcp794xx_rtc_ops; - if (chip->alarm && (client->irq > 0 || - ds1307_can_wakeup_device)) { + if (want_irq || ds1307_can_wakeup_device) irq_handler = mcp794xx_irq; - want_irq = true; - } break; default: break; @@ -1639,7 +1634,7 @@ static int ds1307_probe(struct i2c_client *client, MCP794XX_REG_WEEKDAY_WDAY_MASK, tm.tm_wday + 1); - if (want_irq) { + if (want_irq || ds1307_can_wakeup_device) { device_set_wakeup_capable(ds1307->dev, true); set_bit(HAS_ALARM, &ds1307->flags); } @@ -1649,9 +1644,7 @@ static int ds1307_probe(struct i2c_client *client, return PTR_ERR(ds1307->rtc); } - if (ds1307_can_wakeup_device && client->irq <= 0) { - /* Disable request for an IRQ */ - want_irq = false; + if (ds1307_can_wakeup_device && !want_irq) { dev_info(ds1307->dev, "'wakeup-source' is set, request for an IRQ is disabled!\n"); /* We cannot support UIE mode if we do not have an IRQ line */