All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
To: Lee Jones <lee.jones@linaro.org>
Cc: Linus Walleij <linus.walleij@linaro.org>,
	Alexandre Courbot <gnurou@gmail.com>,
	Rob Herring <robh+dt@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Frank Rowand <frowand.list@gmail.com>,
	Wolfram Sang <wsa@the-dreams.de>,
	Richard Purdie <rpurdie@rpsys.net>,
	Jacek Anaszewski <j.anaszewski@samsung.com>,
	Jean Delvare <jdelvare@suse.com>, Peter Rosin <peda@axentia.se>,
	Avirup Banerjee <abanerjee@juniper.net>,
	Georgi Vlaev <gvlaev@juniper.net>,
	Guenter Roeck <linux@roeck-us.net>,
	JawaharBalaji Thirumalaisamy <jawaharb@juniper.net>,
	Pantelis Antoniou <pantelis.antoniou@konsulko.com>,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-gpio@vger.kernel.org, linux-i2c@vger.kernel.org,
	linux-leds@vger.kernel.org, linux-hwmon@vger.kernel.org
Subject: [PATCH 01/10] mfd: Add Juniper I2CS MFD driver
Date: Fri,  7 Oct 2016 18:21:00 +0300	[thread overview]
Message-ID: <1475853669-22480-2-git-send-email-pantelis.antoniou@konsulko.com> (raw)
In-Reply-To: <1475853669-22480-1-git-send-email-pantelis.antoniou@konsulko.com>

From: Georgi Vlaev <gvlaev@juniper.net>

Add Juniper's I2CS FPGA MFD driver.

This driver is bare-bones and only provides a method for the
instantiation of the following subdevices.

- I2C mux driver (i2c-mux-i2cs)
- LEDS driver (leds-jnx-i2cs)
- GPIO driver (gpio-jnx-i2cs)
- HWMON driver (i2cs-fan-hwmon)

Signed-off-by: Georgi Vlaev <gvlaev@juniper.net>
Signed-off-by: Guenter Roeck <groeck@juniper.net>
Signed-off-by: JawaharBalaji Thirumalaisamy <jawaharb@juniper.net>
[Ported from Juniper kernel]
Signed-off-by: Pantelis Antoniou <pantelis.antoniou@konsulko.com>
---
 drivers/mfd/Kconfig               |  17 ++++++
 drivers/mfd/Makefile              |   1 +
 drivers/mfd/jnx-i2cs-core.c       | 118 ++++++++++++++++++++++++++++++++++++++
 include/linux/mfd/jnx-i2cs-core.h |  96 +++++++++++++++++++++++++++++++
 4 files changed, 232 insertions(+)
 create mode 100644 drivers/mfd/jnx-i2cs-core.c
 create mode 100644 include/linux/mfd/jnx-i2cs-core.h

diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 6107f7a..82493d5 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -1400,6 +1400,23 @@ config MFD_JUNIPER_CBC
 	  This driver can be built as a module. If built as a module it will be
 	  called "cbc-core"
 
+config MFD_JUNIPER_I2CS
+	tristate "Juniper I2CS FPGA"
+	depends on JNX_PTX1K_RCB || PTXPMB_COMMON || JNX_SYSTEM
+	select MFD_CORE
+	select REGMAP_I2C
+	select GPIO_JNX_I2CS
+	select I2C_MUX_I2CS
+	select LEDS_JNX_I2CS
+	depends on I2C=y
+	default y
+	help
+	  Select this to enable the I2CS FPGA multi-function kernel driver.
+	  This FPGA is present on almost any Juniper Networks card.
+
+	  This driver can be built as a module. If built as a module it will be
+	  called "jnx_i2cs"
+
 config MFD_TWL4030_AUDIO
 	bool "TI TWL4030 Audio"
 	depends on TWL4030_CORE
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 0ea6dc6..215d9cf 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -152,6 +152,7 @@ obj-$(CONFIG_MFD_JUNIPER_CPLD)	+= ptxpmb-cpld-core.o
 obj-$(CONFIG_MFD_JUNIPER_SAM)	+= sam-core.o
 obj-$(CONFIG_MFD_JUNIPER_EXT_CPLD) += ptxpmb-ext-cpld-core.o
 obj-$(CONFIG_MFD_JUNIPER_CBC)	+= cbc-core.o
