From patchwork Fri Mar 11 16:22:15 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akinobu Mita X-Patchwork-Id: 596345 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail-qk0-x23b.google.com (mail-qk0-x23b.google.com [IPv6:2607:f8b0:400d:c09::23b]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 71913140317 for ; Sat, 12 Mar 2016 03:22:36 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.b=zUBdOckR; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=nq/DvNA0; dkim-atps=neutral Received: by mail-qk0-x23b.google.com with SMTP id e124sf28734220qkc.0 for ; Fri, 11 Mar 2016 08:22:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20120806; h=mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :reply-to:precedence:mailing-list:list-id:x-spam-checked-in-group :list-post:list-help:list-archive:sender:list-subscribe :list-unsubscribe; bh=e4T3o7u2ZrnnG4QH2Zo04pwcg+QmyDXrx8aXpFBU7e4=; b=zUBdOckRLQSjT7CUn2NosDN4Gwp5Ldqp7GjlhtrHISc0xNLgcZFUbQmbXVNkJhUkfs S1VGxIWkbKZ8AmGhf0SPz9HG719jzdrGFrkUnOrw2kh2snhSG8vDaXt0s4PC7P/3yc+J en2aeFQqqtC9X2Pa+HgLnXUFqIaL4LVIlLwEKGEx2Gmnekx4EcWZAHt7KztMfZBD7veG XXc8TpS1+9rYSKwd683VyhYYJciL8YQT/kY3i6ADZp0tAW2KSKD5KMb6ocOFoB5/R6L5 uVSkkst3bNTPtNaWO7rf9a/zxxj9e2zIY9bGFveVxFU5V7NA9k0mRu5X/NNGvzkaVu/r NyFQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :reply-to:precedence:mailing-list:list-id:x-spam-checked-in-group :list-post:list-help:list-archive:sender:list-subscribe :list-unsubscribe; bh=e4T3o7u2ZrnnG4QH2Zo04pwcg+QmyDXrx8aXpFBU7e4=; b=nq/DvNA0ArGWRoaRhvzr3IrVHx0auHdL8nezsZLJVcCYY2RoVGcWkJAgRx8esrskfq W/geaOST3ZByxolLkB4+YpHaYaOFXwOwnjNtrPp2+ru8YdQqlnK493ZyOP/m4Jwk92Ts 4dXS011l/JXgQiBst2hfJe2ulZTtDMks7A1hilSML8Wa9sz1vfStkvWRn7AtsmxDnFg+ DNKOmp6YxenTNz/gZJk+fll/rWwhzpzEikTglYL/zsP11f7CzcafoPynyGqp2i7fccOj Jr9MhATzEmDfaEjfOSI2c8xeDuawPqSgO20aFgNBrL0tjidW7xixd4oqN5tkzr9GHKSv 3WJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:to:cc:subject:date:message-id :in-reply-to:references:x-original-sender :x-original-authentication-results:reply-to:precedence:mailing-list :list-id:x-spam-checked-in-group:list-post:list-help:list-archive :sender:list-subscribe:list-unsubscribe; bh=e4T3o7u2ZrnnG4QH2Zo04pwcg+QmyDXrx8aXpFBU7e4=; b=Q/9daDqQYvS6e1s8GhqOlRamRA8P/BvwknfYh31DIlwK4YufY5lehuQlimrw5EKCzz +bu6XJ+l7NhCEuBnieM/QvPXnpNgk5HoVBxHqJALcVclHdyKg8zgEsIvLgbzUcX3GkLu Jo6jPrwnOW0VLtLrjYTxIyQ0Hfb3jsWJ4K7ACyNDf2GBrnsDZbqhbZwEugkZwf8URGVm JP2/E2JTdvB9/aYJKBx5XdI8FE5U+wcUHmMrTtWyoEzhSV9i2V9RdXOyXFDHF6xNUY5s 2j1wk10VZ40ARxHqC6Bj8G9TlVcA6YqfuX5zzuV5qbhZ9l4oglOTmT7zaU1vNCYYvYyO EAMg== X-Gm-Message-State: AD7BkJJLJXxU26YzQE7yxcjsprqBT4403OsgTMczyQfmMTq1aCeY7Dpjq62RudQwFhzBzA== X-Received: by 10.182.80.74 with SMTP id p10mr124524obx.8.1457713354286; Fri, 11 Mar 2016 08:22:34 -0800 (PST) MIME-Version: 1.0 X-BeenThere: rtc-linux@googlegroups.com Received: by 10.182.28.2 with SMTP id x2ls1117040obg.40.gmail; Fri, 11 Mar 2016 08:22:32 -0800 (PST) X-Received: by 10.182.20.195 with SMTP id p3mr7851645obe.47.1457713352826; Fri, 11 Mar 2016 08:22:32 -0800 (PST) Received: from mail-pa0-x22c.google.com (mail-pa0-x22c.google.com. [2607:f8b0:400e:c03::22c]) by gmr-mx.google.com with ESMTPS id ui7si1463890pab.0.2016.03.11.08.22.32 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 11 Mar 2016 08:22:32 -0800 (PST) Received-SPF: pass (google.com: domain of akinobu.mita@gmail.com designates 2607:f8b0:400e:c03::22c as permitted sender) client-ip=2607:f8b0:400e:c03::22c; Received: by mail-pa0-x22c.google.com with SMTP id tt10so102462448pab.3 for ; Fri, 11 Mar 2016 08:22:32 -0800 (PST) X-Received: by 10.67.8.100 with SMTP id dj4mr16974101pad.88.1457713352625; Fri, 11 Mar 2016 08:22:32 -0800 (PST) Received: from localhost.localdomain (KD113159139091.ppp-bb.dion.ne.jp. [113.159.139.91]) by smtp.gmail.com with ESMTPSA id b4sm14031490pas.19.2016.03.11.08.22.30 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 11 Mar 2016 08:22:31 -0800 (PST) From: Akinobu Mita To: rtc-linux@googlegroups.com Cc: Akinobu Mita , Alessandro Zummo , Alexandre Belloni , Renaud Cerrato Subject: [rtc-linux] [PATCH 2/3] rtc: pcf2127: add support for spi interface Date: Sat, 12 Mar 2016 01:22:15 +0900 Message-Id: <1457713336-24262-2-git-send-email-akinobu.mita@gmail.com> X-Mailer: git-send-email 2.5.0 In-Reply-To: <1457713336-24262-1-git-send-email-akinobu.mita@gmail.com> References: <1457713336-24262-1-git-send-email-akinobu.mita@gmail.com> X-Original-Sender: Akinobu.Mita@gmail.com X-Original-Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of akinobu.mita@gmail.com designates 2607:f8b0:400e:c03::22c as permitted sender) smtp.mailfrom=akinobu.mita@gmail.com; dkim=pass header.i=@gmail.com; dmarc=pass (p=NONE dis=NONE) header.from=gmail.com Reply-To: rtc-linux@googlegroups.com Precedence: list Mailing-list: list rtc-linux@googlegroups.com; contact rtc-linux+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: rtc-linux@googlegroups.com X-Google-Group-Id: 712029733259 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , pcf2127 has selectable I2C-bus and SPI-bus interface support. This adds support for SPI interface. Signed-off-by: Akinobu Mita Cc: Alessandro Zummo Cc: Alexandre Belloni Cc: Renaud Cerrato --- drivers/rtc/Kconfig | 19 ++++---- drivers/rtc/rtc-pcf2127.c | 118 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 126 insertions(+), 11 deletions(-) diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 777fa2d..9d0f4da 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -400,15 +400,6 @@ config RTC_DRV_PALMAS This driver can also be built as a module. If so, the module will be called rtc-palma. -config RTC_DRV_PCF2127 - tristate "NXP PCF2127" - help - If you say yes here you get support for the NXP PCF2127/29 RTC - chips. - - This driver can also be built as a module. If so, the module - will be called rtc-pcf2127. - config RTC_DRV_PCF8523 tristate "NXP PCF8523" help @@ -767,6 +758,16 @@ config RTC_DRV_DS3232 This driver can also be built as a module. If so, the module will be called rtc-ds3232. +config RTC_DRV_PCF2127 + tristate "NXP PCF2127" + depends on RTC_I2C_AND_SPI + help + If you say yes here you get support for the NXP PCF2127/29 RTC + chips. + + This driver can also be built as a module. If so, the module + will be called rtc-pcf2127. + comment "Platform RTC drivers" # this 'CMOS' RTC driver is arch dependent because diff --git a/drivers/rtc/rtc-pcf2127.c b/drivers/rtc/rtc-pcf2127.c index 8f269e3..5729ee9 100644 --- a/drivers/rtc/rtc-pcf2127.c +++ b/drivers/rtc/rtc-pcf2127.c @@ -1,5 +1,5 @@ /* - * An I2C driver for the NXP PCF2127 RTC + * An I2C and SPI driver for the NXP PCF2127 RTC * Copyright 2013 Til-Technologies * * Author: Renaud Cerrato @@ -14,6 +14,7 @@ */ #include +#include #include #include #include @@ -200,6 +201,8 @@ static const struct of_device_id pcf2127_of_match[] = { MODULE_DEVICE_TABLE(of, pcf2127_of_match); #endif +#if IS_ENABLED(CONFIG_I2C) + static int pcf2127_i2c_write(void *context, const void *data, size_t count) { struct device *dev = context; @@ -306,7 +309,118 @@ static struct i2c_driver pcf2127_i2c_driver = { .probe = pcf2127_i2c_probe, .id_table = pcf2127_i2c_id, }; -module_i2c_driver(pcf2127_i2c_driver); + +static int pcf2127_i2c_register_driver(void) +{ + return i2c_add_driver(&pcf2127_i2c_driver); +} + +static void pcf2127_i2c_unregister_driver(void) +{ + i2c_del_driver(&pcf2127_i2c_driver); +} + +#else + +static int pcf2127_i2c_register_driver(void) +{ + return 0; +} + +static void pcf2127_i2c_unregister_driver(void) +{ +} + +#endif + +#if IS_ENABLED(CONFIG_SPI_MASTER) + +static struct spi_driver pcf2127_spi_driver; + +static int pcf2127_spi_probe(struct spi_device *spi) +{ + static const struct regmap_config config = { + .reg_bits = 8, + .val_bits = 8, + .read_flag_mask = 0xa0, + .write_flag_mask = 0x20, + }; + struct regmap *regmap; + + regmap = devm_regmap_init_spi(spi, &config); + if (IS_ERR(regmap)) { + dev_err(&spi->dev, "%s: regmap allocation failed: %ld\n", + __func__, PTR_ERR(regmap)); + return PTR_ERR(regmap); + } + + return pcf2127_probe(&spi->dev, regmap, pcf2127_spi_driver.driver.name); +} + +static const struct spi_device_id pcf2127_spi_id[] = { + { "pcf2127", 0 }, + { } +}; +MODULE_DEVICE_TABLE(spi, pcf2127_spi_id); + +static struct spi_driver pcf2127_spi_driver = { + .driver = { + .name = "rtc-pcf2127-spi", + .of_match_table = of_match_ptr(pcf2127_of_match), + }, + .probe = pcf2127_spi_probe, + .id_table = pcf2127_spi_id, +}; + +static int pcf2127_spi_register_driver(void) +{ + return spi_register_driver(&pcf2127_spi_driver); +} + +static void pcf2127_spi_unregister_driver(void) +{ + spi_unregister_driver(&pcf2127_spi_driver); +} + +#else + +static int pcf2127_spi_register_driver(void) +{ + return 0; +} + +static void pcf2127_spi_unregister_driver(void) +{ +} + +#endif + +static int __init pcf2127_init(void) +{ + int ret; + + ret = pcf2127_i2c_register_driver(); + if (ret) { + pr_err("Failed to register pcf2127 i2c driver: %d\n", ret); + return ret; + } + + ret = pcf2127_spi_register_driver(); + if (ret) { + pr_err("Failed to register pcf2127 spi driver: %d\n", ret); + pcf2127_i2c_unregister_driver(); + } + + return ret; +} +module_init(pcf2127_init) + +static void __exit pcf2127_exit(void) +{ + pcf2127_spi_unregister_driver(); + pcf2127_i2c_unregister_driver(); +} +module_exit(pcf2127_exit) MODULE_AUTHOR("Renaud Cerrato "); MODULE_DESCRIPTION("NXP PCF2127 RTC driver");