Re: [PATCH v4 2/5] mfd: sy7636a: Initial commit

2021-03-30 Thread Mark Brown
On Thu, Mar 25, 2021 at 09:55:08PM -0400, Alistair Francis wrote:

> +config MFD_SY7636A
> + tristate "Silergy SY7636A Power Management chip"
> + select MFD_CORE
> + select REGMAP_I2C
> + select REGMAP_IRQ

This selects but does not use regmap-irq.


signature.asc
Description: PGP signature


[PATCH v4 2/5] mfd: sy7636a: Initial commit

2021-03-25 Thread Alistair Francis
Initial support for the Silergy SY7636A Power Management chip.

Signed-off-by: Alistair Francis 
---
v3:
 - Update copyright year
 - Move power parts to regulator
 - Change Kconfig depends to be tristate
v2:
 - Address comments from review

 drivers/mfd/Kconfig | 10 +
 drivers/mfd/Makefile|  1 +
 drivers/mfd/sy7636a.c   | 82 +
 include/linux/mfd/sy7636a.h | 46 +
 4 files changed, 139 insertions(+)
 create mode 100644 drivers/mfd/sy7636a.c
 create mode 100644 include/linux/mfd/sy7636a.h

diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index b74efa469e90..ac09b40e1724 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -1351,6 +1351,16 @@ config MFD_SYSCON
  Select this option to enable accessing system control registers
  via regmap.
 
+config MFD_SY7636A
+   tristate "Silergy SY7636A Power Management chip"
+   select MFD_CORE
+   select REGMAP_I2C
+   select REGMAP_IRQ
+   depends on I2C
+   help
+ Select this option to enable support for the Silergy SY7636A
+ Power Management chip.
+
 config MFD_DAVINCI_VOICECODEC
tristate
select MFD_CORE
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 834f5463af28..5bfa0d6e5dc5 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -265,6 +265,7 @@ obj-$(CONFIG_MFD_STMFX) += stmfx.o
 obj-$(CONFIG_MFD_KHADAS_MCU)   += khadas-mcu.o
 obj-$(CONFIG_MFD_ACER_A500_EC) += acer-ec-a500.o
 
+obj-$(CONFIG_MFD_SY7636A)  += sy7636a.o
 obj-$(CONFIG_SGI_MFD_IOC3) += ioc3.o
 obj-$(CONFIG_MFD_SIMPLE_MFD_I2C)   += simple-mfd-i2c.o
 obj-$(CONFIG_MFD_INTEL_M10_BMC)   += intel-m10-bmc.o
diff --git a/drivers/mfd/sy7636a.c b/drivers/mfd/sy7636a.c
new file mode 100644
index ..e08f29ea63f8
--- /dev/null
+++ b/drivers/mfd/sy7636a.c
@@ -0,0 +1,82 @@
+// SPDX-License-Identifier: GPL-2.0+
+//
+// MFD parent driver for SY7636A chip
+//
+// Copyright (C) 2021 reMarkable AS - http://www.remarkable.com/
+//
+// Authors: Lars Ivar Miljeteig 
+//  Alistair Francis 
+//
+// Based on the lp87565 driver by Keerthy 
+
+#include 
+#include 
+#include 
+#include 
+
+#include 
+
+static const struct regmap_config sy7636a_regmap_config = {
+   .reg_bits = 8,
+   .val_bits = 8,
+};
+
+static const struct mfd_cell sy7636a_cells[] = {
+   { .name = "sy7636a-regulator", },
+   { .name = "sy7636a-temperature", },
+   { .name = "sy7636a-thermal", },
+};
+
+static const struct of_device_id of_sy7636a_match_table[] = {
+   { .compatible = "silergy,sy7636a", },
+   {}
+};
+MODULE_DEVICE_TABLE(of, of_sy7636a_match_table);
+
+static int sy7636a_probe(struct i2c_client *client,
+const struct i2c_device_id *ids)
+{
+   struct sy7636a *sy7636a;
+   int ret;
+
+   sy7636a = devm_kzalloc(>dev, sizeof(*sy7636a), GFP_KERNEL);
+   if (!sy7636a)
+   return -ENOMEM;
+
+   sy7636a->dev = >dev;
+
+   sy7636a->regmap = devm_regmap_init_i2c(client, _regmap_config);
+   if (IS_ERR(sy7636a->regmap)) {
+   ret = PTR_ERR(sy7636a->regmap);
+   dev_err(sy7636a->dev,
+   "Failed to initialize register map: %d\n", ret);
+   return ret;
+   }
+
+   i2c_set_clientdata(client, sy7636a);
+
+   ret = devm_mfd_add_devices(sy7636a->dev, PLATFORM_DEVID_AUTO,
+   sy7636a_cells, 
ARRAY_SIZE(sy7636a_cells),
+   NULL, 0, NULL);
+   return 0;
+}
+
+static const struct i2c_device_id sy7636a_id_table[] = {
+   { "sy7636a", 0 },
+   { },
+};
+MODULE_DEVICE_TABLE(i2c, sy7636a_id_table);
+
+static struct i2c_driver sy7636a_driver = {
+   .driver = {
+   .name   = "sy7636a",
+   .of_match_table = of_sy7636a_match_table,
+   },
+   .probe = sy7636a_probe,
+   .id_table = sy7636a_id_table,
+};
+module_i2c_driver(sy7636a_driver);
+
+MODULE_AUTHOR("Lars Ivar Miljeteig ");
+MODULE_DESCRIPTION("Silergy SY7636A Multi-Function Device Driver");
+MODULE_LICENSE("GPL v2");
diff --git a/include/linux/mfd/sy7636a.h b/include/linux/mfd/sy7636a.h
new file mode 100644
index ..a5ec5d911b3a
--- /dev/null
+++ b/include/linux/mfd/sy7636a.h
@@ -0,0 +1,46 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Functions to access SY3686A power management chip.
+ *
+ * Copyright (C) 2021 reMarkable AS - http://www.remarkable.com/
+ */
+
+#ifndef __MFD_SY7636A_H
+#define __MFD_SY7636A_H
+
+#include 
+#include 
+#include 
+#include 
+
+#define SY7636A_REG_OPERATION_MODE_CRL 0x00
+#define SY7636A_OPERATION_MODE_CRL_VCOMCTL BIT(6)
+#define SY7636A_OPERATION_MODE_CRL_ONOFF   BIT(7)
+#define SY7636A_REG_VCOM_ADJUST_CTRL_L 0x01
+#define SY7636A_REG_VCOM_ADJUST_CTRL_H 0x02
+#define SY7636A_REG_VCOM_ADJUST_CTRL_MASK  0x01ff
+#define