+obj-$(CONFIG_MFD_JUNIPER_I2CS)	+= jnx-i2cs-core.o
 obj-$(CONFIG_MFD_DB8500_PRCMU)	+= db8500-prcmu.o
 # ab8500-core need to come after db8500-prcmu (which provides the channel)
 obj-$(CONFIG_AB8500_CORE)	+= ab8500-core.o ab8500-sysctrl.o
diff --git a/drivers/mfd/jnx-i2cs-core.c b/drivers/mfd/jnx-i2cs-core.c
new file mode 100644
index 0000000..d279a73
--- /dev/null
+++ b/drivers/mfd/jnx-i2cs-core.c
@@ -0,0 +1,118 @@
+/*
+ * drivers/mfd/jnx-i2cs-core.c
+ *
+ * Copyright (c) 2014, Juniper Networks
+ * Author: Georgi Vlaev <gvlaev@juniper.net>
+ *
+ * The I2C Slave FPGA (I2CS) - found on almost any Juniper card.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ */
+
+#include <linux/module.h>
+#include <linux/bug.h>
+#include <linux/err.h>
+#include <linux/i2c.h>
+#include <linux/kernel.h>
+#include <linux/mfd/core.h>
+#include <linux/of.h>
+#include <linux/regmap.h>
+#include <linux/slab.h>
+#include <linux/mfd/jnx-i2cs-core.h>
+
+static int jnx_i2cs_probe(struct i2c_client *i2c,
+			  const struct i2c_device_id *id)
+{
+	struct device *dev = &i2c->dev;
+	struct jnx_i2cs_platform_data *pdata = dev_get_platdata(dev);
+	struct device_node *child, *np = dev->of_node;
+	struct mfd_cell *cells;
+	int ncells, ret;
+
+	if (np) {
+		ncells = of_get_child_count(np);
+		if (ncells == 0) {
+			dev_err(dev, "No child specified for %s\n", np->name);
+			return -EINVAL;
+		}
+
+		cells = devm_kzalloc(dev, ncells * sizeof(*cells), GFP_KERNEL);
+		if (!cells)
+			return -ENOMEM;
+
+		ncells = 0;
+		for_each_available_child_of_node(dev->of_node, child) {
+			const char *s;
+
+			s = of_get_property(child, "compatible", NULL);
+			if (!s) {
+				dev_err(dev,
+					"Missing compatible property for %s\n",
+					child->name);
+				return -EINVAL;
+			}
+
+			cells[ncells].name = child->name;
+			cells[ncells].of_compatible = s;
+			ncells++;
+		}
+		if (ncells == 0) {
+			dev_err(dev, "No active child for %s\n", np->name);
+			return -EINVAL;
+		}
+	} else if (pdata) {
+		cells = pdata->cells;
+		ncells = pdata->ncells;
+	} else {
+		return -ENODEV;
+	}
+
+	ret = mfd_add_devices(dev, i2c_adapter_id(i2c->adapter),
+			      cells, ncells, NULL, 0, NULL);
+
+	return ret;
+}
+
+static int jnx_i2cs_remove(struct i2c_client *i2c)
+{
+	mfd_remove_devices(&i2c->dev);
+
+	return 0;
+}
+
+static const struct of_device_id jnx_i2cs_of_match[] = {
+	{ .compatible = "jnx,i2cs-rcb" },
+	{ .compatible = "jnx,i2cs-fpc" },
+	{ .compatible = "jnx,i2cs-sib" },
+	{ .compatible = "jnx,i2cs-fan" },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, jnx_i2cs_of_match);
+
+static const struct i2c_device_id jnx_i2cs_id[] = {
+	{ "jnx_i2cs_rcb", 0 },
+	{ "jnx_i2cs_fpc", 0 },
+	{ "jnx_i2cs_sib", 0 },
+	{ "jnx_i2cs_fan", 0 },
+	{ }
+};
+MODULE_DEVICE_TABLE(i2c, jnx_i2cs_id);
+
+static struct i2c_driver jnx_i2cs_driver = {
+	.driver = {
+		.name = "jnx_i2cs",
+		.owner = THIS_MODULE,
+		.of_match_table = of_match_ptr(jnx_i2cs_of_match),
+	},
+	.probe    = jnx_i2cs_probe,
+	.remove   = jnx_i2cs_remove,
+	.id_table = jnx_i2cs_id,
+};
+
+module_i2c_driver(jnx_i2cs_driver);
+
+MODULE_DESCRIPTION("Juniper I2CS MFD core driver");
+MODULE_AUTHOR("Georgi Vlaev <gvlaev@juniper.net>");
+MODULE_LICENSE("GPL");
diff --git a/include/linux/mfd/jnx-i2cs-core.h b/include/linux/mfd/jnx-i2cs-core.h
new file mode 100644
index 0000000..5e63aab
--- /dev/null
+++ b/include/linux/mfd/jnx-i2cs-core.h
@@ -0,0 +1,96 @@
+/*
+ * I2CS FPGA (jnx-i2cs-core) registers
+ *
+ * Copyright (C) 2014 Juniper Networks
+ * Author: Georgi Vlaev <gvlaev@juniper.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __JNX_I2CS_CORE_H__
+#define __JNX_I2CS_CORE_H__
+
+/* SIB I2CS registers */
+#define I2CS_SCRATCH		0x00
+#define I2CS_VERSION		0x01
+#define I2CS_MASTER_STATUS	0x02
+#define I2CS_MASTER_TIMEOUT	0x03
+#define I2CS_MASTER_FORCE	0x04
+#define I2CS_I2C0_STATUS	0x05
+#define I2CS_I2C1_STATUS	0x06
+#define I2CS_I2C_RESET		0x07
+#define I2CS_DATECODE		0x0f
+#define I2CS_INT_STATUS		0x10
+#define I2CS_INT_ENABLE		0x11
+#define I2CS_FRU_LED		0x12
+#define I2CS_MISC_IO		0x13
+#define I2CS_BUTTON_STATUS	0x14
+#define I2CS_BUTTON_ENABLE	0x15
+#define I2CS_GPIO_OE		0x16
+#define I2CS_GPIO_OUT		0x17
+#define I2CS_GPIO_IN		0x18
+#define I2CS_SERIAL_CONFIG0	0x19
+#define I2CS_SERIAL_CONFIG1	0x1a
+#define I2CS_MII_CONFIG		0x1b
+#define I2CS_MII_ADDR		0x1c
+#define I2CS_MII_DATA0		0x1d
+#define I2CS_MII_DATA1		0x1e
+#define I2CS_MII_DATA2		0x1f
+#define I2CS_PWR_CONTROL	0x20
+#define I2CS_PWR_UP_STATUS	0x21
+#define I2CS_PWR_DIS_STATUS	0x22
+#define I2CS_PWR_DIS_CAUSE	0x23
+#define I2CS_PWR_VFAIL_STATUS	0x24
+#define I2CS_PWR_VFAIL_CAUSE	0x25
+#define I2CS_PWR_TRIM_UP_A	0x26
+#define I2CS_PWR_TRIM_UP_B	0x27
+#define I2CS_PWR_TRIM_DN_A	0x28
+#define I2CS_PWR_TRIM_DN_B	0x29
+#define I2CS_PWR_VFAIL_STATUS_B	0x2a
+#define I2CS_PWR_VFAIL_CAUSE_B	0x2b
+#define I2CS_SCB		0x2c
+#define I2CS_RESET_I2CS_REG	0x2d
+#define I2CS_RESET_CONTROL	0x40
+#define I2CS_SIB_ID_PORT_STATUS	0x41
+#define I2CS_SIB_PCIE_GEN	0x42
+#define I2CS_TF_LTC		0x43
+#define I2CS_POWER_RST_HSWAP	0x44
+#define I2CS_SIB_EN		0x45
+#define I2CS_SIB_SPARE		0x46
+#define I2CS_TF_PCIE_INT_STAT	0x47
+#define I2CS_TF_PCIE_INT_EN	0x48
+#define I2CS_SIB_MISC_0		0x49
+#define I2CS_SIB_MISC_1		0x4a
+#define I2CS_LINK_STATUS_0	0x4b
+#define I2CS_LINK_STATUS_1	0x4c
+#define I2CS_LINK_STATUS_2	0x4d
+#define I2CS_LINK_STATUS_3	0x4e
+#define I2CS_LINK_STATUS_4	0x4f
+#define I2CS_LINK_STATUS_5	0x50
+#define I2CS_LINK_STATUS_6	0x51
+#define I2CS_LINK_STATUS_7	0x52
+#define I2CS_LINK_STATUS_8	0x53
+#define I2CS_LINK_STATUS_9	0x54
+#define I2CS_LINK_STATUS_10	0x55
+#define I2CS_LINK_STATUS_11	0x56
+#define I2CS_LINK_STATUS_12	0x57
+#define I2CS_LINK_STATUS_13	0x58
+#define I2CS_LINK_STATUS_14	0x59
+#define I2CS_LINK_STATUS_15	0x5a
+#define I2CS_LINK_STATUS_16	0x5b
+#define I2CS_LINK_STATUS_17	0x5c
+#define I2CS_PWR_VFAIL_IGNORE_SNG	0x5d
+#define I2CS_SPARE		0x5e
+#define I2CS_SPARE_OE		0x5f
+#define I2CS_MAX_REGISTER	I2CS_SPARE_OE
+
+struct mfd_cell;
+
+struct jnx_i2cs_platform_data {
+	int ncells;
+	struct mfd_cell *cells;
+};
+
+#endif /*__JNX_I2CS_CORE_H__*/
-- 
1.9.1

