linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RESEND PATCH V2 2/2] devicetree: Add bindings for DA9063 OnKey
  2015-04-17 12:03 [RESEND PATCH V2 0/2] Add OnKey support for DA9063 S Twiss
@ 2015-04-17 12:03 ` S Twiss
  2015-04-17 12:03 ` [RESEND PATCH V2 1/2] input: misc: da9063: OnKey driver S Twiss
  1 sibling, 0 replies; 12+ messages in thread
From: S Twiss @ 2015-04-17 12:03 UTC (permalink / raw)
  To: Ian Campbell, Kumar Gala, Lee Jones, Mark Rutland, Pawel Moll,
	Rob Herring, Steve Twiss
  Cc: DT, David Dajun Chen, Dmitry Torokhov, INPUT, LKML, Samuel Ortiz,
	Support Opensource

From: Steve Twiss <stwiss.opensource@diasemi.com>

Add device tree bindings for the DA9063 OnKey driver


Signed-off-by: Steve Twiss <stwiss.opensource@diasemi.com>

---
Changes from PATCH V1 to V2
---------------------------
- Remove the circular dependency comment linking patches in the main e-mail
- Search and replace 'keyword' with 'property' in onkey sub-node description
- Reformat onkey sub-node content to move the description for disable-key-power
  into a new optional properties sub-section so it has a more promiment
  position

This patch applies against linux-next and v4.0-rc6 


 Documentation/devicetree/bindings/mfd/da9063.txt | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/mfd/da9063.txt b/Documentation/devicetree/bindings/mfd/da9063.txt
index 42c6fa6..c671784 100644
--- a/Documentation/devicetree/bindings/mfd/da9063.txt
+++ b/Documentation/devicetree/bindings/mfd/da9063.txt
@@ -2,9 +2,10 @@
 
 DA9093 consists of a large and varied group of sub-devices (I2C Only):
 
-Device                   Supply Names    Description
-------                   ------------    -----------
+Device			 Supply Names	 Description
+------			 ------------	 -----------
 da9063-regulator        :               : LDOs & BUCKs
+da9063-onkey            :               : On Key
 da9063-rtc              :               : Real-Time Clock
 da9063-watchdog         :               : Watchdog
 
@@ -51,6 +52,18 @@ Sub-nodes:
   the DA9063. There are currently no entries in this binding, however
   compatible = "dlg,da9063-rtc" should be added if a node is created.
 
+- onkey : This node defines the OnKey settings for controlling the key
+  functionality of the device. The node should contain the compatible property
+  with the value "dlg,da9063-onkey".
+
+  Optional onkey properties:
+
+  - dlg,disable-key-power : Disable power-down using a long key-press. If this
+    entry exists the OnKey driver will remove support for the KEY_POWER key
+    press. If this entry does not exist then by default the key-press
+    triggered power down is enabled and the OnKey will support both KEY_POWER
+    and KEY_SLEEP.
+
 - watchdog : This node defines settings for the Watchdog timer associated
   with the DA9063. There are currently no entries in this binding, however
   compatible = "dlg,da9063-watchdog" should be added if a node is created.
@@ -73,6 +86,11 @@ Example:
 			compatible = "dlg,da9063-watchdog";
 		};
 
