Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1645575 > unrolled thread
| Started by | Keerthy <j-keerthy@ti.com> |
|---|---|
| First post | 2017-05-19 14:50 +0200 |
| Last post | 2017-05-23 17:40 +0200 |
| Articles | 17 — 3 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
[PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support Keerthy <j-keerthy@ti.com> - 2017-05-19 14:50 +0200
Re: [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support "Andrew F. Davis" <afd@ti.com> - 2017-05-19 17:50 +0200
Re: [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support Keerthy <j-keerthy@ti.com> - 2017-05-22 06:30 +0200
Re: [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support Keerthy <j-keerthy@ti.com> - 2017-05-23 05:10 +0200
Re: [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support Lee Jones <lee.jones@linaro.org> - 2017-05-23 09:00 +0200
Re: [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support Lee Jones <lee.jones@linaro.org> - 2017-05-22 19:50 +0200
Re: [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support Keerthy <j-keerthy@ti.com> - 2017-05-23 04:40 +0200
Re: [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support Keerthy <j-keerthy@ti.com> - 2017-05-23 05:10 +0200
Re: [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support Lee Jones <lee.jones@linaro.org> - 2017-05-23 09:00 +0200
Re: [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support Keerthy <j-keerthy@ti.com> - 2017-05-23 09:50 +0200
Re: [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support Keerthy <j-keerthy@ti.com> - 2017-05-23 10:00 +0200
Re: [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support Lee Jones <lee.jones@linaro.org> - 2017-05-23 10:50 +0200
Re: [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support Keerthy <j-keerthy@ti.com> - 2017-05-23 12:00 +0200
Re: [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support Lee Jones <lee.jones@linaro.org> - 2017-05-23 10:50 +0200
Re: [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support Keerthy <j-keerthy@ti.com> - 2017-05-23 12:20 +0200
Re: [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support Keerthy <j-keerthy@ti.com> - 2017-05-23 14:30 +0200
Re: [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support Lee Jones <lee.jones@linaro.org> - 2017-05-23 17:40 +0200
| From | Keerthy <j-keerthy@ti.com> |
|---|---|
| Date | 2017-05-19 14:50 +0200 |
| Subject | [PATCH 1/3] mfd: lp87565: Add lp87565 PMIC support |
| Message-ID | <tIPvY-2eo-21@gated-at.bofh.it> |
The LP87565 chip is a power management IC for Portable Navigation Systems
and Tablet Computing devices. It contains the following components:
- Configurable Bucks(Single and multi-phase).
- Configurable General Purpose Output Signals (GPO).
The LP87565-Q1 variant device uses two 2-phase outputs configuration,
Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
output.
Signed-off-by: Keerthy <j-keerthy@ti.com>
---
Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
drivers/mfd/Kconfig | 14 ++
drivers/mfd/Makefile | 1 +
drivers/mfd/lp87565.c | 103 ++++++++
include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
5 files changed, 437 insertions(+)
create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
create mode 100644 drivers/mfd/lp87565.c
create mode 100644 include/linux/mfd/lp87565.h
diff --git a/Documentation/devicetree/bindings/mfd/lp87565.txt b/Documentation/devicetree/bindings/mfd/lp87565.txt
new file mode 100644
index 0000000..38a00a1
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/lp87565.txt
@@ -0,0 +1,44 @@
+TI LP873565 PMIC MFD driver
+
+Required properties:
+ - compatible: "ti,lp87565", "ti,lp87565-q1"
+ - reg: I2C slave address.
+ - gpio-controller: Marks the device node as a GPIO Controller.
+ - #gpio-cells: Should be two. The first cell is the pin number and
+ the second cell is used to specify flags.
+ See ../gpio/gpio.txt for more information.
+ - xxx-in-supply: Phandle to parent supply node of each regulator
+ populated under regulators node. xxx should match
+ the supply_name populated in driver.
+ - regulators: List of child nodes that specify the regulator
+ initialization data.
+Example:
+
+lp87565: lp87565@60 {
+ compatible = "ti,lp87565-q1";
+ reg = <0x60>;
+ gpio-controller;
+ #gpio-cells = <2>;
+
+ buck10-in-supply =<&vsys_3v3>;
+ buck23-in-supply =<&vsys_3v3>;
+ regulators: regulators {
+ buck10_reg: buck10 {
+ /*VDD_MPU*/
+ regulator-name = "buck10";
+ regulator-min-microvolt = <850000>;
+ regulator-max-microvolt = <1250000>;
+ regulator-always-on;
+ regulator-boot-on;
+ };
+
+ buck23_reg: buck23 {
+ /* VDD_GPU*/
+ regulator-name = "buck23";
+ regulator-min-microvolt = <850000>;
+ regulator-max-microvolt = <1250000>;
+ regulator-boot-on;
+ regulator-always-on;
+ };
+ };
+};
diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 3eb5c93..5e884f3 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -1325,6 +1325,20 @@ config MFD_TI_LP873X
This driver can also be built as a module. If so, the module
will be called lp873x.
+config MFD_TI_LP87565
+ tristate "TI LP87565 Power Management IC"
+ depends on I2C
+ select MFD_CORE
+ select REGMAP_I2C
+ help
+ If you say yes here then you get support for the LP87565 series of
+ Power Management Integrated Circuits (PMIC).
+ These include voltage regulators, thermal protection, configurable
+ General Purpose Outputs (GPO) that are used in portable devices.
+
+ This driver can also be built as a module. If so, the module
+ will be called lp87565.
+
config MFD_TPS65218
tristate "TI TPS65218 Power Management chips"
depends on I2C
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index c16bf1e..7edbe1b 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -25,6 +25,7 @@ obj-$(CONFIG_HTC_PASIC3) += htc-pasic3.o
obj-$(CONFIG_HTC_I2CPLD) += htc-i2cpld.o
obj-$(CONFIG_MFD_TI_LP873X) += lp873x.o
+obj-$(CONFIG_MFD_TI_LP87565) += lp87565.o
obj-$(CONFIG_MFD_DAVINCI_VOICECODEC) += davinci_voicecodec.o
obj-$(CONFIG_MFD_DM355EVM_MSP) += dm355evm_msp.o
diff --git a/drivers/mfd/lp87565.c b/drivers/mfd/lp87565.c
new file mode 100644
index 0000000..dff882f
--- /dev/null
+++ b/drivers/mfd/lp87565.c
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * Author: Keerthy <j-keerthy@ti.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 version 2.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/interrupt.h>
+#include <linux/mfd/core.h>
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/regmap.h>
+
+#include <linux/mfd/lp87565.h>
+
+static const struct regmap_config lp87565_regmap_config = {
+ .reg_bits = 8,
+ .val_bits = 8,
+ .max_register = LP87565_REG_MAX,
+};
+
+static const struct mfd_cell lp87565_cells[] = {
+ { .name = "lp87565-q1-regulator", },
+ { .name = "lp87565-q1-gpio", },
+};
+
+static const struct of_device_id of_lp87565_match_table[] = {
+ {
+ .compatible = "ti,lp87565-q1",
+ .data = (void *)LP87565_DEVICE_TYPE_LP87565_Q1,
+ },
+ {}
+};
+MODULE_DEVICE_TABLE(of, of_lp87565_match_table);
+
+static int lp87565_probe(struct i2c_client *client,
+ const struct i2c_device_id *ids)
+{
+ struct lp87565 *lp87565;
+ const struct of_device_id *of_id;
+ int ret;
+ unsigned int otpid;
+
+ lp87565 = devm_kzalloc(&client->dev, sizeof(*lp87565), GFP_KERNEL);
+ if (!lp87565)
+ return -ENOMEM;
+
+ lp87565->dev = &client->dev;
+
+ lp87565->regmap = devm_regmap_init_i2c(client, &lp87565_regmap_config);
+ if (IS_ERR(lp87565->regmap)) {
+ ret = PTR_ERR(lp87565->regmap);
+ dev_err(lp87565->dev,
+ "Failed to initialize register map: %d\n", ret);
+ return ret;
+ }
+
+ ret = regmap_read(lp87565->regmap, LP87565_REG_OTP_REV, &otpid);
+ if (ret) {
+ dev_err(lp87565->dev, "Failed to read OTP ID\n");
+ return ret;
+ }
+
+ lp87565->rev = otpid & LP87565_OTP_REV_OTP_ID;
+ of_id = of_match_device(of_lp87565_match_table, &client->dev);
+ if (of_id)
+ lp87565->dev_type = (enum lp87565_device_type)of_id->data;
+
+ i2c_set_clientdata(client, lp87565);
+
+ ret = mfd_add_devices(lp87565->dev, PLATFORM_DEVID_AUTO, lp87565_cells,
+ ARRAY_SIZE(lp87565_cells), NULL, 0, NULL);
+
+ return ret;
+}
+
+static const struct i2c_device_id lp87565_id_table[] = {
+ { "lp87565-q1", 0 },
+ { },
+};
+MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
+
+static struct i2c_driver lp87565_driver = {
+ .driver = {
+ .name = "lp87565",
+ .of_match_table = of_lp87565_match_table,
+ },
+ .probe = lp87565_probe,
+ .id_table = lp87565_id_table,
+};
+module_i2c_driver(lp87565_driver);
+
+MODULE_AUTHOR("J Keerthy <j-keerthy@ti.com>");
+MODULE_DESCRIPTION("lp87565 chip family Multi-Function Device driver");
+MODULE_LICENSE("GPL v2");
diff --git a/include/linux/mfd/lp87565.h b/include/linux/mfd/lp87565.h
new file mode 100644
index 0000000..6112365
--- /dev/null
+++ b/include/linux/mfd/lp87565.h
@@ -0,0 +1,275 @@
+/*
+ * Functions to access LP87565 power management chip.
+ *
+ * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.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 version 2.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; 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_LP87565_H
+#define __LINUX_MFD_LP87565_H
+
+#include <linux/i2c.h>
+#include <linux/regulator/driver.h>
+#include <linux/regulator/machine.h>
+
+enum lp87565_device_type {
+ LP87565_DEVICE_TYPE_UNKNOWN = 0,
+ LP87565_DEVICE_TYPE_LP87565_Q1,
+};
+
+/* All register addresses */
+#define LP87565_REG_DEV_REV 0X00
+#define LP87565_REG_OTP_REV 0X01
+#define LP87565_REG_BUCK0_CTRL_1 0X02
+#define LP87565_REG_BUCK0_CTRL_2 0X03
+
+#define LP87565_REG_BUCK1_CTRL_1 0X04
+#define LP87565_REG_BUCK1_CTRL_2 0X05
+
+#define LP87565_REG_BUCK2_CTRL_1 0X06
+#define LP87565_REG_BUCK2_CTRL_2 0X07
+
+#define LP87565_REG_BUCK3_CTRL_1 0X08
+#define LP87565_REG_BUCK3_CTRL_2 0X09
+
+#define LP87565_REG_BUCK0_VOUT 0X0A
+#define LP87565_REG_BUCK0_FLOOR_VOUT 0X0B
+
+#define LP87565_REG_BUCK1_VOUT 0X0C
+#define LP87565_REG_BUCK1_FLOOR_VOUT 0X0D
+
+#define LP87565_REG_BUCK2_VOUT 0X0E
+#define LP87565_REG_BUCK2_FLOOR_VOUT 0X0F
+
+#define LP87565_REG_BUCK3_VOUT 0X10
+#define LP87565_REG_BUCK3_FLOOR_VOUT 0X11
+
+#define LP87565_REG_BUCK0_DELAY 0X12
+#define LP87565_REG_BUCK1_DELAY 0X13
+
+#define LP87565_REG_BUCK2_DELAY 0X14
+#define LP87565_REG_BUCK3_DELAY 0X15
+
+#define LP87565_REG_GPO2_DELAY 0X16
+#define LP87565_REG_GPO3_DELAY 0X17
+#define LP87565_REG_RESET 0X18
+#define LP87565_REG_CONFIG 0X19
+
+#define LP87565_REG_INT_TOP_1 0X1A
+#define LP87565_REG_INT_TOP_2 0X1B
+
+#define LP87565_REG_INT_BUCK_0_1 0X1C
+#define LP87565_REG_INT_BUCK_2_3 0X1D
+#define LP87565_REG_TOP_STAT 0X1E
+#define LP87565_REG_BUCK_0_1_STAT 0X1F
+#define LP87565_REG_BUCK_2_3_STAT 0x20
+
+#define LP87565_REG_TOP_MASK_1 0x21
+#define LP87565_REG_TOP_MASK_2 0x22
+
+#define LP87565_REG_BUCK_0_1_MASK 0x23
+#define LP87565_REG_BUCK_2_3_MASK 0x24
+#define LP87565_REG_SEL_I_LOAD 0x25
+
+#define LP87565_REG_I_LOAD_2 0x26
+#define LP87565_REG_I_LOAD_1 0x27
+
+#define LP87565_REG_PGOOD_CTRL1 0x28
+#define LP87565_REG_PGOOD_CTRL2 0x29
+#define LP87565_REG_PGOOD_FLT 0x2A
+#define LP87565_REG_PLL_CTRL 0x2B
+#define LP87565_REG_PIN_FUNCTION 0x2C
+#define LP87565_REG_GPIO_CONFIG 0x2D
+#define LP87565_REG_GPIO_IN 0x2E
+#define LP87565_REG_GPIO_OUT 0x2F
+
+#define LP87565_REG_MAX LP87565_REG_GPIO_OUT
+
+/* Register field definitions */
+#define LP87565_DEV_REV_DEV_ID 0xC0
+#define LP87565_DEV_REV_ALL_LAYER 0x30
+#define LP87565_DEV_REV_METAL_LAYER 0x0F
+
+#define LP87565_OTP_REV_OTP_ID 0xFF
+
+#define LP87565_BUCK_CTRL_1_EN BIT(7)
+#define LP87565_BUCK_CTRL_1_EN_PIN_CTRL BIT(6)
+#define LP87565_BUCK_CTRL_1_PIN_SELECT_EN 0x30
+
+#define LP87565_BUCK_CTRL_1_ROOF_FLOOR_EN BIT(3)
+#define LP87565_BUCK_CTRL_1_RDIS_EN BIT(2)
+#define LP87565_BUCK_CTRL_1_FPWM BIT(1)
+/* Bit0 is reserved for BUCK1 and BUCK3 and valid only for BUCK0 and BUCK2 */
+#define LP87565_BUCK_CTRL_1_FPWM_MP_0_2 BIT(0)
+
+#define LP87565_BUCK_CTRL_2_ILIM 0x38
+#define LP87565_BUCK_CTRL_2_SLEW_RATE 0x07
+
+#define LP87565_BUCK_VSET 0xFF
+#define LP87565_BUCK_FLOOR_VSET 0xFF
+
+#define LP87565_BUCK_SHUTDOWN_DELAY 0xF0
+#define LP87565_BUCK_STARTUP_DELAY 0x0F
+
+#define LP87565_GPIO_SHUTDOWN_DELAY 0xF0
+#define LP87565_GPIO_STARTUP_DELAY 0x0F
+
+#define LP87565_RESET_SW_RESET BIT(0)
+
+#define LP87565_CONFIG_DOUBLE_DELAY BIT(7)
+#define LP87565_CONFIG_CLKIN_PD BIT(6)
+#define LP87565_CONFIG_EN4_PD BIT(5)
+#define LP87565_CONFIG_EN3_PD BIT(4)
+#define LP87565_CONFIG_TDIE_WARN_LEVEL BIT(3)
+#define LP87565_CONFIG_EN2_PD BIT(2)
+#define LP87565_CONFIG_EN1_PD BIT(1)
+
+#define LP87565_INT_GPIO BIT(7)
+#define LP87565_INT_BUCK23 BIT(6)
+#define LP87565_INT_BUCK01 BIT(5)
+#define LP87565_NO_SYNC_CLK BIT(4)
+#define LP87565_TDIE_SD BIT(3)
+#define LP87565_TDIE_WARN BIT(2)
+#define LP87565_INT_OVP BIT(1)
+#define LP87565_I_LOAD_READY BIT(0)
+
+#define LP87565_INT_TOP2_RESET_REG BIT(0)
+
+#define LP87565_BUCK1_PG_INT BIT(6)
+#define LP87565_BUCK1_SC_INT BIT(5)
+#define LP87565_BUCK1_ILIM_INT BIT(4)
+#define LP87565_BUCK0_PG_INT BIT(2)
+#define LP87565_BUCK0_SC_INT BIT(1)
+#define LP87565_BUCK0_ILIM_INT BIT(0)
+
+#define LP87565_BUCK3_PG_INT BIT(6)
+#define LP87565_BUCK3_SC_INT BIT(5)
+#define LP87565_BUCK3_ILIM_INT BIT(4)
+#define LP87565_BUCK2_PG_INT BIT(2)
+#define LP87565_BUCK2_SC_INT BIT(1)
+#define LP87565_BUCK2_ILIM_INT BIT(0)
+
+#define LP87565_SYNC_CLK_STAT BIT(4)
+#define LP87565_TDIE_SD_STAT BIT(3)
+#define LP87565_TDIE_WARN_STAT BIT(2)
+#define LP87565_OVP_STAT BIT(1)
+
+#define LP87565_BUCK1_STAT BIT(7)
+#define LP87565_BUCK1_PG_STAT BIT(6)
+#define LP87565_BUCK1_ILIM_STAT BIT(4)
+#define LP87565_BUCK0_STAT BIT(3)
+#define LP87565_BUCK0_PG_STAT BIT(2)
+#define LP87565_BUCK0_ILIM_STAT BIT(0)
+
+#define LP87565_BUCK3_STAT BIT(7)
+#define LP87565_BUCK3_PG_STAT BIT(6)
+#define LP87565_BUCK3_ILIM_STAT BIT(4)
+#define LP87565_BUCK2_STAT BIT(3)
+#define LP87565_BUCK2_PG_STAT BIT(2)
+#define LP87565_BUCK2_ILIM_STAT BIT(0)
+
+#define LPL87565_GPIO_MASK BIT(7)
+#define LPL87565_SYNC_CLK_MASK BIT(4)
+#define LPL87565_TDIE_WARN_MASK BIT(2)
+#define LPL87565_I_LOAD_READY_MASK BIT(0)
+
+#define LPL87565_RESET_REG_MASK BIT(0)
+
+#define LPL87565_BUCK1_PG_MASK BIT(6)
+#define LPL87565_BUCK1_ILIM_MASK BIT(4)
+#define LPL87565_BUCK0_PG_MASK BIT(2)
+#define LPL87565_BUCK0_ILIM_MASK BIT(0)
+
+#define LPL87565_BUCK3_PG_MASK BIT(6)
+#define LPL87565_BUCK3_ILIM_MASK BIT(4)
+#define LPL87565_BUCK2_PG_MASK BIT(2)
+#define LPL87565_BUCK2_ILIM_MASK BIT(0)
+
+#define LP87565_LOAD_CURRENT_BUCK_SELECT 0x3
+
+#define LP87565_I_LOAD2_BUCK_LOAD_CURRENT 0x3
+#define LP87565_I_LOAD1_BUCK_LOAD_CURRENT 0xFF
+
+#define LP87565_PG3_SEL 0xC0
+#define LP87565_PG2_SEL 0x30
+#define LP87565_PG1_SEL 0x0C
+#define LP87565_PG0_SEL 0x03
+
+#define LP87565_HALF_DAY BIT(7)
+#define LP87565_EN_PG0_NINT BIT(6)
+#define LP87565_PGOOD_SET_DELAY BIT(5)
+#define LP87565_EN_PGFLT_STAT BIT(4)
+#define LP87565_PGOOD_WINDOW BIT(2)
+#define LP87565_PGOOD_OD BIT(1)
+#define LP87565_PGOOD_POL BIT(0)
+
+#define LP87565_PG3_FLT BIT(3)
+#define LP87565_PG2_FLT BIT(2)
+#define LP87565_PG1_FLT BIT(1)
+#define LP87565_PG0_FLT BIT(0)
+
+#define LP87565_PLL_MODE 0xC0
+#define LP87565_EXT_CLK_FREQ 0x1F
+
+#define LP87565_EN_SPREAD_SPEC BIT(7)
+#define LP87565_EN_PIN_CTRL_GPIO3 BIT(6)
+#define LP87565_EN_PIN_SELECT_GPIO3 BIT(5)
+#define LP87565_EN_PIN_CTRL_GPIO2 BIT(4)
+#define LP87565_EN_PIN_SELECT_GPIO2 BIT(3)
+#define LP87565_GPIO3_SEL BIT(2)
+#define LP87565_GPIO2_SEL BIT(1)
+#define LP87565_GPIO1_SEL BIT(0)
+
+#define LP87565_GOIO3_OD BIT(6)
+#define LP87565_GOIO2_OD BIT(5)
+#define LP87565_GOIO1_OD BIT(4)
+#define LP87565_GOIO3_DIR BIT(2)
+#define LP87565_GOIO2_DIR BIT(1)
+#define LP87565_GOIO1_DIR BIT(0)
+
+#define LP87565_GOIO3_IN BIT(2)
+#define LP87565_GOIO2_IN BIT(1)
+#define LP87565_GOIO1_IN BIT(0)
+
+#define LP87565_GOIO3_OUT BIT(2)
+#define LP87565_GOIO2_OUT BIT(1)
+#define LP87565_GOIO1_OUT BIT(0)
+
+/* Number of step-down converters available */
+#define LP87565_NUM_BUCK 6
+
+enum LP87565_regulator_id {
+ /* BUCK's */
+ LP87565_BUCK_0,
+ LP87565_BUCK_1,
+ LP87565_BUCK_2,
+ LP87565_BUCK_3,
+ LP87565_BUCK_10,
+ LP87565_BUCK_23,
+};
+
+/**
+ * struct LP87565 - state holder for the LP87565 driver
+ * @dev: struct device pointer for MFD device
+ * @rev: revision of the LP87565
+ * @dev_type: The device type for example lp87565-q1
+ * @lock: lock guarding the data structure
+ * @regmap: register map of the LP87565 PMIC
+ *
+ * Device data may be used to access the LP87565 chip
+ */
+struct lp87565 {
+ struct device *dev;
+ u8 rev;
+ u8 dev_type;
+ struct regmap *regmap;
+};
+#endif /* __LINUX_MFD_LP87565_H */
--
1.9.1
[toc] | [next] | [standalone]
| From | "Andrew F. Davis" <afd@ti.com> |
|---|---|
| Date | 2017-05-19 17:50 +0200 |
| Message-ID | <tISk9-4bg-15@gated-at.bofh.it> |
| In reply to | #1645575 |
On 05/19/2017 07:42 AM, Keerthy wrote:
> The LP87565 chip is a power management IC for Portable Navigation Systems
> and Tablet Computing devices. It contains the following components:
>
> - Configurable Bucks(Single and multi-phase).
> - Configurable General Purpose Output Signals (GPO).
>
> The LP87565-Q1 variant device uses two 2-phase outputs configuration,
> Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
> output.
>
> Signed-off-by: Keerthy <j-keerthy@ti.com>
> ---
> Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
> drivers/mfd/Kconfig | 14 ++
> drivers/mfd/Makefile | 1 +
> drivers/mfd/lp87565.c | 103 ++++++++
> include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
> 5 files changed, 437 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
> create mode 100644 drivers/mfd/lp87565.c
> create mode 100644 include/linux/mfd/lp87565.h
>
> diff --git a/Documentation/devicetree/bindings/mfd/lp87565.txt b/Documentation/devicetree/bindings/mfd/lp87565.txt
> new file mode 100644
> index 0000000..38a00a1
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mfd/lp87565.txt
> @@ -0,0 +1,44 @@
> +TI LP873565 PMIC MFD driver
> +
> +Required properties:
> + - compatible: "ti,lp87565", "ti,lp87565-q1"
The of_device_id table in the driver only seems to match for
"ti,lp87565-q1", not "ti,lp87565".
> + - reg: I2C slave address.
> + - gpio-controller: Marks the device node as a GPIO Controller.
> + - #gpio-cells: Should be two. The first cell is the pin number and
> + the second cell is used to specify flags.
> + See ../gpio/gpio.txt for more information.
> + - xxx-in-supply: Phandle to parent supply node of each regulator
> + populated under regulators node. xxx should match
> + the supply_name populated in driver.
> + - regulators: List of child nodes that specify the regulator
> + initialization data.
> +Example:
> +
> +lp87565: lp87565@60 {
pmic: lp87565@60 {
Is more standard.
> + compatible = "ti,lp87565-q1";
> + reg = <0x60>;
> + gpio-controller;
> + #gpio-cells = <2>;
> +
> + buck10-in-supply =<&vsys_3v3>;
> + buck23-in-supply =<&vsys_3v3>;
> + regulators: regulators {
> + buck10_reg: buck10 {
> + /*VDD_MPU*/
> + regulator-name = "buck10";
> + regulator-min-microvolt = <850000>;
> + regulator-max-microvolt = <1250000>;
> + regulator-always-on;
> + regulator-boot-on;
> + };
> +
> + buck23_reg: buck23 {
> + /* VDD_GPU*/
> + regulator-name = "buck23";
> + regulator-min-microvolt = <850000>;
> + regulator-max-microvolt = <1250000>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> + };
> +};
> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> index 3eb5c93..5e884f3 100644
> --- a/drivers/mfd/Kconfig
> +++ b/drivers/mfd/Kconfig
> @@ -1325,6 +1325,20 @@ config MFD_TI_LP873X
> This driver can also be built as a module. If so, the module
> will be called lp873x.
>
> +config MFD_TI_LP87565
> + tristate "TI LP87565 Power Management IC"
> + depends on I2C
> + select MFD_CORE
> + select REGMAP_I2C
> + help
> + If you say yes here then you get support for the LP87565 series of
> + Power Management Integrated Circuits (PMIC).
> + These include voltage regulators, thermal protection, configurable
> + General Purpose Outputs (GPO) that are used in portable devices.
> +
> + This driver can also be built as a module. If so, the module
> + will be called lp87565.
> +
> config MFD_TPS65218
> tristate "TI TPS65218 Power Management chips"
> depends on I2C
> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> index c16bf1e..7edbe1b 100644
> --- a/drivers/mfd/Makefile
> +++ b/drivers/mfd/Makefile
> @@ -25,6 +25,7 @@ obj-$(CONFIG_HTC_PASIC3) += htc-pasic3.o
> obj-$(CONFIG_HTC_I2CPLD) += htc-i2cpld.o
>
> obj-$(CONFIG_MFD_TI_LP873X) += lp873x.o
> +obj-$(CONFIG_MFD_TI_LP87565) += lp87565.o
>
> obj-$(CONFIG_MFD_DAVINCI_VOICECODEC) += davinci_voicecodec.o
> obj-$(CONFIG_MFD_DM355EVM_MSP) += dm355evm_msp.o
> diff --git a/drivers/mfd/lp87565.c b/drivers/mfd/lp87565.c
> new file mode 100644
> index 0000000..dff882f
> --- /dev/null
> +++ b/drivers/mfd/lp87565.c
> @@ -0,0 +1,103 @@
> +/*
> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
> + *
> + * Author: Keerthy <j-keerthy@ti.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 version 2.
> + *
> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
> + * kind, whether express or implied; without even the implied warranty
> + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + */
> +
> +#include <linux/interrupt.h>
> +#include <linux/mfd/core.h>
> +#include <linux/module.h>
> +#include <linux/of_device.h>
> +#include <linux/regmap.h>
> +
> +#include <linux/mfd/lp87565.h>
> +
> +static const struct regmap_config lp87565_regmap_config = {
> + .reg_bits = 8,
> + .val_bits = 8,
> + .max_register = LP87565_REG_MAX,
> +};
> +
> +static const struct mfd_cell lp87565_cells[] = {
> + { .name = "lp87565-q1-regulator", },
> + { .name = "lp87565-q1-gpio", },
> +};
> +
> +static const struct of_device_id of_lp87565_match_table[] = {
> + {
> + .compatible = "ti,lp87565-q1",
> + .data = (void *)LP87565_DEVICE_TYPE_LP87565_Q1,
> + },
> + {}
> +};
> +MODULE_DEVICE_TABLE(of, of_lp87565_match_table);
> +
> +static int lp87565_probe(struct i2c_client *client,
> + const struct i2c_device_id *ids)
> +{
> + struct lp87565 *lp87565;
> + const struct of_device_id *of_id;
> + int ret;
> + unsigned int otpid;
> +
> + lp87565 = devm_kzalloc(&client->dev, sizeof(*lp87565), GFP_KERNEL);
> + if (!lp87565)
> + return -ENOMEM;
> +
> + lp87565->dev = &client->dev;
> +
> + lp87565->regmap = devm_regmap_init_i2c(client, &lp87565_regmap_config);
> + if (IS_ERR(lp87565->regmap)) {
> + ret = PTR_ERR(lp87565->regmap);
> + dev_err(lp87565->dev,
> + "Failed to initialize register map: %d\n", ret);
> + return ret;
> + }
> +
> + ret = regmap_read(lp87565->regmap, LP87565_REG_OTP_REV, &otpid);
> + if (ret) {
> + dev_err(lp87565->dev, "Failed to read OTP ID\n");
> + return ret;
> + }
> +
> + lp87565->rev = otpid & LP87565_OTP_REV_OTP_ID;
> + of_id = of_match_device(of_lp87565_match_table, &client->dev);
> + if (of_id)
> + lp87565->dev_type = (enum lp87565_device_type)of_id->data;
> +
> + i2c_set_clientdata(client, lp87565);
> +
> + ret = mfd_add_devices(lp87565->dev, PLATFORM_DEVID_AUTO, lp87565_cells,
> + ARRAY_SIZE(lp87565_cells), NULL, 0, NULL);
> +
> + return ret;
> +}
> +
> +static const struct i2c_device_id lp87565_id_table[] = {
> + { "lp87565-q1", 0 },
> + { },
> +};
> +MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
> +
> +static struct i2c_driver lp87565_driver = {
> + .driver = {
> + .name = "lp87565",
> + .of_match_table = of_lp87565_match_table,
> + },
> + .probe = lp87565_probe,
> + .id_table = lp87565_id_table,
> +};
> +module_i2c_driver(lp87565_driver);
> +
> +MODULE_AUTHOR("J Keerthy <j-keerthy@ti.com>");
> +MODULE_DESCRIPTION("lp87565 chip family Multi-Function Device driver");
> +MODULE_LICENSE("GPL v2");
> diff --git a/include/linux/mfd/lp87565.h b/include/linux/mfd/lp87565.h
> new file mode 100644
> index 0000000..6112365
> --- /dev/null
> +++ b/include/linux/mfd/lp87565.h
> @@ -0,0 +1,275 @@
> +/*
> + * Functions to access LP87565 power management chip.
> + *
> + * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.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 version 2.
> + *
> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
> + * kind, whether express or implied; 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_LP87565_H
> +#define __LINUX_MFD_LP87565_H
> +
> +#include <linux/i2c.h>
> +#include <linux/regulator/driver.h>
> +#include <linux/regulator/machine.h>
> +
> +enum lp87565_device_type {
> + LP87565_DEVICE_TYPE_UNKNOWN = 0,
> + LP87565_DEVICE_TYPE_LP87565_Q1,
> +};
> +
> +/* All register addresses */
> +#define LP87565_REG_DEV_REV 0X00
> +#define LP87565_REG_OTP_REV 0X01
> +#define LP87565_REG_BUCK0_CTRL_1 0X02
> +#define LP87565_REG_BUCK0_CTRL_2 0X03
> +
> +#define LP87565_REG_BUCK1_CTRL_1 0X04
> +#define LP87565_REG_BUCK1_CTRL_2 0X05
> +
> +#define LP87565_REG_BUCK2_CTRL_1 0X06
> +#define LP87565_REG_BUCK2_CTRL_2 0X07
> +
> +#define LP87565_REG_BUCK3_CTRL_1 0X08
> +#define LP87565_REG_BUCK3_CTRL_2 0X09
> +
> +#define LP87565_REG_BUCK0_VOUT 0X0A
> +#define LP87565_REG_BUCK0_FLOOR_VOUT 0X0B
> +
> +#define LP87565_REG_BUCK1_VOUT 0X0C
> +#define LP87565_REG_BUCK1_FLOOR_VOUT 0X0D
> +
> +#define LP87565_REG_BUCK2_VOUT 0X0E
> +#define LP87565_REG_BUCK2_FLOOR_VOUT 0X0F
> +
> +#define LP87565_REG_BUCK3_VOUT 0X10
> +#define LP87565_REG_BUCK3_FLOOR_VOUT 0X11
> +
> +#define LP87565_REG_BUCK0_DELAY 0X12
> +#define LP87565_REG_BUCK1_DELAY 0X13
> +
> +#define LP87565_REG_BUCK2_DELAY 0X14
> +#define LP87565_REG_BUCK3_DELAY 0X15
> +
> +#define LP87565_REG_GPO2_DELAY 0X16
> +#define LP87565_REG_GPO3_DELAY 0X17
> +#define LP87565_REG_RESET 0X18
> +#define LP87565_REG_CONFIG 0X19
> +
> +#define LP87565_REG_INT_TOP_1 0X1A
> +#define LP87565_REG_INT_TOP_2 0X1B
> +
> +#define LP87565_REG_INT_BUCK_0_1 0X1C
> +#define LP87565_REG_INT_BUCK_2_3 0X1D
> +#define LP87565_REG_TOP_STAT 0X1E
> +#define LP87565_REG_BUCK_0_1_STAT 0X1F
> +#define LP87565_REG_BUCK_2_3_STAT 0x20
> +
> +#define LP87565_REG_TOP_MASK_1 0x21
> +#define LP87565_REG_TOP_MASK_2 0x22
> +
> +#define LP87565_REG_BUCK_0_1_MASK 0x23
> +#define LP87565_REG_BUCK_2_3_MASK 0x24
> +#define LP87565_REG_SEL_I_LOAD 0x25
> +
> +#define LP87565_REG_I_LOAD_2 0x26
> +#define LP87565_REG_I_LOAD_1 0x27
> +
> +#define LP87565_REG_PGOOD_CTRL1 0x28
> +#define LP87565_REG_PGOOD_CTRL2 0x29
> +#define LP87565_REG_PGOOD_FLT 0x2A
> +#define LP87565_REG_PLL_CTRL 0x2B
> +#define LP87565_REG_PIN_FUNCTION 0x2C
> +#define LP87565_REG_GPIO_CONFIG 0x2D
> +#define LP87565_REG_GPIO_IN 0x2E
> +#define LP87565_REG_GPIO_OUT 0x2F
> +
> +#define LP87565_REG_MAX LP87565_REG_GPIO_OUT
> +
> +/* Register field definitions */
> +#define LP87565_DEV_REV_DEV_ID 0xC0
> +#define LP87565_DEV_REV_ALL_LAYER 0x30
> +#define LP87565_DEV_REV_METAL_LAYER 0x0F
> +
> +#define LP87565_OTP_REV_OTP_ID 0xFF
> +
> +#define LP87565_BUCK_CTRL_1_EN BIT(7)
> +#define LP87565_BUCK_CTRL_1_EN_PIN_CTRL BIT(6)
> +#define LP87565_BUCK_CTRL_1_PIN_SELECT_EN 0x30
> +
> +#define LP87565_BUCK_CTRL_1_ROOF_FLOOR_EN BIT(3)
> +#define LP87565_BUCK_CTRL_1_RDIS_EN BIT(2)
> +#define LP87565_BUCK_CTRL_1_FPWM BIT(1)
> +/* Bit0 is reserved for BUCK1 and BUCK3 and valid only for BUCK0 and BUCK2 */
> +#define LP87565_BUCK_CTRL_1_FPWM_MP_0_2 BIT(0)
> +
> +#define LP87565_BUCK_CTRL_2_ILIM 0x38
> +#define LP87565_BUCK_CTRL_2_SLEW_RATE 0x07
> +
> +#define LP87565_BUCK_VSET 0xFF
> +#define LP87565_BUCK_FLOOR_VSET 0xFF
> +
> +#define LP87565_BUCK_SHUTDOWN_DELAY 0xF0
> +#define LP87565_BUCK_STARTUP_DELAY 0x0F
> +
> +#define LP87565_GPIO_SHUTDOWN_DELAY 0xF0
> +#define LP87565_GPIO_STARTUP_DELAY 0x0F
> +
> +#define LP87565_RESET_SW_RESET BIT(0)
> +
> +#define LP87565_CONFIG_DOUBLE_DELAY BIT(7)
> +#define LP87565_CONFIG_CLKIN_PD BIT(6)
> +#define LP87565_CONFIG_EN4_PD BIT(5)
> +#define LP87565_CONFIG_EN3_PD BIT(4)
> +#define LP87565_CONFIG_TDIE_WARN_LEVEL BIT(3)
> +#define LP87565_CONFIG_EN2_PD BIT(2)
> +#define LP87565_CONFIG_EN1_PD BIT(1)
> +
> +#define LP87565_INT_GPIO BIT(7)
> +#define LP87565_INT_BUCK23 BIT(6)
> +#define LP87565_INT_BUCK01 BIT(5)
> +#define LP87565_NO_SYNC_CLK BIT(4)
> +#define LP87565_TDIE_SD BIT(3)
> +#define LP87565_TDIE_WARN BIT(2)
> +#define LP87565_INT_OVP BIT(1)
> +#define LP87565_I_LOAD_READY BIT(0)
> +
> +#define LP87565_INT_TOP2_RESET_REG BIT(0)
> +
> +#define LP87565_BUCK1_PG_INT BIT(6)
> +#define LP87565_BUCK1_SC_INT BIT(5)
> +#define LP87565_BUCK1_ILIM_INT BIT(4)
> +#define LP87565_BUCK0_PG_INT BIT(2)
> +#define LP87565_BUCK0_SC_INT BIT(1)
> +#define LP87565_BUCK0_ILIM_INT BIT(0)
> +
> +#define LP87565_BUCK3_PG_INT BIT(6)
> +#define LP87565_BUCK3_SC_INT BIT(5)
> +#define LP87565_BUCK3_ILIM_INT BIT(4)
> +#define LP87565_BUCK2_PG_INT BIT(2)
> +#define LP87565_BUCK2_SC_INT BIT(1)
> +#define LP87565_BUCK2_ILIM_INT BIT(0)
> +
> +#define LP87565_SYNC_CLK_STAT BIT(4)
> +#define LP87565_TDIE_SD_STAT BIT(3)
> +#define LP87565_TDIE_WARN_STAT BIT(2)
> +#define LP87565_OVP_STAT BIT(1)
> +
> +#define LP87565_BUCK1_STAT BIT(7)
> +#define LP87565_BUCK1_PG_STAT BIT(6)
> +#define LP87565_BUCK1_ILIM_STAT BIT(4)
> +#define LP87565_BUCK0_STAT BIT(3)
> +#define LP87565_BUCK0_PG_STAT BIT(2)
> +#define LP87565_BUCK0_ILIM_STAT BIT(0)
> +
> +#define LP87565_BUCK3_STAT BIT(7)
> +#define LP87565_BUCK3_PG_STAT BIT(6)
> +#define LP87565_BUCK3_ILIM_STAT BIT(4)
> +#define LP87565_BUCK2_STAT BIT(3)
> +#define LP87565_BUCK2_PG_STAT BIT(2)
> +#define LP87565_BUCK2_ILIM_STAT BIT(0)
> +
> +#define LPL87565_GPIO_MASK BIT(7)
> +#define LPL87565_SYNC_CLK_MASK BIT(4)
> +#define LPL87565_TDIE_WARN_MASK BIT(2)
> +#define LPL87565_I_LOAD_READY_MASK BIT(0)
> +
> +#define LPL87565_RESET_REG_MASK BIT(0)
> +
> +#define LPL87565_BUCK1_PG_MASK BIT(6)
> +#define LPL87565_BUCK1_ILIM_MASK BIT(4)
> +#define LPL87565_BUCK0_PG_MASK BIT(2)
> +#define LPL87565_BUCK0_ILIM_MASK BIT(0)
> +
> +#define LPL87565_BUCK3_PG_MASK BIT(6)
> +#define LPL87565_BUCK3_ILIM_MASK BIT(4)
> +#define LPL87565_BUCK2_PG_MASK BIT(2)
> +#define LPL87565_BUCK2_ILIM_MASK BIT(0)
> +
> +#define LP87565_LOAD_CURRENT_BUCK_SELECT 0x3
> +
> +#define LP87565_I_LOAD2_BUCK_LOAD_CURRENT 0x3
> +#define LP87565_I_LOAD1_BUCK_LOAD_CURRENT 0xFF
> +
> +#define LP87565_PG3_SEL 0xC0
> +#define LP87565_PG2_SEL 0x30
> +#define LP87565_PG1_SEL 0x0C
> +#define LP87565_PG0_SEL 0x03
> +
> +#define LP87565_HALF_DAY BIT(7)
> +#define LP87565_EN_PG0_NINT BIT(6)
> +#define LP87565_PGOOD_SET_DELAY BIT(5)
> +#define LP87565_EN_PGFLT_STAT BIT(4)
> +#define LP87565_PGOOD_WINDOW BIT(2)
> +#define LP87565_PGOOD_OD BIT(1)
> +#define LP87565_PGOOD_POL BIT(0)
> +
> +#define LP87565_PG3_FLT BIT(3)
> +#define LP87565_PG2_FLT BIT(2)
> +#define LP87565_PG1_FLT BIT(1)
> +#define LP87565_PG0_FLT BIT(0)
> +
> +#define LP87565_PLL_MODE 0xC0
> +#define LP87565_EXT_CLK_FREQ 0x1F
> +
> +#define LP87565_EN_SPREAD_SPEC BIT(7)
> +#define LP87565_EN_PIN_CTRL_GPIO3 BIT(6)
> +#define LP87565_EN_PIN_SELECT_GPIO3 BIT(5)
> +#define LP87565_EN_PIN_CTRL_GPIO2 BIT(4)
> +#define LP87565_EN_PIN_SELECT_GPIO2 BIT(3)
> +#define LP87565_GPIO3_SEL BIT(2)
> +#define LP87565_GPIO2_SEL BIT(1)
> +#define LP87565_GPIO1_SEL BIT(0)
> +
> +#define LP87565_GOIO3_OD BIT(6)
> +#define LP87565_GOIO2_OD BIT(5)
> +#define LP87565_GOIO1_OD BIT(4)
> +#define LP87565_GOIO3_DIR BIT(2)
> +#define LP87565_GOIO2_DIR BIT(1)
> +#define LP87565_GOIO1_DIR BIT(0)
> +
> +#define LP87565_GOIO3_IN BIT(2)
> +#define LP87565_GOIO2_IN BIT(1)
> +#define LP87565_GOIO1_IN BIT(0)
> +
> +#define LP87565_GOIO3_OUT BIT(2)
> +#define LP87565_GOIO2_OUT BIT(1)
> +#define LP87565_GOIO1_OUT BIT(0)
> +
> +/* Number of step-down converters available */
> +#define LP87565_NUM_BUCK 6
> +
> +enum LP87565_regulator_id {
> + /* BUCK's */
> + LP87565_BUCK_0,
> + LP87565_BUCK_1,
> + LP87565_BUCK_2,
> + LP87565_BUCK_3,
> + LP87565_BUCK_10,
> + LP87565_BUCK_23,
> +};
> +
> +/**
> + * struct LP87565 - state holder for the LP87565 driver
> + * @dev: struct device pointer for MFD device
> + * @rev: revision of the LP87565
> + * @dev_type: The device type for example lp87565-q1
> + * @lock: lock guarding the data structure
> + * @regmap: register map of the LP87565 PMIC
> + *
> + * Device data may be used to access the LP87565 chip
> + */
> +struct lp87565 {
> + struct device *dev;
> + u8 rev;
> + u8 dev_type;
> + struct regmap *regmap;
> +};
> +#endif /* __LINUX_MFD_LP87565_H */
>
[toc] | [prev] | [next] | [standalone]
| From | Keerthy <j-keerthy@ti.com> |
|---|---|
| Date | 2017-05-22 06:30 +0200 |
| Message-ID | <tJN8K-EY-5@gated-at.bofh.it> |
| In reply to | #1645689 |
On Friday 19 May 2017 09:12 PM, Andrew F. Davis wrote:
> On 05/19/2017 07:42 AM, Keerthy wrote:
>> The LP87565 chip is a power management IC for Portable Navigation Systems
>> and Tablet Computing devices. It contains the following components:
>>
>> - Configurable Bucks(Single and multi-phase).
>> - Configurable General Purpose Output Signals (GPO).
>>
>> The LP87565-Q1 variant device uses two 2-phase outputs configuration,
>> Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
>> output.
>>
>> Signed-off-by: Keerthy <j-keerthy@ti.com>
>> ---
>> Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
>> drivers/mfd/Kconfig | 14 ++
>> drivers/mfd/Makefile | 1 +
>> drivers/mfd/lp87565.c | 103 ++++++++
>> include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
>> 5 files changed, 437 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
>> create mode 100644 drivers/mfd/lp87565.c
>> create mode 100644 include/linux/mfd/lp87565.h
>>
>> diff --git a/Documentation/devicetree/bindings/mfd/lp87565.txt b/Documentation/devicetree/bindings/mfd/lp87565.txt
>> new file mode 100644
>> index 0000000..38a00a1
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/mfd/lp87565.txt
>> @@ -0,0 +1,44 @@
>> +TI LP873565 PMIC MFD driver
>> +
>> +Required properties:
>> + - compatible: "ti,lp87565", "ti,lp87565-q1"
>
> The of_device_id table in the driver only seems to match for
> "ti,lp87565-q1", not "ti,lp87565".
I will add both. ti,lp87565 is the generic one and the ti,lp87565-q1 is
a specific one with dual phase regulators.
>
>> + - reg: I2C slave address.
>> + - gpio-controller: Marks the device node as a GPIO Controller.
>> + - #gpio-cells: Should be two. The first cell is the pin number and
>> + the second cell is used to specify flags.
>> + See ../gpio/gpio.txt for more information.
>> + - xxx-in-supply: Phandle to parent supply node of each regulator
>> + populated under regulators node. xxx should match
>> + the supply_name populated in driver.
>> + - regulators: List of child nodes that specify the regulator
>> + initialization data.
>> +Example:
>> +
>> +lp87565: lp87565@60 {
>
> pmic: lp87565@60 {
>
> Is more standard.
Sure. I will change that.
Thanks for reviewing.
>
>> + compatible = "ti,lp87565-q1";
>> + reg = <0x60>;
>> + gpio-controller;
>> + #gpio-cells = <2>;
>> +
>> + buck10-in-supply =<&vsys_3v3>;
>> + buck23-in-supply =<&vsys_3v3>;
>> + regulators: regulators {
>> + buck10_reg: buck10 {
>> + /*VDD_MPU*/
>> + regulator-name = "buck10";
>> + regulator-min-microvolt = <850000>;
>> + regulator-max-microvolt = <1250000>;
>> + regulator-always-on;
>> + regulator-boot-on;
>> + };
>> +
>> + buck23_reg: buck23 {
>> + /* VDD_GPU*/
>> + regulator-name = "buck23";
>> + regulator-min-microvolt = <850000>;
>> + regulator-max-microvolt = <1250000>;
>> + regulator-boot-on;
>> + regulator-always-on;
>> + };
>> + };
>> +};
>> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
>> index 3eb5c93..5e884f3 100644
>> --- a/drivers/mfd/Kconfig
>> +++ b/drivers/mfd/Kconfig
>> @@ -1325,6 +1325,20 @@ config MFD_TI_LP873X
>> This driver can also be built as a module. If so, the module
>> will be called lp873x.
>>
>> +config MFD_TI_LP87565
>> + tristate "TI LP87565 Power Management IC"
>> + depends on I2C
>> + select MFD_CORE
>> + select REGMAP_I2C
>> + help
>> + If you say yes here then you get support for the LP87565 series of
>> + Power Management Integrated Circuits (PMIC).
>> + These include voltage regulators, thermal protection, configurable
>> + General Purpose Outputs (GPO) that are used in portable devices.
>> +
>> + This driver can also be built as a module. If so, the module
>> + will be called lp87565.
>> +
>> config MFD_TPS65218
>> tristate "TI TPS65218 Power Management chips"
>> depends on I2C
>> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
>> index c16bf1e..7edbe1b 100644
>> --- a/drivers/mfd/Makefile
>> +++ b/drivers/mfd/Makefile
>> @@ -25,6 +25,7 @@ obj-$(CONFIG_HTC_PASIC3) += htc-pasic3.o
>> obj-$(CONFIG_HTC_I2CPLD) += htc-i2cpld.o
>>
>> obj-$(CONFIG_MFD_TI_LP873X) += lp873x.o
>> +obj-$(CONFIG_MFD_TI_LP87565) += lp87565.o
>>
>> obj-$(CONFIG_MFD_DAVINCI_VOICECODEC) += davinci_voicecodec.o
>> obj-$(CONFIG_MFD_DM355EVM_MSP) += dm355evm_msp.o
>> diff --git a/drivers/mfd/lp87565.c b/drivers/mfd/lp87565.c
>> new file mode 100644
>> index 0000000..dff882f
>> --- /dev/null
>> +++ b/drivers/mfd/lp87565.c
>> @@ -0,0 +1,103 @@
>> +/*
>> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
>> + *
>> + * Author: Keerthy <j-keerthy@ti.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 version 2.
>> + *
>> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
>> + * kind, whether express or implied; without even the implied warranty
>> + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> + * GNU General Public License for more details.
>> + */
>> +
>> +#include <linux/interrupt.h>
>> +#include <linux/mfd/core.h>
>> +#include <linux/module.h>
>> +#include <linux/of_device.h>
>> +#include <linux/regmap.h>
>> +
>> +#include <linux/mfd/lp87565.h>
>> +
>> +static const struct regmap_config lp87565_regmap_config = {
>> + .reg_bits = 8,
>> + .val_bits = 8,
>> + .max_register = LP87565_REG_MAX,
>> +};
>> +
>> +static const struct mfd_cell lp87565_cells[] = {
>> + { .name = "lp87565-q1-regulator", },
>> + { .name = "lp87565-q1-gpio", },
>> +};
>> +
>> +static const struct of_device_id of_lp87565_match_table[] = {
>> + {
>> + .compatible = "ti,lp87565-q1",
>> + .data = (void *)LP87565_DEVICE_TYPE_LP87565_Q1,
>> + },
>> + {}
>> +};
>> +MODULE_DEVICE_TABLE(of, of_lp87565_match_table);
>> +
>> +static int lp87565_probe(struct i2c_client *client,
>> + const struct i2c_device_id *ids)
>> +{
>> + struct lp87565 *lp87565;
>> + const struct of_device_id *of_id;
>> + int ret;
>> + unsigned int otpid;
>> +
>> + lp87565 = devm_kzalloc(&client->dev, sizeof(*lp87565), GFP_KERNEL);
>> + if (!lp87565)
>> + return -ENOMEM;
>> +
>> + lp87565->dev = &client->dev;
>> +
>> + lp87565->regmap = devm_regmap_init_i2c(client, &lp87565_regmap_config);
>> + if (IS_ERR(lp87565->regmap)) {
>> + ret = PTR_ERR(lp87565->regmap);
>> + dev_err(lp87565->dev,
>> + "Failed to initialize register map: %d\n", ret);
>> + return ret;
>> + }
>> +
>> + ret = regmap_read(lp87565->regmap, LP87565_REG_OTP_REV, &otpid);
>> + if (ret) {
>> + dev_err(lp87565->dev, "Failed to read OTP ID\n");
>> + return ret;
>> + }
>> +
>> + lp87565->rev = otpid & LP87565_OTP_REV_OTP_ID;
>> + of_id = of_match_device(of_lp87565_match_table, &client->dev);
>> + if (of_id)
>> + lp87565->dev_type = (enum lp87565_device_type)of_id->data;
>> +
>> + i2c_set_clientdata(client, lp87565);
>> +
>> + ret = mfd_add_devices(lp87565->dev, PLATFORM_DEVID_AUTO, lp87565_cells,
>> + ARRAY_SIZE(lp87565_cells), NULL, 0, NULL);
>> +
>> + return ret;
>> +}
>> +
>> +static const struct i2c_device_id lp87565_id_table[] = {
>> + { "lp87565-q1", 0 },
>> + { },
>> +};
>> +MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
>> +
>> +static struct i2c_driver lp87565_driver = {
>> + .driver = {
>> + .name = "lp87565",
>> + .of_match_table = of_lp87565_match_table,
>> + },
>> + .probe = lp87565_probe,
>> + .id_table = lp87565_id_table,
>> +};
>> +module_i2c_driver(lp87565_driver);
>> +
>> +MODULE_AUTHOR("J Keerthy <j-keerthy@ti.com>");
>> +MODULE_DESCRIPTION("lp87565 chip family Multi-Function Device driver");
>> +MODULE_LICENSE("GPL v2");
>> diff --git a/include/linux/mfd/lp87565.h b/include/linux/mfd/lp87565.h
>> new file mode 100644
>> index 0000000..6112365
>> --- /dev/null
>> +++ b/include/linux/mfd/lp87565.h
>> @@ -0,0 +1,275 @@
>> +/*
>> + * Functions to access LP87565 power management chip.
>> + *
>> + * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.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 version 2.
>> + *
>> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
>> + * kind, whether express or implied; 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_LP87565_H
>> +#define __LINUX_MFD_LP87565_H
>> +
>> +#include <linux/i2c.h>
>> +#include <linux/regulator/driver.h>
>> +#include <linux/regulator/machine.h>
>> +
>> +enum lp87565_device_type {
>> + LP87565_DEVICE_TYPE_UNKNOWN = 0,
>> + LP87565_DEVICE_TYPE_LP87565_Q1,
>> +};
>> +
>> +/* All register addresses */
>> +#define LP87565_REG_DEV_REV 0X00
>> +#define LP87565_REG_OTP_REV 0X01
>> +#define LP87565_REG_BUCK0_CTRL_1 0X02
>> +#define LP87565_REG_BUCK0_CTRL_2 0X03
>> +
>> +#define LP87565_REG_BUCK1_CTRL_1 0X04
>> +#define LP87565_REG_BUCK1_CTRL_2 0X05
>> +
>> +#define LP87565_REG_BUCK2_CTRL_1 0X06
>> +#define LP87565_REG_BUCK2_CTRL_2 0X07
>> +
>> +#define LP87565_REG_BUCK3_CTRL_1 0X08
>> +#define LP87565_REG_BUCK3_CTRL_2 0X09
>> +
>> +#define LP87565_REG_BUCK0_VOUT 0X0A
>> +#define LP87565_REG_BUCK0_FLOOR_VOUT 0X0B
>> +
>> +#define LP87565_REG_BUCK1_VOUT 0X0C
>> +#define LP87565_REG_BUCK1_FLOOR_VOUT 0X0D
>> +
>> +#define LP87565_REG_BUCK2_VOUT 0X0E
>> +#define LP87565_REG_BUCK2_FLOOR_VOUT 0X0F
>> +
>> +#define LP87565_REG_BUCK3_VOUT 0X10
>> +#define LP87565_REG_BUCK3_FLOOR_VOUT 0X11
>> +
>> +#define LP87565_REG_BUCK0_DELAY 0X12
>> +#define LP87565_REG_BUCK1_DELAY 0X13
>> +
>> +#define LP87565_REG_BUCK2_DELAY 0X14
>> +#define LP87565_REG_BUCK3_DELAY 0X15
>> +
>> +#define LP87565_REG_GPO2_DELAY 0X16
>> +#define LP87565_REG_GPO3_DELAY 0X17
>> +#define LP87565_REG_RESET 0X18
>> +#define LP87565_REG_CONFIG 0X19
>> +
>> +#define LP87565_REG_INT_TOP_1 0X1A
>> +#define LP87565_REG_INT_TOP_2 0X1B
>> +
>> +#define LP87565_REG_INT_BUCK_0_1 0X1C
>> +#define LP87565_REG_INT_BUCK_2_3 0X1D
>> +#define LP87565_REG_TOP_STAT 0X1E
>> +#define LP87565_REG_BUCK_0_1_STAT 0X1F
>> +#define LP87565_REG_BUCK_2_3_STAT 0x20
>> +
>> +#define LP87565_REG_TOP_MASK_1 0x21
>> +#define LP87565_REG_TOP_MASK_2 0x22
>> +
>> +#define LP87565_REG_BUCK_0_1_MASK 0x23
>> +#define LP87565_REG_BUCK_2_3_MASK 0x24
>> +#define LP87565_REG_SEL_I_LOAD 0x25
>> +
>> +#define LP87565_REG_I_LOAD_2 0x26
>> +#define LP87565_REG_I_LOAD_1 0x27
>> +
>> +#define LP87565_REG_PGOOD_CTRL1 0x28
>> +#define LP87565_REG_PGOOD_CTRL2 0x29
>> +#define LP87565_REG_PGOOD_FLT 0x2A
>> +#define LP87565_REG_PLL_CTRL 0x2B
>> +#define LP87565_REG_PIN_FUNCTION 0x2C
>> +#define LP87565_REG_GPIO_CONFIG 0x2D
>> +#define LP87565_REG_GPIO_IN 0x2E
>> +#define LP87565_REG_GPIO_OUT 0x2F
>> +
>> +#define LP87565_REG_MAX LP87565_REG_GPIO_OUT
>> +
>> +/* Register field definitions */
>> +#define LP87565_DEV_REV_DEV_ID 0xC0
>> +#define LP87565_DEV_REV_ALL_LAYER 0x30
>> +#define LP87565_DEV_REV_METAL_LAYER 0x0F
>> +
>> +#define LP87565_OTP_REV_OTP_ID 0xFF
>> +
>> +#define LP87565_BUCK_CTRL_1_EN BIT(7)
>> +#define LP87565_BUCK_CTRL_1_EN_PIN_CTRL BIT(6)
>> +#define LP87565_BUCK_CTRL_1_PIN_SELECT_EN 0x30
>> +
>> +#define LP87565_BUCK_CTRL_1_ROOF_FLOOR_EN BIT(3)
>> +#define LP87565_BUCK_CTRL_1_RDIS_EN BIT(2)
>> +#define LP87565_BUCK_CTRL_1_FPWM BIT(1)
>> +/* Bit0 is reserved for BUCK1 and BUCK3 and valid only for BUCK0 and BUCK2 */
>> +#define LP87565_BUCK_CTRL_1_FPWM_MP_0_2 BIT(0)
>> +
>> +#define LP87565_BUCK_CTRL_2_ILIM 0x38
>> +#define LP87565_BUCK_CTRL_2_SLEW_RATE 0x07
>> +
>> +#define LP87565_BUCK_VSET 0xFF
>> +#define LP87565_BUCK_FLOOR_VSET 0xFF
>> +
>> +#define LP87565_BUCK_SHUTDOWN_DELAY 0xF0
>> +#define LP87565_BUCK_STARTUP_DELAY 0x0F
>> +
>> +#define LP87565_GPIO_SHUTDOWN_DELAY 0xF0
>> +#define LP87565_GPIO_STARTUP_DELAY 0x0F
>> +
>> +#define LP87565_RESET_SW_RESET BIT(0)
>> +
>> +#define LP87565_CONFIG_DOUBLE_DELAY BIT(7)
>> +#define LP87565_CONFIG_CLKIN_PD BIT(6)
>> +#define LP87565_CONFIG_EN4_PD BIT(5)
>> +#define LP87565_CONFIG_EN3_PD BIT(4)
>> +#define LP87565_CONFIG_TDIE_WARN_LEVEL BIT(3)
>> +#define LP87565_CONFIG_EN2_PD BIT(2)
>> +#define LP87565_CONFIG_EN1_PD BIT(1)
>> +
>> +#define LP87565_INT_GPIO BIT(7)
>> +#define LP87565_INT_BUCK23 BIT(6)
>> +#define LP87565_INT_BUCK01 BIT(5)
>> +#define LP87565_NO_SYNC_CLK BIT(4)
>> +#define LP87565_TDIE_SD BIT(3)
>> +#define LP87565_TDIE_WARN BIT(2)
>> +#define LP87565_INT_OVP BIT(1)
>> +#define LP87565_I_LOAD_READY BIT(0)
>> +
>> +#define LP87565_INT_TOP2_RESET_REG BIT(0)
>> +
>> +#define LP87565_BUCK1_PG_INT BIT(6)
>> +#define LP87565_BUCK1_SC_INT BIT(5)
>> +#define LP87565_BUCK1_ILIM_INT BIT(4)
>> +#define LP87565_BUCK0_PG_INT BIT(2)
>> +#define LP87565_BUCK0_SC_INT BIT(1)
>> +#define LP87565_BUCK0_ILIM_INT BIT(0)
>> +
>> +#define LP87565_BUCK3_PG_INT BIT(6)
>> +#define LP87565_BUCK3_SC_INT BIT(5)
>> +#define LP87565_BUCK3_ILIM_INT BIT(4)
>> +#define LP87565_BUCK2_PG_INT BIT(2)
>> +#define LP87565_BUCK2_SC_INT BIT(1)
>> +#define LP87565_BUCK2_ILIM_INT BIT(0)
>> +
>> +#define LP87565_SYNC_CLK_STAT BIT(4)
>> +#define LP87565_TDIE_SD_STAT BIT(3)
>> +#define LP87565_TDIE_WARN_STAT BIT(2)
>> +#define LP87565_OVP_STAT BIT(1)
>> +
>> +#define LP87565_BUCK1_STAT BIT(7)
>> +#define LP87565_BUCK1_PG_STAT BIT(6)
>> +#define LP87565_BUCK1_ILIM_STAT BIT(4)
>> +#define LP87565_BUCK0_STAT BIT(3)
>> +#define LP87565_BUCK0_PG_STAT BIT(2)
>> +#define LP87565_BUCK0_ILIM_STAT BIT(0)
>> +
>> +#define LP87565_BUCK3_STAT BIT(7)
>> +#define LP87565_BUCK3_PG_STAT BIT(6)
>> +#define LP87565_BUCK3_ILIM_STAT BIT(4)
>> +#define LP87565_BUCK2_STAT BIT(3)
>> +#define LP87565_BUCK2_PG_STAT BIT(2)
>> +#define LP87565_BUCK2_ILIM_STAT BIT(0)
>> +
>> +#define LPL87565_GPIO_MASK BIT(7)
>> +#define LPL87565_SYNC_CLK_MASK BIT(4)
>> +#define LPL87565_TDIE_WARN_MASK BIT(2)
>> +#define LPL87565_I_LOAD_READY_MASK BIT(0)
>> +
>> +#define LPL87565_RESET_REG_MASK BIT(0)
>> +
>> +#define LPL87565_BUCK1_PG_MASK BIT(6)
>> +#define LPL87565_BUCK1_ILIM_MASK BIT(4)
>> +#define LPL87565_BUCK0_PG_MASK BIT(2)
>> +#define LPL87565_BUCK0_ILIM_MASK BIT(0)
>> +
>> +#define LPL87565_BUCK3_PG_MASK BIT(6)
>> +#define LPL87565_BUCK3_ILIM_MASK BIT(4)
>> +#define LPL87565_BUCK2_PG_MASK BIT(2)
>> +#define LPL87565_BUCK2_ILIM_MASK BIT(0)
>> +
>> +#define LP87565_LOAD_CURRENT_BUCK_SELECT 0x3
>> +
>> +#define LP87565_I_LOAD2_BUCK_LOAD_CURRENT 0x3
>> +#define LP87565_I_LOAD1_BUCK_LOAD_CURRENT 0xFF
>> +
>> +#define LP87565_PG3_SEL 0xC0
>> +#define LP87565_PG2_SEL 0x30
>> +#define LP87565_PG1_SEL 0x0C
>> +#define LP87565_PG0_SEL 0x03
>> +
>> +#define LP87565_HALF_DAY BIT(7)
>> +#define LP87565_EN_PG0_NINT BIT(6)
>> +#define LP87565_PGOOD_SET_DELAY BIT(5)
>> +#define LP87565_EN_PGFLT_STAT BIT(4)
>> +#define LP87565_PGOOD_WINDOW BIT(2)
>> +#define LP87565_PGOOD_OD BIT(1)
>> +#define LP87565_PGOOD_POL BIT(0)
>> +
>> +#define LP87565_PG3_FLT BIT(3)
>> +#define LP87565_PG2_FLT BIT(2)
>> +#define LP87565_PG1_FLT BIT(1)
>> +#define LP87565_PG0_FLT BIT(0)
>> +
>> +#define LP87565_PLL_MODE 0xC0
>> +#define LP87565_EXT_CLK_FREQ 0x1F
>> +
>> +#define LP87565_EN_SPREAD_SPEC BIT(7)
>> +#define LP87565_EN_PIN_CTRL_GPIO3 BIT(6)
>> +#define LP87565_EN_PIN_SELECT_GPIO3 BIT(5)
>> +#define LP87565_EN_PIN_CTRL_GPIO2 BIT(4)
>> +#define LP87565_EN_PIN_SELECT_GPIO2 BIT(3)
>> +#define LP87565_GPIO3_SEL BIT(2)
>> +#define LP87565_GPIO2_SEL BIT(1)
>> +#define LP87565_GPIO1_SEL BIT(0)
>> +
>> +#define LP87565_GOIO3_OD BIT(6)
>> +#define LP87565_GOIO2_OD BIT(5)
>> +#define LP87565_GOIO1_OD BIT(4)
>> +#define LP87565_GOIO3_DIR BIT(2)
>> +#define LP87565_GOIO2_DIR BIT(1)
>> +#define LP87565_GOIO1_DIR BIT(0)
>> +
>> +#define LP87565_GOIO3_IN BIT(2)
>> +#define LP87565_GOIO2_IN BIT(1)
>> +#define LP87565_GOIO1_IN BIT(0)
>> +
>> +#define LP87565_GOIO3_OUT BIT(2)
>> +#define LP87565_GOIO2_OUT BIT(1)
>> +#define LP87565_GOIO1_OUT BIT(0)
>> +
>> +/* Number of step-down converters available */
>> +#define LP87565_NUM_BUCK 6
>> +
>> +enum LP87565_regulator_id {
>> + /* BUCK's */
>> + LP87565_BUCK_0,
>> + LP87565_BUCK_1,
>> + LP87565_BUCK_2,
>> + LP87565_BUCK_3,
>> + LP87565_BUCK_10,
>> + LP87565_BUCK_23,
>> +};
>> +
>> +/**
>> + * struct LP87565 - state holder for the LP87565 driver
>> + * @dev: struct device pointer for MFD device
>> + * @rev: revision of the LP87565
>> + * @dev_type: The device type for example lp87565-q1
>> + * @lock: lock guarding the data structure
>> + * @regmap: register map of the LP87565 PMIC
>> + *
>> + * Device data may be used to access the LP87565 chip
>> + */
>> +struct lp87565 {
>> + struct device *dev;
>> + u8 rev;
>> + u8 dev_type;
>> + struct regmap *regmap;
>> +};
>> +#endif /* __LINUX_MFD_LP87565_H */
>>
[toc] | [prev] | [next] | [standalone]
| From | Keerthy <j-keerthy@ti.com> |
|---|---|
| Date | 2017-05-23 05:10 +0200 |
| Message-ID | <tK8mR-5Uk-9@gated-at.bofh.it> |
| In reply to | #1646505 |
On Monday 22 May 2017 09:53 AM, Keerthy wrote:
>
>
> On Friday 19 May 2017 09:12 PM, Andrew F. Davis wrote:
>> On 05/19/2017 07:42 AM, Keerthy wrote:
>>> The LP87565 chip is a power management IC for Portable Navigation Systems
>>> and Tablet Computing devices. It contains the following components:
>>>
>>> - Configurable Bucks(Single and multi-phase).
>>> - Configurable General Purpose Output Signals (GPO).
>>>
>>> The LP87565-Q1 variant device uses two 2-phase outputs configuration,
>>> Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
>>> output.
>>>
>>> Signed-off-by: Keerthy <j-keerthy@ti.com>
>>> ---
>>> Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
>>> drivers/mfd/Kconfig | 14 ++
>>> drivers/mfd/Makefile | 1 +
>>> drivers/mfd/lp87565.c | 103 ++++++++
>>> include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
>>> 5 files changed, 437 insertions(+)
>>> create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
>>> create mode 100644 drivers/mfd/lp87565.c
>>> create mode 100644 include/linux/mfd/lp87565.h
>>>
>>> diff --git a/Documentation/devicetree/bindings/mfd/lp87565.txt b/Documentation/devicetree/bindings/mfd/lp87565.txt
>>> new file mode 100644
>>> index 0000000..38a00a1
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/mfd/lp87565.txt
>>> @@ -0,0 +1,44 @@
>>> +TI LP873565 PMIC MFD driver
>>> +
>>> +Required properties:
>>> + - compatible: "ti,lp87565", "ti,lp87565-q1"
>>
>> The of_device_id table in the driver only seems to match for
>> "ti,lp87565-q1", not "ti,lp87565".
>
> I will add both. ti,lp87565 is the generic one and the ti,lp87565-q1 is
> a specific one with dual phase regulators.
>
>>
>>> + - reg: I2C slave address.
>>> + - gpio-controller: Marks the device node as a GPIO Controller.
>>> + - #gpio-cells: Should be two. The first cell is the pin number and
>>> + the second cell is used to specify flags.
>>> + See ../gpio/gpio.txt for more information.
>>> + - xxx-in-supply: Phandle to parent supply node of each regulator
>>> + populated under regulators node. xxx should match
>>> + the supply_name populated in driver.
>>> + - regulators: List of child nodes that specify the regulator
>>> + initialization data.
>>> +Example:
>>> +
>>> +lp87565: lp87565@60 {
>>
>> pmic: lp87565@60 {
>>
>> Is more standard.
>
> Sure. I will change that.
>
> Thanks for reviewing.
Andrew,
In case there are 2 PMICs on a board this would be confusing.
Instead i would prefer to use:
lp87565_pmic: lp87565@60 {
There are already existing entries of that form.
Thanks,
Keerthy
>
>>
>>> + compatible = "ti,lp87565-q1";
>>> + reg = <0x60>;
>>> + gpio-controller;
>>> + #gpio-cells = <2>;
>>> +
>>> + buck10-in-supply =<&vsys_3v3>;
>>> + buck23-in-supply =<&vsys_3v3>;
>>> + regulators: regulators {
>>> + buck10_reg: buck10 {
>>> + /*VDD_MPU*/
>>> + regulator-name = "buck10";
>>> + regulator-min-microvolt = <850000>;
>>> + regulator-max-microvolt = <1250000>;
>>> + regulator-always-on;
>>> + regulator-boot-on;
>>> + };
>>> +
>>> + buck23_reg: buck23 {
>>> + /* VDD_GPU*/
>>> + regulator-name = "buck23";
>>> + regulator-min-microvolt = <850000>;
>>> + regulator-max-microvolt = <1250000>;
>>> + regulator-boot-on;
>>> + regulator-always-on;
>>> + };
>>> + };
>>> +};
>>> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
>>> index 3eb5c93..5e884f3 100644
>>> --- a/drivers/mfd/Kconfig
>>> +++ b/drivers/mfd/Kconfig
>>> @@ -1325,6 +1325,20 @@ config MFD_TI_LP873X
>>> This driver can also be built as a module. If so, the module
>>> will be called lp873x.
>>>
>>> +config MFD_TI_LP87565
>>> + tristate "TI LP87565 Power Management IC"
>>> + depends on I2C
>>> + select MFD_CORE
>>> + select REGMAP_I2C
>>> + help
>>> + If you say yes here then you get support for the LP87565 series of
>>> + Power Management Integrated Circuits (PMIC).
>>> + These include voltage regulators, thermal protection, configurable
>>> + General Purpose Outputs (GPO) that are used in portable devices.
>>> +
>>> + This driver can also be built as a module. If so, the module
>>> + will be called lp87565.
>>> +
>>> config MFD_TPS65218
>>> tristate "TI TPS65218 Power Management chips"
>>> depends on I2C
>>> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
>>> index c16bf1e..7edbe1b 100644
>>> --- a/drivers/mfd/Makefile
>>> +++ b/drivers/mfd/Makefile
>>> @@ -25,6 +25,7 @@ obj-$(CONFIG_HTC_PASIC3) += htc-pasic3.o
>>> obj-$(CONFIG_HTC_I2CPLD) += htc-i2cpld.o
>>>
>>> obj-$(CONFIG_MFD_TI_LP873X) += lp873x.o
>>> +obj-$(CONFIG_MFD_TI_LP87565) += lp87565.o
>>>
>>> obj-$(CONFIG_MFD_DAVINCI_VOICECODEC) += davinci_voicecodec.o
>>> obj-$(CONFIG_MFD_DM355EVM_MSP) += dm355evm_msp.o
>>> diff --git a/drivers/mfd/lp87565.c b/drivers/mfd/lp87565.c
>>> new file mode 100644
>>> index 0000000..dff882f
>>> --- /dev/null
>>> +++ b/drivers/mfd/lp87565.c
>>> @@ -0,0 +1,103 @@
>>> +/*
>>> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
>>> + *
>>> + * Author: Keerthy <j-keerthy@ti.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 version 2.
>>> + *
>>> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
>>> + * kind, whether express or implied; without even the implied warranty
>>> + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>>> + * GNU General Public License for more details.
>>> + */
>>> +
>>> +#include <linux/interrupt.h>
>>> +#include <linux/mfd/core.h>
>>> +#include <linux/module.h>
>>> +#include <linux/of_device.h>
>>> +#include <linux/regmap.h>
>>> +
>>> +#include <linux/mfd/lp87565.h>
>>> +
>>> +static const struct regmap_config lp87565_regmap_config = {
>>> + .reg_bits = 8,
>>> + .val_bits = 8,
>>> + .max_register = LP87565_REG_MAX,
>>> +};
>>> +
>>> +static const struct mfd_cell lp87565_cells[] = {
>>> + { .name = "lp87565-q1-regulator", },
>>> + { .name = "lp87565-q1-gpio", },
>>> +};
>>> +
>>> +static const struct of_device_id of_lp87565_match_table[] = {
>>> + {
>>> + .compatible = "ti,lp87565-q1",
>>> + .data = (void *)LP87565_DEVICE_TYPE_LP87565_Q1,
>>> + },
>>> + {}
>>> +};
>>> +MODULE_DEVICE_TABLE(of, of_lp87565_match_table);
>>> +
>>> +static int lp87565_probe(struct i2c_client *client,
>>> + const struct i2c_device_id *ids)
>>> +{
>>> + struct lp87565 *lp87565;
>>> + const struct of_device_id *of_id;
>>> + int ret;
>>> + unsigned int otpid;
>>> +
>>> + lp87565 = devm_kzalloc(&client->dev, sizeof(*lp87565), GFP_KERNEL);
>>> + if (!lp87565)
>>> + return -ENOMEM;
>>> +
>>> + lp87565->dev = &client->dev;
>>> +
>>> + lp87565->regmap = devm_regmap_init_i2c(client, &lp87565_regmap_config);
>>> + if (IS_ERR(lp87565->regmap)) {
>>> + ret = PTR_ERR(lp87565->regmap);
>>> + dev_err(lp87565->dev,
>>> + "Failed to initialize register map: %d\n", ret);
>>> + return ret;
>>> + }
>>> +
>>> + ret = regmap_read(lp87565->regmap, LP87565_REG_OTP_REV, &otpid);
>>> + if (ret) {
>>> + dev_err(lp87565->dev, "Failed to read OTP ID\n");
>>> + return ret;
>>> + }
>>> +
>>> + lp87565->rev = otpid & LP87565_OTP_REV_OTP_ID;
>>> + of_id = of_match_device(of_lp87565_match_table, &client->dev);
>>> + if (of_id)
>>> + lp87565->dev_type = (enum lp87565_device_type)of_id->data;
>>> +
>>> + i2c_set_clientdata(client, lp87565);
>>> +
>>> + ret = mfd_add_devices(lp87565->dev, PLATFORM_DEVID_AUTO, lp87565_cells,
>>> + ARRAY_SIZE(lp87565_cells), NULL, 0, NULL);
>>> +
>>> + return ret;
>>> +}
>>> +
>>> +static const struct i2c_device_id lp87565_id_table[] = {
>>> + { "lp87565-q1", 0 },
>>> + { },
>>> +};
>>> +MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
>>> +
>>> +static struct i2c_driver lp87565_driver = {
>>> + .driver = {
>>> + .name = "lp87565",
>>> + .of_match_table = of_lp87565_match_table,
>>> + },
>>> + .probe = lp87565_probe,
>>> + .id_table = lp87565_id_table,
>>> +};
>>> +module_i2c_driver(lp87565_driver);
>>> +
>>> +MODULE_AUTHOR("J Keerthy <j-keerthy@ti.com>");
>>> +MODULE_DESCRIPTION("lp87565 chip family Multi-Function Device driver");
>>> +MODULE_LICENSE("GPL v2");
>>> diff --git a/include/linux/mfd/lp87565.h b/include/linux/mfd/lp87565.h
>>> new file mode 100644
>>> index 0000000..6112365
>>> --- /dev/null
>>> +++ b/include/linux/mfd/lp87565.h
>>> @@ -0,0 +1,275 @@
>>> +/*
>>> + * Functions to access LP87565 power management chip.
>>> + *
>>> + * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.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 version 2.
>>> + *
>>> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
>>> + * kind, whether express or implied; 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_LP87565_H
>>> +#define __LINUX_MFD_LP87565_H
>>> +
>>> +#include <linux/i2c.h>
>>> +#include <linux/regulator/driver.h>
>>> +#include <linux/regulator/machine.h>
>>> +
>>> +enum lp87565_device_type {
>>> + LP87565_DEVICE_TYPE_UNKNOWN = 0,
>>> + LP87565_DEVICE_TYPE_LP87565_Q1,
>>> +};
>>> +
>>> +/* All register addresses */
>>> +#define LP87565_REG_DEV_REV 0X00
>>> +#define LP87565_REG_OTP_REV 0X01
>>> +#define LP87565_REG_BUCK0_CTRL_1 0X02
>>> +#define LP87565_REG_BUCK0_CTRL_2 0X03
>>> +
>>> +#define LP87565_REG_BUCK1_CTRL_1 0X04
>>> +#define LP87565_REG_BUCK1_CTRL_2 0X05
>>> +
>>> +#define LP87565_REG_BUCK2_CTRL_1 0X06
>>> +#define LP87565_REG_BUCK2_CTRL_2 0X07
>>> +
>>> +#define LP87565_REG_BUCK3_CTRL_1 0X08
>>> +#define LP87565_REG_BUCK3_CTRL_2 0X09
>>> +
>>> +#define LP87565_REG_BUCK0_VOUT 0X0A
>>> +#define LP87565_REG_BUCK0_FLOOR_VOUT 0X0B
>>> +
>>> +#define LP87565_REG_BUCK1_VOUT 0X0C
>>> +#define LP87565_REG_BUCK1_FLOOR_VOUT 0X0D
>>> +
>>> +#define LP87565_REG_BUCK2_VOUT 0X0E
>>> +#define LP87565_REG_BUCK2_FLOOR_VOUT 0X0F
>>> +
>>> +#define LP87565_REG_BUCK3_VOUT 0X10
>>> +#define LP87565_REG_BUCK3_FLOOR_VOUT 0X11
>>> +
>>> +#define LP87565_REG_BUCK0_DELAY 0X12
>>> +#define LP87565_REG_BUCK1_DELAY 0X13
>>> +
>>> +#define LP87565_REG_BUCK2_DELAY 0X14
>>> +#define LP87565_REG_BUCK3_DELAY 0X15
>>> +
>>> +#define LP87565_REG_GPO2_DELAY 0X16
>>> +#define LP87565_REG_GPO3_DELAY 0X17
>>> +#define LP87565_REG_RESET 0X18
>>> +#define LP87565_REG_CONFIG 0X19
>>> +
>>> +#define LP87565_REG_INT_TOP_1 0X1A
>>> +#define LP87565_REG_INT_TOP_2 0X1B
>>> +
>>> +#define LP87565_REG_INT_BUCK_0_1 0X1C
>>> +#define LP87565_REG_INT_BUCK_2_3 0X1D
>>> +#define LP87565_REG_TOP_STAT 0X1E
>>> +#define LP87565_REG_BUCK_0_1_STAT 0X1F
>>> +#define LP87565_REG_BUCK_2_3_STAT 0x20
>>> +
>>> +#define LP87565_REG_TOP_MASK_1 0x21
>>> +#define LP87565_REG_TOP_MASK_2 0x22
>>> +
>>> +#define LP87565_REG_BUCK_0_1_MASK 0x23
>>> +#define LP87565_REG_BUCK_2_3_MASK 0x24
>>> +#define LP87565_REG_SEL_I_LOAD 0x25
>>> +
>>> +#define LP87565_REG_I_LOAD_2 0x26
>>> +#define LP87565_REG_I_LOAD_1 0x27
>>> +
>>> +#define LP87565_REG_PGOOD_CTRL1 0x28
>>> +#define LP87565_REG_PGOOD_CTRL2 0x29
>>> +#define LP87565_REG_PGOOD_FLT 0x2A
>>> +#define LP87565_REG_PLL_CTRL 0x2B
>>> +#define LP87565_REG_PIN_FUNCTION 0x2C
>>> +#define LP87565_REG_GPIO_CONFIG 0x2D
>>> +#define LP87565_REG_GPIO_IN 0x2E
>>> +#define LP87565_REG_GPIO_OUT 0x2F
>>> +
>>> +#define LP87565_REG_MAX LP87565_REG_GPIO_OUT
>>> +
>>> +/* Register field definitions */
>>> +#define LP87565_DEV_REV_DEV_ID 0xC0
>>> +#define LP87565_DEV_REV_ALL_LAYER 0x30
>>> +#define LP87565_DEV_REV_METAL_LAYER 0x0F
>>> +
>>> +#define LP87565_OTP_REV_OTP_ID 0xFF
>>> +
>>> +#define LP87565_BUCK_CTRL_1_EN BIT(7)
>>> +#define LP87565_BUCK_CTRL_1_EN_PIN_CTRL BIT(6)
>>> +#define LP87565_BUCK_CTRL_1_PIN_SELECT_EN 0x30
>>> +
>>> +#define LP87565_BUCK_CTRL_1_ROOF_FLOOR_EN BIT(3)
>>> +#define LP87565_BUCK_CTRL_1_RDIS_EN BIT(2)
>>> +#define LP87565_BUCK_CTRL_1_FPWM BIT(1)
>>> +/* Bit0 is reserved for BUCK1 and BUCK3 and valid only for BUCK0 and BUCK2 */
>>> +#define LP87565_BUCK_CTRL_1_FPWM_MP_0_2 BIT(0)
>>> +
>>> +#define LP87565_BUCK_CTRL_2_ILIM 0x38
>>> +#define LP87565_BUCK_CTRL_2_SLEW_RATE 0x07
>>> +
>>> +#define LP87565_BUCK_VSET 0xFF
>>> +#define LP87565_BUCK_FLOOR_VSET 0xFF
>>> +
>>> +#define LP87565_BUCK_SHUTDOWN_DELAY 0xF0
>>> +#define LP87565_BUCK_STARTUP_DELAY 0x0F
>>> +
>>> +#define LP87565_GPIO_SHUTDOWN_DELAY 0xF0
>>> +#define LP87565_GPIO_STARTUP_DELAY 0x0F
>>> +
>>> +#define LP87565_RESET_SW_RESET BIT(0)
>>> +
>>> +#define LP87565_CONFIG_DOUBLE_DELAY BIT(7)
>>> +#define LP87565_CONFIG_CLKIN_PD BIT(6)
>>> +#define LP87565_CONFIG_EN4_PD BIT(5)
>>> +#define LP87565_CONFIG_EN3_PD BIT(4)
>>> +#define LP87565_CONFIG_TDIE_WARN_LEVEL BIT(3)
>>> +#define LP87565_CONFIG_EN2_PD BIT(2)
>>> +#define LP87565_CONFIG_EN1_PD BIT(1)
>>> +
>>> +#define LP87565_INT_GPIO BIT(7)
>>> +#define LP87565_INT_BUCK23 BIT(6)
>>> +#define LP87565_INT_BUCK01 BIT(5)
>>> +#define LP87565_NO_SYNC_CLK BIT(4)
>>> +#define LP87565_TDIE_SD BIT(3)
>>> +#define LP87565_TDIE_WARN BIT(2)
>>> +#define LP87565_INT_OVP BIT(1)
>>> +#define LP87565_I_LOAD_READY BIT(0)
>>> +
>>> +#define LP87565_INT_TOP2_RESET_REG BIT(0)
>>> +
>>> +#define LP87565_BUCK1_PG_INT BIT(6)
>>> +#define LP87565_BUCK1_SC_INT BIT(5)
>>> +#define LP87565_BUCK1_ILIM_INT BIT(4)
>>> +#define LP87565_BUCK0_PG_INT BIT(2)
>>> +#define LP87565_BUCK0_SC_INT BIT(1)
>>> +#define LP87565_BUCK0_ILIM_INT BIT(0)
>>> +
>>> +#define LP87565_BUCK3_PG_INT BIT(6)
>>> +#define LP87565_BUCK3_SC_INT BIT(5)
>>> +#define LP87565_BUCK3_ILIM_INT BIT(4)
>>> +#define LP87565_BUCK2_PG_INT BIT(2)
>>> +#define LP87565_BUCK2_SC_INT BIT(1)
>>> +#define LP87565_BUCK2_ILIM_INT BIT(0)
>>> +
>>> +#define LP87565_SYNC_CLK_STAT BIT(4)
>>> +#define LP87565_TDIE_SD_STAT BIT(3)
>>> +#define LP87565_TDIE_WARN_STAT BIT(2)
>>> +#define LP87565_OVP_STAT BIT(1)
>>> +
>>> +#define LP87565_BUCK1_STAT BIT(7)
>>> +#define LP87565_BUCK1_PG_STAT BIT(6)
>>> +#define LP87565_BUCK1_ILIM_STAT BIT(4)
>>> +#define LP87565_BUCK0_STAT BIT(3)
>>> +#define LP87565_BUCK0_PG_STAT BIT(2)
>>> +#define LP87565_BUCK0_ILIM_STAT BIT(0)
>>> +
>>> +#define LP87565_BUCK3_STAT BIT(7)
>>> +#define LP87565_BUCK3_PG_STAT BIT(6)
>>> +#define LP87565_BUCK3_ILIM_STAT BIT(4)
>>> +#define LP87565_BUCK2_STAT BIT(3)
>>> +#define LP87565_BUCK2_PG_STAT BIT(2)
>>> +#define LP87565_BUCK2_ILIM_STAT BIT(0)
>>> +
>>> +#define LPL87565_GPIO_MASK BIT(7)
>>> +#define LPL87565_SYNC_CLK_MASK BIT(4)
>>> +#define LPL87565_TDIE_WARN_MASK BIT(2)
>>> +#define LPL87565_I_LOAD_READY_MASK BIT(0)
>>> +
>>> +#define LPL87565_RESET_REG_MASK BIT(0)
>>> +
>>> +#define LPL87565_BUCK1_PG_MASK BIT(6)
>>> +#define LPL87565_BUCK1_ILIM_MASK BIT(4)
>>> +#define LPL87565_BUCK0_PG_MASK BIT(2)
>>> +#define LPL87565_BUCK0_ILIM_MASK BIT(0)
>>> +
>>> +#define LPL87565_BUCK3_PG_MASK BIT(6)
>>> +#define LPL87565_BUCK3_ILIM_MASK BIT(4)
>>> +#define LPL87565_BUCK2_PG_MASK BIT(2)
>>> +#define LPL87565_BUCK2_ILIM_MASK BIT(0)
>>> +
>>> +#define LP87565_LOAD_CURRENT_BUCK_SELECT 0x3
>>> +
>>> +#define LP87565_I_LOAD2_BUCK_LOAD_CURRENT 0x3
>>> +#define LP87565_I_LOAD1_BUCK_LOAD_CURRENT 0xFF
>>> +
>>> +#define LP87565_PG3_SEL 0xC0
>>> +#define LP87565_PG2_SEL 0x30
>>> +#define LP87565_PG1_SEL 0x0C
>>> +#define LP87565_PG0_SEL 0x03
>>> +
>>> +#define LP87565_HALF_DAY BIT(7)
>>> +#define LP87565_EN_PG0_NINT BIT(6)
>>> +#define LP87565_PGOOD_SET_DELAY BIT(5)
>>> +#define LP87565_EN_PGFLT_STAT BIT(4)
>>> +#define LP87565_PGOOD_WINDOW BIT(2)
>>> +#define LP87565_PGOOD_OD BIT(1)
>>> +#define LP87565_PGOOD_POL BIT(0)
>>> +
>>> +#define LP87565_PG3_FLT BIT(3)
>>> +#define LP87565_PG2_FLT BIT(2)
>>> +#define LP87565_PG1_FLT BIT(1)
>>> +#define LP87565_PG0_FLT BIT(0)
>>> +
>>> +#define LP87565_PLL_MODE 0xC0
>>> +#define LP87565_EXT_CLK_FREQ 0x1F
>>> +
>>> +#define LP87565_EN_SPREAD_SPEC BIT(7)
>>> +#define LP87565_EN_PIN_CTRL_GPIO3 BIT(6)
>>> +#define LP87565_EN_PIN_SELECT_GPIO3 BIT(5)
>>> +#define LP87565_EN_PIN_CTRL_GPIO2 BIT(4)
>>> +#define LP87565_EN_PIN_SELECT_GPIO2 BIT(3)
>>> +#define LP87565_GPIO3_SEL BIT(2)
>>> +#define LP87565_GPIO2_SEL BIT(1)
>>> +#define LP87565_GPIO1_SEL BIT(0)
>>> +
>>> +#define LP87565_GOIO3_OD BIT(6)
>>> +#define LP87565_GOIO2_OD BIT(5)
>>> +#define LP87565_GOIO1_OD BIT(4)
>>> +#define LP87565_GOIO3_DIR BIT(2)
>>> +#define LP87565_GOIO2_DIR BIT(1)
>>> +#define LP87565_GOIO1_DIR BIT(0)
>>> +
>>> +#define LP87565_GOIO3_IN BIT(2)
>>> +#define LP87565_GOIO2_IN BIT(1)
>>> +#define LP87565_GOIO1_IN BIT(0)
>>> +
>>> +#define LP87565_GOIO3_OUT BIT(2)
>>> +#define LP87565_GOIO2_OUT BIT(1)
>>> +#define LP87565_GOIO1_OUT BIT(0)
>>> +
>>> +/* Number of step-down converters available */
>>> +#define LP87565_NUM_BUCK 6
>>> +
>>> +enum LP87565_regulator_id {
>>> + /* BUCK's */
>>> + LP87565_BUCK_0,
>>> + LP87565_BUCK_1,
>>> + LP87565_BUCK_2,
>>> + LP87565_BUCK_3,
>>> + LP87565_BUCK_10,
>>> + LP87565_BUCK_23,
>>> +};
>>> +
>>> +/**
>>> + * struct LP87565 - state holder for the LP87565 driver
>>> + * @dev: struct device pointer for MFD device
>>> + * @rev: revision of the LP87565
>>> + * @dev_type: The device type for example lp87565-q1
>>> + * @lock: lock guarding the data structure
>>> + * @regmap: register map of the LP87565 PMIC
>>> + *
>>> + * Device data may be used to access the LP87565 chip
>>> + */
>>> +struct lp87565 {
>>> + struct device *dev;
>>> + u8 rev;
>>> + u8 dev_type;
>>> + struct regmap *regmap;
>>> +};
>>> +#endif /* __LINUX_MFD_LP87565_H */
>>>
[toc] | [prev] | [next] | [standalone]
| From | Lee Jones <lee.jones@linaro.org> |
|---|---|
| Date | 2017-05-23 09:00 +0200 |
| Message-ID | <tKbXr-7Xu-5@gated-at.bofh.it> |
| In reply to | #1647597 |
On Tue, 23 May 2017, Keerthy wrote:
>
>
> On Monday 22 May 2017 09:53 AM, Keerthy wrote:
> >
> >
> > On Friday 19 May 2017 09:12 PM, Andrew F. Davis wrote:
> >> On 05/19/2017 07:42 AM, Keerthy wrote:
> >>> The LP87565 chip is a power management IC for Portable Navigation Systems
> >>> and Tablet Computing devices. It contains the following components:
> >>>
> >>> - Configurable Bucks(Single and multi-phase).
> >>> - Configurable General Purpose Output Signals (GPO).
> >>>
> >>> The LP87565-Q1 variant device uses two 2-phase outputs configuration,
> >>> Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
> >>> output.
> >>>
> >>> Signed-off-by: Keerthy <j-keerthy@ti.com>
> >>> ---
> >>> Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
> >>> drivers/mfd/Kconfig | 14 ++
> >>> drivers/mfd/Makefile | 1 +
> >>> drivers/mfd/lp87565.c | 103 ++++++++
> >>> include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
> >>> 5 files changed, 437 insertions(+)
> >>> create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
> >>> create mode 100644 drivers/mfd/lp87565.c
> >>> create mode 100644 include/linux/mfd/lp87565.h
> >>>
> >>> diff --git a/Documentation/devicetree/bindings/mfd/lp87565.txt b/Documentation/devicetree/bindings/mfd/lp87565.txt
> >>> new file mode 100644
> >>> index 0000000..38a00a1
> >>> --- /dev/null
> >>> +++ b/Documentation/devicetree/bindings/mfd/lp87565.txt
> >>> @@ -0,0 +1,44 @@
> >>> +TI LP873565 PMIC MFD driver
> >>> +
> >>> +Required properties:
> >>> + - compatible: "ti,lp87565", "ti,lp87565-q1"
> >>
> >> The of_device_id table in the driver only seems to match for
> >> "ti,lp87565-q1", not "ti,lp87565".
> >
> > I will add both. ti,lp87565 is the generic one and the ti,lp87565-q1 is
> > a specific one with dual phase regulators.
> >
> >>
> >>> + - reg: I2C slave address.
> >>> + - gpio-controller: Marks the device node as a GPIO Controller.
> >>> + - #gpio-cells: Should be two. The first cell is the pin number and
> >>> + the second cell is used to specify flags.
> >>> + See ../gpio/gpio.txt for more information.
> >>> + - xxx-in-supply: Phandle to parent supply node of each regulator
> >>> + populated under regulators node. xxx should match
> >>> + the supply_name populated in driver.
> >>> + - regulators: List of child nodes that specify the regulator
> >>> + initialization data.
> >>> +Example:
> >>> +
> >>> +lp87565: lp87565@60 {
> >>
> >> pmic: lp87565@60 {
> >>
> >> Is more standard.
> >
> > Sure. I will change that.
> >
> > Thanks for reviewing.
>
> Andrew,
>
> In case there are 2 PMICs on a board this would be confusing.
> Instead i would prefer to use:
>
> lp87565_pmic: lp87565@60 {
>
> There are already existing entries of that form.
This too is not correct.
It should be:
lp87565: pmic@60 {
The label at the front is flexible, but the node name should be the
generic type of device, so; gpio, regulator, serial, i2c, timer, pmic,
etc, followed by the value of the reg property.
> >>> + compatible = "ti,lp87565-q1";
> >>> + reg = <0x60>;
> >>> + gpio-controller;
> >>> + #gpio-cells = <2>;
> >>> +
> >>> + buck10-in-supply =<&vsys_3v3>;
> >>> + buck23-in-supply =<&vsys_3v3>;
> >>> + regulators: regulators {
> >>> + buck10_reg: buck10 {
> >>> + /*VDD_MPU*/
> >>> + regulator-name = "buck10";
> >>> + regulator-min-microvolt = <850000>;
> >>> + regulator-max-microvolt = <1250000>;
> >>> + regulator-always-on;
> >>> + regulator-boot-on;
> >>> + };
> >>> +
> >>> + buck23_reg: buck23 {
> >>> + /* VDD_GPU*/
> >>> + regulator-name = "buck23";
> >>> + regulator-min-microvolt = <850000>;
> >>> + regulator-max-microvolt = <1250000>;
> >>> + regulator-boot-on;
> >>> + regulator-always-on;
> >>> + };
> >>> + };
> >>> +};
> >>> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> >>> index 3eb5c93..5e884f3 100644
> >>> --- a/drivers/mfd/Kconfig
> >>> +++ b/drivers/mfd/Kconfig
> >>> @@ -1325,6 +1325,20 @@ config MFD_TI_LP873X
> >>> This driver can also be built as a module. If so, the module
> >>> will be called lp873x.
> >>>
> >>> +config MFD_TI_LP87565
> >>> + tristate "TI LP87565 Power Management IC"
> >>> + depends on I2C
> >>> + select MFD_CORE
> >>> + select REGMAP_I2C
> >>> + help
> >>> + If you say yes here then you get support for the LP87565 series of
> >>> + Power Management Integrated Circuits (PMIC).
> >>> + These include voltage regulators, thermal protection, configurable
> >>> + General Purpose Outputs (GPO) that are used in portable devices.
> >>> +
> >>> + This driver can also be built as a module. If so, the module
> >>> + will be called lp87565.
> >>> +
> >>> config MFD_TPS65218
> >>> tristate "TI TPS65218 Power Management chips"
> >>> depends on I2C
> >>> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> >>> index c16bf1e..7edbe1b 100644
> >>> --- a/drivers/mfd/Makefile
> >>> +++ b/drivers/mfd/Makefile
> >>> @@ -25,6 +25,7 @@ obj-$(CONFIG_HTC_PASIC3) += htc-pasic3.o
> >>> obj-$(CONFIG_HTC_I2CPLD) += htc-i2cpld.o
> >>>
> >>> obj-$(CONFIG_MFD_TI_LP873X) += lp873x.o
> >>> +obj-$(CONFIG_MFD_TI_LP87565) += lp87565.o
> >>>
> >>> obj-$(CONFIG_MFD_DAVINCI_VOICECODEC) += davinci_voicecodec.o
> >>> obj-$(CONFIG_MFD_DM355EVM_MSP) += dm355evm_msp.o
> >>> diff --git a/drivers/mfd/lp87565.c b/drivers/mfd/lp87565.c
> >>> new file mode 100644
> >>> index 0000000..dff882f
> >>> --- /dev/null
> >>> +++ b/drivers/mfd/lp87565.c
> >>> @@ -0,0 +1,103 @@
> >>> +/*
> >>> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
> >>> + *
> >>> + * Author: Keerthy <j-keerthy@ti.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 version 2.
> >>> + *
> >>> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
> >>> + * kind, whether express or implied; without even the implied warranty
> >>> + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> >>> + * GNU General Public License for more details.
> >>> + */
> >>> +
> >>> +#include <linux/interrupt.h>
> >>> +#include <linux/mfd/core.h>
> >>> +#include <linux/module.h>
> >>> +#include <linux/of_device.h>
> >>> +#include <linux/regmap.h>
> >>> +
> >>> +#include <linux/mfd/lp87565.h>
> >>> +
> >>> +static const struct regmap_config lp87565_regmap_config = {
> >>> + .reg_bits = 8,
> >>> + .val_bits = 8,
> >>> + .max_register = LP87565_REG_MAX,
> >>> +};
> >>> +
> >>> +static const struct mfd_cell lp87565_cells[] = {
> >>> + { .name = "lp87565-q1-regulator", },
> >>> + { .name = "lp87565-q1-gpio", },
> >>> +};
> >>> +
> >>> +static const struct of_device_id of_lp87565_match_table[] = {
> >>> + {
> >>> + .compatible = "ti,lp87565-q1",
> >>> + .data = (void *)LP87565_DEVICE_TYPE_LP87565_Q1,
> >>> + },
> >>> + {}
> >>> +};
> >>> +MODULE_DEVICE_TABLE(of, of_lp87565_match_table);
> >>> +
> >>> +static int lp87565_probe(struct i2c_client *client,
> >>> + const struct i2c_device_id *ids)
> >>> +{
> >>> + struct lp87565 *lp87565;
> >>> + const struct of_device_id *of_id;
> >>> + int ret;
> >>> + unsigned int otpid;
> >>> +
> >>> + lp87565 = devm_kzalloc(&client->dev, sizeof(*lp87565), GFP_KERNEL);
> >>> + if (!lp87565)
> >>> + return -ENOMEM;
> >>> +
> >>> + lp87565->dev = &client->dev;
> >>> +
> >>> + lp87565->regmap = devm_regmap_init_i2c(client, &lp87565_regmap_config);
> >>> + if (IS_ERR(lp87565->regmap)) {
> >>> + ret = PTR_ERR(lp87565->regmap);
> >>> + dev_err(lp87565->dev,
> >>> + "Failed to initialize register map: %d\n", ret);
> >>> + return ret;
> >>> + }
> >>> +
> >>> + ret = regmap_read(lp87565->regmap, LP87565_REG_OTP_REV, &otpid);
> >>> + if (ret) {
> >>> + dev_err(lp87565->dev, "Failed to read OTP ID\n");
> >>> + return ret;
> >>> + }
> >>> +
> >>> + lp87565->rev = otpid & LP87565_OTP_REV_OTP_ID;
> >>> + of_id = of_match_device(of_lp87565_match_table, &client->dev);
> >>> + if (of_id)
> >>> + lp87565->dev_type = (enum lp87565_device_type)of_id->data;
> >>> +
> >>> + i2c_set_clientdata(client, lp87565);
> >>> +
> >>> + ret = mfd_add_devices(lp87565->dev, PLATFORM_DEVID_AUTO, lp87565_cells,
> >>> + ARRAY_SIZE(lp87565_cells), NULL, 0, NULL);
> >>> +
> >>> + return ret;
> >>> +}
> >>> +
> >>> +static const struct i2c_device_id lp87565_id_table[] = {
> >>> + { "lp87565-q1", 0 },
> >>> + { },
> >>> +};
> >>> +MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
> >>> +
> >>> +static struct i2c_driver lp87565_driver = {
> >>> + .driver = {
> >>> + .name = "lp87565",
> >>> + .of_match_table = of_lp87565_match_table,
> >>> + },
> >>> + .probe = lp87565_probe,
> >>> + .id_table = lp87565_id_table,
> >>> +};
> >>> +module_i2c_driver(lp87565_driver);
> >>> +
> >>> +MODULE_AUTHOR("J Keerthy <j-keerthy@ti.com>");
> >>> +MODULE_DESCRIPTION("lp87565 chip family Multi-Function Device driver");
> >>> +MODULE_LICENSE("GPL v2");
> >>> diff --git a/include/linux/mfd/lp87565.h b/include/linux/mfd/lp87565.h
> >>> new file mode 100644
> >>> index 0000000..6112365
> >>> --- /dev/null
> >>> +++ b/include/linux/mfd/lp87565.h
> >>> @@ -0,0 +1,275 @@
> >>> +/*
> >>> + * Functions to access LP87565 power management chip.
> >>> + *
> >>> + * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.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 version 2.
> >>> + *
> >>> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
> >>> + * kind, whether express or implied; 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_LP87565_H
> >>> +#define __LINUX_MFD_LP87565_H
> >>> +
> >>> +#include <linux/i2c.h>
> >>> +#include <linux/regulator/driver.h>
> >>> +#include <linux/regulator/machine.h>
> >>> +
> >>> +enum lp87565_device_type {
> >>> + LP87565_DEVICE_TYPE_UNKNOWN = 0,
> >>> + LP87565_DEVICE_TYPE_LP87565_Q1,
> >>> +};
> >>> +
> >>> +/* All register addresses */
> >>> +#define LP87565_REG_DEV_REV 0X00
> >>> +#define LP87565_REG_OTP_REV 0X01
> >>> +#define LP87565_REG_BUCK0_CTRL_1 0X02
> >>> +#define LP87565_REG_BUCK0_CTRL_2 0X03
> >>> +
> >>> +#define LP87565_REG_BUCK1_CTRL_1 0X04
> >>> +#define LP87565_REG_BUCK1_CTRL_2 0X05
> >>> +
> >>> +#define LP87565_REG_BUCK2_CTRL_1 0X06
> >>> +#define LP87565_REG_BUCK2_CTRL_2 0X07
> >>> +
> >>> +#define LP87565_REG_BUCK3_CTRL_1 0X08
> >>> +#define LP87565_REG_BUCK3_CTRL_2 0X09
> >>> +
> >>> +#define LP87565_REG_BUCK0_VOUT 0X0A
> >>> +#define LP87565_REG_BUCK0_FLOOR_VOUT 0X0B
> >>> +
> >>> +#define LP87565_REG_BUCK1_VOUT 0X0C
> >>> +#define LP87565_REG_BUCK1_FLOOR_VOUT 0X0D
> >>> +
> >>> +#define LP87565_REG_BUCK2_VOUT 0X0E
> >>> +#define LP87565_REG_BUCK2_FLOOR_VOUT 0X0F
> >>> +
> >>> +#define LP87565_REG_BUCK3_VOUT 0X10
> >>> +#define LP87565_REG_BUCK3_FLOOR_VOUT 0X11
> >>> +
> >>> +#define LP87565_REG_BUCK0_DELAY 0X12
> >>> +#define LP87565_REG_BUCK1_DELAY 0X13
> >>> +
> >>> +#define LP87565_REG_BUCK2_DELAY 0X14
> >>> +#define LP87565_REG_BUCK3_DELAY 0X15
> >>> +
> >>> +#define LP87565_REG_GPO2_DELAY 0X16
> >>> +#define LP87565_REG_GPO3_DELAY 0X17
> >>> +#define LP87565_REG_RESET 0X18
> >>> +#define LP87565_REG_CONFIG 0X19
> >>> +
> >>> +#define LP87565_REG_INT_TOP_1 0X1A
> >>> +#define LP87565_REG_INT_TOP_2 0X1B
> >>> +
> >>> +#define LP87565_REG_INT_BUCK_0_1 0X1C
> >>> +#define LP87565_REG_INT_BUCK_2_3 0X1D
> >>> +#define LP87565_REG_TOP_STAT 0X1E
> >>> +#define LP87565_REG_BUCK_0_1_STAT 0X1F
> >>> +#define LP87565_REG_BUCK_2_3_STAT 0x20
> >>> +
> >>> +#define LP87565_REG_TOP_MASK_1 0x21
> >>> +#define LP87565_REG_TOP_MASK_2 0x22
> >>> +
> >>> +#define LP87565_REG_BUCK_0_1_MASK 0x23
> >>> +#define LP87565_REG_BUCK_2_3_MASK 0x24
> >>> +#define LP87565_REG_SEL_I_LOAD 0x25
> >>> +
> >>> +#define LP87565_REG_I_LOAD_2 0x26
> >>> +#define LP87565_REG_I_LOAD_1 0x27
> >>> +
> >>> +#define LP87565_REG_PGOOD_CTRL1 0x28
> >>> +#define LP87565_REG_PGOOD_CTRL2 0x29
> >>> +#define LP87565_REG_PGOOD_FLT 0x2A
> >>> +#define LP87565_REG_PLL_CTRL 0x2B
> >>> +#define LP87565_REG_PIN_FUNCTION 0x2C
> >>> +#define LP87565_REG_GPIO_CONFIG 0x2D
> >>> +#define LP87565_REG_GPIO_IN 0x2E
> >>> +#define LP87565_REG_GPIO_OUT 0x2F
> >>> +
> >>> +#define LP87565_REG_MAX LP87565_REG_GPIO_OUT
> >>> +
> >>> +/* Register field definitions */
> >>> +#define LP87565_DEV_REV_DEV_ID 0xC0
> >>> +#define LP87565_DEV_REV_ALL_LAYER 0x30
> >>> +#define LP87565_DEV_REV_METAL_LAYER 0x0F
> >>> +
> >>> +#define LP87565_OTP_REV_OTP_ID 0xFF
> >>> +
> >>> +#define LP87565_BUCK_CTRL_1_EN BIT(7)
> >>> +#define LP87565_BUCK_CTRL_1_EN_PIN_CTRL BIT(6)
> >>> +#define LP87565_BUCK_CTRL_1_PIN_SELECT_EN 0x30
> >>> +
> >>> +#define LP87565_BUCK_CTRL_1_ROOF_FLOOR_EN BIT(3)
> >>> +#define LP87565_BUCK_CTRL_1_RDIS_EN BIT(2)
> >>> +#define LP87565_BUCK_CTRL_1_FPWM BIT(1)
> >>> +/* Bit0 is reserved for BUCK1 and BUCK3 and valid only for BUCK0 and BUCK2 */
> >>> +#define LP87565_BUCK_CTRL_1_FPWM_MP_0_2 BIT(0)
> >>> +
> >>> +#define LP87565_BUCK_CTRL_2_ILIM 0x38
> >>> +#define LP87565_BUCK_CTRL_2_SLEW_RATE 0x07
> >>> +
> >>> +#define LP87565_BUCK_VSET 0xFF
> >>> +#define LP87565_BUCK_FLOOR_VSET 0xFF
> >>> +
> >>> +#define LP87565_BUCK_SHUTDOWN_DELAY 0xF0
> >>> +#define LP87565_BUCK_STARTUP_DELAY 0x0F
> >>> +
> >>> +#define LP87565_GPIO_SHUTDOWN_DELAY 0xF0
> >>> +#define LP87565_GPIO_STARTUP_DELAY 0x0F
> >>> +
> >>> +#define LP87565_RESET_SW_RESET BIT(0)
> >>> +
> >>> +#define LP87565_CONFIG_DOUBLE_DELAY BIT(7)
> >>> +#define LP87565_CONFIG_CLKIN_PD BIT(6)
> >>> +#define LP87565_CONFIG_EN4_PD BIT(5)
> >>> +#define LP87565_CONFIG_EN3_PD BIT(4)
> >>> +#define LP87565_CONFIG_TDIE_WARN_LEVEL BIT(3)
> >>> +#define LP87565_CONFIG_EN2_PD BIT(2)
> >>> +#define LP87565_CONFIG_EN1_PD BIT(1)
> >>> +
> >>> +#define LP87565_INT_GPIO BIT(7)
> >>> +#define LP87565_INT_BUCK23 BIT(6)
> >>> +#define LP87565_INT_BUCK01 BIT(5)
> >>> +#define LP87565_NO_SYNC_CLK BIT(4)
> >>> +#define LP87565_TDIE_SD BIT(3)
> >>> +#define LP87565_TDIE_WARN BIT(2)
> >>> +#define LP87565_INT_OVP BIT(1)
> >>> +#define LP87565_I_LOAD_READY BIT(0)
> >>> +
> >>> +#define LP87565_INT_TOP2_RESET_REG BIT(0)
> >>> +
> >>> +#define LP87565_BUCK1_PG_INT BIT(6)
> >>> +#define LP87565_BUCK1_SC_INT BIT(5)
> >>> +#define LP87565_BUCK1_ILIM_INT BIT(4)
> >>> +#define LP87565_BUCK0_PG_INT BIT(2)
> >>> +#define LP87565_BUCK0_SC_INT BIT(1)
> >>> +#define LP87565_BUCK0_ILIM_INT BIT(0)
> >>> +
> >>> +#define LP87565_BUCK3_PG_INT BIT(6)
> >>> +#define LP87565_BUCK3_SC_INT BIT(5)
> >>> +#define LP87565_BUCK3_ILIM_INT BIT(4)
> >>> +#define LP87565_BUCK2_PG_INT BIT(2)
> >>> +#define LP87565_BUCK2_SC_INT BIT(1)
> >>> +#define LP87565_BUCK2_ILIM_INT BIT(0)
> >>> +
> >>> +#define LP87565_SYNC_CLK_STAT BIT(4)
> >>> +#define LP87565_TDIE_SD_STAT BIT(3)
> >>> +#define LP87565_TDIE_WARN_STAT BIT(2)
> >>> +#define LP87565_OVP_STAT BIT(1)
> >>> +
> >>> +#define LP87565_BUCK1_STAT BIT(7)
> >>> +#define LP87565_BUCK1_PG_STAT BIT(6)
> >>> +#define LP87565_BUCK1_ILIM_STAT BIT(4)
> >>> +#define LP87565_BUCK0_STAT BIT(3)
> >>> +#define LP87565_BUCK0_PG_STAT BIT(2)
> >>> +#define LP87565_BUCK0_ILIM_STAT BIT(0)
> >>> +
> >>> +#define LP87565_BUCK3_STAT BIT(7)
> >>> +#define LP87565_BUCK3_PG_STAT BIT(6)
> >>> +#define LP87565_BUCK3_ILIM_STAT BIT(4)
> >>> +#define LP87565_BUCK2_STAT BIT(3)
> >>> +#define LP87565_BUCK2_PG_STAT BIT(2)
> >>> +#define LP87565_BUCK2_ILIM_STAT BIT(0)
> >>> +
> >>> +#define LPL87565_GPIO_MASK BIT(7)
> >>> +#define LPL87565_SYNC_CLK_MASK BIT(4)
> >>> +#define LPL87565_TDIE_WARN_MASK BIT(2)
> >>> +#define LPL87565_I_LOAD_READY_MASK BIT(0)
> >>> +
> >>> +#define LPL87565_RESET_REG_MASK BIT(0)
> >>> +
> >>> +#define LPL87565_BUCK1_PG_MASK BIT(6)
> >>> +#define LPL87565_BUCK1_ILIM_MASK BIT(4)
> >>> +#define LPL87565_BUCK0_PG_MASK BIT(2)
> >>> +#define LPL87565_BUCK0_ILIM_MASK BIT(0)
> >>> +
> >>> +#define LPL87565_BUCK3_PG_MASK BIT(6)
> >>> +#define LPL87565_BUCK3_ILIM_MASK BIT(4)
> >>> +#define LPL87565_BUCK2_PG_MASK BIT(2)
> >>> +#define LPL87565_BUCK2_ILIM_MASK BIT(0)
> >>> +
> >>> +#define LP87565_LOAD_CURRENT_BUCK_SELECT 0x3
> >>> +
> >>> +#define LP87565_I_LOAD2_BUCK_LOAD_CURRENT 0x3
> >>> +#define LP87565_I_LOAD1_BUCK_LOAD_CURRENT 0xFF
> >>> +
> >>> +#define LP87565_PG3_SEL 0xC0
> >>> +#define LP87565_PG2_SEL 0x30
> >>> +#define LP87565_PG1_SEL 0x0C
> >>> +#define LP87565_PG0_SEL 0x03
> >>> +
> >>> +#define LP87565_HALF_DAY BIT(7)
> >>> +#define LP87565_EN_PG0_NINT BIT(6)
> >>> +#define LP87565_PGOOD_SET_DELAY BIT(5)
> >>> +#define LP87565_EN_PGFLT_STAT BIT(4)
> >>> +#define LP87565_PGOOD_WINDOW BIT(2)
> >>> +#define LP87565_PGOOD_OD BIT(1)
> >>> +#define LP87565_PGOOD_POL BIT(0)
> >>> +
> >>> +#define LP87565_PG3_FLT BIT(3)
> >>> +#define LP87565_PG2_FLT BIT(2)
> >>> +#define LP87565_PG1_FLT BIT(1)
> >>> +#define LP87565_PG0_FLT BIT(0)
> >>> +
> >>> +#define LP87565_PLL_MODE 0xC0
> >>> +#define LP87565_EXT_CLK_FREQ 0x1F
> >>> +
> >>> +#define LP87565_EN_SPREAD_SPEC BIT(7)
> >>> +#define LP87565_EN_PIN_CTRL_GPIO3 BIT(6)
> >>> +#define LP87565_EN_PIN_SELECT_GPIO3 BIT(5)
> >>> +#define LP87565_EN_PIN_CTRL_GPIO2 BIT(4)
> >>> +#define LP87565_EN_PIN_SELECT_GPIO2 BIT(3)
> >>> +#define LP87565_GPIO3_SEL BIT(2)
> >>> +#define LP87565_GPIO2_SEL BIT(1)
> >>> +#define LP87565_GPIO1_SEL BIT(0)
> >>> +
> >>> +#define LP87565_GOIO3_OD BIT(6)
> >>> +#define LP87565_GOIO2_OD BIT(5)
> >>> +#define LP87565_GOIO1_OD BIT(4)
> >>> +#define LP87565_GOIO3_DIR BIT(2)
> >>> +#define LP87565_GOIO2_DIR BIT(1)
> >>> +#define LP87565_GOIO1_DIR BIT(0)
> >>> +
> >>> +#define LP87565_GOIO3_IN BIT(2)
> >>> +#define LP87565_GOIO2_IN BIT(1)
> >>> +#define LP87565_GOIO1_IN BIT(0)
> >>> +
> >>> +#define LP87565_GOIO3_OUT BIT(2)
> >>> +#define LP87565_GOIO2_OUT BIT(1)
> >>> +#define LP87565_GOIO1_OUT BIT(0)
> >>> +
> >>> +/* Number of step-down converters available */
> >>> +#define LP87565_NUM_BUCK 6
> >>> +
> >>> +enum LP87565_regulator_id {
> >>> + /* BUCK's */
> >>> + LP87565_BUCK_0,
> >>> + LP87565_BUCK_1,
> >>> + LP87565_BUCK_2,
> >>> + LP87565_BUCK_3,
> >>> + LP87565_BUCK_10,
> >>> + LP87565_BUCK_23,
> >>> +};
> >>> +
> >>> +/**
> >>> + * struct LP87565 - state holder for the LP87565 driver
> >>> + * @dev: struct device pointer for MFD device
> >>> + * @rev: revision of the LP87565
> >>> + * @dev_type: The device type for example lp87565-q1
> >>> + * @lock: lock guarding the data structure
> >>> + * @regmap: register map of the LP87565 PMIC
> >>> + *
> >>> + * Device data may be used to access the LP87565 chip
> >>> + */
> >>> +struct lp87565 {
> >>> + struct device *dev;
> >>> + u8 rev;
> >>> + u8 dev_type;
> >>> + struct regmap *regmap;
> >>> +};
> >>> +#endif /* __LINUX_MFD_LP87565_H */
> >>>
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
[toc] | [prev] | [next] | [standalone]
| From | Lee Jones <lee.jones@linaro.org> |
|---|---|
| Date | 2017-05-22 19:50 +0200 |
| Message-ID | <tJZCW-dH-9@gated-at.bofh.it> |
| In reply to | #1645575 |
On Fri, 19 May 2017, Keerthy wrote:
> The LP87565 chip is a power management IC for Portable Navigation Systems
> and Tablet Computing devices. It contains the following components:
>
> - Configurable Bucks(Single and multi-phase).
> - Configurable General Purpose Output Signals (GPO).
>
> The LP87565-Q1 variant device uses two 2-phase outputs configuration,
> Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
> output.
>
> Signed-off-by: Keerthy <j-keerthy@ti.com>
> ---
> Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
> drivers/mfd/Kconfig | 14 ++
> drivers/mfd/Makefile | 1 +
> drivers/mfd/lp87565.c | 103 ++++++++
> include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
> 5 files changed, 437 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
> create mode 100644 drivers/mfd/lp87565.c
> create mode 100644 include/linux/mfd/lp87565.h
>
> diff --git a/Documentation/devicetree/bindings/mfd/lp87565.txt b/Documentation/devicetree/bindings/mfd/lp87565.txt
> new file mode 100644
> index 0000000..38a00a1
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mfd/lp87565.txt
> @@ -0,0 +1,44 @@
> +TI LP873565 PMIC MFD driver
> +
> +Required properties:
> + - compatible: "ti,lp87565", "ti,lp87565-q1"
> + - reg: I2C slave address.
> + - gpio-controller: Marks the device node as a GPIO Controller.
> + - #gpio-cells: Should be two. The first cell is the pin number and
> + the second cell is used to specify flags.
> + See ../gpio/gpio.txt for more information.
> + - xxx-in-supply: Phandle to parent supply node of each regulator
> + populated under regulators node. xxx should match
> + the supply_name populated in driver.
> + - regulators: List of child nodes that specify the regulator
> + initialization data.
> +Example:
> +
> +lp87565: lp87565@60 {
> + compatible = "ti,lp87565-q1";
> + reg = <0x60>;
> + gpio-controller;
> + #gpio-cells = <2>;
> +
> + buck10-in-supply =<&vsys_3v3>;
> + buck23-in-supply =<&vsys_3v3>;
White space errors.
'\n' here.
> + regulators: regulators {
> + buck10_reg: buck10 {
> + /*VDD_MPU*/
Whitespace errors.
> + regulator-name = "buck10";
> + regulator-min-microvolt = <850000>;
> + regulator-max-microvolt = <1250000>;
> + regulator-always-on;
> + regulator-boot-on;
> + };
> +
> + buck23_reg: buck23 {
> + /* VDD_GPU*/
Whitespace errors.
> + regulator-name = "buck23";
> + regulator-min-microvolt = <850000>;
> + regulator-max-microvolt = <1250000>;
> + regulator-boot-on;
> + regulator-always-on;
> + };
> + };
> +};
> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> index 3eb5c93..5e884f3 100644
> --- a/drivers/mfd/Kconfig
> +++ b/drivers/mfd/Kconfig
> @@ -1325,6 +1325,20 @@ config MFD_TI_LP873X
> This driver can also be built as a module. If so, the module
> will be called lp873x.
>
> +config MFD_TI_LP87565
> + tristate "TI LP87565 Power Management IC"
> + depends on I2C
> + select MFD_CORE
> + select REGMAP_I2C
> + help
> + If you say yes here then you get support for the LP87565 series of
> + Power Management Integrated Circuits (PMIC).
> + These include voltage regulators, thermal protection, configurable
> + General Purpose Outputs (GPO) that are used in portable devices.
> +
> + This driver can also be built as a module. If so, the module
> + will be called lp87565.
> +
> config MFD_TPS65218
> tristate "TI TPS65218 Power Management chips"
> depends on I2C
> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> index c16bf1e..7edbe1b 100644
> --- a/drivers/mfd/Makefile
> +++ b/drivers/mfd/Makefile
> @@ -25,6 +25,7 @@ obj-$(CONFIG_HTC_PASIC3) += htc-pasic3.o
> obj-$(CONFIG_HTC_I2CPLD) += htc-i2cpld.o
>
> obj-$(CONFIG_MFD_TI_LP873X) += lp873x.o
> +obj-$(CONFIG_MFD_TI_LP87565) += lp87565.o
>
> obj-$(CONFIG_MFD_DAVINCI_VOICECODEC) += davinci_voicecodec.o
> obj-$(CONFIG_MFD_DM355EVM_MSP) += dm355evm_msp.o
> diff --git a/drivers/mfd/lp87565.c b/drivers/mfd/lp87565.c
> new file mode 100644
> index 0000000..dff882f
> --- /dev/null
> +++ b/drivers/mfd/lp87565.c
> @@ -0,0 +1,103 @@
> +/*
> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
> + *
> + * Author: Keerthy <j-keerthy@ti.com>
We usually ask for full "first last" names.
> + * 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 version 2.
> + *
> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
> + * kind, whether express or implied; without even the implied warranty
> + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
Can you use the short licence?
> + */
> +
> +#include <linux/interrupt.h>
> +#include <linux/mfd/core.h>
> +#include <linux/module.h>
> +#include <linux/of_device.h>
> +#include <linux/regmap.h>
> +
> +#include <linux/mfd/lp87565.h>
> +
> +static const struct regmap_config lp87565_regmap_config = {
> + .reg_bits = 8,
> + .val_bits = 8,
> + .max_register = LP87565_REG_MAX,
> +};
> +
> +static const struct mfd_cell lp87565_cells[] = {
> + { .name = "lp87565-q1-regulator", },
> + { .name = "lp87565-q1-gpio", },
> +};
> +
> +static const struct of_device_id of_lp87565_match_table[] = {
> + {
> + .compatible = "ti,lp87565-q1",
> + .data = (void *)LP87565_DEVICE_TYPE_LP87565_Q1,
> + },
> + {}
> +};
> +MODULE_DEVICE_TABLE(of, of_lp87565_match_table);
> +
> +static int lp87565_probe(struct i2c_client *client,
> + const struct i2c_device_id *ids)
> +{
> + struct lp87565 *lp87565;
> + const struct of_device_id *of_id;
> + int ret;
> + unsigned int otpid;
> +
> + lp87565 = devm_kzalloc(&client->dev, sizeof(*lp87565), GFP_KERNEL);
> + if (!lp87565)
> + return -ENOMEM;
> +
> + lp87565->dev = &client->dev;
> +
> + lp87565->regmap = devm_regmap_init_i2c(client, &lp87565_regmap_config);
> + if (IS_ERR(lp87565->regmap)) {
> + ret = PTR_ERR(lp87565->regmap);
> + dev_err(lp87565->dev,
> + "Failed to initialize register map: %d\n", ret);
> + return ret;
> + }
> +
> + ret = regmap_read(lp87565->regmap, LP87565_REG_OTP_REV, &otpid);
> + if (ret) {
> + dev_err(lp87565->dev, "Failed to read OTP ID\n");
> + return ret;
> + }
> +
> + lp87565->rev = otpid & LP87565_OTP_REV_OTP_ID;
'\n' here.
> + of_id = of_match_device(of_lp87565_match_table, &client->dev);
> + if (of_id)
> + lp87565->dev_type = (enum lp87565_device_type)of_id->data;
> +
> + i2c_set_clientdata(client, lp87565);
> +
> + ret = mfd_add_devices(lp87565->dev, PLATFORM_DEVID_AUTO, lp87565_cells,
> + ARRAY_SIZE(lp87565_cells), NULL, 0, NULL);
> +
> + return ret;
> +}
> +
> +static const struct i2c_device_id lp87565_id_table[] = {
> + { "lp87565-q1", 0 },
> + { },
> +};
> +MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
Is this an OF only driver, or not?
> +static struct i2c_driver lp87565_driver = {
> + .driver = {
> + .name = "lp87565",
> + .of_match_table = of_lp87565_match_table,
> + },
> + .probe = lp87565_probe,
> + .id_table = lp87565_id_table,
> +};
> +module_i2c_driver(lp87565_driver);
> +
> +MODULE_AUTHOR("J Keerthy <j-keerthy@ti.com>");
> +MODULE_DESCRIPTION("lp87565 chip family Multi-Function Device driver");
> +MODULE_LICENSE("GPL v2");
> diff --git a/include/linux/mfd/lp87565.h b/include/linux/mfd/lp87565.h
> new file mode 100644
> index 0000000..6112365
> --- /dev/null
> +++ b/include/linux/mfd/lp87565.h
> @@ -0,0 +1,275 @@
> +/*
> + * Functions to access LP87565 power management chip.
> + *
> + * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.com/
Please update the Copyright.
> + * 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 version 2.
> + *
> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
> + * kind, whether express or implied; 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_LP87565_H
> +#define __LINUX_MFD_LP87565_H
> +
> +#include <linux/i2c.h>
> +#include <linux/regulator/driver.h>
> +#include <linux/regulator/machine.h>
> +
> +enum lp87565_device_type {
> + LP87565_DEVICE_TYPE_UNKNOWN = 0,
> + LP87565_DEVICE_TYPE_LP87565_Q1,
> +};
> +
> +/* All register addresses */
> +#define LP87565_REG_DEV_REV 0X00
> +#define LP87565_REG_OTP_REV 0X01
> +#define LP87565_REG_BUCK0_CTRL_1 0X02
> +#define LP87565_REG_BUCK0_CTRL_2 0X03
> +
> +#define LP87565_REG_BUCK1_CTRL_1 0X04
> +#define LP87565_REG_BUCK1_CTRL_2 0X05
> +
> +#define LP87565_REG_BUCK2_CTRL_1 0X06
> +#define LP87565_REG_BUCK2_CTRL_2 0X07
> +
> +#define LP87565_REG_BUCK3_CTRL_1 0X08
> +#define LP87565_REG_BUCK3_CTRL_2 0X09
> +
> +#define LP87565_REG_BUCK0_VOUT 0X0A
> +#define LP87565_REG_BUCK0_FLOOR_VOUT 0X0B
> +
> +#define LP87565_REG_BUCK1_VOUT 0X0C
> +#define LP87565_REG_BUCK1_FLOOR_VOUT 0X0D
> +
> +#define LP87565_REG_BUCK2_VOUT 0X0E
> +#define LP87565_REG_BUCK2_FLOOR_VOUT 0X0F
> +
> +#define LP87565_REG_BUCK3_VOUT 0X10
> +#define LP87565_REG_BUCK3_FLOOR_VOUT 0X11
> +
> +#define LP87565_REG_BUCK0_DELAY 0X12
> +#define LP87565_REG_BUCK1_DELAY 0X13
> +
> +#define LP87565_REG_BUCK2_DELAY 0X14
> +#define LP87565_REG_BUCK3_DELAY 0X15
> +
> +#define LP87565_REG_GPO2_DELAY 0X16
> +#define LP87565_REG_GPO3_DELAY 0X17
> +#define LP87565_REG_RESET 0X18
> +#define LP87565_REG_CONFIG 0X19
> +
> +#define LP87565_REG_INT_TOP_1 0X1A
> +#define LP87565_REG_INT_TOP_2 0X1B
> +
> +#define LP87565_REG_INT_BUCK_0_1 0X1C
> +#define LP87565_REG_INT_BUCK_2_3 0X1D
> +#define LP87565_REG_TOP_STAT 0X1E
> +#define LP87565_REG_BUCK_0_1_STAT 0X1F
> +#define LP87565_REG_BUCK_2_3_STAT 0x20
> +
> +#define LP87565_REG_TOP_MASK_1 0x21
> +#define LP87565_REG_TOP_MASK_2 0x22
> +
> +#define LP87565_REG_BUCK_0_1_MASK 0x23
> +#define LP87565_REG_BUCK_2_3_MASK 0x24
> +#define LP87565_REG_SEL_I_LOAD 0x25
> +
> +#define LP87565_REG_I_LOAD_2 0x26
> +#define LP87565_REG_I_LOAD_1 0x27
> +
> +#define LP87565_REG_PGOOD_CTRL1 0x28
> +#define LP87565_REG_PGOOD_CTRL2 0x29
> +#define LP87565_REG_PGOOD_FLT 0x2A
> +#define LP87565_REG_PLL_CTRL 0x2B
> +#define LP87565_REG_PIN_FUNCTION 0x2C
> +#define LP87565_REG_GPIO_CONFIG 0x2D
> +#define LP87565_REG_GPIO_IN 0x2E
> +#define LP87565_REG_GPIO_OUT 0x2F
> +
> +#define LP87565_REG_MAX LP87565_REG_GPIO_OUT
> +
> +/* Register field definitions */
> +#define LP87565_DEV_REV_DEV_ID 0xC0
> +#define LP87565_DEV_REV_ALL_LAYER 0x30
> +#define LP87565_DEV_REV_METAL_LAYER 0x0F
> +
> +#define LP87565_OTP_REV_OTP_ID 0xFF
> +
> +#define LP87565_BUCK_CTRL_1_EN BIT(7)
> +#define LP87565_BUCK_CTRL_1_EN_PIN_CTRL BIT(6)
> +#define LP87565_BUCK_CTRL_1_PIN_SELECT_EN 0x30
> +
> +#define LP87565_BUCK_CTRL_1_ROOF_FLOOR_EN BIT(3)
> +#define LP87565_BUCK_CTRL_1_RDIS_EN BIT(2)
> +#define LP87565_BUCK_CTRL_1_FPWM BIT(1)
> +/* Bit0 is reserved for BUCK1 and BUCK3 and valid only for BUCK0 and BUCK2 */
> +#define LP87565_BUCK_CTRL_1_FPWM_MP_0_2 BIT(0)
> +
> +#define LP87565_BUCK_CTRL_2_ILIM 0x38
> +#define LP87565_BUCK_CTRL_2_SLEW_RATE 0x07
> +
> +#define LP87565_BUCK_VSET 0xFF
> +#define LP87565_BUCK_FLOOR_VSET 0xFF
> +
> +#define LP87565_BUCK_SHUTDOWN_DELAY 0xF0
> +#define LP87565_BUCK_STARTUP_DELAY 0x0F
> +
> +#define LP87565_GPIO_SHUTDOWN_DELAY 0xF0
> +#define LP87565_GPIO_STARTUP_DELAY 0x0F
> +
> +#define LP87565_RESET_SW_RESET BIT(0)
> +
> +#define LP87565_CONFIG_DOUBLE_DELAY BIT(7)
> +#define LP87565_CONFIG_CLKIN_PD BIT(6)
> +#define LP87565_CONFIG_EN4_PD BIT(5)
> +#define LP87565_CONFIG_EN3_PD BIT(4)
> +#define LP87565_CONFIG_TDIE_WARN_LEVEL BIT(3)
> +#define LP87565_CONFIG_EN2_PD BIT(2)
> +#define LP87565_CONFIG_EN1_PD BIT(1)
> +
> +#define LP87565_INT_GPIO BIT(7)
> +#define LP87565_INT_BUCK23 BIT(6)
> +#define LP87565_INT_BUCK01 BIT(5)
> +#define LP87565_NO_SYNC_CLK BIT(4)
> +#define LP87565_TDIE_SD BIT(3)
> +#define LP87565_TDIE_WARN BIT(2)
> +#define LP87565_INT_OVP BIT(1)
> +#define LP87565_I_LOAD_READY BIT(0)
> +
> +#define LP87565_INT_TOP2_RESET_REG BIT(0)
> +
> +#define LP87565_BUCK1_PG_INT BIT(6)
> +#define LP87565_BUCK1_SC_INT BIT(5)
> +#define LP87565_BUCK1_ILIM_INT BIT(4)
> +#define LP87565_BUCK0_PG_INT BIT(2)
> +#define LP87565_BUCK0_SC_INT BIT(1)
> +#define LP87565_BUCK0_ILIM_INT BIT(0)
> +
> +#define LP87565_BUCK3_PG_INT BIT(6)
> +#define LP87565_BUCK3_SC_INT BIT(5)
> +#define LP87565_BUCK3_ILIM_INT BIT(4)
> +#define LP87565_BUCK2_PG_INT BIT(2)
> +#define LP87565_BUCK2_SC_INT BIT(1)
> +#define LP87565_BUCK2_ILIM_INT BIT(0)
> +
> +#define LP87565_SYNC_CLK_STAT BIT(4)
> +#define LP87565_TDIE_SD_STAT BIT(3)
> +#define LP87565_TDIE_WARN_STAT BIT(2)
> +#define LP87565_OVP_STAT BIT(1)
> +
> +#define LP87565_BUCK1_STAT BIT(7)
> +#define LP87565_BUCK1_PG_STAT BIT(6)
> +#define LP87565_BUCK1_ILIM_STAT BIT(4)
> +#define LP87565_BUCK0_STAT BIT(3)
> +#define LP87565_BUCK0_PG_STAT BIT(2)
> +#define LP87565_BUCK0_ILIM_STAT BIT(0)
> +
> +#define LP87565_BUCK3_STAT BIT(7)
> +#define LP87565_BUCK3_PG_STAT BIT(6)
> +#define LP87565_BUCK3_ILIM_STAT BIT(4)
> +#define LP87565_BUCK2_STAT BIT(3)
> +#define LP87565_BUCK2_PG_STAT BIT(2)
> +#define LP87565_BUCK2_ILIM_STAT BIT(0)
> +
> +#define LPL87565_GPIO_MASK BIT(7)
> +#define LPL87565_SYNC_CLK_MASK BIT(4)
> +#define LPL87565_TDIE_WARN_MASK BIT(2)
> +#define LPL87565_I_LOAD_READY_MASK BIT(0)
> +
> +#define LPL87565_RESET_REG_MASK BIT(0)
> +
> +#define LPL87565_BUCK1_PG_MASK BIT(6)
> +#define LPL87565_BUCK1_ILIM_MASK BIT(4)
> +#define LPL87565_BUCK0_PG_MASK BIT(2)
> +#define LPL87565_BUCK0_ILIM_MASK BIT(0)
> +
> +#define LPL87565_BUCK3_PG_MASK BIT(6)
> +#define LPL87565_BUCK3_ILIM_MASK BIT(4)
> +#define LPL87565_BUCK2_PG_MASK BIT(2)
> +#define LPL87565_BUCK2_ILIM_MASK BIT(0)
> +
> +#define LP87565_LOAD_CURRENT_BUCK_SELECT 0x3
> +
> +#define LP87565_I_LOAD2_BUCK_LOAD_CURRENT 0x3
> +#define LP87565_I_LOAD1_BUCK_LOAD_CURRENT 0xFF
> +
> +#define LP87565_PG3_SEL 0xC0
> +#define LP87565_PG2_SEL 0x30
> +#define LP87565_PG1_SEL 0x0C
> +#define LP87565_PG0_SEL 0x03
> +
> +#define LP87565_HALF_DAY BIT(7)
> +#define LP87565_EN_PG0_NINT BIT(6)
> +#define LP87565_PGOOD_SET_DELAY BIT(5)
> +#define LP87565_EN_PGFLT_STAT BIT(4)
> +#define LP87565_PGOOD_WINDOW BIT(2)
> +#define LP87565_PGOOD_OD BIT(1)
> +#define LP87565_PGOOD_POL BIT(0)
> +
> +#define LP87565_PG3_FLT BIT(3)
> +#define LP87565_PG2_FLT BIT(2)
> +#define LP87565_PG1_FLT BIT(1)
> +#define LP87565_PG0_FLT BIT(0)
> +
> +#define LP87565_PLL_MODE 0xC0
> +#define LP87565_EXT_CLK_FREQ 0x1F
> +
> +#define LP87565_EN_SPREAD_SPEC BIT(7)
> +#define LP87565_EN_PIN_CTRL_GPIO3 BIT(6)
> +#define LP87565_EN_PIN_SELECT_GPIO3 BIT(5)
> +#define LP87565_EN_PIN_CTRL_GPIO2 BIT(4)
> +#define LP87565_EN_PIN_SELECT_GPIO2 BIT(3)
> +#define LP87565_GPIO3_SEL BIT(2)
> +#define LP87565_GPIO2_SEL BIT(1)
> +#define LP87565_GPIO1_SEL BIT(0)
> +
> +#define LP87565_GOIO3_OD BIT(6)
> +#define LP87565_GOIO2_OD BIT(5)
> +#define LP87565_GOIO1_OD BIT(4)
> +#define LP87565_GOIO3_DIR BIT(2)
> +#define LP87565_GOIO2_DIR BIT(1)
> +#define LP87565_GOIO1_DIR BIT(0)
> +
> +#define LP87565_GOIO3_IN BIT(2)
> +#define LP87565_GOIO2_IN BIT(1)
> +#define LP87565_GOIO1_IN BIT(0)
> +
> +#define LP87565_GOIO3_OUT BIT(2)
> +#define LP87565_GOIO2_OUT BIT(1)
> +#define LP87565_GOIO1_OUT BIT(0)
> +
> +/* Number of step-down converters available */
> +#define LP87565_NUM_BUCK 6
> +
> +enum LP87565_regulator_id {
> + /* BUCK's */
> + LP87565_BUCK_0,
> + LP87565_BUCK_1,
> + LP87565_BUCK_2,
> + LP87565_BUCK_3,
> + LP87565_BUCK_10,
> + LP87565_BUCK_23,
> +};
> +
> +/**
> + * struct LP87565 - state holder for the LP87565 driver
> + * @dev: struct device pointer for MFD device
> + * @rev: revision of the LP87565
> + * @dev_type: The device type for example lp87565-q1
> + * @lock: lock guarding the data structure
> + * @regmap: register map of the LP87565 PMIC
> + *
> + * Device data may be used to access the LP87565 chip
> + */
> +struct lp87565 {
> + struct device *dev;
> + u8 rev;
> + u8 dev_type;
> + struct regmap *regmap;
> +};
> +#endif /* __LINUX_MFD_LP87565_H */
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
[toc] | [prev] | [next] | [standalone]
| From | Keerthy <j-keerthy@ti.com> |
|---|---|
| Date | 2017-05-23 04:40 +0200 |
| Message-ID | <tK7TP-5va-1@gated-at.bofh.it> |
| In reply to | #1647220 |
On Monday 22 May 2017 11:18 PM, Lee Jones wrote:
> On Fri, 19 May 2017, Keerthy wrote:
>
>> The LP87565 chip is a power management IC for Portable Navigation Systems
>> and Tablet Computing devices. It contains the following components:
>>
>> - Configurable Bucks(Single and multi-phase).
>> - Configurable General Purpose Output Signals (GPO).
>>
>> The LP87565-Q1 variant device uses two 2-phase outputs configuration,
>> Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
>> output.
>>
>> Signed-off-by: Keerthy <j-keerthy@ti.com>
>> ---
>> Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
>> drivers/mfd/Kconfig | 14 ++
>> drivers/mfd/Makefile | 1 +
>> drivers/mfd/lp87565.c | 103 ++++++++
>> include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
>> 5 files changed, 437 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
>> create mode 100644 drivers/mfd/lp87565.c
>> create mode 100644 include/linux/mfd/lp87565.h
>>
>> diff --git a/Documentation/devicetree/bindings/mfd/lp87565.txt b/Documentation/devicetree/bindings/mfd/lp87565.txt
>> new file mode 100644
>> index 0000000..38a00a1
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/mfd/lp87565.txt
>> @@ -0,0 +1,44 @@
>> +TI LP873565 PMIC MFD driver
>> +
>> +Required properties:
>> + - compatible: "ti,lp87565", "ti,lp87565-q1"
>> + - reg: I2C slave address.
>> + - gpio-controller: Marks the device node as a GPIO Controller.
>> + - #gpio-cells: Should be two. The first cell is the pin number and
>> + the second cell is used to specify flags.
>> + See ../gpio/gpio.txt for more information.
>> + - xxx-in-supply: Phandle to parent supply node of each regulator
>> + populated under regulators node. xxx should match
>> + the supply_name populated in driver.
>> + - regulators: List of child nodes that specify the regulator
>> + initialization data.
>> +Example:
>> +
>> +lp87565: lp87565@60 {
>> + compatible = "ti,lp87565-q1";
>> + reg = <0x60>;
>> + gpio-controller;
>> + #gpio-cells = <2>;
>> +
>> + buck10-in-supply =<&vsys_3v3>;
>> + buck23-in-supply =<&vsys_3v3>;
>
> White space errors.
>
> '\n' here.
I will fix this.
>
>> + regulators: regulators {
>> + buck10_reg: buck10 {
>> + /*VDD_MPU*/
>
> Whitespace errors.
I will fix this.
>
>> + regulator-name = "buck10";
>> + regulator-min-microvolt = <850000>;
>> + regulator-max-microvolt = <1250000>;
>> + regulator-always-on;
>> + regulator-boot-on;
>> + };
>> +
>> + buck23_reg: buck23 {
>> + /* VDD_GPU*/
>
> Whitespace errors.
I will fix this.
>
>> + regulator-name = "buck23";
>> + regulator-min-microvolt = <850000>;
>> + regulator-max-microvolt = <1250000>;
>> + regulator-boot-on;
>> + regulator-always-on;
>> + };
>> + };
>> +};
>> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
>> index 3eb5c93..5e884f3 100644
>> --- a/drivers/mfd/Kconfig
>> +++ b/drivers/mfd/Kconfig
>> @@ -1325,6 +1325,20 @@ config MFD_TI_LP873X
>> This driver can also be built as a module. If so, the module
>> will be called lp873x.
>>
>> +config MFD_TI_LP87565
>> + tristate "TI LP87565 Power Management IC"
>> + depends on I2C
>> + select MFD_CORE
>> + select REGMAP_I2C
>> + help
>> + If you say yes here then you get support for the LP87565 series of
>> + Power Management Integrated Circuits (PMIC).
>> + These include voltage regulators, thermal protection, configurable
>> + General Purpose Outputs (GPO) that are used in portable devices.
>> +
>> + This driver can also be built as a module. If so, the module
>> + will be called lp87565.
>> +
>> config MFD_TPS65218
>> tristate "TI TPS65218 Power Management chips"
>> depends on I2C
>> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
>> index c16bf1e..7edbe1b 100644
>> --- a/drivers/mfd/Makefile
>> +++ b/drivers/mfd/Makefile
>> @@ -25,6 +25,7 @@ obj-$(CONFIG_HTC_PASIC3) += htc-pasic3.o
>> obj-$(CONFIG_HTC_I2CPLD) += htc-i2cpld.o
>>
>> obj-$(CONFIG_MFD_TI_LP873X) += lp873x.o
>> +obj-$(CONFIG_MFD_TI_LP87565) += lp87565.o
>>
>> obj-$(CONFIG_MFD_DAVINCI_VOICECODEC) += davinci_voicecodec.o
>> obj-$(CONFIG_MFD_DM355EVM_MSP) += dm355evm_msp.o
>> diff --git a/drivers/mfd/lp87565.c b/drivers/mfd/lp87565.c
>> new file mode 100644
>> index 0000000..dff882f
>> --- /dev/null
>> +++ b/drivers/mfd/lp87565.c
>> @@ -0,0 +1,103 @@
>> +/*
>> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
>> + *
>> + * Author: Keerthy <j-keerthy@ti.com>
>
> We usually ask for full "first last" names.
Keerthy is my full name and i do not have a surname.
>
>> + * 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 version 2.
>> + *
>> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
>> + * kind, whether express or implied; without even the implied warranty
>> + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>> + * GNU General Public License for more details.
>
> Can you use the short licence?
Okay Sure.
>
>> + */
>> +
>> +#include <linux/interrupt.h>
>> +#include <linux/mfd/core.h>
>> +#include <linux/module.h>
>> +#include <linux/of_device.h>
>> +#include <linux/regmap.h>
>> +
>> +#include <linux/mfd/lp87565.h>
>> +
>> +static const struct regmap_config lp87565_regmap_config = {
>> + .reg_bits = 8,
>> + .val_bits = 8,
>> + .max_register = LP87565_REG_MAX,
>> +};
>> +
>> +static const struct mfd_cell lp87565_cells[] = {
>> + { .name = "lp87565-q1-regulator", },
>> + { .name = "lp87565-q1-gpio", },
>> +};
>> +
>> +static const struct of_device_id of_lp87565_match_table[] = {
>> + {
>> + .compatible = "ti,lp87565-q1",
>> + .data = (void *)LP87565_DEVICE_TYPE_LP87565_Q1,
>> + },
>> + {}
>> +};
>> +MODULE_DEVICE_TABLE(of, of_lp87565_match_table);
>> +
>> +static int lp87565_probe(struct i2c_client *client,
>> + const struct i2c_device_id *ids)
>> +{
>> + struct lp87565 *lp87565;
>> + const struct of_device_id *of_id;
>> + int ret;
>> + unsigned int otpid;
>> +
>> + lp87565 = devm_kzalloc(&client->dev, sizeof(*lp87565), GFP_KERNEL);
>> + if (!lp87565)
>> + return -ENOMEM;
>> +
>> + lp87565->dev = &client->dev;
>> +
>> + lp87565->regmap = devm_regmap_init_i2c(client, &lp87565_regmap_config);
>> + if (IS_ERR(lp87565->regmap)) {
>> + ret = PTR_ERR(lp87565->regmap);
>> + dev_err(lp87565->dev,
>> + "Failed to initialize register map: %d\n", ret);
>> + return ret;
>> + }
>> +
>> + ret = regmap_read(lp87565->regmap, LP87565_REG_OTP_REV, &otpid);
>> + if (ret) {
>> + dev_err(lp87565->dev, "Failed to read OTP ID\n");
>> + return ret;
>> + }
>> +
>> + lp87565->rev = otpid & LP87565_OTP_REV_OTP_ID;
>
> '\n' here.
Okay.
>
>> + of_id = of_match_device(of_lp87565_match_table, &client->dev);
>> + if (of_id)
>> + lp87565->dev_type = (enum lp87565_device_type)of_id->data;
>> +
>> + i2c_set_clientdata(client, lp87565);
>> +
>> + ret = mfd_add_devices(lp87565->dev, PLATFORM_DEVID_AUTO, lp87565_cells,
>> + ARRAY_SIZE(lp87565_cells), NULL, 0, NULL);
>> +
>> + return ret;
>> +}
>> +
>> +static const struct i2c_device_id lp87565_id_table[] = {
>> + { "lp87565-q1", 0 },
>> + { },
>> +};
>> +MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
>
> Is this an OF only driver, or not?
>
>> +static struct i2c_driver lp87565_driver = {
>> + .driver = {
>> + .name = "lp87565",
>> + .of_match_table = of_lp87565_match_table,
>> + },
>> + .probe = lp87565_probe,
>> + .id_table = lp87565_id_table,
>> +};
>> +module_i2c_driver(lp87565_driver);
>> +
>> +MODULE_AUTHOR("J Keerthy <j-keerthy@ti.com>");
>> +MODULE_DESCRIPTION("lp87565 chip family Multi-Function Device driver");
>> +MODULE_LICENSE("GPL v2");
>> diff --git a/include/linux/mfd/lp87565.h b/include/linux/mfd/lp87565.h
>> new file mode 100644
>> index 0000000..6112365
>> --- /dev/null
>> +++ b/include/linux/mfd/lp87565.h
>> @@ -0,0 +1,275 @@
>> +/*
>> + * Functions to access LP87565 power management chip.
>> + *
>> + * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.com/
>
> Please update the Copyright.
Oops yes. Thanks for catching it. I will fix in v2.
Thanks for reviewing it.
>
>> + * 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 version 2.
>> + *
>> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
>> + * kind, whether express or implied; 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_LP87565_H
>> +#define __LINUX_MFD_LP87565_H
>> +
>> +#include <linux/i2c.h>
>> +#include <linux/regulator/driver.h>
>> +#include <linux/regulator/machine.h>
>> +
>> +enum lp87565_device_type {
>> + LP87565_DEVICE_TYPE_UNKNOWN = 0,
>> + LP87565_DEVICE_TYPE_LP87565_Q1,
>> +};
>> +
>> +/* All register addresses */
>> +#define LP87565_REG_DEV_REV 0X00
>> +#define LP87565_REG_OTP_REV 0X01
>> +#define LP87565_REG_BUCK0_CTRL_1 0X02
>> +#define LP87565_REG_BUCK0_CTRL_2 0X03
>> +
>> +#define LP87565_REG_BUCK1_CTRL_1 0X04
>> +#define LP87565_REG_BUCK1_CTRL_2 0X05
>> +
>> +#define LP87565_REG_BUCK2_CTRL_1 0X06
>> +#define LP87565_REG_BUCK2_CTRL_2 0X07
>> +
>> +#define LP87565_REG_BUCK3_CTRL_1 0X08
>> +#define LP87565_REG_BUCK3_CTRL_2 0X09
>> +
>> +#define LP87565_REG_BUCK0_VOUT 0X0A
>> +#define LP87565_REG_BUCK0_FLOOR_VOUT 0X0B
>> +
>> +#define LP87565_REG_BUCK1_VOUT 0X0C
>> +#define LP87565_REG_BUCK1_FLOOR_VOUT 0X0D
>> +
>> +#define LP87565_REG_BUCK2_VOUT 0X0E
>> +#define LP87565_REG_BUCK2_FLOOR_VOUT 0X0F
>> +
>> +#define LP87565_REG_BUCK3_VOUT 0X10
>> +#define LP87565_REG_BUCK3_FLOOR_VOUT 0X11
>> +
>> +#define LP87565_REG_BUCK0_DELAY 0X12
>> +#define LP87565_REG_BUCK1_DELAY 0X13
>> +
>> +#define LP87565_REG_BUCK2_DELAY 0X14
>> +#define LP87565_REG_BUCK3_DELAY 0X15
>> +
>> +#define LP87565_REG_GPO2_DELAY 0X16
>> +#define LP87565_REG_GPO3_DELAY 0X17
>> +#define LP87565_REG_RESET 0X18
>> +#define LP87565_REG_CONFIG 0X19
>> +
>> +#define LP87565_REG_INT_TOP_1 0X1A
>> +#define LP87565_REG_INT_TOP_2 0X1B
>> +
>> +#define LP87565_REG_INT_BUCK_0_1 0X1C
>> +#define LP87565_REG_INT_BUCK_2_3 0X1D
>> +#define LP87565_REG_TOP_STAT 0X1E
>> +#define LP87565_REG_BUCK_0_1_STAT 0X1F
>> +#define LP87565_REG_BUCK_2_3_STAT 0x20
>> +
>> +#define LP87565_REG_TOP_MASK_1 0x21
>> +#define LP87565_REG_TOP_MASK_2 0x22
>> +
>> +#define LP87565_REG_BUCK_0_1_MASK 0x23
>> +#define LP87565_REG_BUCK_2_3_MASK 0x24
>> +#define LP87565_REG_SEL_I_LOAD 0x25
>> +
>> +#define LP87565_REG_I_LOAD_2 0x26
>> +#define LP87565_REG_I_LOAD_1 0x27
>> +
>> +#define LP87565_REG_PGOOD_CTRL1 0x28
>> +#define LP87565_REG_PGOOD_CTRL2 0x29
>> +#define LP87565_REG_PGOOD_FLT 0x2A
>> +#define LP87565_REG_PLL_CTRL 0x2B
>> +#define LP87565_REG_PIN_FUNCTION 0x2C
>> +#define LP87565_REG_GPIO_CONFIG 0x2D
>> +#define LP87565_REG_GPIO_IN 0x2E
>> +#define LP87565_REG_GPIO_OUT 0x2F
>> +
>> +#define LP87565_REG_MAX LP87565_REG_GPIO_OUT
>> +
>> +/* Register field definitions */
>> +#define LP87565_DEV_REV_DEV_ID 0xC0
>> +#define LP87565_DEV_REV_ALL_LAYER 0x30
>> +#define LP87565_DEV_REV_METAL_LAYER 0x0F
>> +
>> +#define LP87565_OTP_REV_OTP_ID 0xFF
>> +
>> +#define LP87565_BUCK_CTRL_1_EN BIT(7)
>> +#define LP87565_BUCK_CTRL_1_EN_PIN_CTRL BIT(6)
>> +#define LP87565_BUCK_CTRL_1_PIN_SELECT_EN 0x30
>> +
>> +#define LP87565_BUCK_CTRL_1_ROOF_FLOOR_EN BIT(3)
>> +#define LP87565_BUCK_CTRL_1_RDIS_EN BIT(2)
>> +#define LP87565_BUCK_CTRL_1_FPWM BIT(1)
>> +/* Bit0 is reserved for BUCK1 and BUCK3 and valid only for BUCK0 and BUCK2 */
>> +#define LP87565_BUCK_CTRL_1_FPWM_MP_0_2 BIT(0)
>> +
>> +#define LP87565_BUCK_CTRL_2_ILIM 0x38
>> +#define LP87565_BUCK_CTRL_2_SLEW_RATE 0x07
>> +
>> +#define LP87565_BUCK_VSET 0xFF
>> +#define LP87565_BUCK_FLOOR_VSET 0xFF
>> +
>> +#define LP87565_BUCK_SHUTDOWN_DELAY 0xF0
>> +#define LP87565_BUCK_STARTUP_DELAY 0x0F
>> +
>> +#define LP87565_GPIO_SHUTDOWN_DELAY 0xF0
>> +#define LP87565_GPIO_STARTUP_DELAY 0x0F
>> +
>> +#define LP87565_RESET_SW_RESET BIT(0)
>> +
>> +#define LP87565_CONFIG_DOUBLE_DELAY BIT(7)
>> +#define LP87565_CONFIG_CLKIN_PD BIT(6)
>> +#define LP87565_CONFIG_EN4_PD BIT(5)
>> +#define LP87565_CONFIG_EN3_PD BIT(4)
>> +#define LP87565_CONFIG_TDIE_WARN_LEVEL BIT(3)
>> +#define LP87565_CONFIG_EN2_PD BIT(2)
>> +#define LP87565_CONFIG_EN1_PD BIT(1)
>> +
>> +#define LP87565_INT_GPIO BIT(7)
>> +#define LP87565_INT_BUCK23 BIT(6)
>> +#define LP87565_INT_BUCK01 BIT(5)
>> +#define LP87565_NO_SYNC_CLK BIT(4)
>> +#define LP87565_TDIE_SD BIT(3)
>> +#define LP87565_TDIE_WARN BIT(2)
>> +#define LP87565_INT_OVP BIT(1)
>> +#define LP87565_I_LOAD_READY BIT(0)
>> +
>> +#define LP87565_INT_TOP2_RESET_REG BIT(0)
>> +
>> +#define LP87565_BUCK1_PG_INT BIT(6)
>> +#define LP87565_BUCK1_SC_INT BIT(5)
>> +#define LP87565_BUCK1_ILIM_INT BIT(4)
>> +#define LP87565_BUCK0_PG_INT BIT(2)
>> +#define LP87565_BUCK0_SC_INT BIT(1)
>> +#define LP87565_BUCK0_ILIM_INT BIT(0)
>> +
>> +#define LP87565_BUCK3_PG_INT BIT(6)
>> +#define LP87565_BUCK3_SC_INT BIT(5)
>> +#define LP87565_BUCK3_ILIM_INT BIT(4)
>> +#define LP87565_BUCK2_PG_INT BIT(2)
>> +#define LP87565_BUCK2_SC_INT BIT(1)
>> +#define LP87565_BUCK2_ILIM_INT BIT(0)
>> +
>> +#define LP87565_SYNC_CLK_STAT BIT(4)
>> +#define LP87565_TDIE_SD_STAT BIT(3)
>> +#define LP87565_TDIE_WARN_STAT BIT(2)
>> +#define LP87565_OVP_STAT BIT(1)
>> +
>> +#define LP87565_BUCK1_STAT BIT(7)
>> +#define LP87565_BUCK1_PG_STAT BIT(6)
>> +#define LP87565_BUCK1_ILIM_STAT BIT(4)
>> +#define LP87565_BUCK0_STAT BIT(3)
>> +#define LP87565_BUCK0_PG_STAT BIT(2)
>> +#define LP87565_BUCK0_ILIM_STAT BIT(0)
>> +
>> +#define LP87565_BUCK3_STAT BIT(7)
>> +#define LP87565_BUCK3_PG_STAT BIT(6)
>> +#define LP87565_BUCK3_ILIM_STAT BIT(4)
>> +#define LP87565_BUCK2_STAT BIT(3)
>> +#define LP87565_BUCK2_PG_STAT BIT(2)
>> +#define LP87565_BUCK2_ILIM_STAT BIT(0)
>> +
>> +#define LPL87565_GPIO_MASK BIT(7)
>> +#define LPL87565_SYNC_CLK_MASK BIT(4)
>> +#define LPL87565_TDIE_WARN_MASK BIT(2)
>> +#define LPL87565_I_LOAD_READY_MASK BIT(0)
>> +
>> +#define LPL87565_RESET_REG_MASK BIT(0)
>> +
>> +#define LPL87565_BUCK1_PG_MASK BIT(6)
>> +#define LPL87565_BUCK1_ILIM_MASK BIT(4)
>> +#define LPL87565_BUCK0_PG_MASK BIT(2)
>> +#define LPL87565_BUCK0_ILIM_MASK BIT(0)
>> +
>> +#define LPL87565_BUCK3_PG_MASK BIT(6)
>> +#define LPL87565_BUCK3_ILIM_MASK BIT(4)
>> +#define LPL87565_BUCK2_PG_MASK BIT(2)
>> +#define LPL87565_BUCK2_ILIM_MASK BIT(0)
>> +
>> +#define LP87565_LOAD_CURRENT_BUCK_SELECT 0x3
>> +
>> +#define LP87565_I_LOAD2_BUCK_LOAD_CURRENT 0x3
>> +#define LP87565_I_LOAD1_BUCK_LOAD_CURRENT 0xFF
>> +
>> +#define LP87565_PG3_SEL 0xC0
>> +#define LP87565_PG2_SEL 0x30
>> +#define LP87565_PG1_SEL 0x0C
>> +#define LP87565_PG0_SEL 0x03
>> +
>> +#define LP87565_HALF_DAY BIT(7)
>> +#define LP87565_EN_PG0_NINT BIT(6)
>> +#define LP87565_PGOOD_SET_DELAY BIT(5)
>> +#define LP87565_EN_PGFLT_STAT BIT(4)
>> +#define LP87565_PGOOD_WINDOW BIT(2)
>> +#define LP87565_PGOOD_OD BIT(1)
>> +#define LP87565_PGOOD_POL BIT(0)
>> +
>> +#define LP87565_PG3_FLT BIT(3)
>> +#define LP87565_PG2_FLT BIT(2)
>> +#define LP87565_PG1_FLT BIT(1)
>> +#define LP87565_PG0_FLT BIT(0)
>> +
>> +#define LP87565_PLL_MODE 0xC0
>> +#define LP87565_EXT_CLK_FREQ 0x1F
>> +
>> +#define LP87565_EN_SPREAD_SPEC BIT(7)
>> +#define LP87565_EN_PIN_CTRL_GPIO3 BIT(6)
>> +#define LP87565_EN_PIN_SELECT_GPIO3 BIT(5)
>> +#define LP87565_EN_PIN_CTRL_GPIO2 BIT(4)
>> +#define LP87565_EN_PIN_SELECT_GPIO2 BIT(3)
>> +#define LP87565_GPIO3_SEL BIT(2)
>> +#define LP87565_GPIO2_SEL BIT(1)
>> +#define LP87565_GPIO1_SEL BIT(0)
>> +
>> +#define LP87565_GOIO3_OD BIT(6)
>> +#define LP87565_GOIO2_OD BIT(5)
>> +#define LP87565_GOIO1_OD BIT(4)
>> +#define LP87565_GOIO3_DIR BIT(2)
>> +#define LP87565_GOIO2_DIR BIT(1)
>> +#define LP87565_GOIO1_DIR BIT(0)
>> +
>> +#define LP87565_GOIO3_IN BIT(2)
>> +#define LP87565_GOIO2_IN BIT(1)
>> +#define LP87565_GOIO1_IN BIT(0)
>> +
>> +#define LP87565_GOIO3_OUT BIT(2)
>> +#define LP87565_GOIO2_OUT BIT(1)
>> +#define LP87565_GOIO1_OUT BIT(0)
>> +
>> +/* Number of step-down converters available */
>> +#define LP87565_NUM_BUCK 6
>> +
>> +enum LP87565_regulator_id {
>> + /* BUCK's */
>> + LP87565_BUCK_0,
>> + LP87565_BUCK_1,
>> + LP87565_BUCK_2,
>> + LP87565_BUCK_3,
>> + LP87565_BUCK_10,
>> + LP87565_BUCK_23,
>> +};
>> +
>> +/**
>> + * struct LP87565 - state holder for the LP87565 driver
>> + * @dev: struct device pointer for MFD device
>> + * @rev: revision of the LP87565
>> + * @dev_type: The device type for example lp87565-q1
>> + * @lock: lock guarding the data structure
>> + * @regmap: register map of the LP87565 PMIC
>> + *
>> + * Device data may be used to access the LP87565 chip
>> + */
>> +struct lp87565 {
>> + struct device *dev;
>> + u8 rev;
>> + u8 dev_type;
>> + struct regmap *regmap;
>> +};
>> +#endif /* __LINUX_MFD_LP87565_H */
>
[toc] | [prev] | [next] | [standalone]
| From | Keerthy <j-keerthy@ti.com> |
|---|---|
| Date | 2017-05-23 05:10 +0200 |
| Message-ID | <tK8mR-5Uk-5@gated-at.bofh.it> |
| In reply to | #1647591 |
On Tuesday 23 May 2017 08:05 AM, Keerthy wrote:
>
>
> On Monday 22 May 2017 11:18 PM, Lee Jones wrote:
>> On Fri, 19 May 2017, Keerthy wrote:
>>
>>> The LP87565 chip is a power management IC for Portable Navigation Systems
>>> and Tablet Computing devices. It contains the following components:
>>>
>>> - Configurable Bucks(Single and multi-phase).
>>> - Configurable General Purpose Output Signals (GPO).
>>>
>>> The LP87565-Q1 variant device uses two 2-phase outputs configuration,
>>> Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
>>> output.
>>>
>>> Signed-off-by: Keerthy <j-keerthy@ti.com>
>>> ---
>>> Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
>>> drivers/mfd/Kconfig | 14 ++
>>> drivers/mfd/Makefile | 1 +
>>> drivers/mfd/lp87565.c | 103 ++++++++
>>> include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
>>> 5 files changed, 437 insertions(+)
>>> create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
>>> create mode 100644 drivers/mfd/lp87565.c
>>> create mode 100644 include/linux/mfd/lp87565.h
>>>
>>> diff --git a/Documentation/devicetree/bindings/mfd/lp87565.txt b/Documentation/devicetree/bindings/mfd/lp87565.txt
>>> new file mode 100644
>>> index 0000000..38a00a1
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/mfd/lp87565.txt
>>> @@ -0,0 +1,44 @@
>>> +TI LP873565 PMIC MFD driver
>>> +
>>> +Required properties:
>>> + - compatible: "ti,lp87565", "ti,lp87565-q1"
>>> + - reg: I2C slave address.
>>> + - gpio-controller: Marks the device node as a GPIO Controller.
>>> + - #gpio-cells: Should be two. The first cell is the pin number and
>>> + the second cell is used to specify flags.
>>> + See ../gpio/gpio.txt for more information.
>>> + - xxx-in-supply: Phandle to parent supply node of each regulator
>>> + populated under regulators node. xxx should match
>>> + the supply_name populated in driver.
>>> + - regulators: List of child nodes that specify the regulator
>>> + initialization data.
>>> +Example:
>>> +
>>> +lp87565: lp87565@60 {
>>> + compatible = "ti,lp87565-q1";
>>> + reg = <0x60>;
>>> + gpio-controller;
>>> + #gpio-cells = <2>;
>>> +
>>> + buck10-in-supply =<&vsys_3v3>;
>>> + buck23-in-supply =<&vsys_3v3>;
>>
>> White space errors.
>>
>> '\n' here.
>
> I will fix this.
>
>>
>>> + regulators: regulators {
>>> + buck10_reg: buck10 {
>>> + /*VDD_MPU*/
>>
>> Whitespace errors.
>
> I will fix this.
>
>>
>>> + regulator-name = "buck10";
>>> + regulator-min-microvolt = <850000>;
>>> + regulator-max-microvolt = <1250000>;
>>> + regulator-always-on;
>>> + regulator-boot-on;
>>> + };
>>> +
>>> + buck23_reg: buck23 {
>>> + /* VDD_GPU*/
>>
>> Whitespace errors.
>
> I will fix this.
>
>>
>>> + regulator-name = "buck23";
>>> + regulator-min-microvolt = <850000>;
>>> + regulator-max-microvolt = <1250000>;
>>> + regulator-boot-on;
>>> + regulator-always-on;
>>> + };
>>> + };
>>> +};
>>> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
>>> index 3eb5c93..5e884f3 100644
>>> --- a/drivers/mfd/Kconfig
>>> +++ b/drivers/mfd/Kconfig
>>> @@ -1325,6 +1325,20 @@ config MFD_TI_LP873X
>>> This driver can also be built as a module. If so, the module
>>> will be called lp873x.
>>>
>>> +config MFD_TI_LP87565
>>> + tristate "TI LP87565 Power Management IC"
>>> + depends on I2C
>>> + select MFD_CORE
>>> + select REGMAP_I2C
>>> + help
>>> + If you say yes here then you get support for the LP87565 series of
>>> + Power Management Integrated Circuits (PMIC).
>>> + These include voltage regulators, thermal protection, configurable
>>> + General Purpose Outputs (GPO) that are used in portable devices.
>>> +
>>> + This driver can also be built as a module. If so, the module
>>> + will be called lp87565.
>>> +
>>> config MFD_TPS65218
>>> tristate "TI TPS65218 Power Management chips"
>>> depends on I2C
>>> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
>>> index c16bf1e..7edbe1b 100644
>>> --- a/drivers/mfd/Makefile
>>> +++ b/drivers/mfd/Makefile
>>> @@ -25,6 +25,7 @@ obj-$(CONFIG_HTC_PASIC3) += htc-pasic3.o
>>> obj-$(CONFIG_HTC_I2CPLD) += htc-i2cpld.o
>>>
>>> obj-$(CONFIG_MFD_TI_LP873X) += lp873x.o
>>> +obj-$(CONFIG_MFD_TI_LP87565) += lp87565.o
>>>
>>> obj-$(CONFIG_MFD_DAVINCI_VOICECODEC) += davinci_voicecodec.o
>>> obj-$(CONFIG_MFD_DM355EVM_MSP) += dm355evm_msp.o
>>> diff --git a/drivers/mfd/lp87565.c b/drivers/mfd/lp87565.c
>>> new file mode 100644
>>> index 0000000..dff882f
>>> --- /dev/null
>>> +++ b/drivers/mfd/lp87565.c
>>> @@ -0,0 +1,103 @@
>>> +/*
>>> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
>>> + *
>>> + * Author: Keerthy <j-keerthy@ti.com>
>>
>> We usually ask for full "first last" names.
>
> Keerthy is my full name and i do not have a surname.
>
>>
>>> + * 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 version 2.
>>> + *
>>> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
>>> + * kind, whether express or implied; without even the implied warranty
>>> + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
>>> + * GNU General Public License for more details.
>>
>> Can you use the short licence?
>
> Okay Sure.
I hope the below is what you are looking for:
"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."
>
>>
>>> + */
>>> +
>>> +#include <linux/interrupt.h>
>>> +#include <linux/mfd/core.h>
>>> +#include <linux/module.h>
>>> +#include <linux/of_device.h>
>>> +#include <linux/regmap.h>
>>> +
>>> +#include <linux/mfd/lp87565.h>
>>> +
>>> +static const struct regmap_config lp87565_regmap_config = {
>>> + .reg_bits = 8,
>>> + .val_bits = 8,
>>> + .max_register = LP87565_REG_MAX,
>>> +};
>>> +
>>> +static const struct mfd_cell lp87565_cells[] = {
>>> + { .name = "lp87565-q1-regulator", },
>>> + { .name = "lp87565-q1-gpio", },
>>> +};
>>> +
>>> +static const struct of_device_id of_lp87565_match_table[] = {
>>> + {
>>> + .compatible = "ti,lp87565-q1",
>>> + .data = (void *)LP87565_DEVICE_TYPE_LP87565_Q1,
>>> + },
>>> + {}
>>> +};
>>> +MODULE_DEVICE_TABLE(of, of_lp87565_match_table);
>>> +
>>> +static int lp87565_probe(struct i2c_client *client,
>>> + const struct i2c_device_id *ids)
>>> +{
>>> + struct lp87565 *lp87565;
>>> + const struct of_device_id *of_id;
>>> + int ret;
>>> + unsigned int otpid;
>>> +
>>> + lp87565 = devm_kzalloc(&client->dev, sizeof(*lp87565), GFP_KERNEL);
>>> + if (!lp87565)
>>> + return -ENOMEM;
>>> +
>>> + lp87565->dev = &client->dev;
>>> +
>>> + lp87565->regmap = devm_regmap_init_i2c(client, &lp87565_regmap_config);
>>> + if (IS_ERR(lp87565->regmap)) {
>>> + ret = PTR_ERR(lp87565->regmap);
>>> + dev_err(lp87565->dev,
>>> + "Failed to initialize register map: %d\n", ret);
>>> + return ret;
>>> + }
>>> +
>>> + ret = regmap_read(lp87565->regmap, LP87565_REG_OTP_REV, &otpid);
>>> + if (ret) {
>>> + dev_err(lp87565->dev, "Failed to read OTP ID\n");
>>> + return ret;
>>> + }
>>> +
>>> + lp87565->rev = otpid & LP87565_OTP_REV_OTP_ID;
>>
>> '\n' here.
>
> Okay.
>
>>
>>> + of_id = of_match_device(of_lp87565_match_table, &client->dev);
>>> + if (of_id)
>>> + lp87565->dev_type = (enum lp87565_device_type)of_id->data;
>>> +
>>> + i2c_set_clientdata(client, lp87565);
>>> +
>>> + ret = mfd_add_devices(lp87565->dev, PLATFORM_DEVID_AUTO, lp87565_cells,
>>> + ARRAY_SIZE(lp87565_cells), NULL, 0, NULL);
>>> +
>>> + return ret;
>>> +}
>>> +
>>> +static const struct i2c_device_id lp87565_id_table[] = {
>>> + { "lp87565-q1", 0 },
>>> + { },
>>> +};
>>> +MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
>>
>> Is this an OF only driver, or not?
Yes OF only driver.
>>
>>> +static struct i2c_driver lp87565_driver = {
>>> + .driver = {
>>> + .name = "lp87565",
>>> + .of_match_table = of_lp87565_match_table,
>>> + },
>>> + .probe = lp87565_probe,
>>> + .id_table = lp87565_id_table,
>>> +};
>>> +module_i2c_driver(lp87565_driver);
>>> +
>>> +MODULE_AUTHOR("J Keerthy <j-keerthy@ti.com>");
>>> +MODULE_DESCRIPTION("lp87565 chip family Multi-Function Device driver");
>>> +MODULE_LICENSE("GPL v2");
>>> diff --git a/include/linux/mfd/lp87565.h b/include/linux/mfd/lp87565.h
>>> new file mode 100644
>>> index 0000000..6112365
>>> --- /dev/null
>>> +++ b/include/linux/mfd/lp87565.h
>>> @@ -0,0 +1,275 @@
>>> +/*
>>> + * Functions to access LP87565 power management chip.
>>> + *
>>> + * Copyright (C) 2016 Texas Instruments Incorporated - http://www.ti.com/
>>
>> Please update the Copyright.
>
> Oops yes. Thanks for catching it. I will fix in v2.
>
> Thanks for reviewing it.
>
>>
>>> + * 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 version 2.
>>> + *
>>> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
>>> + * kind, whether express or implied; 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_LP87565_H
>>> +#define __LINUX_MFD_LP87565_H
>>> +
>>> +#include <linux/i2c.h>
>>> +#include <linux/regulator/driver.h>
>>> +#include <linux/regulator/machine.h>
>>> +
>>> +enum lp87565_device_type {
>>> + LP87565_DEVICE_TYPE_UNKNOWN = 0,
>>> + LP87565_DEVICE_TYPE_LP87565_Q1,
>>> +};
>>> +
>>> +/* All register addresses */
>>> +#define LP87565_REG_DEV_REV 0X00
>>> +#define LP87565_REG_OTP_REV 0X01
>>> +#define LP87565_REG_BUCK0_CTRL_1 0X02
>>> +#define LP87565_REG_BUCK0_CTRL_2 0X03
>>> +
>>> +#define LP87565_REG_BUCK1_CTRL_1 0X04
>>> +#define LP87565_REG_BUCK1_CTRL_2 0X05
>>> +
>>> +#define LP87565_REG_BUCK2_CTRL_1 0X06
>>> +#define LP87565_REG_BUCK2_CTRL_2 0X07
>>> +
>>> +#define LP87565_REG_BUCK3_CTRL_1 0X08
>>> +#define LP87565_REG_BUCK3_CTRL_2 0X09
>>> +
>>> +#define LP87565_REG_BUCK0_VOUT 0X0A
>>> +#define LP87565_REG_BUCK0_FLOOR_VOUT 0X0B
>>> +
>>> +#define LP87565_REG_BUCK1_VOUT 0X0C
>>> +#define LP87565_REG_BUCK1_FLOOR_VOUT 0X0D
>>> +
>>> +#define LP87565_REG_BUCK2_VOUT 0X0E
>>> +#define LP87565_REG_BUCK2_FLOOR_VOUT 0X0F
>>> +
>>> +#define LP87565_REG_BUCK3_VOUT 0X10
>>> +#define LP87565_REG_BUCK3_FLOOR_VOUT 0X11
>>> +
>>> +#define LP87565_REG_BUCK0_DELAY 0X12
>>> +#define LP87565_REG_BUCK1_DELAY 0X13
>>> +
>>> +#define LP87565_REG_BUCK2_DELAY 0X14
>>> +#define LP87565_REG_BUCK3_DELAY 0X15
>>> +
>>> +#define LP87565_REG_GPO2_DELAY 0X16
>>> +#define LP87565_REG_GPO3_DELAY 0X17
>>> +#define LP87565_REG_RESET 0X18
>>> +#define LP87565_REG_CONFIG 0X19
>>> +
>>> +#define LP87565_REG_INT_TOP_1 0X1A
>>> +#define LP87565_REG_INT_TOP_2 0X1B
>>> +
>>> +#define LP87565_REG_INT_BUCK_0_1 0X1C
>>> +#define LP87565_REG_INT_BUCK_2_3 0X1D
>>> +#define LP87565_REG_TOP_STAT 0X1E
>>> +#define LP87565_REG_BUCK_0_1_STAT 0X1F
>>> +#define LP87565_REG_BUCK_2_3_STAT 0x20
>>> +
>>> +#define LP87565_REG_TOP_MASK_1 0x21
>>> +#define LP87565_REG_TOP_MASK_2 0x22
>>> +
>>> +#define LP87565_REG_BUCK_0_1_MASK 0x23
>>> +#define LP87565_REG_BUCK_2_3_MASK 0x24
>>> +#define LP87565_REG_SEL_I_LOAD 0x25
>>> +
>>> +#define LP87565_REG_I_LOAD_2 0x26
>>> +#define LP87565_REG_I_LOAD_1 0x27
>>> +
>>> +#define LP87565_REG_PGOOD_CTRL1 0x28
>>> +#define LP87565_REG_PGOOD_CTRL2 0x29
>>> +#define LP87565_REG_PGOOD_FLT 0x2A
>>> +#define LP87565_REG_PLL_CTRL 0x2B
>>> +#define LP87565_REG_PIN_FUNCTION 0x2C
>>> +#define LP87565_REG_GPIO_CONFIG 0x2D
>>> +#define LP87565_REG_GPIO_IN 0x2E
>>> +#define LP87565_REG_GPIO_OUT 0x2F
>>> +
>>> +#define LP87565_REG_MAX LP87565_REG_GPIO_OUT
>>> +
>>> +/* Register field definitions */
>>> +#define LP87565_DEV_REV_DEV_ID 0xC0
>>> +#define LP87565_DEV_REV_ALL_LAYER 0x30
>>> +#define LP87565_DEV_REV_METAL_LAYER 0x0F
>>> +
>>> +#define LP87565_OTP_REV_OTP_ID 0xFF
>>> +
>>> +#define LP87565_BUCK_CTRL_1_EN BIT(7)
>>> +#define LP87565_BUCK_CTRL_1_EN_PIN_CTRL BIT(6)
>>> +#define LP87565_BUCK_CTRL_1_PIN_SELECT_EN 0x30
>>> +
>>> +#define LP87565_BUCK_CTRL_1_ROOF_FLOOR_EN BIT(3)
>>> +#define LP87565_BUCK_CTRL_1_RDIS_EN BIT(2)
>>> +#define LP87565_BUCK_CTRL_1_FPWM BIT(1)
>>> +/* Bit0 is reserved for BUCK1 and BUCK3 and valid only for BUCK0 and BUCK2 */
>>> +#define LP87565_BUCK_CTRL_1_FPWM_MP_0_2 BIT(0)
>>> +
>>> +#define LP87565_BUCK_CTRL_2_ILIM 0x38
>>> +#define LP87565_BUCK_CTRL_2_SLEW_RATE 0x07
>>> +
>>> +#define LP87565_BUCK_VSET 0xFF
>>> +#define LP87565_BUCK_FLOOR_VSET 0xFF
>>> +
>>> +#define LP87565_BUCK_SHUTDOWN_DELAY 0xF0
>>> +#define LP87565_BUCK_STARTUP_DELAY 0x0F
>>> +
>>> +#define LP87565_GPIO_SHUTDOWN_DELAY 0xF0
>>> +#define LP87565_GPIO_STARTUP_DELAY 0x0F
>>> +
>>> +#define LP87565_RESET_SW_RESET BIT(0)
>>> +
>>> +#define LP87565_CONFIG_DOUBLE_DELAY BIT(7)
>>> +#define LP87565_CONFIG_CLKIN_PD BIT(6)
>>> +#define LP87565_CONFIG_EN4_PD BIT(5)
>>> +#define LP87565_CONFIG_EN3_PD BIT(4)
>>> +#define LP87565_CONFIG_TDIE_WARN_LEVEL BIT(3)
>>> +#define LP87565_CONFIG_EN2_PD BIT(2)
>>> +#define LP87565_CONFIG_EN1_PD BIT(1)
>>> +
>>> +#define LP87565_INT_GPIO BIT(7)
>>> +#define LP87565_INT_BUCK23 BIT(6)
>>> +#define LP87565_INT_BUCK01 BIT(5)
>>> +#define LP87565_NO_SYNC_CLK BIT(4)
>>> +#define LP87565_TDIE_SD BIT(3)
>>> +#define LP87565_TDIE_WARN BIT(2)
>>> +#define LP87565_INT_OVP BIT(1)
>>> +#define LP87565_I_LOAD_READY BIT(0)
>>> +
>>> +#define LP87565_INT_TOP2_RESET_REG BIT(0)
>>> +
>>> +#define LP87565_BUCK1_PG_INT BIT(6)
>>> +#define LP87565_BUCK1_SC_INT BIT(5)
>>> +#define LP87565_BUCK1_ILIM_INT BIT(4)
>>> +#define LP87565_BUCK0_PG_INT BIT(2)
>>> +#define LP87565_BUCK0_SC_INT BIT(1)
>>> +#define LP87565_BUCK0_ILIM_INT BIT(0)
>>> +
>>> +#define LP87565_BUCK3_PG_INT BIT(6)
>>> +#define LP87565_BUCK3_SC_INT BIT(5)
>>> +#define LP87565_BUCK3_ILIM_INT BIT(4)
>>> +#define LP87565_BUCK2_PG_INT BIT(2)
>>> +#define LP87565_BUCK2_SC_INT BIT(1)
>>> +#define LP87565_BUCK2_ILIM_INT BIT(0)
>>> +
>>> +#define LP87565_SYNC_CLK_STAT BIT(4)
>>> +#define LP87565_TDIE_SD_STAT BIT(3)
>>> +#define LP87565_TDIE_WARN_STAT BIT(2)
>>> +#define LP87565_OVP_STAT BIT(1)
>>> +
>>> +#define LP87565_BUCK1_STAT BIT(7)
>>> +#define LP87565_BUCK1_PG_STAT BIT(6)
>>> +#define LP87565_BUCK1_ILIM_STAT BIT(4)
>>> +#define LP87565_BUCK0_STAT BIT(3)
>>> +#define LP87565_BUCK0_PG_STAT BIT(2)
>>> +#define LP87565_BUCK0_ILIM_STAT BIT(0)
>>> +
>>> +#define LP87565_BUCK3_STAT BIT(7)
>>> +#define LP87565_BUCK3_PG_STAT BIT(6)
>>> +#define LP87565_BUCK3_ILIM_STAT BIT(4)
>>> +#define LP87565_BUCK2_STAT BIT(3)
>>> +#define LP87565_BUCK2_PG_STAT BIT(2)
>>> +#define LP87565_BUCK2_ILIM_STAT BIT(0)
>>> +
>>> +#define LPL87565_GPIO_MASK BIT(7)
>>> +#define LPL87565_SYNC_CLK_MASK BIT(4)
>>> +#define LPL87565_TDIE_WARN_MASK BIT(2)
>>> +#define LPL87565_I_LOAD_READY_MASK BIT(0)
>>> +
>>> +#define LPL87565_RESET_REG_MASK BIT(0)
>>> +
>>> +#define LPL87565_BUCK1_PG_MASK BIT(6)
>>> +#define LPL87565_BUCK1_ILIM_MASK BIT(4)
>>> +#define LPL87565_BUCK0_PG_MASK BIT(2)
>>> +#define LPL87565_BUCK0_ILIM_MASK BIT(0)
>>> +
>>> +#define LPL87565_BUCK3_PG_MASK BIT(6)
>>> +#define LPL87565_BUCK3_ILIM_MASK BIT(4)
>>> +#define LPL87565_BUCK2_PG_MASK BIT(2)
>>> +#define LPL87565_BUCK2_ILIM_MASK BIT(0)
>>> +
>>> +#define LP87565_LOAD_CURRENT_BUCK_SELECT 0x3
>>> +
>>> +#define LP87565_I_LOAD2_BUCK_LOAD_CURRENT 0x3
>>> +#define LP87565_I_LOAD1_BUCK_LOAD_CURRENT 0xFF
>>> +
>>> +#define LP87565_PG3_SEL 0xC0
>>> +#define LP87565_PG2_SEL 0x30
>>> +#define LP87565_PG1_SEL 0x0C
>>> +#define LP87565_PG0_SEL 0x03
>>> +
>>> +#define LP87565_HALF_DAY BIT(7)
>>> +#define LP87565_EN_PG0_NINT BIT(6)
>>> +#define LP87565_PGOOD_SET_DELAY BIT(5)
>>> +#define LP87565_EN_PGFLT_STAT BIT(4)
>>> +#define LP87565_PGOOD_WINDOW BIT(2)
>>> +#define LP87565_PGOOD_OD BIT(1)
>>> +#define LP87565_PGOOD_POL BIT(0)
>>> +
>>> +#define LP87565_PG3_FLT BIT(3)
>>> +#define LP87565_PG2_FLT BIT(2)
>>> +#define LP87565_PG1_FLT BIT(1)
>>> +#define LP87565_PG0_FLT BIT(0)
>>> +
>>> +#define LP87565_PLL_MODE 0xC0
>>> +#define LP87565_EXT_CLK_FREQ 0x1F
>>> +
>>> +#define LP87565_EN_SPREAD_SPEC BIT(7)
>>> +#define LP87565_EN_PIN_CTRL_GPIO3 BIT(6)
>>> +#define LP87565_EN_PIN_SELECT_GPIO3 BIT(5)
>>> +#define LP87565_EN_PIN_CTRL_GPIO2 BIT(4)
>>> +#define LP87565_EN_PIN_SELECT_GPIO2 BIT(3)
>>> +#define LP87565_GPIO3_SEL BIT(2)
>>> +#define LP87565_GPIO2_SEL BIT(1)
>>> +#define LP87565_GPIO1_SEL BIT(0)
>>> +
>>> +#define LP87565_GOIO3_OD BIT(6)
>>> +#define LP87565_GOIO2_OD BIT(5)
>>> +#define LP87565_GOIO1_OD BIT(4)
>>> +#define LP87565_GOIO3_DIR BIT(2)
>>> +#define LP87565_GOIO2_DIR BIT(1)
>>> +#define LP87565_GOIO1_DIR BIT(0)
>>> +
>>> +#define LP87565_GOIO3_IN BIT(2)
>>> +#define LP87565_GOIO2_IN BIT(1)
>>> +#define LP87565_GOIO1_IN BIT(0)
>>> +
>>> +#define LP87565_GOIO3_OUT BIT(2)
>>> +#define LP87565_GOIO2_OUT BIT(1)
>>> +#define LP87565_GOIO1_OUT BIT(0)
>>> +
>>> +/* Number of step-down converters available */
>>> +#define LP87565_NUM_BUCK 6
>>> +
>>> +enum LP87565_regulator_id {
>>> + /* BUCK's */
>>> + LP87565_BUCK_0,
>>> + LP87565_BUCK_1,
>>> + LP87565_BUCK_2,
>>> + LP87565_BUCK_3,
>>> + LP87565_BUCK_10,
>>> + LP87565_BUCK_23,
>>> +};
>>> +
>>> +/**
>>> + * struct LP87565 - state holder for the LP87565 driver
>>> + * @dev: struct device pointer for MFD device
>>> + * @rev: revision of the LP87565
>>> + * @dev_type: The device type for example lp87565-q1
>>> + * @lock: lock guarding the data structure
>>> + * @regmap: register map of the LP87565 PMIC
>>> + *
>>> + * Device data may be used to access the LP87565 chip
>>> + */
>>> +struct lp87565 {
>>> + struct device *dev;
>>> + u8 rev;
>>> + u8 dev_type;
>>> + struct regmap *regmap;
>>> +};
>>> +#endif /* __LINUX_MFD_LP87565_H */
>>
[toc] | [prev] | [next] | [standalone]
| From | Lee Jones <lee.jones@linaro.org> |
|---|---|
| Date | 2017-05-23 09:00 +0200 |
| Message-ID | <tKbXr-7Xu-1@gated-at.bofh.it> |
| In reply to | #1647591 |
On Tue, 23 May 2017, Keerthy wrote:
> On Monday 22 May 2017 11:18 PM, Lee Jones wrote:
> > On Fri, 19 May 2017, Keerthy wrote:
> >
> >> The LP87565 chip is a power management IC for Portable Navigation Systems
> >> and Tablet Computing devices. It contains the following components:
> >>
> >> - Configurable Bucks(Single and multi-phase).
> >> - Configurable General Purpose Output Signals (GPO).
> >>
> >> The LP87565-Q1 variant device uses two 2-phase outputs configuration,
> >> Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
> >> output.
> >>
> >> Signed-off-by: Keerthy <j-keerthy@ti.com>
> >> ---
> >> Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
> >> drivers/mfd/Kconfig | 14 ++
> >> drivers/mfd/Makefile | 1 +
> >> drivers/mfd/lp87565.c | 103 ++++++++
> >> include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
> >> 5 files changed, 437 insertions(+)
> >> create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
> >> create mode 100644 drivers/mfd/lp87565.c
> >> create mode 100644 include/linux/mfd/lp87565.h
> >>
[...]
> >> +/*
> >> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
> >> + *
> >> + * Author: Keerthy <j-keerthy@ti.com>
> >
> > We usually ask for full "first last" names.
>
> Keerthy is my full name and i do not have a surname.
What is the 'J' for in your email address?
[...]
> >> +static const struct i2c_device_id lp87565_id_table[] = {
> >> + { "lp87565-q1", 0 },
> >> + { },
> >> +};
> >> +MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
> >
> > Is this an OF only driver, or not?
You didn't answer my question?
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
[toc] | [prev] | [next] | [standalone]
| From | Keerthy <j-keerthy@ti.com> |
|---|---|
| Date | 2017-05-23 09:50 +0200 |
| Message-ID | <tKcJP-65-5@gated-at.bofh.it> |
| In reply to | #1647688 |
On Tuesday 23 May 2017 12:27 PM, Lee Jones wrote:
> On Tue, 23 May 2017, Keerthy wrote:
>> On Monday 22 May 2017 11:18 PM, Lee Jones wrote:
>>> On Fri, 19 May 2017, Keerthy wrote:
>>>
>>>> The LP87565 chip is a power management IC for Portable Navigation Systems
>>>> and Tablet Computing devices. It contains the following components:
>>>>
>>>> - Configurable Bucks(Single and multi-phase).
>>>> - Configurable General Purpose Output Signals (GPO).
>>>>
>>>> The LP87565-Q1 variant device uses two 2-phase outputs configuration,
>>>> Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
>>>> output.
>>>>
>>>> Signed-off-by: Keerthy <j-keerthy@ti.com>
>>>> ---
>>>> Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
>>>> drivers/mfd/Kconfig | 14 ++
>>>> drivers/mfd/Makefile | 1 +
>>>> drivers/mfd/lp87565.c | 103 ++++++++
>>>> include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
>>>> 5 files changed, 437 insertions(+)
>>>> create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
>>>> create mode 100644 drivers/mfd/lp87565.c
>>>> create mode 100644 include/linux/mfd/lp87565.h
>>>>
>
> [...]
>
>>>> +/*
>>>> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
>>>> + *
>>>> + * Author: Keerthy <j-keerthy@ti.com>
>>>
>>> We usually ask for full "first last" names.
>>
>> Keerthy is my full name and i do not have a surname.
>
> What is the 'J' for in your email address?
Father's initials.
> [...]
>
>>>> +static const struct i2c_device_id lp87565_id_table[] = {
>>>> + { "lp87565-q1", 0 },
>>>> + { },
>>>> +};
>>>> +MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
>>>
>>> Is this an OF only driver, or not?
>
> You didn't answer my question?
>
Sorry i replied on top again. It will be an OF only driver.
Regards,
Keerthy
[toc] | [prev] | [next] | [standalone]
| From | Keerthy <j-keerthy@ti.com> |
|---|---|
| Date | 2017-05-23 10:00 +0200 |
| Message-ID | <tKcTw-a4-21@gated-at.bofh.it> |
| In reply to | #1647738 |
On Tuesday 23 May 2017 01:11 PM, Keerthy wrote:
>
>
> On Tuesday 23 May 2017 12:27 PM, Lee Jones wrote:
>> On Tue, 23 May 2017, Keerthy wrote:
>>> On Monday 22 May 2017 11:18 PM, Lee Jones wrote:
>>>> On Fri, 19 May 2017, Keerthy wrote:
>>>>
>>>>> The LP87565 chip is a power management IC for Portable Navigation Systems
>>>>> and Tablet Computing devices. It contains the following components:
>>>>>
>>>>> - Configurable Bucks(Single and multi-phase).
>>>>> - Configurable General Purpose Output Signals (GPO).
>>>>>
>>>>> The LP87565-Q1 variant device uses two 2-phase outputs configuration,
>>>>> Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
>>>>> output.
>>>>>
>>>>> Signed-off-by: Keerthy <j-keerthy@ti.com>
>>>>> ---
>>>>> Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
>>>>> drivers/mfd/Kconfig | 14 ++
>>>>> drivers/mfd/Makefile | 1 +
>>>>> drivers/mfd/lp87565.c | 103 ++++++++
>>>>> include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
>>>>> 5 files changed, 437 insertions(+)
>>>>> create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
>>>>> create mode 100644 drivers/mfd/lp87565.c
>>>>> create mode 100644 include/linux/mfd/lp87565.h
>>>>>
>>
>> [...]
>>
>>>>> +/*
>>>>> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
>>>>> + *
>>>>> + * Author: Keerthy <j-keerthy@ti.com>
>>>>
>>>> We usually ask for full "first last" names.
>>>
>>> Keerthy is my full name and i do not have a surname.
>>
>> What is the 'J' for in your email address?
>
> Father's initials.
https://lkml.org/lkml/2012/7/11/482
I have been using this for a while now.
>
>> [...]
>>
>>>>> +static const struct i2c_device_id lp87565_id_table[] = {
>>>>> + { "lp87565-q1", 0 },
>>>>> + { },
>>>>> +};
>>>>> +MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
>>>>
>>>> Is this an OF only driver, or not?
>>
>> You didn't answer my question?
>>
>
> Sorry i replied on top again. It will be an OF only driver.
>
> Regards,
> Keerthy
>
[toc] | [prev] | [next] | [standalone]
| From | Lee Jones <lee.jones@linaro.org> |
|---|---|
| Date | 2017-05-23 10:50 +0200 |
| Message-ID | <tKdFT-Jg-13@gated-at.bofh.it> |
| In reply to | #1647755 |
On Tue, 23 May 2017, Keerthy wrote:
> On Tuesday 23 May 2017 01:11 PM, Keerthy wrote:
> > On Tuesday 23 May 2017 12:27 PM, Lee Jones wrote:
> >> On Tue, 23 May 2017, Keerthy wrote:
> >>> On Monday 22 May 2017 11:18 PM, Lee Jones wrote:
> >>>> On Fri, 19 May 2017, Keerthy wrote:
> >>>>
> >>>>> The LP87565 chip is a power management IC for Portable Navigation Systems
> >>>>> and Tablet Computing devices. It contains the following components:
> >>>>>
> >>>>> - Configurable Bucks(Single and multi-phase).
> >>>>> - Configurable General Purpose Output Signals (GPO).
> >>>>>
> >>>>> The LP87565-Q1 variant device uses two 2-phase outputs configuration,
> >>>>> Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
> >>>>> output.
> >>>>>
> >>>>> Signed-off-by: Keerthy <j-keerthy@ti.com>
> >>>>> ---
> >>>>> Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
> >>>>> drivers/mfd/Kconfig | 14 ++
> >>>>> drivers/mfd/Makefile | 1 +
> >>>>> drivers/mfd/lp87565.c | 103 ++++++++
> >>>>> include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
> >>>>> 5 files changed, 437 insertions(+)
> >>>>> create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
> >>>>> create mode 100644 drivers/mfd/lp87565.c
> >>>>> create mode 100644 include/linux/mfd/lp87565.h
> >>>>>
> >>
> >> [...]
> >>
> >>>>> +/*
> >>>>> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
> >>>>> + *
> >>>>> + * Author: Keerthy <j-keerthy@ti.com>
> >>>>
> >>>> We usually ask for full "first last" names.
> >>>
> >>> Keerthy is my full name and i do not have a surname.
> >>
> >> What is the 'J' for in your email address?
> >
> > Father's initials.
>
> https://lkml.org/lkml/2012/7/11/482
>
> I have been using this for a while now.
Right and Trump has been president for a while now, it doesn't mean
it's okay. ;)
> >> [...]
> >>
> >>>>> +static const struct i2c_device_id lp87565_id_table[] = {
> >>>>> + { "lp87565-q1", 0 },
> >>>>> + { },
> >>>>> +};
> >>>>> +MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
> >>>>
> >>>> Is this an OF only driver, or not?
> >>
> >> You didn't answer my question?
> >>
> >
> > Sorry i replied on top again. It will be an OF only driver.
> >
> > Regards,
> > Keerthy
> >
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
[toc] | [prev] | [next] | [standalone]
| From | Keerthy <j-keerthy@ti.com> |
|---|---|
| Date | 2017-05-23 12:00 +0200 |
| Message-ID | <tKeLE-1oL-13@gated-at.bofh.it> |
| In reply to | #1647808 |
On Tuesday 23 May 2017 02:17 PM, Lee Jones wrote:
> On Tue, 23 May 2017, Keerthy wrote:
>> On Tuesday 23 May 2017 01:11 PM, Keerthy wrote:
>>> On Tuesday 23 May 2017 12:27 PM, Lee Jones wrote:
>>>> On Tue, 23 May 2017, Keerthy wrote:
>>>>> On Monday 22 May 2017 11:18 PM, Lee Jones wrote:
>>>>>> On Fri, 19 May 2017, Keerthy wrote:
>>>>>>
>>>>>>> The LP87565 chip is a power management IC for Portable Navigation Systems
>>>>>>> and Tablet Computing devices. It contains the following components:
>>>>>>>
>>>>>>> - Configurable Bucks(Single and multi-phase).
>>>>>>> - Configurable General Purpose Output Signals (GPO).
>>>>>>>
>>>>>>> The LP87565-Q1 variant device uses two 2-phase outputs configuration,
>>>>>>> Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
>>>>>>> output.
>>>>>>>
>>>>>>> Signed-off-by: Keerthy <j-keerthy@ti.com>
>>>>>>> ---
>>>>>>> Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
>>>>>>> drivers/mfd/Kconfig | 14 ++
>>>>>>> drivers/mfd/Makefile | 1 +
>>>>>>> drivers/mfd/lp87565.c | 103 ++++++++
>>>>>>> include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
>>>>>>> 5 files changed, 437 insertions(+)
>>>>>>> create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
>>>>>>> create mode 100644 drivers/mfd/lp87565.c
>>>>>>> create mode 100644 include/linux/mfd/lp87565.h
>>>>>>>
>>>>
>>>> [...]
>>>>
>>>>>>> +/*
>>>>>>> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
>>>>>>> + *
>>>>>>> + * Author: Keerthy <j-keerthy@ti.com>
>>>>>>
>>>>>> We usually ask for full "first last" names.
>>>>>
>>>>> Keerthy is my full name and i do not have a surname.
>>>>
>>>> What is the 'J' for in your email address?
>>>
>>> Father's initials.
>>
>> https://lkml.org/lkml/2012/7/11/482
>>
>> I have been using this for a while now.
>
> Right and Trump has been president for a while now, it doesn't mean
> it's okay. ;)
I won't comment on Trump! Let me assure you once again that my full name
is Keerthy just like your full name is Lee Jones :-).
>
>>>> [...]
>>>>
>>>>>>> +static const struct i2c_device_id lp87565_id_table[] = {
>>>>>>> + { "lp87565-q1", 0 },
>>>>>>> + { },
>>>>>>> +};
>>>>>>> +MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
>>>>>>
>>>>>> Is this an OF only driver, or not?
>>>>
>>>> You didn't answer my question?
>>>>
>>>
>>> Sorry i replied on top again. It will be an OF only driver.
>>>
>>> Regards,
>>> Keerthy
>>>
>
[toc] | [prev] | [next] | [standalone]
| From | Lee Jones <lee.jones@linaro.org> |
|---|---|
| Date | 2017-05-23 10:50 +0200 |
| Message-ID | <tKdFU-Jg-19@gated-at.bofh.it> |
| In reply to | #1647738 |
On Tue, 23 May 2017, Keerthy wrote:
> On Tuesday 23 May 2017 12:27 PM, Lee Jones wrote:
> > On Tue, 23 May 2017, Keerthy wrote:
> >> On Monday 22 May 2017 11:18 PM, Lee Jones wrote:
> >>> On Fri, 19 May 2017, Keerthy wrote:
> >>>
> >>>> The LP87565 chip is a power management IC for Portable Navigation Systems
> >>>> and Tablet Computing devices. It contains the following components:
> >>>>
> >>>> - Configurable Bucks(Single and multi-phase).
> >>>> - Configurable General Purpose Output Signals (GPO).
> >>>>
> >>>> The LP87565-Q1 variant device uses two 2-phase outputs configuration,
> >>>> Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
> >>>> output.
> >>>>
> >>>> Signed-off-by: Keerthy <j-keerthy@ti.com>
> >>>> ---
> >>>> Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
> >>>> drivers/mfd/Kconfig | 14 ++
> >>>> drivers/mfd/Makefile | 1 +
> >>>> drivers/mfd/lp87565.c | 103 ++++++++
> >>>> include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
> >>>> 5 files changed, 437 insertions(+)
> >>>> create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
> >>>> create mode 100644 drivers/mfd/lp87565.c
> >>>> create mode 100644 include/linux/mfd/lp87565.h
> >>>>
> >
> > [...]
> >
> >>>> +/*
> >>>> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
> >>>> + *
> >>>> + * Author: Keerthy <j-keerthy@ti.com>
> >>>
> >>> We usually ask for full "first last" names.
> >>
> >> Keerthy is my full name and i do not have a surname.
> >
> > What is the 'J' for in your email address?
>
> Father's initials.
Okay.
> > [...]
> >
> >>>> +static const struct i2c_device_id lp87565_id_table[] = {
> >>>> + { "lp87565-q1", 0 },
> >>>> + { },
> >>>> +};
> >>>> +MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
> >>>
> >>> Is this an OF only driver, or not?
> >
> > You didn't answer my question?
>
> Sorry i replied on top again. It will be an OF only driver.
Okay, then you don't need this table and you should depend on OF in
the Kconfig file.
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
[toc] | [prev] | [next] | [standalone]
| From | Keerthy <j-keerthy@ti.com> |
|---|---|
| Date | 2017-05-23 12:20 +0200 |
| Message-ID | <tKf4Z-1Lc-1@gated-at.bofh.it> |
| In reply to | #1647812 |
On Tuesday 23 May 2017 02:15 PM, Lee Jones wrote:
> On Tue, 23 May 2017, Keerthy wrote:
>> On Tuesday 23 May 2017 12:27 PM, Lee Jones wrote:
>>> On Tue, 23 May 2017, Keerthy wrote:
>>>> On Monday 22 May 2017 11:18 PM, Lee Jones wrote:
>>>>> On Fri, 19 May 2017, Keerthy wrote:
>>>>>
>>>>>> The LP87565 chip is a power management IC for Portable Navigation Systems
>>>>>> and Tablet Computing devices. It contains the following components:
>>>>>>
>>>>>> - Configurable Bucks(Single and multi-phase).
>>>>>> - Configurable General Purpose Output Signals (GPO).
>>>>>>
>>>>>> The LP87565-Q1 variant device uses two 2-phase outputs configuration,
>>>>>> Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
>>>>>> output.
>>>>>>
>>>>>> Signed-off-by: Keerthy <j-keerthy@ti.com>
>>>>>> ---
>>>>>> Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
>>>>>> drivers/mfd/Kconfig | 14 ++
>>>>>> drivers/mfd/Makefile | 1 +
>>>>>> drivers/mfd/lp87565.c | 103 ++++++++
>>>>>> include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
>>>>>> 5 files changed, 437 insertions(+)
>>>>>> create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
>>>>>> create mode 100644 drivers/mfd/lp87565.c
>>>>>> create mode 100644 include/linux/mfd/lp87565.h
>>>>>>
>>>
>>> [...]
>>>
>>>>>> +/*
>>>>>> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
>>>>>> + *
>>>>>> + * Author: Keerthy <j-keerthy@ti.com>
>>>>>
>>>>> We usually ask for full "first last" names.
>>>>
>>>> Keerthy is my full name and i do not have a surname.
>>>
>>> What is the 'J' for in your email address?
>>
>> Father's initials.
>
> Okay.
>
>>> [...]
>>>
>>>>>> +static const struct i2c_device_id lp87565_id_table[] = {
>>>>>> + { "lp87565-q1", 0 },
>>>>>> + { },
>>>>>> +};
>>>>>> +MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
>>>>>
>>>>> Is this an OF only driver, or not?
>>>
>>> You didn't answer my question?
>>
>> Sorry i replied on top again. It will be an OF only driver.
>
> Okay, then you don't need this table and you should depend on OF in
> the Kconfig file.
Okay. Cool thanks for this info.
I am seeing this commit: 4895e493f91bff7f96f328b883c7f6448aa6abc6
mfd: Export OF module alias information in missing drivers
So no need of i2c_device_id for any of the OF-only mfd drivers?
>
[toc] | [prev] | [next] | [standalone]
| From | Keerthy <j-keerthy@ti.com> |
|---|---|
| Date | 2017-05-23 14:30 +0200 |
| Message-ID | <tKh6N-38u-13@gated-at.bofh.it> |
| In reply to | #1647913 |
On Tuesday 23 May 2017 03:41 PM, Keerthy wrote:
>
>
> On Tuesday 23 May 2017 02:15 PM, Lee Jones wrote:
>> On Tue, 23 May 2017, Keerthy wrote:
>>> On Tuesday 23 May 2017 12:27 PM, Lee Jones wrote:
>>>> On Tue, 23 May 2017, Keerthy wrote:
>>>>> On Monday 22 May 2017 11:18 PM, Lee Jones wrote:
>>>>>> On Fri, 19 May 2017, Keerthy wrote:
>>>>>>
>>>>>>> The LP87565 chip is a power management IC for Portable Navigation Systems
>>>>>>> and Tablet Computing devices. It contains the following components:
>>>>>>>
>>>>>>> - Configurable Bucks(Single and multi-phase).
>>>>>>> - Configurable General Purpose Output Signals (GPO).
>>>>>>>
>>>>>>> The LP87565-Q1 variant device uses two 2-phase outputs configuration,
>>>>>>> Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
>>>>>>> output.
>>>>>>>
>>>>>>> Signed-off-by: Keerthy <j-keerthy@ti.com>
>>>>>>> ---
>>>>>>> Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
>>>>>>> drivers/mfd/Kconfig | 14 ++
>>>>>>> drivers/mfd/Makefile | 1 +
>>>>>>> drivers/mfd/lp87565.c | 103 ++++++++
>>>>>>> include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
>>>>>>> 5 files changed, 437 insertions(+)
>>>>>>> create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
>>>>>>> create mode 100644 drivers/mfd/lp87565.c
>>>>>>> create mode 100644 include/linux/mfd/lp87565.h
>>>>>>>
>>>>
>>>> [...]
>>>>
>>>>>>> +/*
>>>>>>> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
>>>>>>> + *
>>>>>>> + * Author: Keerthy <j-keerthy@ti.com>
>>>>>>
>>>>>> We usually ask for full "first last" names.
>>>>>
>>>>> Keerthy is my full name and i do not have a surname.
>>>>
>>>> What is the 'J' for in your email address?
>>>
>>> Father's initials.
>>
>> Okay.
>>
>>>> [...]
>>>>
>>>>>>> +static const struct i2c_device_id lp87565_id_table[] = {
>>>>>>> + { "lp87565-q1", 0 },
>>>>>>> + { },
>>>>>>> +};
>>>>>>> +MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
>>>>>>
>>>>>> Is this an OF only driver, or not?
>>>>
>>>> You didn't answer my question?
>>>
>>> Sorry i replied on top again. It will be an OF only driver.
>>
>> Okay, then you don't need this table and you should depend on OF in
>> the Kconfig file.
>
> Okay. Cool thanks for this info.
>
> I am seeing this commit: 4895e493f91bff7f96f328b883c7f6448aa6abc6
>
> mfd: Export OF module alias information in missing drivers
>
> So no need of i2c_device_id for any of the OF-only mfd drivers?
Referred drivers/mfd/max77686.c driver. Used probe_new. Posted v2.
>
>>
[toc] | [prev] | [next] | [standalone]
| From | Lee Jones <lee.jones@linaro.org> |
|---|---|
| Date | 2017-05-23 17:40 +0200 |
| Message-ID | <tKk4G-54Q-19@gated-at.bofh.it> |
| In reply to | #1647913 |
On Tue, 23 May 2017, Keerthy wrote:
>
>
> On Tuesday 23 May 2017 02:15 PM, Lee Jones wrote:
> > On Tue, 23 May 2017, Keerthy wrote:
> >> On Tuesday 23 May 2017 12:27 PM, Lee Jones wrote:
> >>> On Tue, 23 May 2017, Keerthy wrote:
> >>>> On Monday 22 May 2017 11:18 PM, Lee Jones wrote:
> >>>>> On Fri, 19 May 2017, Keerthy wrote:
> >>>>>
> >>>>>> The LP87565 chip is a power management IC for Portable Navigation Systems
> >>>>>> and Tablet Computing devices. It contains the following components:
> >>>>>>
> >>>>>> - Configurable Bucks(Single and multi-phase).
> >>>>>> - Configurable General Purpose Output Signals (GPO).
> >>>>>>
> >>>>>> The LP87565-Q1 variant device uses two 2-phase outputs configuration,
> >>>>>> Buck0 is master for Buck0/1 output and Buck2 is master for Buck2/3
> >>>>>> output.
> >>>>>>
> >>>>>> Signed-off-by: Keerthy <j-keerthy@ti.com>
> >>>>>> ---
> >>>>>> Documentation/devicetree/bindings/mfd/lp87565.txt | 44 ++++
> >>>>>> drivers/mfd/Kconfig | 14 ++
> >>>>>> drivers/mfd/Makefile | 1 +
> >>>>>> drivers/mfd/lp87565.c | 103 ++++++++
> >>>>>> include/linux/mfd/lp87565.h | 275 ++++++++++++++++++++++
> >>>>>> 5 files changed, 437 insertions(+)
> >>>>>> create mode 100644 Documentation/devicetree/bindings/mfd/lp87565.txt
> >>>>>> create mode 100644 drivers/mfd/lp87565.c
> >>>>>> create mode 100644 include/linux/mfd/lp87565.h
> >>>>>>
> >>>
> >>> [...]
> >>>
> >>>>>> +/*
> >>>>>> + * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
> >>>>>> + *
> >>>>>> + * Author: Keerthy <j-keerthy@ti.com>
> >>>>>
> >>>>> We usually ask for full "first last" names.
> >>>>
> >>>> Keerthy is my full name and i do not have a surname.
> >>>
> >>> What is the 'J' for in your email address?
> >>
> >> Father's initials.
> >
> > Okay.
> >
> >>> [...]
> >>>
> >>>>>> +static const struct i2c_device_id lp87565_id_table[] = {
> >>>>>> + { "lp87565-q1", 0 },
> >>>>>> + { },
> >>>>>> +};
> >>>>>> +MODULE_DEVICE_TABLE(i2c, lp87565_id_table);
> >>>>>
> >>>>> Is this an OF only driver, or not?
> >>>
> >>> You didn't answer my question?
> >>
> >> Sorry i replied on top again. It will be an OF only driver.
> >
> > Okay, then you don't need this table and you should depend on OF in
> > the Kconfig file.
>
> Okay. Cool thanks for this info.
>
> I am seeing this commit: 4895e493f91bff7f96f328b883c7f6448aa6abc6
>
> mfd: Export OF module alias information in missing drivers
>
> So no need of i2c_device_id for any of the OF-only mfd drivers?
So long as you don't depend on the .data attribute.
--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web