WARNING: multiple messages have this Message-ID (diff)
From: Pantelis Antoniou <pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>
To: Lee Jones <lee.jones-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Cc: Linus Walleij
	<linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
	Alexandre Courbot
	<gnurou-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
	Frank Rowand
	<frowand.list-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Wolfram Sang <wsa-z923LK4zBo2bacvFa/9K2g@public.gmane.org>,
	Richard Purdie <rpurdie-Fm38FmjxZ/leoWH0uzbU5w@public.gmane.org>,
	Jacek Anaszewski
	<j.anaszewski-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>,
	Jean Delvare <jdelvare-IBi9RG/b67k@public.gmane.org>,
	Peter Rosin <peda-koto5C5qi+TLoDKTGw+V6w@public.gmane.org>,
	Avirup Banerjee
	<abanerjee-3r7Miqu9kMnR7s880joybQ@public.gmane.org>,
	Georgi Vlaev <gvlaev-3r7Miqu9kMnR7s880joybQ@public.gmane.org>,
	Guenter Roeck <linux-0h96xk9xTtrk1uMJSBkQmQ@public.gmane.org>,
	JawaharBalaji Thirumalaisamy
	<jawaharb-3r7Miqu9kMnR7s880joybQ@public.gmane.org>,
	Pantelis Antoniou
	<pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>,
	devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-gpio-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-i2c-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-leds-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-hwmon-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: [PATCH 01/10] mfd: Add Juniper I2CS MFD driver