+		onkey {
+			compatible = "dlg,da9063-onkey";
+			dlg,disable-key-power;
+		};
+
 		regulators {
 			DA9063_BCORE1: bcore1 {
 				regulator-name = "BCORE1";
-- 
end-of-patch for RESEND PATCH V2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [RESEND PATCH V2 0/2]  Add OnKey support for DA9063
@ 2015-04-17 12:03 S Twiss
  2015-04-17 12:03 ` [RESEND PATCH V2 2/2] devicetree: Add bindings for DA9063 OnKey S Twiss
  2015-04-17 12:03 ` [RESEND PATCH V2 1/2] input: misc: da9063: OnKey driver S Twiss
  0 siblings, 2 replies; 12+ messages in thread
From: S Twiss @ 2015-04-17 12:03 UTC (permalink / raw)
  To: Dmitry Torokhov, Ian Campbell, Kumar Gala, Lee Jones,
	Mark Rutland, Pawel Moll, Rob Herring, Samuel Ortiz, Steve Twiss
  Cc: DT, David Dajun Chen, INPUT, LKML, Support Opensource

From: S Twiss <stwiss.opensource@diasemi.com>

This patch set adds OnKey driver support for the Dialog
Semiconductor DA9063 PMIC.

[PATCH V2 1/2]: kernel driver onkey support
[PATCH V2 2/2]: device tree bindings document

Thank you,
Steve Twiss, Dialog Semiconductor Ltd.

S Twiss (2):
  input: misc: da9063: OnKey driver
  devicetree: Add bindings for DA9063 OnKey

 Documentation/devicetree/bindings/mfd/da9063.txt |  22 ++-
 MAINTAINERS                                      |   2 +-
 drivers/input/misc/Kconfig                       |  10 +
 drivers/input/misc/Makefile                      |   1 +
 drivers/input/misc/da9063-onkey.c                | 228 +++++++++++++++++++++++
 drivers/mfd/da9063-core.c                        |  55 ++++++
 include/linux/mfd/da9063/pdata.h                 |   1 +
 7 files changed, 316 insertions(+), 3 deletions(-)
 create mode 100644 drivers/input/misc/da9063-onkey.c

-- 
end-of-patch for RESEND PATCH V2


^ permalink raw reply	[flat|nested] 12+ messages in thread

* [RESEND PATCH V2 1/2] input: misc: da9063: OnKey driver
  2015-04-17 12:03 [RESEND PATCH V2 0/2] Add OnKey support for DA9063 S Twiss
  2015-04-17 12:03 ` [RESEND PATCH V2 2/2] devicetree: Add bindings for DA9063 OnKey S Twiss
@ 2015-04-17 12:03 ` S Twiss
  2015-04-17 16:15   ` Dmitry Torokhov
                     ` (2 more replies)
  1 sibling, 3 replies; 12+ messages in thread
From: S Twiss @ 2015-04-17 12:03 UTC (permalink / raw)
  To: Dmitry Torokhov, Lee Jones, Samuel Ortiz, Steve Twiss
  Cc: DT, David Dajun Chen, INPUT, Ian Campbell, Kumar Gala, LKML,
	Mark Rutland, Pawel Moll, Rob Herring, Support Opensource

From: Steve Twiss <stwiss.opensource@diasemi.com>

Add OnKey driver support for DA9063


Signed-off-by: Steve Twiss <stwiss.opensource@diasemi.com>

---
Changes from PATCH V1 to V2
---------------------------
- Remove the circular dependency comment in the main e-mail body
  linking PATCH V1 1/2 and 2/2
- Alter the copyright header information to match expected GPLv2
  text from http://www.gnu.org/licenses/gpl-2.0.html

This patch applies against linux-next and v4.0-rc6 


 MAINTAINERS                       |   2 +-
 drivers/input/misc/Kconfig        |  10 ++
 drivers/input/misc/Makefile       |   1 +
 drivers/input/misc/da9063-onkey.c | 228 ++++++++++++++++++++++++++++++++++++++
 drivers/mfd/da9063-core.c         |  55 +++++++++
 include/linux/mfd/da9063/pdata.h  |   1 +
 6 files changed, 296 insertions(+), 1 deletion(-)
 create mode 100644 drivers/input/misc/da9063-onkey.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 1de6afa..97e20cf 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3138,7 +3138,7 @@ S:	Supported
 F:	Documentation/hwmon/da90??
 F:	drivers/gpio/gpio-da90??.c
 F:	drivers/hwmon/da90??-hwmon.c
-F:	drivers/input/misc/da90??_onkey.c
+F:	drivers/input/misc/da90???onkey.c
 F:	drivers/input/touchscreen/da9052_tsi.c
 F:	drivers/leds/leds-da90??.c
 F:	drivers/mfd/da903x.c
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
index 6deb8da..9d7a79d 100644
--- a/drivers/input/misc/Kconfig
+++ b/drivers/input/misc/Kconfig
@@ -586,6 +586,16 @@ config INPUT_DA9055_ONKEY
 	  To compile this driver as a module, choose M here: the module
 	  will be called da9055_onkey.
 
+config INPUT_DA9063_ONKEY
+	tristate "Dialog DA9063 OnKey"
+	depends on MFD_DA9063
+	help
+	  Support the ONKEY of Dialog DA9063 Power Management IC as an
+	  input device reporting power button statue.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called da9063-onkey.
+
 config INPUT_DM355EVM
 	tristate "TI DaVinci DM355 EVM Keypad and IR Remote"
 	depends on MFD_DM355EVM_MSP
diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
index 403a1a5..50ae57e 100644
--- a/drivers/input/misc/Makefile
+++ b/drivers/input/misc/Makefile
@@ -25,6 +25,7 @@ obj-$(CONFIG_INPUT_CMA3000_I2C)		+= cma3000_d0x_i2c.o
 obj-$(CONFIG_INPUT_COBALT_BTNS)		+= cobalt_btns.o
 obj-$(CONFIG_INPUT_DA9052_ONKEY)	+= da9052_onkey.o
 obj-$(CONFIG_INPUT_DA9055_ONKEY)	+= da9055_onkey.o
+obj-$(CONFIG_INPUT_DA9063_ONKEY)	+= da9063-onkey.o
 obj-$(CONFIG_INPUT_DM355EVM)		+= dm355evm_keys.o
 obj-$(CONFIG_INPUT_E3X0_BUTTON)		+= e3x0-button.o
 obj-$(CONFIG_INPUT_DRV260X_HAPTICS)	+= drv260x.o
diff --git a/drivers/input/misc/da9063-onkey.c b/drivers/input/misc/da9063-onkey.c
new file mode 100644
index 0000000..9e41a2d
--- /dev/null
+++ b/drivers/input/misc/da9063-onkey.c
@@ -0,0 +1,228 @@
+/*
+ * da9063-onkey.c - Onkey device driver for DA9063
+ * Copyright (C) 2015  Dialog Semiconductor Ltd.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/input.h>
+#include <linux/interrupt.h>
+#include <linux/platform_device.h>
+#include <linux/workqueue.h>
+#include <linux/regmap.h>
+#include <linux/of.h>
+#include <linux/mfd/da9063/core.h>
+#include <linux/mfd/da9063/pdata.h>
+#include <linux/mfd/da9063/registers.h>
+
+struct da9063_onkey {
+	struct	da9063 *hw;
+	struct delayed_work work;
+	struct	input_dev *input;
+	int irq;
+	bool key_power;
+};
+
+static void da9063_poll_on(struct work_struct *work)
+{
+	struct da9063_onkey *onkey = container_of(work, struct da9063_onkey,
+						  work.work);
+	unsigned int val;
+	int fault_log = 0;
+	bool poll = true;
+	int ret;
+
+	/* poll to see when the pin is released */
+	ret = regmap_read(onkey->hw->regmap, DA9063_REG_STATUS_A, &val);
+	if (ret < 0) {
+		dev_err(&onkey->input->dev,
+			"Failed to read ON status: %d\n", ret);
+		goto err_poll;
+	}
+
+	if (!(val & DA9063_NONKEY)) {
+		ret = regmap_update_bits(onkey->hw->regmap,
+					 DA9063_REG_CONTROL_B,
+					 DA9063_NONKEY_LOCK, 0);
+		if (ret < 0) {
+			dev_err(&onkey->input->dev,
+				"Failed to reset the Key Delay %d\n", ret);
+			goto err_poll;
+		}
+
+		input_report_key(onkey->input, KEY_POWER, 0);
+		input_sync(onkey->input);
+
+		poll = false;
+	}
+
+	/* if the fault log KEY_RESET is detected,
+	 * then clear it and shutdown via I2C
+	 */
+	ret = regmap_read(onkey->hw->regmap, DA9063_REG_FAULT_LOG, &fault_log);
+	if (ret < 0)
+		dev_warn(&onkey->input->dev, "Cannot read FAULT_LOG\n");
+
+	if (fault_log & DA9063_KEY_RESET) {
+		ret = regmap_write(onkey->hw->regmap,
+				   DA9063_REG_FAULT_LOG,
+				   DA9063_KEY_RESET);
+		if (ret < 0)
+			dev_warn(&onkey->input->dev,
+				 "Cannot reset KEY_RESET fault log\n");
+		else {
+			/* at this point we do any S/W housekeeping
+			 * and then send shutdown command
+			 */
+			dev_info(&onkey->input->dev,
+				 "Sending SHUTDOWN to DA9063 ...\n");
+			ret = regmap_write(onkey->hw->regmap,
+					   DA9063_REG_CONTROL_F,
+					   DA9063_SHUTDOWN);
+			if (ret < 0)
+				dev_err(&onkey->input->dev,
+					"Cannot SHUTDOWN DA9063\n");
+		}
+	}
+
+err_poll:
+	if (poll)
+		schedule_delayed_work(&onkey->work, 50);
+}
+
+static irqreturn_t da9063_onkey_irq_handler(int irq, void *data)
+{
+	struct da9063_onkey *onkey = data;
+	unsigned int val;
+	int ret;
+
+	ret = regmap_read(onkey->hw->regmap, DA9063_REG_STATUS_A, &val);
+	if (onkey->key_power && (ret >= 0) && (val & DA9063_NONKEY)) {
+		input_report_key(onkey->input, KEY_POWER, 1);
+		input_sync(onkey->input);
+		schedule_delayed_work(&onkey->work, 0);
+		dev_notice(&onkey->input->dev, "KEY_POWER pressed.\n");
+	} else {
+		input_report_key(onkey->input, KEY_SLEEP, 1);
+		input_sync(onkey->input);
+		input_report_key(onkey->input, KEY_SLEEP, 0);
+		input_sync(onkey->input);
+		dev_notice(&onkey->input->dev, "KEY_SLEEP pressed.\n");
+	}
+
+	return IRQ_HANDLED;
+}
+
+static int da9063_onkey_probe(struct platform_device *pdev)
+{
+	struct da9063 *da9063 = dev_get_drvdata(pdev->dev.parent);
+	struct da9063_pdata *pdata = dev_get_platdata(da9063->dev);
+	struct da9063_onkey *onkey;
+	bool kp_tmp = true;
+	int ret = 0;
+
+	if (pdata)
+		kp_tmp = pdata->key_power;
+	else {
+		kp_tmp = of_property_read_bool((&pdev->dev)->of_node,
+					       "dlg,disable-key-power");
+		kp_tmp = !kp_tmp;
+	}
+
+	onkey = devm_kzalloc(&pdev->dev, sizeof(struct da9063_onkey),
+			     GFP_KERNEL);
+	if (!onkey) {
+		dev_err(&pdev->dev, "Failed to allocate memory.\n");
+		ret = -ENOMEM;
+		goto err;
+	}
+
+	INIT_DELAYED_WORK(&onkey->work, da9063_poll_on);
+
+	onkey->input = devm_input_allocate_device(&pdev->dev);
+	if (!onkey->input) {
+		dev_err(&pdev->dev, "Failed to allocated input device.\n");
+		ret = -ENOMEM;
+		goto err;
+	}
+
+	ret = platform_get_irq_byname(pdev, "ONKEY");
+	if (ret < 0) {
+		dev_err(&pdev->dev, "Failed to get platform IRQ.\n");
+		goto err;
+	}
+	onkey->irq = ret;
+
+	ret = request_threaded_irq(onkey->irq, NULL,
+				   da9063_onkey_irq_handler,
+				   IRQF_TRIGGER_LOW | IRQF_ONESHOT,
+				   "ONKEY", onkey);
+	if (ret) {
+		dev_err(&pdev->dev,
+			"Failed to request input device IRQ.\n");
+		goto err;
+	}
+
+	onkey->hw = da9063;
+	onkey->key_power = kp_tmp;
+	onkey->input->evbit[0] = BIT_MASK(EV_KEY);
+	onkey->input->name = DA9063_DRVNAME_ONKEY;
+	onkey->input->phys = DA9063_DRVNAME_ONKEY "/input0";
+	onkey->input->dev.parent = &pdev->dev;
+
+	if (onkey->key_power)
+		input_set_capability(onkey->input, EV_KEY, KEY_POWER);
+	input_set_capability(onkey->input, EV_KEY, KEY_SLEEP);
+
+	ret = input_register_device(onkey->input);
+	if (ret) {
+		dev_err(&pdev->dev,
+			"Failed to register input device.\n");
+		goto err_irq;
+	}
+
+	platform_set_drvdata(pdev, onkey);
+	return 0;
+
+err_irq:
+	free_irq(onkey->irq, onkey);
+	cancel_delayed_work_sync(&onkey->work);
+err:
+	return ret;
+}
+
+static int da9063_onkey_remove(struct platform_device *pdev)
+{
+	struct	da9063_onkey *onkey = platform_get_drvdata(pdev);
+
+	free_irq(onkey->irq, onkey);
+	cancel_delayed_work_sync(&onkey->work);
+	input_unregister_device(onkey->input);
+	return 0;
+}
+
+static struct platform_driver da9063_onkey_driver = {
+	.probe	= da9063_onkey_probe,
+	.remove	= da9063_onkey_remove,
+	.driver	= {
+		.name	= DA9063_DRVNAME_ONKEY,
+		.owner	= THIS_MODULE,
+	},
+};
+
+module_platform_driver(da9063_onkey_driver);
+
+MODULE_AUTHOR("S Twiss <stwiss.opensource@diasemi.com>");
+MODULE_DESCRIPTION("Onkey device driver for Dialog DA9063");
+MODULE_LICENSE("GPL v2");
+MODULE_ALIAS("platform:" DA9063_DRVNAME_ONKEY);
diff --git a/drivers/mfd/da9063-core.c b/drivers/mfd/da9063-core.c
index facd361..b6d6f18 100644
--- a/drivers/mfd/da9063-core.c
+++ b/drivers/mfd/da9063-core.c
@@ -60,6 +60,7 @@ static struct resource da9063_rtc_resources[] = {
 
 static struct resource da9063_onkey_resources[] = {
 	{
+		.name	= "ONKEY",
 		.start	= DA9063_IRQ_ONKEY,
 		.end	= DA9063_IRQ_ONKEY,
 		.flags	= IORESOURCE_IRQ,
@@ -97,6 +98,7 @@ static const struct mfd_cell da9063_devs[] = {
 		.name		= DA9063_DRVNAME_ONKEY,
 		.num_resources	= ARRAY_SIZE(da9063_onkey_resources),
 		.resources	= da9063_onkey_resources,
+		.of_compatible = "dlg,da9063-onkey",
 	},
 	{
 		.name		= DA9063_DRVNAME_RTC,
@@ -109,12 +111,64 @@ static const struct mfd_cell da9063_devs[] = {
 	},
 };
 
+static int da9063_clear_fault_log(struct da9063 *da9063)
+{
+	int ret = 0;
+	int fault_log = 0;
+
+	ret = regmap_read(da9063->regmap, DA9063_REG_FAULT_LOG, &fault_log);
+	if (ret < 0) {
+		dev_err(da9063->dev, "Cannot read FAULT_LOG.\n");
+		return -EIO;
+	}
+
+	if (fault_log) {
+		if (fault_log & DA9063_TWD_ERROR)
+			dev_dbg(da9063->dev,
+				"Fault log entry detected: DA9063_TWD_ERROR\n");
+		if (fault_log & DA9063_POR)
+			dev_dbg(da9063->dev,
+				"Fault log entry detected: DA9063_POR\n");
+		if (fault_log & DA9063_VDD_FAULT)
+			dev_dbg(da9063->dev,
+				"Fault log entry detected: DA9063_VDD_FAULT\n");
+		if (fault_log & DA9063_VDD_START)
+			dev_dbg(da9063->dev,
+				"Fault log entry detected: DA9063_VDD_START\n");
+		if (fault_log & DA9063_TEMP_CRIT)
+			dev_dbg(da9063->dev,
+				"Fault log entry detected: DA9063_TEMP_CRIT\n");
+		if (fault_log & DA9063_KEY_RESET)
+			dev_dbg(da9063->dev,
+				"Fault log entry detected: DA9063_KEY_RESET\n");
+		if (fault_log & DA9063_NSHUTDOWN)
+			dev_dbg(da9063->dev,
+				"Fault log entry detected: DA9063_NSHUTDOWN\n");
+		if (fault_log & DA9063_WAIT_SHUT)
+			dev_dbg(da9063->dev,
+				"Fault log entry detected: DA9063_WAIT_SHUT\n");
+	}
+
+	ret = regmap_write(da9063->regmap,
+			   DA9063_REG_FAULT_LOG,
+			   fault_log);
+	if (ret < 0)
+		dev_err(da9063->dev,
+			"Cannot reset FAULT_LOG values %d\n", ret);
+
+	return ret;
+}
+
 int da9063_device_init(struct da9063 *da9063, unsigned int irq)
 {
 	struct da9063_pdata *pdata = da9063->dev->platform_data;
 	int model, variant_id, variant_code;
 	int ret;
 
+	ret = da9063_clear_fault_log(da9063);
+	if (ret < 0)
+		dev_err(da9063->dev, "Cannot clear fault log\n");
+
 	if (pdata) {
 		da9063->flags = pdata->flags;
 		da9063->irq_base = pdata->irq_base;
@@ -178,6 +232,7 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
 	if (ret)
 		dev_err(da9063->dev, "Cannot add MFD cells\n");
 
+
 	return ret;
 }
 
diff --git a/include/linux/mfd/da9063/pdata.h b/include/linux/mfd/da9063/pdata.h
index 95c8742..612383b 100644
--- a/include/linux/mfd/da9063/pdata.h
+++ b/include/linux/mfd/da9063/pdata.h
@@ -103,6 +103,7 @@ struct da9063;
 struct da9063_pdata {
 	int				(*init)(struct da9063 *da9063);
 	int				irq_base;
+	bool				key_power;
 	unsigned			flags;
 	struct da9063_regulators_pdata	*regulators_pdata;
 	struct led_platform_data	*leds_pdata;
-- 
end-of-patch for RESEND PATCH V2


^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [RESEND PATCH V2 1/2] input: misc: da9063: OnKey driver
  2015-04-17 12:03 ` [RESEND PATCH V2 1/2] input: misc: da9063: OnKey driver S Twiss
@ 2015-04-17 16:15   ` Dmitry Torokhov
  2015-04-24 13:36     ` Opensource [Steve Twiss]
  2015-04-29 16:00     ` Opensource [Steve Twiss]
  2015-04-18  7:55   ` Paul Bolle
  2015-04-28 11:56   ` Lee Jones
  2 siblings, 2 replies; 12+ messages in thread
From: Dmitry Torokhov @ 2015-04-17 16:15 UTC (permalink / raw)
  To: S Twiss
  Cc: Lee Jones, Samuel Ortiz, DT, David Dajun Chen, INPUT,
	Ian Campbell, Kumar Gala, LKML, Mark Rutland, Pawel Moll,
	Rob Herring, Support Opensource

On Fri, Apr 17, 2015 at 01:03:20PM +0100, S Twiss wrote:
> From: Steve Twiss <stwiss.opensource@diasemi.com>
> 
> Add OnKey driver support for DA9063
> 

Isn't this almost to the letter identical to da9062 that I just looked
at? Please find a way to not make a brand new driver for the slightest
variation of the chip...

Thanks.

> 
> Signed-off-by: Steve Twiss <stwiss.opensource@diasemi.com>
> 
> ---
> Changes from PATCH V1 to V2
> ---------------------------
> - Remove the circular dependency comment in the main e-mail body
>   linking PATCH V1 1/2 and 2/2
> - Alter the copyright header information to match expected GPLv2
>   text from http://www.gnu.org/licenses/gpl-2.0.html
> 
> This patch applies against linux-next and v4.0-rc6 
> 
> 
>  MAINTAINERS                       |   2 +-
>  drivers/input/misc/Kconfig        |  10 ++
>  drivers/input/misc/Makefile       |   1 +
>  drivers/input/misc/da9063-onkey.c | 228 ++++++++++++++++++++++++++++++++++++++
>  drivers/mfd/da9063-core.c         |  55 +++++++++
>  include/linux/mfd/da9063/pdata.h  |   1 +
>  6 files changed, 296 insertions(+), 1 deletion(-)
>  create mode 100644 drivers/input/misc/da9063-onkey.c
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 1de6afa..97e20cf 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -3138,7 +3138,7 @@ S:	Supported
>  F:	Documentation/hwmon/da90??
>  F:	drivers/gpio/gpio-da90??.c
>  F:	drivers/hwmon/da90??-hwmon.c
> -F:	drivers/input/misc/da90??_onkey.c
> +F:	drivers/input/misc/da90???onkey.c
>  F:	drivers/input/touchscreen/da9052_tsi.c
>  F:	drivers/leds/leds-da90??.c
>  F:	drivers/mfd/da903x.c
> diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
> index 6deb8da..9d7a79d 100644
> --- a/drivers/input/misc/Kconfig
> +++ b/drivers/input/misc/Kconfig
> @@ -586,6 +586,16 @@ config INPUT_DA9055_ONKEY
>  	  To compile this driver as a module, choose M here: the module
>  	  will be called da9055_onkey.
>  
> +config INPUT_DA9063_ONKEY
> +	tristate "Dialog DA9063 OnKey"
> +	depends on MFD_DA9063
> +	help
> +	  Support the ONKEY of Dialog DA9063 Power Management IC as an
> +	  input device reporting power button statue.
> +
> +	  To compile this driver as a module, choose M here: the module
> +	  will be called da9063-onkey.
> +
>  config INPUT_DM355EVM
>  	tristate "TI DaVinci DM355 EVM Keypad and IR Remote"
>  	depends on MFD_DM355EVM_MSP
> diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
> index 403a1a5..50ae57e 100644
> --- a/drivers/input/misc/Makefile
> +++ b/drivers/input/misc/Makefile
> @@ -25,6 +25,7 @@ obj-$(CONFIG_INPUT_CMA3000_I2C)		+= cma3000_d0x_i2c.o
>  obj-$(CONFIG_INPUT_COBALT_BTNS)		+= cobalt_btns.o
>  obj-$(CONFIG_INPUT_DA9052_ONKEY)	+= da9052_onkey.o
>  obj-$(CONFIG_INPUT_DA9055_ONKEY)	+= da9055_onkey.o
> +obj-$(CONFIG_INPUT_DA9063_ONKEY)	+= da9063-onkey.o
>  obj-$(CONFIG_INPUT_DM355EVM)		+= dm355evm_keys.o
>  obj-$(CONFIG_INPUT_E3X0_BUTTON)		+= e3x0-button.o
>  obj-$(CONFIG_INPUT_DRV260X_HAPTICS)	+= drv260x.o
> diff --git a/drivers/input/misc/da9063-onkey.c b/drivers/input/misc/da9063-onkey.c
> new file mode 100644
> index 0000000..9e41a2d
> --- /dev/null
> +++ b/drivers/input/misc/da9063-onkey.c
> @@ -0,0 +1,228 @@
> +/*
> + * da9063-onkey.c - Onkey device driver for DA9063
> + * Copyright (C) 2015  Dialog Semiconductor Ltd.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * as published by the Free Software Foundation; either version 2
> + * of the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +
> +#include <linux/module.h>
> +#include <linux/errno.h>
> +#include <linux/input.h>
> +#include <linux/interrupt.h>
> +#include <linux/platform_device.h>
> +#include <linux/workqueue.h>
> +#include <linux/regmap.h>
> +#include <linux/of.h>
> +#include <linux/mfd/da9063/core.h>
> +#include <linux/mfd/da9063/pdata.h>
> +#include <linux/mfd/da9063/registers.h>
> +
> +struct da9063_onkey {
> +	struct	da9063 *hw;
> +	struct delayed_work work;
> +	struct	input_dev *input;
> +	int irq;
> +	bool key_power;
> +};
> +
> +static void da9063_poll_on(struct work_struct *work)
> +{
> +	struct da9063_onkey *onkey = container_of(work, struct da9063_onkey,
> +						  work.work);
> +	unsigned int val;
> +	int fault_log = 0;
> +	bool poll = true;
> +	int ret;
> +
> +	/* poll to see when the pin is released */
> +	ret = regmap_read(onkey->hw->regmap, DA9063_REG_STATUS_A, &val);
> +	if (ret < 0) {
> +		dev_err(&onkey->input->dev,
> +			"Failed to read ON status: %d\n", ret);
> +		goto err_poll;
> +	}
> +
> +	if (!(val & DA9063_NONKEY)) {
> +		ret = regmap_update_bits(onkey->hw->regmap,
> +					 DA9063_REG_CONTROL_B,
> +					 DA9063_NONKEY_LOCK, 0);
> +		if (ret < 0) {
> +			dev_err(&onkey->input->dev,
> +				"Failed to reset the Key Delay %d\n", ret);
> +			goto err_poll;
> +		}
> +
> +		input_report_key(onkey->input, KEY_POWER, 0);
> +		input_sync(onkey->input);
> +
> +		poll = false;
> +	}
> +
> +	/* if the fault log KEY_RESET is detected,
> +	 * then clear it and shutdown via I2C
> +	 */
> +	ret = regmap_read(onkey->hw->regmap, DA9063_REG_FAULT_LOG, &fault_log);
> +	if (ret < 0)
> +		dev_warn(&onkey->input->dev, "Cannot read FAULT_LOG\n");
> +
> +	if (fault_log & DA9063_KEY_RESET) {
> +		ret = regmap_write(onkey->hw->regmap,
> +				   DA9063_REG_FAULT_LOG,
> +				   DA9063_KEY_RESET);
> +		if (ret < 0)
> +			dev_warn(&onkey->input->dev,
> +				 "Cannot reset KEY_RESET fault log\n");
> +		else {
> +			/* at this point we do any S/W housekeeping
> +			 * and then send shutdown command
> +			 */
> +			dev_info(&onkey->input->dev,
> +				 "Sending SHUTDOWN to DA9063 ...\n");
> +			ret = regmap_write(onkey->hw->regmap,
> +					   DA9063_REG_CONTROL_F,
> +					   DA9063_SHUTDOWN);
> +			if (ret < 0)
> +				dev_err(&onkey->input->dev,
> +					"Cannot SHUTDOWN DA9063\n");
> +		}
> +	}
> +
> +err_poll:
> +	if (poll)
> +		schedule_delayed_work(&onkey->work, 50);
> +}
> +
> +static irqreturn_t da9063_onkey_irq_handler(int irq, void *data)
> +{
> +	struct da9063_onkey *onkey = data;
> +	unsigned int val;
> +	int ret;
> +
> +	ret = regmap_read(onkey->hw->regmap, DA9063_REG_STATUS_A, &val);
> +	if (onkey->key_power && (ret >= 0) && (val & DA9063_NONKEY)) {
> +		input_report_key(onkey->input, KEY_POWER, 1);
> +		input_sync(onkey->input);
> +		schedule_delayed_work(&onkey->work, 0);
> +		dev_notice(&onkey->input->dev, "KEY_POWER pressed.\n");
> +	} else {
> +		input_report_key(onkey->input, KEY_SLEEP, 1);
> +		input_sync(onkey->input);
> +		input_report_key(onkey->input, KEY_SLEEP, 0);
> +		input_sync(onkey->input);
> +		dev_notice(&onkey->input->dev, "KEY_SLEEP pressed.\n");
> +	}
> +
> +	return IRQ_HANDLED;
> +}
> +
> +static int da9063_onkey_probe(struct platform_device *pdev)
> +{
> +	struct da9063 *da9063 = dev_get_drvdata(pdev->dev.parent);
> +	struct da9063_pdata *pdata = dev_get_platdata(da9063->dev);
> +	struct da9063_onkey *onkey;
> +	bool kp_tmp = true;
> +	int ret = 0;
> +
> +	if (pdata)
> +		kp_tmp = pdata->key_power;
> +	else {
> +		kp_tmp = of_property_read_bool((&pdev->dev)->of_node,
> +					       "dlg,disable-key-power");
> +		kp_tmp = !kp_tmp;
> +	}
> +
> +	onkey = devm_kzalloc(&pdev->dev, sizeof(struct da9063_onkey),
> +			     GFP_KERNEL);
> +	if (!onkey) {
> +		dev_err(&pdev->dev, "Failed to allocate memory.\n");
> +		ret = -ENOMEM;
> +		goto err;
> +	}
> +
> +	INIT_DELAYED_WORK(&onkey->work, da9063_poll_on);
> +
> +	onkey->input = devm_input_allocate_device(&pdev->dev);
> +	if (!onkey->input) {
> +		dev_err(&pdev->dev, "Failed to allocated input device.\n");
> +		ret = -ENOMEM;
> +		goto err;
> +	}
> +
> +	ret = platform_get_irq_byname(pdev, "ONKEY");
> +	if (ret < 0) {
> +		dev_err(&pdev->dev, "Failed to get platform IRQ.\n");
> +		goto err;
> +	}
> +	onkey->irq = ret;
> +
> +	ret = request_threaded_irq(onkey->irq, NULL,
> +				   da9063_onkey_irq_handler,
> +				   IRQF_TRIGGER_LOW | IRQF_ONESHOT,
> +				   "ONKEY", onkey);
> +	if (ret) {
> +		dev_err(&pdev->dev,
> +			"Failed to request input device IRQ.\n");
> +		goto err;
> +	}
> +
> +	onkey->hw = da9063;
> +	onkey->key_power = kp_tmp;
> +	onkey->input->evbit[0] = BIT_MASK(EV_KEY);
> +	onkey->input->name = DA9063_DRVNAME_ONKEY;
> +	onkey->input->phys = DA9063_DRVNAME_ONKEY "/input0";
> +	onkey->input->dev.parent = &pdev->dev;
> +
> +	if (onkey->key_power)
> +		input_set_capability(onkey->input, EV_KEY, KEY_POWER);
> +	input_set_capability(onkey->input, EV_KEY, KEY_SLEEP);
> +
> +	ret = input_register_device(onkey->input);
> +	if (ret) {
> +		dev_err(&pdev->dev,
> +			"Failed to register input device.\n");
> +		goto err_irq;
> +	}
> +
> +	platform_set_drvdata(pdev, onkey);
> +	return 0;
> +
> +err_irq:
> +	free_irq(onkey->irq, onkey);
> +	cancel_delayed_work_sync(&onkey->work);
> +err:
> +	return ret;
> +}
> +
> +static int da9063_onkey_remove(struct platform_device *pdev)
> +{
> +	struct	da9063_onkey *onkey = platform_get_drvdata(pdev);
> +
> +	free_irq(onkey->irq, onkey);
> +	cancel_delayed_work_sync(&onkey->work);
> +	input_unregister_device(onkey->input);
> +	return 0;
> +}
> +
> +static struct platform_driver da9063_onkey_driver = {
> +	.probe	= da9063_onkey_probe,
> +	.remove	= da9063_onkey_remove,
> +	.driver	= {
> +		.name	= DA9063_DRVNAME_ONKEY,
> +		.owner	= THIS_MODULE,
> +	},
> +};
> +
> +module_platform_driver(da9063_onkey_driver);
> +
> +MODULE_AUTHOR("S Twiss <stwiss.opensource@diasemi.com>");
> +MODULE_DESCRIPTION("Onkey device driver for Dialog DA9063");
> +MODULE_LICENSE("GPL v2");
> +MODULE_ALIAS("platform:" DA9063_DRVNAME_ONKEY);
> diff --git a/drivers/mfd/da9063-core.c b/drivers/mfd/da9063-core.c
> index facd361..b6d6f18 100644
> --- a/drivers/mfd/da9063-core.c
> +++ b/drivers/mfd/da9063-core.c
> @@ -60,6 +60,7 @@ static struct resource da9063_rtc_resources[] = {
>  
>  static struct resource da9063_onkey_resources[] = {
>  	{
> +		.name	= "ONKEY",
>  		.start	= DA9063_IRQ_ONKEY,
>  		.end	= DA9063_IRQ_ONKEY,
>  		.flags	= IORESOURCE_IRQ,
> @@ -97,6 +98,7 @@ static const struct mfd_cell da9063_devs[] = {
>  		.name		= DA9063_DRVNAME_ONKEY,
>  		.num_resources	= ARRAY_SIZE(da9063_onkey_resources),
>  		.resources	= da9063_onkey_resources,
> +		.of_compatible = "dlg,da9063-onkey",
>  	},
>  	{
>  		.name		= DA9063_DRVNAME_RTC,
> @@ -109,12 +111,64 @@ static const struct mfd_cell da9063_devs[] = {
>  	},
>  };
>  
> +static int da9063_clear_fault_log(struct da9063 *da9063)
> +{
> +	int ret = 0;
> +	int fault_log = 0;
> +
> +	ret = regmap_read(da9063->regmap, DA9063_REG_FAULT_LOG, &fault_log);
> +	if (ret < 0) {
> +		dev_err(da9063->dev, "Cannot read FAULT_LOG.\n");
> +		return -EIO;
> +	}
> +
> +	if (fault_log) {
> +		if (fault_log & DA9063_TWD_ERROR)
> +			dev_dbg(da9063->dev,
> +				"Fault log entry detected: DA9063_TWD_ERROR\n");
> +		if (fault_log & DA9063_POR)
> +			dev_dbg(da9063->dev,
> +				"Fault log entry detected: DA9063_POR\n");
> +		if (fault_log & DA9063_VDD_FAULT)
> +			dev_dbg(da9063->dev,
> +				"Fault log entry detected: DA9063_VDD_FAULT\n");
> +		if (fault_log & DA9063_VDD_START)
> +			dev_dbg(da9063->dev,
> +				"Fault log entry detected: DA9063_VDD_START\n");
> +		if (fault_log & DA9063_TEMP_CRIT)
> +			dev_dbg(da9063->dev,
> +				"Fault log entry detected: DA9063_TEMP_CRIT\n");
> +		if (fault_log & DA9063_KEY_RESET)
> +			dev_dbg(da9063->dev,
> +				"Fault log entry detected: DA9063_KEY_RESET\n");
> +		if (fault_log & DA9063_NSHUTDOWN)
> +			dev_dbg(da9063->dev,
> +				"Fault log entry detected: DA9063_NSHUTDOWN\n");
> +		if (fault_log & DA9063_WAIT_SHUT)
> +			dev_dbg(da9063->dev,
> +				"Fault log entry detected: DA9063_WAIT_SHUT\n");
> +	}
> +
> +	ret = regmap_write(da9063->regmap,
> +			   DA9063_REG_FAULT_LOG,
> +			   fault_log);
> +	if (ret < 0)
> +		dev_err(da9063->dev,
> +			"Cannot reset FAULT_LOG values %d\n", ret);
> +
> +	return ret;
> +}
> +
>  int da9063_device_init(struct da9063 *da9063, unsigned int irq)
>  {
>  	struct da9063_pdata *pdata = da9063->dev->platform_data;
>  	int model, variant_id, variant_code;
>  	int ret;
>  
> +	ret = da9063_clear_fault_log(da9063);
> +	if (ret < 0)
> +		dev_err(da9063->dev, "Cannot clear fault log\n");
> +
>  	if (pdata) {
>  		da9063->flags = pdata->flags;
>  		da9063->irq_base = pdata->irq_base;
> @@ -178,6 +232,7 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
>  	if (ret)
>  		dev_err(da9063->dev, "Cannot add MFD cells\n");
>  
> +
>  	return ret;
>  }
>  
> diff --git a/include/linux/mfd/da9063/pdata.h b/include/linux/mfd/da9063/pdata.h
> index 95c8742..612383b 100644
> --- a/include/linux/mfd/da9063/pdata.h
> +++ b/include/linux/mfd/da9063/pdata.h
> @@ -103,6 +103,7 @@ struct da9063;
>  struct da9063_pdata {
>  	int				(*init)(struct da9063 *da9063);
>  	int				irq_base;
> +	bool				key_power;
>  	unsigned			flags;
>  	struct da9063_regulators_pdata	*regulators_pdata;
>  	struct led_platform_data	*leds_pdata;
> -- 
> end-of-patch for RESEND PATCH V2
> 

-- 
Dmitry

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [RESEND PATCH V2 1/2] input: misc: da9063: OnKey driver
  2015-04-17 12:03 ` [RESEND PATCH V2 1/2] input: misc: da9063: OnKey driver S Twiss
  2015-04-17 16:15   ` Dmitry Torokhov
@ 2015-04-18  7:55   ` Paul Bolle
  2015-04-24 13:45     ` Opensource [Steve Twiss]
  2015-04-28 11:56   ` Lee Jones
  2 siblings, 1 reply; 12+ messages in thread
From: Paul Bolle @ 2015-04-18  7:55 UTC (permalink / raw)
  To: S Twiss
  Cc: Dmitry Torokhov, Lee Jones, Samuel Ortiz, DT, David Dajun Chen,
	INPUT, Ian Campbell, Kumar Gala, LKML, Mark Rutland, Pawel Moll,
	Rob Herring, Support Opensource

There's still a license mismatch left (it probably got lost in the noise
when I finally noticed that the header comment mentioned the LGPL in
V1).

On Fri, 2015-04-17 at 13:03 +0100, S Twiss wrote:
> --- /dev/null
> +++ b/drivers/input/misc/da9063-onkey.c

> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * as published by the Free Software Foundation; either version 2
> + * of the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.

This states the license is GPL v2 or later.

> +MODULE_LICENSE("GPL v2");

And, according to include/linux/module.h, this states the license is
just GPL v2. So I think either the license comment or the license ident
used in the MODULE_LICENSE() macro needs to change.

Thanks,


Paul Bolle


^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [RESEND PATCH V2 1/2] input: misc: da9063: OnKey driver
  2015-04-17 16:15   ` Dmitry Torokhov
@ 2015-04-24 13:36     ` Opensource [Steve Twiss]
  2015-04-29 16:00     ` Opensource [Steve Twiss]
  1 sibling, 0 replies; 12+ messages in thread
From: Opensource [Steve Twiss] @ 2015-04-24 13:36 UTC (permalink / raw)
  To: Dmitry Torokhov, Opensource [Steve Twiss]
  Cc: Lee Jones, Samuel Ortiz, DT, David Dajun Chen, INPUT,
	Ian Campbell, Kumar Gala, LKML, Mark Rutland, Pawel Moll,
	Rob Herring, Support Opensource

On 17 April 2015 17:16 Dmitry Torokhov wrote

> On Fri, Apr 17, 2015 at 01:03:20PM +0100, S Twiss wrote:
> > From: Steve Twiss <stwiss.opensource@diasemi.com>
> >
> > Add OnKey driver support for DA9063
> >
> 
> Isn't this almost to the letter identical to da9062 that I just looked
> at? Please find a way to not make a brand new driver for the slightest
> variation of the chip...
> 

Hi Dmitry 

Well, the two chips DA9063 and DA9062 are very different even though their
numbers are sequentially 62 and 63. They are different chips and not a simple
variation. However the OnKey components to these chips *are* functionally
similar which is why I am using the same code.  In this case the 62 OnKey driver
works the same way as 63 OnKey driver. 

Has the combined approach been done before? Are there any examples of this
that you would like me to follow?

I guess I'll drop the OnKey patch for 62 and just concentrate on your comments for
63 instead. After 63 is in a good state then I will work at getting 62 to use a combined
driver.

Regards,
Steve

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [RESEND PATCH V2 1/2] input: misc: da9063: OnKey driver
  2015-04-18  7:55   ` Paul Bolle
@ 2015-04-24 13:45     ` Opensource [Steve Twiss]
  2015-04-24 16:53       ` Paul Bolle
  0 siblings, 1 reply; 12+ messages in thread
From: Opensource [Steve Twiss] @ 2015-04-24 13:45 UTC (permalink / raw)
  To: Paul Bolle, Opensource [Steve Twiss]
  Cc: Dmitry Torokhov, Lee Jones, Samuel Ortiz, DT, David Dajun Chen,
	INPUT, Ian Campbell, Kumar Gala, LKML, Mark Rutland, Pawel Moll,
	Rob Herring, Support Opensource

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="utf-8", Size: 1140 bytes --]

On 18 April 2015 08:55 Paul Bolle wrote:

> There's still a license mismatch left (it probably got lost in the noise
> when I finally noticed that the header comment mentioned the LGPL in
> V1).
> 
> On Fri, 2015-04-17 at 13:03 +0100, S Twiss wrote:
> > + * as published by the Free Software Foundation; either version 2
> > + * of the License, or (at your option) any later version.
> 
> This states the license is GPL v2 or later.
> 
> > +MODULE_LICENSE("GPL v2");
> 
> And, according to include/linux/module.h, this states the license is
> just GPL v2. So I think either the license comment or the license ident
> used in the MODULE_LICENSE() macro needs to change.
> 

Got it. Thanks for your comments.
I have altered the MODULE_LICENSE() to be "GPL" instead of "GPL v2".
That should fix it.

That seems to be a fairly common mistake in the kernel. When I did a
straw-poll,  around 10% of files came up with "GPL v2" and contained
 "any later version" text.

Regards,
Steve.

ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [RESEND PATCH V2 1/2] input: misc: da9063: OnKey driver
  2015-04-24 13:45     ` Opensource [Steve Twiss]
@ 2015-04-24 16:53       ` Paul Bolle
  0 siblings, 0 replies; 12+ messages in thread
From: Paul Bolle @ 2015-04-24 16:53 UTC (permalink / raw)
  To: Steve Twiss
  Cc: Dmitry Torokhov, Lee Jones, Samuel Ortiz, DT, David Dajun Chen,
	INPUT, Ian Campbell, Kumar Gala, LKML, Mark Rutland, Pawel Moll,
	Rob Herring, Support Opensource

On Fri, 2015-04-24 at 13:45 +0000, Opensource [Steve Twiss] wrote:
> That seems to be a fairly common mistake in the kernel. 

It's an easy mistake to make. And as long as people pick an ident that
passes license_is_gpl_compatible() the module will build and load just
fine.

> When I did a
> straw-poll,  around 10% of files came up with "GPL v2" and contained
>  "any later version" text.

That seems plausible.

I'm inclined to think the difference between "GPL" and "GPL v2" is
mainly an accident of history (see https://lkml.org/lkml/2015/3/11/188
for some background). But apparently were stuck with these two idents.
Anyhow, in the last two months I've not come up with a better plan than
regularly check patches for mismatches like the one you made. If you
have a better idea, I'll be all ears.

Thanks,


Paul Bolle


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [RESEND PATCH V2 1/2] input: misc: da9063: OnKey driver
  2015-04-17 12:03 ` [RESEND PATCH V2 1/2] input: misc: da9063: OnKey driver S Twiss
  2015-04-17 16:15   ` Dmitry Torokhov
  2015-04-18  7:55   ` Paul Bolle
@ 2015-04-28 11:56   ` Lee Jones
  2015-04-29 16:01     ` Opensource [Steve Twiss]
  2 siblings, 1 reply; 12+ messages in thread
From: Lee Jones @ 2015-04-28 11:56 UTC (permalink / raw)
  To: S Twiss
  Cc: Dmitry Torokhov, Samuel Ortiz, DT, David Dajun Chen, INPUT,
	Ian Campbell, Kumar Gala, LKML, Mark Rutland, Pawel Moll,
	Rob Herring, Support Opensource

On Fri, 17 Apr 2015, S Twiss wrote:

> From: Steve Twiss <stwiss.opensource@diasemi.com>
> 
> Add OnKey driver support for DA9063
> 
> 
> Signed-off-by: Steve Twiss <stwiss.opensource@diasemi.com>
> 
> ---
> Changes from PATCH V1 to V2
> ---------------------------
> - Remove the circular dependency comment in the main e-mail body
>   linking PATCH V1 1/2 and 2/2
> - Alter the copyright header information to match expected GPLv2
>   text from http://www.gnu.org/licenses/gpl-2.0.html
> 
> This patch applies against linux-next and v4.0-rc6 
> 
> 
>  MAINTAINERS                       |   2 +-
>  drivers/input/misc/Kconfig        |  10 ++
>  drivers/input/misc/Makefile       |   1 +
>  drivers/input/misc/da9063-onkey.c | 228 ++++++++++++++++++++++++++++++++++++++
>  drivers/mfd/da9063-core.c         |  55 +++++++++
>  include/linux/mfd/da9063/pdata.h  |   1 +

This should be a seperate patch.

>  6 files changed, 296 insertions(+), 1 deletion(-)
>  create mode 100644 drivers/input/misc/da9063-onkey.c

[...]

> diff --git a/drivers/mfd/da9063-core.c b/drivers/mfd/da9063-core.c
> index facd361..b6d6f18 100644
> --- a/drivers/mfd/da9063-core.c
> +++ b/drivers/mfd/da9063-core.c
> @@ -60,6 +60,7 @@ static struct resource da9063_rtc_resources[] = {
>  
>  static struct resource da9063_onkey_resources[] = {
>  	{
> +		.name	= "ONKEY",
>  		.start	= DA9063_IRQ_ONKEY,
>  		.end	= DA9063_IRQ_ONKEY,
>  		.flags	= IORESOURCE_IRQ,
> @@ -97,6 +98,7 @@ static const struct mfd_cell da9063_devs[] = {
>  		.name		= DA9063_DRVNAME_ONKEY,
>  		.num_resources	= ARRAY_SIZE(da9063_onkey_resources),
>  		.resources	= da9063_onkey_resources,
> +		.of_compatible = "dlg,da9063-onkey",
>  	},
>  	{
>  		.name		= DA9063_DRVNAME_RTC,

This is lowercase, so why does "ONKEY" have to be uppercase?

> @@ -109,12 +111,64 @@ static const struct mfd_cell da9063_devs[] = {
>  	},
>  };
>  
> +static int da9063_clear_fault_log(struct da9063 *da9063)
> +{
> +	int ret = 0;
> +	int fault_log = 0;
> +
> +	ret = regmap_read(da9063->regmap, DA9063_REG_FAULT_LOG, &fault_log);
> +	if (ret < 0) {
> +		dev_err(da9063->dev, "Cannot read FAULT_LOG.\n");
> +		return -EIO;
> +	}
> +
> +	if (fault_log) {
> +		if (fault_log & DA9063_TWD_ERROR)
> +			dev_dbg(da9063->dev,
> +				"Fault log entry detected: DA9063_TWD_ERROR\n");
> +		if (fault_log & DA9063_POR)
> +			dev_dbg(da9063->dev,
> +				"Fault log entry detected: DA9063_POR\n");
> +		if (fault_log & DA9063_VDD_FAULT)
> +			dev_dbg(da9063->dev,
> +				"Fault log entry detected: DA9063_VDD_FAULT\n");
> +		if (fault_log & DA9063_VDD_START)
> +			dev_dbg(da9063->dev,
> +				"Fault log entry detected: DA9063_VDD_START\n");
> +		if (fault_log & DA9063_TEMP_CRIT)
> +			dev_dbg(da9063->dev,
> +				"Fault log entry detected: DA9063_TEMP_CRIT\n");
> +		if (fault_log & DA9063_KEY_RESET)
> +			dev_dbg(da9063->dev,
> +				"Fault log entry detected: DA9063_KEY_RESET\n");
> +		if (fault_log & DA9063_NSHUTDOWN)
> +			dev_dbg(da9063->dev,
> +				"Fault log entry detected: DA9063_NSHUTDOWN\n");
> +		if (fault_log & DA9063_WAIT_SHUT)
> +			dev_dbg(da9063->dev,
> +				"Fault log entry detected: DA9063_WAIT_SHUT\n");
> +	}
> +
> +	ret = regmap_write(da9063->regmap,
> +			   DA9063_REG_FAULT_LOG,
> +			   fault_log);
> +	if (ret < 0)
> +		dev_err(da9063->dev,
> +			"Cannot reset FAULT_LOG values %d\n", ret);
> +
> +	return ret;
> +}
> +
>  int da9063_device_init(struct da9063 *da9063, unsigned int irq)
>  {
>  	struct da9063_pdata *pdata = da9063->dev->platform_data;
>  	int model, variant_id, variant_code;
>  	int ret;
>  
> +	ret = da9063_clear_fault_log(da9063);
> +	if (ret < 0)
> +		dev_err(da9063->dev, "Cannot clear fault log\n");
> +
>  	if (pdata) {
>  		da9063->flags = pdata->flags;
>  		da9063->irq_base = pdata->irq_base;
> @@ -178,6 +232,7 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
>  	if (ret)
>  		dev_err(da9063->dev, "Cannot add MFD cells\n");
>  
> +

Tut tut!

>  	return ret;
>  }
>  
> diff --git a/include/linux/mfd/da9063/pdata.h b/include/linux/mfd/da9063/pdata.h
> index 95c8742..612383b 100644
> --- a/include/linux/mfd/da9063/pdata.h
> +++ b/include/linux/mfd/da9063/pdata.h
> @@ -103,6 +103,7 @@ struct da9063;
>  struct da9063_pdata {
>  	int				(*init)(struct da9063 *da9063);
>  	int				irq_base;
> +	bool				key_power;
>  	unsigned			flags;
>  	struct da9063_regulators_pdata	*regulators_pdata;
>  	struct led_platform_data	*leds_pdata;

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [RESEND PATCH V2 1/2] input: misc: da9063: OnKey driver
  2015-04-17 16:15   ` Dmitry Torokhov
  2015-04-24 13:36     ` Opensource [Steve Twiss]
@ 2015-04-29 16:00     ` Opensource [Steve Twiss]
  1 sibling, 0 replies; 12+ messages in thread
From: Opensource [Steve Twiss] @ 2015-04-29 16:00 UTC (permalink / raw)
  To: Dmitry Torokhov, Opensource [Steve Twiss]
  Cc: Lee Jones, Samuel Ortiz, DT, David Dajun Chen, INPUT,
	Ian Campbell, Kumar Gala, LKML, Mark Rutland, Pawel Moll,
	Rob Herring, Support Opensource

On 17 April 2015 17:16 Dmitry Torokhov [mailto:dmitry.torokhov@gmail.com] wrote:

> On Fri, Apr 17, 2015 at 01:03:20PM +0100, S Twiss wrote:
> > From: Steve Twiss <stwiss.opensource@diasemi.com>
> >
> > Add OnKey driver support for DA9063
> >
> 
> Isn't this almost to the letter identical to da9062 that I just looked
> at? Please find a way to not make a brand new driver for the slightest
> variation of the chip...
> 
> Thanks.
> 

Hi Dmitry,

Yes it is functionally identical. I would like to drop the DA9062 component from
my other submission attempt and concentrate on this DA9063 OnKey driver
instead.

I have applied the review comments that you made on the DA9062 to this
DA9063 driver (since they are the same). Please find the review comments listed
in the thread here: https://patchwork.ozlabs.org/patch/462107/

The next patch set for the DA9063 will follow shortly.

Regards,
Steve






^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: [RESEND PATCH V2 1/2] input: misc: da9063: OnKey driver
  2015-04-28 11:56   ` Lee Jones
@ 2015-04-29 16:01     ` Opensource [Steve Twiss]
  2015-04-29 16:15       ` Lee Jones
  0 siblings, 1 reply; 12+ messages in thread
From: Opensource [Steve Twiss] @ 2015-04-29 16:01 UTC (permalink / raw)
  To: Lee Jones, Opensource [Steve Twiss]
  Cc: Dmitry Torokhov, Samuel Ortiz, DT, David Dajun Chen, INPUT,
	Ian Campbell, Kumar Gala, LKML, Mark Rutland, Pawel Moll,
	Rob Herring, Support Opensource

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="utf-8", Size: 2561 bytes --]


On 28 April 2015 12:57 Lee Jones [mailto:lee.jones@linaro.org] wrote:

> On Fri, 17 Apr 2015, S Twiss wrote:
> 
> ++++++++++++++++++++++++++++++++++++++
> >  drivers/mfd/da9063-core.c         |  55 +++++++++
> >  include/linux/mfd/da9063/pdata.h  |   1 +
> 
> This should be a seperate patch.
> 

Okay, done this now. Added a new PATCH 3/3

> >  static struct resource da9063_onkey_resources[] = {
> >  	{
> > +		.name	= "ONKEY",
> >  		.start	= DA9063_IRQ_ONKEY,
> >  		.end	= DA9063_IRQ_ONKEY,
> >  		.flags	= IORESOURCE_IRQ,
> > @@ -97,6 +98,7 @@ static const struct mfd_cell da9063_devs[] = {
> >  		.name		= DA9063_DRVNAME_ONKEY,
> >  		.num_resources	=
> ARRAY_SIZE(da9063_onkey_resources),
> >  		.resources	= da9063_onkey_resources,
> > +		.of_compatible = "dlg,da9063-onkey",
> >  	},
> >  	{
> >  		.name		= DA9063_DRVNAME_RTC,
> 
> This is lowercase, so why does "ONKEY" have to be uppercase?
> 

No real reason why this is uppercase in favour of lowercase except it
is following the convention of the existing DA9063 driver code.
Currently the DA9063 uses uppercase for its naming, there are several
others components that use the same uppercase convention, e.g. the
RTC alarm and tick interrupt and the hardware LDO limit:

> cat /proc/interrupts | grep 9063
384:          0          0          0          0  da9063-irq   0  ONKEY
385:          0          2          0          0  da9063-irq   1  ALARM
387:          0         30          0          0  da9063-irq   3  HWMON
392:          0          0          0          0  da9063-irq   8  LDO_LIM

I was going to leave this uppercase, but I can easily change it if
this is necessary.

> >  	if (ret)
> >  		dev_err(da9063->dev, "Cannot add MFD cells\n");
> >
> > +
> 
> Tut tut!
> 
> >  	return ret;
> >  }

I've changed that to remove the lazy fall-through on the error path.
It now has the following form:

@@ -229,9 +229,10 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
        ret = mfd_add_devices(da9063->dev, -1, da9063_devs,
                              ARRAY_SIZE(da9063_devs), NULL, da9063->irq_base,
                              NULL);
-       if (ret)
+       if (ret) {
                dev_err(da9063->dev, "Cannot add MFD cells\n");
-
+               return ret;
+       }
 
        return ret;
 }

Thanks for the review comments.
The next patch set for DA9063 will follow shortly.

Regards,
Steve
ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [RESEND PATCH V2 1/2] input: misc: da9063: OnKey driver
  2015-04-29 16:01     ` Opensource [Steve Twiss]
@ 2015-04-29 16:15       ` Lee Jones
  0 siblings, 0 replies; 12+ messages in thread
From: Lee Jones @ 2015-04-29 16:15 UTC (permalink / raw)
  To: Opensource [Steve Twiss]
  Cc: Dmitry Torokhov, Samuel Ortiz, DT, David Dajun Chen, INPUT,
	Ian Campbell, Kumar Gala, LKML, Mark Rutland, Pawel Moll,
	Rob Herring, Support Opensource

On Wed, 29 Apr 2015, Opensource [Steve Twiss] wrote:

> 
> On 28 April 2015 12:57 Lee Jones [mailto:lee.jones@linaro.org] wrote:
> 
> > On Fri, 17 Apr 2015, S Twiss wrote:
> > 
> > ++++++++++++++++++++++++++++++++++++++
> > >  drivers/mfd/da9063-core.c         |  55 +++++++++
> > >  include/linux/mfd/da9063/pdata.h  |   1 +
> > 
> > This should be a seperate patch.
> > 
> 
> Okay, done this now. Added a new PATCH 3/3
> 
> > >  static struct resource da9063_onkey_resources[] = {
> > >  	{
> > > +		.name	= "ONKEY",
> > >  		.start	= DA9063_IRQ_ONKEY,
> > >  		.end	= DA9063_IRQ_ONKEY,
> > >  		.flags	= IORESOURCE_IRQ,
> > > @@ -97,6 +98,7 @@ static const struct mfd_cell da9063_devs[] = {
> > >  		.name		= DA9063_DRVNAME_ONKEY,
> > >  		.num_resources	=
> > ARRAY_SIZE(da9063_onkey_resources),
> > >  		.resources	= da9063_onkey_resources,
> > > +		.of_compatible = "dlg,da9063-onkey",
> > >  	},
> > >  	{
> > >  		.name		= DA9063_DRVNAME_RTC,
> > 
> > This is lowercase, so why does "ONKEY" have to be uppercase?
> > 
> 
> No real reason why this is uppercase in favour of lowercase except it
> is following the convention of the existing DA9063 driver code.
> Currently the DA9063 uses uppercase for its naming, there are several
> others components that use the same uppercase convention, e.g. the
> RTC alarm and tick interrupt and the hardware LDO limit:
> 
> > cat /proc/interrupts | grep 9063
> 384:          0          0          0          0  da9063-irq   0  ONKEY
> 385:          0          2          0          0  da9063-irq   1  ALARM
> 387:          0         30          0          0  da9063-irq   3  HWMON
> 392:          0          0          0          0  da9063-irq   8  LDO_LIM
> 
> I was going to leave this uppercase, but I can easily change it if
> this is necessary.
> 
> > >  	if (ret)
> > >  		dev_err(da9063->dev, "Cannot add MFD cells\n");
> > >
> > > +
> > 
> > Tut tut!
> > 
> > >  	return ret;
> > >  }
> 
> I've changed that to remove the lazy fall-through on the error path.
> It now has the following form:
> 
> @@ -229,9 +229,10 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
>         ret = mfd_add_devices(da9063->dev, -1, da9063_devs,
>                               ARRAY_SIZE(da9063_devs), NULL, da9063->irq_base,
>                               NULL);
> -       if (ret)
> +       if (ret) {
>                 dev_err(da9063->dev, "Cannot add MFD cells\n");
> -
> +               return ret;
> +       }
>  
>         return ret;
>  }

Sorry, that's not what I meant.

The fall-through is perfectly fine.  I was tutting because you added
an unrelated 'clean-up'.

> Thanks for the review comments.
> The next patch set for DA9063 will follow shortly.
> 
> Regards,
> Steve

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2015-04-29 16:15 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-17 12:03 [RESEND PATCH V2 0/2] Add OnKey support for DA9063 S Twiss
2015-04-17 12:03 ` [RESEND PATCH V2 2/2] devicetree: Add bindings for DA9063 OnKey S Twiss
2015-04-17 12:03 ` [RESEND PATCH V2 1/2] input: misc: da9063: OnKey driver S Twiss
2015-04-17 16:15   ` Dmitry Torokhov
2015-04-24 13:36     ` Opensource [Steve Twiss]
2015-04-29 16:00     ` Opensource [Steve Twiss]
2015-04-18  7:55   ` Paul Bolle
2015-04-24 13:45     ` Opensource [Steve Twiss]
2015-04-24 16:53       ` Paul Bolle
2015-04-28 11:56   ` Lee Jones
2015-04-29 16:01     ` Opensource [Steve Twiss]
2015-04-29 16:15       ` Lee Jones

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).