From patchwork Fri Nov 20 10:37:51 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alim Akhtar X-Patchwork-Id: 7666611 Return-Path: X-Original-To: patchwork-linux-samsung-soc@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id B7A059F1C2 for ; Fri, 20 Nov 2015 10:37:31 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 9683A20461 for ; Fri, 20 Nov 2015 10:37:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4D58C20439 for ; Fri, 20 Nov 2015 10:37:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1759632AbbKTKh2 (ORCPT ); Fri, 20 Nov 2015 05:37:28 -0500 Received: from mailout1.samsung.com ([203.254.224.24]:55707 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1759629AbbKTKhZ (ORCPT ); Fri, 20 Nov 2015 05:37:25 -0500 Received: from epcpsbgr5.samsung.com (u145.gpu120.samsung.co.kr [203.254.230.145]) by mailout1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0NY4009S106BO100@mailout1.samsung.com>; Fri, 20 Nov 2015 19:37:24 +0900 (KST) Received: from epcpsbgm2new.samsung.com ( [172.20.52.123]) by epcpsbgr5.samsung.com (EPCPMTA) with SMTP id 46.2B.27792.3E7FE465; Fri, 20 Nov 2015 19:37:23 +0900 (KST) X-AuditID: cbfee691-f79bf6d000006c90-8c-564ef7e3ca4b Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm2new.samsung.com (EPCPMTA) with SMTP id 15.E5.00996.3E7FE465; Fri, 20 Nov 2015 19:37:23 +0900 (KST) Received: from exypnos.sisodomain.com ([107.108.73.28]) by mmp2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0NY400A2K04Z2O90@mmp2.samsung.com>; Fri, 20 Nov 2015 19:37:23 +0900 (KST) From: Alim Akhtar To: lee.jones@linaro.org, broonie@kernel.org Cc: k.kozlowski@samsung.com, alexandre.belloni@free-electrons.com, linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, rtc-linux@googlegroups.com, alim.akhtar@samsung.com, Thomas Abraham Subject: [RESEND PATCH v5 1/3] mfd: sec: Add support for S2MPS15 PMIC Date: Fri, 20 Nov 2015 16:07:51 +0530 Message-id: <1448015873-8743-2-git-send-email-alim.akhtar@samsung.com> X-Mailer: git-send-email 1.7.10.4 In-reply-to: <1448015873-8743-1-git-send-email-alim.akhtar@samsung.com> References: <1448015873-8743-1-git-send-email-alim.akhtar@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrBLMWRmVeSWpSXmKPExsWyRsSkWvfxd78wgwW3rSw6ri1msngwbxub xdSHT9gsXr8wtLj/9SijxeVdc9gsZpzfx2Sxv7OD0aJjGaMDp8eTTRcZPfZMPMnmsWlVJ5vH nWt72Dz6tqxi9Pi8SS6ALYrLJiU1J7MstUjfLoErY/GdX+wFTxwqDk9ha2D8aNrFyMkhIWAi 8XjjT3YIW0ziwr31bF2MXBxCAisYJeb9Wc0CU/Tm41xmiMQsRoltmy9BVf1klFi2pQ2sik1A W+Lu9C1MXYwcHCICOhLXb6SD1DALPGWUeNR6mwmkRljAVeLHlK+MIDaLgKrElXt9bCA2r4Cb xIoNj6C2KUp0P5sAFucUcJdYffo7mC0EVHNn+h+wKyQE1rFLtK19ywoxSEDi2+RDLCCLJQRk JTYdYIaYIylxcMUNlgmMwgsYGVYxiqYWJBcUJ6UXmeoVJ+YWl+al6yXn525iBEbA6X/PJu5g vH/A+hCjAAejEg/vDUm/MCHWxLLiytxDjKZAGyYyS4km5wPjLK8k3tDYzMjC1MTU2Mjc0kxJ nFdH+mewkEB6YklqdmpqQWpRfFFpTmrxIUYmDk6pBsZ61rVbxFYrfTtlc3OW6SHH/6/2vNoS rGcivd/gn/mEjfemKp3bW+QWsX7Spw9m3m5xr7dzXb6wtvBTYT/b7frfIVMuM7Q9+S50cbal s1HHmeL4VY1+RinXCk9bP+wRMdBPtz5zo8o6Xp+Hdb/uy2V2by8d2bergdV2391qffZV/Sd/ OlucuPpeiaU4I9FQi7moOBEAZrHornsCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrKIsWRmVeSWpSXmKPExsVy+t9jQd3H3/3CDBb/N7LouLaYyeLBvG1s FlMfPmGzeP3C0OL+16OMFpd3zWGzmHF+H5PF/s4ORouOZYwOnB5PNl1k9Ngz8SSbx6ZVnWwe d67tYfPo27KK0ePzJrkAtqgGRpuM1MSU1CKF1Lzk/JTMvHRbJe/geOd4UzMDQ11DSwtzJYW8 xNxUWyUXnwBdt8wcoKOUFMoSc0qBQgGJxcVK+naYJoSGuOlawDRG6PqGBMH1GBmggYQ1jBmL 7/xiL3jiUHF4ClsD40fTLkZODgkBE4k3H+cyQ9hiEhfurWfrYuTiEBKYxSixbfMlKOcno8Sy LW0sIFVsAtoSd6dvYepi5OAQEdCRuH4jHaSGWeApo8Sj1ttMIDXCAq4SP6Z8ZQSxWQRUJa7c 62MDsXkF3CRWbHjEArFNUaL72QSwOKeAu8Tq09/BbCGgmjvT/zBPYORdwMiwilEitSC5oDgp PdcoL7Vcrzgxt7g0L10vOT93EyM4yp5J72A8vMv9EKMAB6MSD2+DuF+YEGtiWXFl7iFGCQ5m JRHeA++AQrwpiZVVqUX58UWlOanFhxhNgQ6byCwlmpwPTAB5JfGGxibmpsamliYWJmaWSuK8 F/YDNQmkJ5akZqemFqQWwfQxcXBKNTBuOLq+MODecqbD326mW3qti8zYdM1JgMVnEV/ZOj7R /ZWN8UEmjNpPn2xUDL8ebLrJ+WzHvToH4/o5UpK6a3+xZRX9DFO4aOLpedbkhbRon57rEyaT HT+OGcnOt0/d0Z0uvWK96E6W5e9dLnN4XNWY0Oxj73VOUE2XfTOnXtL85IK6wmjfK0osxRmJ hlrMRcWJAEFrYqLIAgAA DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-samsung-soc-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-samsung-soc@vger.kernel.org X-Spam-Status: No, score=-7.5 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Thomas Abraham Add support for S2MPS15 PMIC which is similar to S2MPS11 PMIC. The S2MPS15 PMIC supports 27 LDO regulators, 10 buck regulators, RTC, three 32.768KHz clock outputs and battery charger. This patch adds initial support for LDO and buck regulators of S2MPS15 device. Signed-off-by: Thomas Abraham Signed-off-by: Alim Akhtar [Alim: Added s2mps15_devs like rtc and clk and related changes] Reviewed-by: Krzysztof Kozlowski Acked-by: Lee Jones --- drivers/mfd/sec-core.c | 31 +++++++ drivers/mfd/sec-irq.c | 8 ++ include/linux/mfd/samsung/core.h | 1 + include/linux/mfd/samsung/s2mps15.h | 158 +++++++++++++++++++++++++++++++++++ 4 files changed, 198 insertions(+) create mode 100644 include/linux/mfd/samsung/s2mps15.h diff --git a/drivers/mfd/sec-core.c b/drivers/mfd/sec-core.c index 989076d6cb83..7c4e7be17f1e 100644 --- a/drivers/mfd/sec-core.c +++ b/drivers/mfd/sec-core.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -96,6 +97,17 @@ static const struct mfd_cell s2mps14_devs[] = { } }; +static const struct mfd_cell s2mps15_devs[] = { + { + .name = "s2mps15-regulator", + }, { + .name = "s2mps15-rtc", + }, { + .name = "s2mps13-clk", + .of_compatible = "samsung,s2mps13-clk", + }, +}; + static const struct mfd_cell s2mpa01_devs[] = { { .name = "s2mpa01-pmic", @@ -122,6 +134,9 @@ static const struct of_device_id sec_dt_match[] = { .compatible = "samsung,s2mps14-pmic", .data = (void *)S2MPS14X, }, { + .compatible = "samsung,s2mps15-pmic", + .data = (void *)S2MPS15X, + }, { .compatible = "samsung,s2mpa01-pmic", .data = (void *)S2MPA01, }, { @@ -223,6 +238,15 @@ static const struct regmap_config s2mps14_regmap_config = { .cache_type = REGCACHE_FLAT, }; +static const struct regmap_config s2mps15_regmap_config = { + .reg_bits = 8, + .val_bits = 8, + + .max_register = S2MPS15_REG_LDODSCH4, + .volatile_reg = s2mps11_volatile, + .cache_type = REGCACHE_FLAT, +}; + static const struct regmap_config s2mpu02_regmap_config = { .reg_bits = 8, .val_bits = 8, @@ -384,6 +408,9 @@ static int sec_pmic_probe(struct i2c_client *i2c, case S2MPS14X: regmap = &s2mps14_regmap_config; break; + case S2MPS15X: + regmap = &s2mps15_regmap_config; + break; case S5M8763X: regmap = &s5m8763_regmap_config; break; @@ -442,6 +469,10 @@ static int sec_pmic_probe(struct i2c_client *i2c, sec_devs = s2mps14_devs; num_sec_devs = ARRAY_SIZE(s2mps14_devs); break; + case S2MPS15X: + sec_devs = s2mps15_devs; + num_sec_devs = ARRAY_SIZE(s2mps15_devs); + break; case S2MPU02: sec_devs = s2mpu02_devs; num_sec_devs = ARRAY_SIZE(s2mpu02_devs); diff --git a/drivers/mfd/sec-irq.c b/drivers/mfd/sec-irq.c index 806fa8dbb22d..d77de431cc50 100644 --- a/drivers/mfd/sec-irq.c +++ b/drivers/mfd/sec-irq.c @@ -407,6 +407,11 @@ static const struct regmap_irq_chip s2mps14_irq_chip = { S2MPS1X_IRQ_CHIP_COMMON_DATA, }; +static const struct regmap_irq_chip s2mps15_irq_chip = { + .name = "s2mps15", + S2MPS1X_IRQ_CHIP_COMMON_DATA, +}; + static const struct regmap_irq_chip s2mpu02_irq_chip = { .name = "s2mpu02", .irqs = s2mpu02_irqs, @@ -466,6 +471,9 @@ int sec_irq_init(struct sec_pmic_dev *sec_pmic) case S2MPS14X: sec_irq_chip = &s2mps14_irq_chip; break; + case S2MPS15X: + sec_irq_chip = &s2mps15_irq_chip; + break; case S2MPU02: sec_irq_chip = &s2mpu02_irq_chip; break; diff --git a/include/linux/mfd/samsung/core.h b/include/linux/mfd/samsung/core.h index a06098639399..6bc4bcd488ac 100644 --- a/include/linux/mfd/samsung/core.h +++ b/include/linux/mfd/samsung/core.h @@ -44,6 +44,7 @@ enum sec_device_type { S2MPS11X, S2MPS13X, S2MPS14X, + S2MPS15X, S2MPU02, }; diff --git a/include/linux/mfd/samsung/s2mps15.h b/include/linux/mfd/samsung/s2mps15.h new file mode 100644 index 000000000000..36d35287c3c0 --- /dev/null +++ b/include/linux/mfd/samsung/s2mps15.h @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd + * http://www.samsung.com + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef __LINUX_MFD_S2MPS15_H +#define __LINUX_MFD_S2MPS15_H + +/* S2MPS15 registers */ +enum s2mps15_reg { + S2MPS15_REG_ID, + S2MPS15_REG_INT1, + S2MPS15_REG_INT2, + S2MPS15_REG_INT3, + S2MPS15_REG_INT1M, + S2MPS15_REG_INT2M, + S2MPS15_REG_INT3M, + S2MPS15_REG_ST1, + S2MPS15_REG_ST2, + S2MPS15_REG_PWRONSRC, + S2MPS15_REG_OFFSRC, + S2MPS15_REG_BU_CHG, + S2MPS15_REG_RTC_BUF, + S2MPS15_REG_CTRL1, + S2MPS15_REG_CTRL2, + S2MPS15_REG_RSVD1, + S2MPS15_REG_RSVD2, + S2MPS15_REG_RSVD3, + S2MPS15_REG_RSVD4, + S2MPS15_REG_RSVD5, + S2MPS15_REG_RSVD6, + S2MPS15_REG_CTRL3, + S2MPS15_REG_RSVD7, + S2MPS15_REG_RSVD8, + S2MPS15_REG_RSVD9, + S2MPS15_REG_B1CTRL1, + S2MPS15_REG_B1CTRL2, + S2MPS15_REG_B2CTRL1, + S2MPS15_REG_B2CTRL2, + S2MPS15_REG_B3CTRL1, + S2MPS15_REG_B3CTRL2, + S2MPS15_REG_B4CTRL1, + S2MPS15_REG_B4CTRL2, + S2MPS15_REG_B5CTRL1, + S2MPS15_REG_B5CTRL2, + S2MPS15_REG_B6CTRL1, + S2MPS15_REG_B6CTRL2, + S2MPS15_REG_B7CTRL1, + S2MPS15_REG_B7CTRL2, + S2MPS15_REG_B8CTRL1, + S2MPS15_REG_B8CTRL2, + S2MPS15_REG_B9CTRL1, + S2MPS15_REG_B9CTRL2, + S2MPS15_REG_B10CTRL1, + S2MPS15_REG_B10CTRL2, + S2MPS15_REG_BBCTRL1, + S2MPS15_REG_BBCTRL2, + S2MPS15_REG_BRAMP, + S2MPS15_REG_LDODVS1, + S2MPS15_REG_LDODVS2, + S2MPS15_REG_LDODVS3, + S2MPS15_REG_LDODVS4, + S2MPS15_REG_L1CTRL, + S2MPS15_REG_L2CTRL, + S2MPS15_REG_L3CTRL, + S2MPS15_REG_L4CTRL, + S2MPS15_REG_L5CTRL, + S2MPS15_REG_L6CTRL, + S2MPS15_REG_L7CTRL, + S2MPS15_REG_L8CTRL, + S2MPS15_REG_L9CTRL, + S2MPS15_REG_L10CTRL, + S2MPS15_REG_L11CTRL, + S2MPS15_REG_L12CTRL, + S2MPS15_REG_L13CTRL, + S2MPS15_REG_L14CTRL, + S2MPS15_REG_L15CTRL, + S2MPS15_REG_L16CTRL, + S2MPS15_REG_L17CTRL, + S2MPS15_REG_L18CTRL, + S2MPS15_REG_L19CTRL, + S2MPS15_REG_L20CTRL, + S2MPS15_REG_L21CTRL, + S2MPS15_REG_L22CTRL, + S2MPS15_REG_L23CTRL, + S2MPS15_REG_L24CTRL, + S2MPS15_REG_L25CTRL, + S2MPS15_REG_L26CTRL, + S2MPS15_REG_L27CTRL, + S2MPS15_REG_LDODSCH1, + S2MPS15_REG_LDODSCH2, + S2MPS15_REG_LDODSCH3, + S2MPS15_REG_LDODSCH4, +}; + +/* S2MPS15 regulator ids */ +enum s2mps15_regulators { + S2MPS15_LDO1, + S2MPS15_LDO2, + S2MPS15_LDO3, + S2MPS15_LDO4, + S2MPS15_LDO5, + S2MPS15_LDO6, + S2MPS15_LDO7, + S2MPS15_LDO8, + S2MPS15_LDO9, + S2MPS15_LDO10, + S2MPS15_LDO11, + S2MPS15_LDO12, + S2MPS15_LDO13, + S2MPS15_LDO14, + S2MPS15_LDO15, + S2MPS15_LDO16, + S2MPS15_LDO17, + S2MPS15_LDO18, + S2MPS15_LDO19, + S2MPS15_LDO20, + S2MPS15_LDO21, + S2MPS15_LDO22, + S2MPS15_LDO23, + S2MPS15_LDO24, + S2MPS15_LDO25, + S2MPS15_LDO26, + S2MPS15_LDO27, + S2MPS15_BUCK1, + S2MPS15_BUCK2, + S2MPS15_BUCK3, + S2MPS15_BUCK4, + S2MPS15_BUCK5, + S2MPS15_BUCK6, + S2MPS15_BUCK7, + S2MPS15_BUCK8, + S2MPS15_BUCK9, + S2MPS15_BUCK10, + S2MPS15_BUCK11, + S2MPS15_REGULATOR_MAX, +}; + +#define S2MPS15_LDO_VSEL_MASK (0x3F) +#define S2MPS15_BUCK_VSEL_MASK (0xFF) + +#define S2MPS15_ENABLE_SHIFT (0x06) +#define S2MPS15_ENABLE_MASK (0x03 << S2MPS15_ENABLE_SHIFT) + +#define S2MPS15_LDO_N_VOLTAGES (S2MPS15_LDO_VSEL_MASK + 1) +#define S2MPS15_BUCK_N_VOLTAGES (S2MPS15_BUCK_VSEL_MASK + 1) + +#endif /* __LINUX_MFD_S2MPS15_H */