Date: Fri,  7 Oct 2016 18:21:00 +0300	[thread overview]
Message-ID: <1475853669-22480-2-git-send-email-pantelis.antoniou@konsulko.com> (raw)
In-Reply-To: <1475853669-22480-1-git-send-email-pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>

From: Georgi Vlaev <gvlaev-3r7Miqu9kMnR7s880joybQ@public.gmane.org>

Add Juniper's I2CS FPGA MFD driver.

This driver is bare-bones and only provides a method for the
instantiation of the following subdevices.

- I2C mux driver (i2c-mux-i2cs)
- LEDS driver (leds-jnx-i2cs)
- GPIO driver (gpio-jnx-i2cs)
- HWMON driver (i2cs-fan-hwmon)

Signed-off-by: Georgi Vlaev <gvlaev-3r7Miqu9kMnR7s880joybQ@public.gmane.org>
Signed-off-by: Guenter Roeck <groeck-3r7Miqu9kMnR7s880joybQ@public.gmane.org>
Signed-off-by: JawaharBalaji Thirumalaisamy <jawaharb-3r7Miqu9kMnR7s880joybQ@public.gmane.org>
[Ported from Juniper kernel]
Signed-off-by: Pantelis Antoniou <pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>
---
 drivers/mfd/Kconfig               |  17 ++++++
 drivers/mfd/Makefile              |   1 +
 drivers/mfd/jnx-i2cs-core.c       | 118 ++++++++++++++++++++++++++++++++++++++
 include/linux/mfd/jnx-i2cs-core.h |  96 +++++++++++++++++++++++++++++++
 4 files changed, 232 insertions(+)
 create mode 100644 drivers/mfd/jnx-i2cs-core.c
 create mode 100644 include/linux/mfd/jnx-i2cs-core.h

diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 6107f7a..82493d5 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -1400,6 +1400,23 @@ config MFD_JUNIPER_CBC
 	  This driver can be built as a module. If built as a module it will be
 	  called "cbc-core"
 
+config MFD_JUNIPER_I2CS
+	tristate "Juniper I2CS FPGA"
+	depends on JNX_PTX1K_RCB || PTXPMB_COMMON || JNX_SYSTEM
+	select MFD_CORE
+	select REGMAP_I2C
+	select GPIO_JNX_I2CS
+	select I2C_MUX_I2CS
+	select LEDS_JNX_I2CS
+	depends on I2C=y
+	default y
+	help
+	  Select this to enable the I2CS FPGA multi-function kernel driver.
+	  This FPGA is present on almost any Juniper Networks card.
+
+	  This driver can be built as a module. If built as a module it will be
+	  called "jnx_i2cs"
+
 config MFD_TWL4030_AUDIO
 	bool "TI TWL4030 Audio"
 	depends on TWL4030_CORE
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 0ea6dc6..215d9cf 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -152,6 +152,7 @@ obj-$(CONFIG_MFD_JUNIPER_CPLD)	+= ptxpmb-cpld-core.o
 obj-$(CONFIG_MFD_JUNIPER_SAM)	+= sam-core.o
 obj-$(CONFIG_MFD_JUNIPER_EXT_CPLD) += ptxpmb-ext-cpld-core.o
 obj-$(CONFIG_MFD_JUNIPER_CBC)	+= cbc-core.o
+obj-$(CONFIG_MFD_JUNIPER_I2CS)	+= jnx-i2cs-core.o
 obj-$(CONFIG_MFD_DB8500_PRCMU)	+= db8500-prcmu.o
 # ab8500-core need to come after db8500-prcmu (which provides the channel)
 obj-$(CONFIG_AB8500_CORE)	+= ab8500-core.o ab8500-sysctrl.o
diff --git a/drivers/mfd/jnx-i2cs-core.c b/drivers/mfd/jnx-i2cs-core.c
new file mode 100644
index 0000000..d279a73
--- /dev/null
+++ b/drivers/mfd/jnx-i2cs-core.c
@@ -0,0 +1,118 @@
+/*
+ * drivers/mfd/jnx-i2cs-core.c
+ *
+ * Copyright (c) 2014, Juniper Networks
+ * Author: Georgi Vlaev <gvlaev-3r7Miqu9kMnR7s880joybQ@public.gmane.org>
+ *
+ * The I2C Slave FPGA (I2CS) - found on almost any Juniper card.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ */
+
+#include <linux/module.h>
+#include <linux/bug.h>
+#include <linux/err.h>
+#include <linux/i2c.h>
+#include <linux/kernel.h>
+#include <linux/mfd/core.h>
+#include <linux/of.h>
+#include <linux/regmap.h>
+#include <linux/slab.h>
+#include <linux/mfd/jnx-i2cs-core.h>
+
+static int jnx_i2cs_probe(struct i2c_client *i2c,
+			  const struct i2c_device_id *id)
+{
+	struct device *dev = &i2c->dev;
+	struct jnx_i2cs_platform_data *pdata = dev_get_platdata(dev);
+	struct device_node *child, *np = dev->of_node;
+	struct mfd_cell *cells;
+	int ncells, ret;
+
+	if (np) {
+		ncells = of_get_child_count(np);
+		if (ncells == 0) {
+			dev_err(dev, "No child specified for %s\n", np->name);
+			return -EINVAL;
+		}
+
+		cells = devm_kzalloc(dev, ncells * sizeof(*cells), GFP_KERNEL);
+		if (!cells)
+			return -ENOMEM;
+
+		ncells = 0;
+		for_each_available_child_of_node(dev->of_node, child) {
+			const char *s;
+
+			s = of_get_property(child, "compatible", NULL);
+			if (!s) {
+				dev_err(dev,
+					"Missing compatible property for %s\n",
+					child->name);
+				return -EINVAL;
+			}
+
+			cells[ncells].name = child->name;
+			cells[ncells].of_compatible = s;
+			ncells++;
+		}
+		if (ncells == 0) {
+			dev_err(dev, "No active child for %s\n", np->name);
+			return -EINVAL;
+		}
+	} else if (pdata) {
+		cells = pdata->cells;
+		ncells = pdata->ncells;
+	} else {
+		return -ENODEV;
+	}
+
+	ret = mfd_add_devices(dev, i2c_adapter_id(i2c->adapter),
+			      cells, ncells, NULL, 0, NULL);
+
+	return ret;
+}
+
+static int jnx_i2cs_remove(struct i2c_client *i2c)
+{
+	mfd_remove_devices(&i2c->dev);
+
+	return 0;
+}
+
+static const struct of_device_id jnx_i2cs_of_match[] = {
+	{ .compatible = "jnx,i2cs-rcb" },
+	{ .compatible = "jnx,i2cs-fpc" },
+	{ .compatible = "jnx,i2cs-sib" },
+	{ .compatible = "jnx,i2cs-fan" },
+	{ }
+};
+MODULE_DEVICE_TABLE(of, jnx_i2cs_of_match);
+
+static const struct i2c_device_id jnx_i2cs_id[] = {
+	{ "jnx_i2cs_rcb", 0 },
+	{ "jnx_i2cs_fpc", 0 },
+	{ "jnx_i2cs_sib", 0 },
+	{ "jnx_i2cs_fan", 0 },
+	{ }
+};
+MODULE_DEVICE_TABLE(i2c, jnx_i2cs_id);
+
+static struct i2c_driver jnx_i2cs_driver = {
+	.driver = {
+		.name = "jnx_i2cs",
+		.owner = THIS_MODULE,
+		.of_match_table = of_match_ptr(jnx_i2cs_of_match),
+	},
+	.probe    = jnx_i2cs_probe,
+	.remove   = jnx_i2cs_remove,
+	.id_table = jnx_i2cs_id,
+};
+
+module_i2c_driver(jnx_i2cs_driver);
+
+MODULE_DESCRIPTION("Juniper I2CS MFD core driver");
+MODULE_AUTHOR("Georgi Vlaev <gvlaev-3r7Miqu9kMnR7s880joybQ@public.gmane.org>");
+MODULE_LICENSE("GPL");
diff --git a/include/linux/mfd/jnx-i2cs-core.h b/include/linux/mfd/jnx-i2cs-core.h
new file mode 100644
index 0000000..5e63aab
--- /dev/null
+++ b/include/linux/mfd/jnx-i2cs-core.h
@@ -0,0 +1,96 @@
+/*
+ * I2CS FPGA (jnx-i2cs-core) registers
+ *
+ * Copyright (C) 2014 Juniper Networks
+ * Author: Georgi Vlaev <gvlaev-3r7Miqu9kMnR7s880joybQ@public.gmane.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __JNX_I2CS_CORE_H__
+#define __JNX_I2CS_CORE_H__
+
+/* SIB I2CS registers */
+#define I2CS_SCRATCH		0x00
+#define I2CS_VERSION		0x01
+#define I2CS_MASTER_STATUS	0x02
+#define I2CS_MASTER_TIMEOUT	0x03
+#define I2CS_MASTER_FORCE	0x04
+#define I2CS_I2C0_STATUS	0x05
+#define I2CS_I2C1_STATUS	0x06
+#define I2CS_I2C_RESET		0x07
+#define I2CS_DATECODE		0x0f
+#define I2CS_INT_STATUS		0x10
+#define I2CS_INT_ENABLE		0x11
+#define I2CS_FRU_LED		0x12
+#define I2CS_MISC_IO		0x13
+#define I2CS_BUTTON_STATUS	0x14
+#define I2CS_BUTTON_ENABLE	0x15
+#define I2CS_GPIO_OE		0x16
+#define I2CS_GPIO_OUT		0x17
+#define I2CS_GPIO_IN		0x18
+#define I2CS_SERIAL_CONFIG0	0x19
+#define I2CS_SERIAL_CONFIG1	0x1a
+#define I2CS_MII_CONFIG		0x1b
+#define I2CS_MII_ADDR		0x1c
+#define I2CS_MII_DATA0		0x1d
+#define I2CS_MII_DATA1		0x1e
+#define I2CS_MII_DATA2		0x1f
+#define I2CS_PWR_CONTROL	0x20
+#define I2CS_PWR_UP_STATUS	0x21
+#define I2CS_PWR_DIS_STATUS	0x22
+#define I2CS_PWR_DIS_CAUSE	0x23
+#define I2CS_PWR_VFAIL_STATUS	0x24
+#define I2CS_PWR_VFAIL_CAUSE	0x25
+#define I2CS_PWR_TRIM_UP_A	0x26
+#define I2CS_PWR_TRIM_UP_B	0x27
+#define I2CS_PWR_TRIM_DN_A	0x28
+#define I2CS_PWR_TRIM_DN_B	0x29
+#define I2CS_PWR_VFAIL_STATUS_B	0x2a
+#define I2CS_PWR_VFAIL_CAUSE_B	0x2b
+#define I2CS_SCB		0x2c
+#define I2CS_RESET_I2CS_REG	0x2d
+#define I2CS_RESET_CONTROL	0x40
+#define I2CS_SIB_ID_PORT_STATUS	0x41
+#define I2CS_SIB_PCIE_GEN	0x42
+#define I2CS_TF_LTC		0x43
+#define I2CS_POWER_RST_HSWAP	0x44
+#define I2CS_SIB_EN		0x45
+#define I2CS_SIB_SPARE		0x46
+#define I2CS_TF_PCIE_INT_STAT	0x47
+#define I2CS_TF_PCIE_INT_EN	0x48
+#define I2CS_SIB_MISC_0		0x49
+#define I2CS_SIB_MISC_1		0x4a
+#define I2CS_LINK_STATUS_0	0x4b
+#define I2CS_LINK_STATUS_1	0x4c
+#define I2CS_LINK_STATUS_2	0x4d
+#define I2CS_LINK_STATUS_3	0x4e
+#define I2CS_LINK_STATUS_4	0x4f
+#define I2CS_LINK_STATUS_5	0x50
+#define I2CS_LINK_STATUS_6	0x51
+#define I2CS_LINK_STATUS_7	0x52
+#define I2CS_LINK_STATUS_8	0x53
+#define I2CS_LINK_STATUS_9	0x54
+#define I2CS_LINK_STATUS_10	0x55
+#define I2CS_LINK_STATUS_11	0x56
+#define I2CS_LINK_STATUS_12	0x57
+#define I2CS_LINK_STATUS_13	0x58
+#define I2CS_LINK_STATUS_14	0x59
+#define I2CS_LINK_STATUS_15	0x5a
+#define I2CS_LINK_STATUS_16	0x5b
+#define I2CS_LINK_STATUS_17	0x5c
+#define I2CS_PWR_VFAIL_IGNORE_SNG	0x5d
+#define I2CS_SPARE		0x5e
+#define I2CS_SPARE_OE		0x5f
+#define I2CS_MAX_REGISTER	I2CS_SPARE_OE
+
+struct mfd_cell;
+
+struct jnx_i2cs_platform_data {
+	int ncells;
+	struct mfd_cell *cells;
+};
+
+#endif /*__JNX_I2CS_CORE_H__*/
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  reply	other threads:[~2016-10-07 15:21 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-07 15:20 [PATCH 00/10] Introduce Juniper I2CS FPGA driver Pantelis Antoniou
2016-10-07 15:21 ` Pantelis Antoniou [this message]
2016-10-07 15:21   ` [PATCH 01/10] mfd: Add Juniper I2CS MFD driver Pantelis Antoniou
2016-10-07 15:21 ` [PATCH 02/10] mfd: dt-bindings: Add bindings for the Juniper I2CS MFD Pantelis Antoniou
2016-10-10 20:23   ` Rob Herring
2016-10-17 19:10     ` Pantelis Antoniou
2016-10-07 15:21 ` [PATCH 03/10] i2c/muxes: Juniper I2CS RE mux Pantelis Antoniou
2016-10-07 15:21   ` Pantelis Antoniou
2016-10-10 15:29   ` Peter Rosin
2016-10-10 15:29     ` Peter Rosin
2016-10-07 15:21 ` [PATCH 04/10] i2c: i2c-mux-i2cs: Add device tree bindings Pantelis Antoniou
2016-10-10 15:48   ` Peter Rosin
2016-10-10 15:48     ` Peter Rosin
2016-10-17 19:11     ` Pantelis Antoniou
2016-10-10 20:25   ` Rob Herring
2016-10-07 15:21 ` [PATCH 05/10] gpio: i2cs: Juniper I2CS to GPIO pin mapping driver Pantelis Antoniou
2016-10-21  8:41   ` Linus Walleij
2016-10-21  8:41     ` Linus Walleij
2016-10-07 15:21 ` [PATCH 06/10] gpio: gpio-i2cs: Document bindings of I2CS FPGA GPIO block Pantelis Antoniou
2016-10-21  8:59   ` Linus Walleij
2016-10-21  8:59     ` Linus Walleij
2016-10-07 15:21 ` [PATCH 07/10] leds: i2cs: Add I2CS FPGA leds driver Pantelis Antoniou
2016-10-10  9:41   ` Jacek Anaszewski
2016-10-07 15:21 ` [PATCH 08/10] leds: Add binding for Juniper's I2CS FPGA Pantelis Antoniou
2016-10-07 15:21   ` Pantelis Antoniou
2016-10-10  9:41   ` Jacek Anaszewski
2016-10-07 15:21 ` [PATCH 09/10] hwmon: Add driver for Fan Tray on Juniper I2CS FGPA Pantelis Antoniou
2016-10-07 15:21 ` [PATCH 10/10] hwmon: i2cs-fan: Add hwmon dts binding documentation Pantelis Antoniou
2016-10-10 20:29   ` Rob Herring
2016-10-17 19:12     ` Pantelis Antoniou

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1475853669-22480-2-git-send-email-pantelis.antoniou@konsulko.com \
    --to=pantelis.antoniou@konsulko.com \
    --cc=abanerjee@juniper.net \
    --cc=devicetree@vger.kernel.org \
    --cc=frowand.list@gmail.com \
    --cc=gnurou@gmail.com \
    --cc=gvlaev@juniper.net \
    --cc=j.anaszewski@samsung.com \
    --cc=jawaharb@juniper.net \
    --cc=jdelvare@suse.com \
    --cc=lee.jones@linaro.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-hwmon@vger.kernel.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=linux@roeck-us.net \
    --cc=mark.rutland@arm.com \
    --cc=peda@axentia.se \
    --cc=robh+dt@kernel.org \
    --cc=rpurdie@rpsys.net \
    --cc=wsa@the-dreams.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.