Add OnKey support for DA9063
Subsystems (5)
v4 cover Add OnKey support for DA9063
From: Steve Twiss <[email protected]>
This patch set adds OnKey driver support for the Dialog Semiconductor DA9063 PMIC.
[PATCH V4 1/3]: kernel driver onkey support
[PATCH V4 2/3]: device tree bindings document
[PATCH V4 3/3]: mfd core support
Thank you,
Steve Twiss, Dialog Semiconductor Ltd.
S Twiss (3):
input: misc: da9063: OnKey driver
devicetree: Add bindings for DA9063 OnKey
mfd: da9063: MFD support for OnKey driver
Documentation/devicetree/bindings/mfd/da9063.txt | 18 ++ drivers/input/misc/Kconfig | 10 + drivers/input/misc/Makefile | 1 + drivers/input/misc/da9063_onkey.c | 227 +++++++++++++++++++++++ drivers/mfd/da9063-core.c | 54 ++++++ include/linux/mfd/da9063/pdata.h | 1 + 6 files changed, 311 insertions(+) create mode 100644 drivers/input/misc/da9063_onkey.c
Signature · 1 line
end-of-patch for RESEND PATCH V4
PATCH RESEND v4 1/3 input: misc: da9063: OnKey driver
From: Steve Twiss <[email protected]>
Add OnKey driver support for DA9063
---
The changes made here have been taken from the DA9062 OnKey review thread. Please see https://lkml.org/lkml/2015/4/29/406 for more information on this.
Version History
Changes in V4
- No change
Changes in V3
- Move the MFD code changes into a separate patch [PATCH V3 3/3]
- Rename OnKey driver to use underscore: da9063_onkey.c
- Header and MODULE_LICENSE macro update for GPL and filename change
- Remove MAINTAINERS file (no longer needed due to rename of onkey driver)
- Delete input_unregister_device call from platform driver remove function
- Replaced dev_notice() with dev_dbg() for key press notification
Changes in 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.1-rc3
drivers/input/misc/Kconfig | 10 ++ drivers/input/misc/Makefile | 1 + drivers/input/misc/da9063_onkey.c | 227 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 238 insertions(+) create mode 100644 drivers/input/misc/da9063_onkey.c
drivers/input/misc/Kconfig +10 -0
@@ -610,6 +610,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
drivers/input/misc/Makefile +1 -0
@@ -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
drivers/input/misc/da9063_onkey.c new file +227 -0
227 lines not on this page · raw message
Signature · 1 line
end-of-patch for RESEND PATCH V4
RE: [RESEND PATCH V4 1/3] input: misc: da9063: OnKey driver
Quoted 17 lines · S Twiss
To: Dmitry Torokhov
Cc: DT; David Dajun Chen; INPUT; Ian Campbell; Kumar Gala; LKML; Lee Jones; Mark Rutland; Pawel Moll; Rob Herring; Samuel Ortiz; Opensource [Steve Twiss]; Support Opensource
Subject: [RESEND PATCH V4 1/3] input: misc: da9063: OnKey driverFrom: Steve Twiss <[email protected]>
Add OnKey driver support for DA9063
Signed-off-by Steve Twiss <[email protected]>---
The changes made here have been taken from the DA9062 OnKey review thread.
Please see https://lkml.org/lkml/2015/4/29/406 for more information on this.
Quoted 4 lines
Version History
Changes in V4
- No change
Hi Dmitry,
Could I please ask: is this OnKey driver suitable? Or are there still comments pending for it? If there are any outstanding issues with this OnKey driver then could you please let me know so I can resolve them?
Thanks,
Regards,
Steve
Quoted 301 lines
Changes in V3
- Move the MFD code changes into a separate patch [PATCH V3 3/3]
- Rename OnKey driver to use underscore:da9063_onkey.c
- Header andMODULE_LICENSEmacro update for GPL and filename change
- RemoveMAINTAINERSfile (no longer needed due to rename of onkey
driver)
- Deleteinput_unregister_devicecall from platform driver remove function
- Replaceddev_notice()withdev_dbg()for key press notificationChanges in 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.htmlThis patch applies against linux-next and v4.1-rc3
drivers/input/misc/Kconfig | 10 ++ drivers/input/misc/Makefile | 1 + drivers/input/misc/da9063_onkey.c | 227 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 238 insertions(+) create mode 100644 drivers/input/misc/da9063_onkey.cdrivers/input/misc/Kconfig +10
-0@@ -610,6 +610,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_MSPdrivers/input/misc/Makefile +0
-0@@ -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.odrivers/input/misc/Makefile +1
-0+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.odrivers/input/misc/da9063_onkey.c new file +38
-0@@ -0,0 +1,227 @@ +/* +* 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,drivers/input/misc/da9063_onkey.c new file +8
-0+ 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);
drivers/input/misc/da9063_onkey.c new file +26
-0+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);drivers/input/misc/da9063_onkey.c new file +2
-0+if (ret <0 ) + dev_warn(&onkey->input->dev, "Cannot readFAULT_LOG\n");
drivers/input/misc/da9063_onkey.c new file +35
-0+ +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_dbg (&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);
drivers/input/misc/da9063_onkey.c new file +118
-1+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_dbg (&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_dbg (&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); +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 <[email protected]>" ); +MODULE_DESCRIPTION ("Onkey device driver for Dialog DA9063" ); +MODULE_LICENSE ("GPL" ); +MODULE_ALIAS ("platform:" DA9063_DRVNAME_ONKEY ); --end-of-patch for RESEND PATCH V4
RE: [RESEND PATCH V4 1/3] input: misc: da9063: OnKey driver
In reply to S TwissQuoted 17 lines · Steve Twiss
Quoted 15 lines · S Twiss
To: Dmitry Torokhov
Subject: [RESEND PATCH V4 1/3] input: misc: da9063: OnKey driverFrom: Steve Twiss <[email protected]>
Add OnKey driver support for DA9063Signed-off-by Steve Twiss <[email protected]>---
The changes made here have been taken from the DA9062 OnKey review thread.Please see https://lkml.org/lkml/2015/4/29/406 for more information on this.
Version History
Quoted 8 lines
Quoted 2 lines
Changes in V4
- No changeHi Dmitry,
Could I please ask: is this OnKey driver suitable? Or are there still comments pending for it? If there are any outstanding issues with this OnKey driver then could you please let me know so I can resolve them?
Hi again Dmitry,
The date of your original review was 17th April and it is now been 6 weeks since I sent my replies. If there is a problem with the DA9063 onkey driver as it stands, please can you let me know quickly?
The core and device tree parts of this driver patch have already been applied.
LKML: https://lkml.org/lkml/2015/5/26/350
LKML: https://lkml.org/lkml/2015/5/26/352
Regards,
Steve
Quoted 308 lines
Thanks,
Regards,
SteveQuoted 5 lines
Changes in V3
- Move the MFD code changes into a separate patch [PATCH V3 3/3]
- Rename OnKey driver to use underscore:da9063_onkey.c
- Header andMODULE_LICENSEmacro update for GPL and filenamechange
Quoted 3 lines
- Remove
MAINTAINERSfile (no longer needed due to rename of onkey
driver)
- Deleteinput_unregister_devicecall from platform driver removefunction
Quoted 293 lines
- Replaced
dev_notice()withdev_dbg()for key press notificationChanges in 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.htmlThis patch applies against linux-next and v4.1-rc3
drivers/input/misc/Kconfig | 10 ++ drivers/input/misc/Makefile | 1 + drivers/input/misc/da9063_onkey.c | 227 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 238 insertions(+) create mode 100644 drivers/input/misc/da9063_onkey.cdrivers/input/misc/Kconfig +10
-0@@ -610,6 +610,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_MSPdrivers/input/misc/Makefile +0
-0@@ -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.odrivers/input/misc/Makefile +1
-0+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.odrivers/input/misc/da9063_onkey.c new file +38
-0@@ -0,0 +1,227 @@ +/* +* 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,drivers/input/misc/da9063_onkey.c new file +8
-0+ 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);
drivers/input/misc/da9063_onkey.c new file +26
-0+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);drivers/input/misc/da9063_onkey.c new file +2
-0+if (ret <0 ) + dev_warn(&onkey->input->dev, "Cannot readFAULT_LOG\n");
drivers/input/misc/da9063_onkey.c new file +35
-0+ +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_dbg (&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);
drivers/input/misc/da9063_onkey.c new file +118
-1+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_dbg (&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_dbg (&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); +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 <[email protected]>" ); +MODULE_DESCRIPTION ("Onkey device driver for Dialog DA9063" ); +MODULE_LICENSE ("GPL" ); +MODULE_ALIAS ("platform:" DA9063_DRVNAME_ONKEY ); --end-of-patch for RESEND PATCH V4
PATCH RESEND v4 2/3 devicetree: Add bindings for DA9063 OnKey
In reply to S TwissFrom: Steve Twiss <[email protected]>
Add device tree bindings for the DA9063 OnKey driver
---
Version History
Changes in V4
- No change
Changes in V3
- No change
Changes in 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 key-power into a new optional properties sub-section so it has a more promiment position
This patch applies against linux-next and v4.1-rc3
Documentation/devicetree/bindings/mfd/da9063.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
Documentation/devicetree/bindings/mfd/da9063.txt +18 -0
@@ -5,6 +5,7 @@ DA9093 consists of a large and varied group of sub-devices (I2C Only): 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";
Signature · 1 line
end-of-patch for RESEND PATCH V4
Re: [RESEND PATCH V4 2/3] devicetree: Add bindings for DA9063 OnKey
Quoted 6 lines · S Twiss
From: Steve Twiss <[email protected]>
Add device tree bindings for the DA9063 OnKey driver
Acked-by Lee Jones <[email protected]>
nit: remove blank line here.
I would think a long key press would be a h/w powerdown rather than a key event as how do you poweroff/reset a hung system? That doesn't really affect the binding though, so:
Rob
Quoted 67 lines
Signed-off-by Steve Twiss <[email protected]>---
Version HistoryChanges in V4
- No changeChanges in V3
- No changeChanges in 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 key-power into a new optional properties sub-section so it has a more promiment positionThis patch applies against linux-next and v4.1-rc3
Documentation/devicetree/bindings/mfd/da9063.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)Documentation/devicetree/bindings/mfd/da9063.txt +18
-1@@ -5,6 +5,7 @@ DA9093 consists of a large and varied group of sub-devices (I2C Only): 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"; --
Quoted 2 lines
end-of-patch for RESEND PATCH V4
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [RESEND PATCH V4 2/3] devicetree: Add bindings for DA9063 OnKey
T24gMjAgTWF5IDIwMTUgMTQ6NDQgUm9iIEhlcnJpbmcgd3JvdGU6DQoNCj4gVG86IE9wZW5zb3Vy Y2UgW1N0ZXZlIFR3aXNzXQ0KPiBDYzogSWFuIENhbXBiZWxsOyBLdW1hciBHYWxhOyBMZWUgSm9u ZXM7IE1hcmsgUnV0bGFuZDsgUGF3ZWwgTW9sbDsgUm9iDQo+IEhlcnJpbmc7IERUOyBEYXZpZCBE YWp1biBDaGVuOyBEbWl0cnkgVG9yb2tob3Y7IElOUFVUOyBMS01MOyBTYW11ZWwgT3J0aXo7DQo+ IFN1cHBvcnQgT3BlbnNvdXJjZQ0KPiBTdWJqZWN0OiBSZTogW1JFU0VORCBQQVRDSCBWNCAyLzNd IGRldmljZXRyZWU6IEFkZCBiaW5kaW5ncyBmb3IgREE5MDYzDQo+IE9uS2V5DQo+IA0KPiBPbiBU dWUsIE1heSAxOSwgMjAxNSBhdCA1OjMyIEFNLCBTIFR3aXNzDQo+IDxzdHdpc3Mub3BlbnNvdXJj ZUBkaWFzZW1pLmNvbT4gd3JvdGU6DQo+ID4gRnJvbTogU3RldmUgVHdpc3MgPHN0d2lzcy5vcGVu c291cmNlQGRpYXNlbWkuY29tPg0KPiA+DQo+ID4gQWRkIGRldmljZSB0cmVlIGJpbmRpbmdzIGZv ciB0aGUgREE5MDYzIE9uS2V5IGRyaXZlcg0KPiA+DQo+ID4gQWNrZWQtYnk6IExlZSBKb25lcyA8 bGVlLmpvbmVzQGxpbmFyby5vcmc+DQo+ID4NCg0KSGkgUm9iLA0KDQpUaGFua3MgZm9yIHRoZSBB Y2suDQoNCj4gSSB3b3VsZCB0aGluayBhIGxvbmcga2V5IHByZXNzIHdvdWxkIGJlIGEgaC93IHBv d2VyZG93biByYXRoZXIgdGhhbiBhDQo+IGtleSBldmVudCBhcyBob3cgZG8geW91IHBvd2Vyb2Zm L3Jlc2V0IGEgaHVuZyBzeXN0ZW0/IFRoYXQgZG9lc24ndA0KPiByZWFsbHkgYWZmZWN0IHRoZSBi aW5kaW5nIHRob3VnaCwgc286DQoNCnllcC4uIA0KDQpUaGF0IEgvVyBjb250cm9sbGVkIHNodXRk b3duIGlzIG5vdCBjb3ZlcmVkIGluIHRoZSBkZXZpY2UgZHJpdmVyIGJlY2F1c2UNCml0IGlzIGRl ZmF1bHRlZCBieSB0aGUgaGFyZHdhcmUgUE1JQy4NCg0KVGhlICBEQTkwNjMgT25LZXkgaGFzIGFy ZSBmb3VyIG1vZGVzIG9mIG9wZXJhdGlvbiAtLSBhbmQgb25lIG9mIHRoZW0gaXMNCmEgSC9XIGNv bnRyb2xsZWQgc2h1dGRvd24gKHRvIHJlc2V0IGEgaHVuZyBzeXN0ZW0pLiAgSG9sZGluZyBkb3du IHRoZQ0KT25LZXkgZm9yIGEgImxvbmctbG9uZyIga2V5LXByZXNzLCBpZiB0aGVyZSBpcyBubyBz b2Z0d2FyZSBpbnRlcnZlbnRpb24sDQp0aGVuIHRoZSBQTUlDIHdpbGwgY2hvcCB0aGUgcG93ZXIu DQoNClRoZSBvdGhlciB0aHJlZSBtb2RlcyBhcmUgLi4uDQooYSkgU2hvcnQga2V5IHByZXNzDQoo YikgTG9uZy1rZXkgcHJlc3MNCihjKSBMb25nLWxvbmcga2V5IHByZXNzDQoNClRoZXNlIG1vZGVz ICphcmUqIGhhbmRsZWQgYnkgdGhlIFMvVyBkcml2ZXIuDQooYSkgVGhlIHNob3J0IGtleS1wcmVz cyBiZWluZyB0aGUgdXN1YWwgc2xlZXAvc3VzcGVuZC4NCihiKSBMb25nIGtleSBwcmVzcyBpcyB0 aGUgS0VZX1BPV0VSIChicmluZ2luZyB1cCBhIGRpYWxvZyBvbiBBbmRyb2lkIHRvIGFzayBpZg0K dGhlIHVzZXIgd2FudHMgdG8gc2h1dGRvd24gdGhlIGRldmljZSkgLS0gdGhpcyBpcyB0aGUgb25l IHRoYXQgY2FuIGJlIGRpc2FibGVkDQpieSB0aGUgZGV2aWNlIHRyZWUgYmluZGluZy4NCihjKSBM b25nLWxvbmcga2V5IHByZXNzIC0tIHRoaXMgaXMgdGhlIHNvZnR3YXJlIGVxdWl2YWxlbnQgdG8g dGhlIEgvVyBzaHV0ZG93bg0KZm9yIGEgaHVuZyBzeXN0ZW0uIEluc3RlYWQgb2YgdGhlIGhhcmR3 YXJlIHB1bGxpbmcgdGhlIHBsdWcsIHRoZSBzb2Z0d2FyZSBzZW5kcw0KYSBjb21tYW5kIHRvIHRl bGwgdGhlIFBNSUMgdG8gcHVsbCB0aGUgcGx1Zy4NCg0KSWYgdGhhdCBsYXN0IG9uZSBzb3VuZHMg bGlrZSBhIHJlcGVhdCBvZiB0aGUgSC9XIHNodXRkb3duLCB0aGVuIHRoYXQgaXMgYmVjYXVzZQ0K aXQgYWxtb3N0IGlzLg0KDQpJdCBjb3ZlcnMgdGhlIHVzZSBjYXNlIHdoZW4gdGhlIHVzZXIgZGVj aWRlcyB0byBzaHV0ZG93biB0aGVpciBkZXZpY2UgYnkgZG9pbmcNCmEgbG9uZy1sb25nIGtleSBw cmVzcy4gVGhlIGRpZmZlcmVuY2UgaGVyZSBpcyB0aGF0IHRoZSBzb2Z0d2FyZSBpcyBzdGlsbCBh YmxlIHRvDQpyZXNwb25kLCBhbmQgc28gdGhlcmUgaXMgc3BhY2UgZm9yIGFueSBpbXBvcnRhbnQg aG91c2Uta2VlcGluZyAoc2F5IHRvIHNhdmUNCmltcG9ydGFudCBkYXRhKSBiZWZvcmUgdGhlIHNv ZnR3YXJlIHNlbmRzIGEgY29tbWFuZCB0byB0ZWxsIHRoZSBQTUlDIHRvIHB1bGwNCnRoZSBwbHVn Lg0KDQpUaGUgZmFpbC1zYWZlIGF0IHRoaXMgcG9pbnQgaXM6IGlmIHRoZSBTL1cgcmVhbGx5IGlz bid0IHJlc3BvbmRpbmcsIHRoZW4gdGhlIGhhcmR3YXJlDQptb25pdG9ycyB0aGUgbG9uZy1sb25n IGtleS1wcmVzcyBhbmQgaWYgdGhlcmUgaXMgbm8gaW50ZXJ2ZW50aW9uIGJ5IHNvZnR3YXJlLCB0 aGUgDQpQTUlDIHB1bGxzIHRoZSBwb3dlciBwbHVnIDEgc2Vjb25kIGxhdGVyLg0KDQpSZWdhcmRz LA0KU3RldmUNCg==
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [RESEND PATCH V4 2/3] devicetree: Add bindings for DA9063 OnKey
In reply to S TwissQuoted 23 lines · S Twiss
From: Steve Twiss <[email protected]>
Add device tree bindings for the DA9063 OnKey driver
Acked-by Lee Jones <[email protected]>Signed-off-by Steve Twiss <[email protected]>---
Version HistoryChanges in V4
- No changeChanges in V3
- No changeChanges in 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 key-power into a new optional properties sub-section so it has a more promiment position
Quoted 5 lines
This patch applies against linux-next and v4.1-rc3
Documentation/devicetree/bindings/mfd/da9063.txt | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
Applied with Rob's Ack.
Quoted 43 lines
Documentation/devicetree/bindings/mfd/da9063.txt +18
-0@@ -5,6 +5,7 @@ DA9093 consists of a large and varied group of sub-devices (I2C Only): 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";
Signature · 4 lines
Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
PATCH RESEND v4 3/3 mfd: da9063: MFD support for OnKey driver
In reply to S TwissFrom: Steve Twiss <[email protected]>
Add MFD support for the DA9063 OnKey driver
The function da9063_clear_fault_log() is added to mitigate the case of a hardware power-cut after a long-long OnKey press. Although there is no software intervention in this case (by definition) such a shutdown would cause persistent information within the DA9063 FAULT_LOG that would be available during the next device restart.
Clearance of this persistent register must be completed after such a hardware power-cut operation has happened so that the FAULT_LOG does not continue with previous values. The clearance function has been added here in the kernel driver because wiping the fault-log cannot be counted on outside the Linux kernel.
---
Version History
Changes in V4
- Additional description of MFD patch changes for FAULT_LOG in relation to the requirements of the OnKey driver. Please see a further explanation of the OnKey's operation in this thread: https://lkml.org/lkml/2015/4/29/406
Changes in V3
- The MFD code was originally in [PATCH V2 1/2]. This is now been moved into this patch [PATCH V3 3/3].
- Whitespace cleanup
This patch applies against linux-next and v4.1-rc3
drivers/mfd/da9063-core.c | 54 ++++++++++++++++++++++++++++++++++++++++ include/linux/mfd/da9063/pdata.h | 1 + 2 files changed, 55 insertions(+)
drivers/mfd/da9063-core.c +54 -0
@@ -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;
include/linux/mfd/da9063/pdata.h +1 -0
@@ -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;
Signature · 1 line
end-of-patch for RESEND PATCH V4
Lee Jones
AppliedRe: [RESEND PATCH V4 3/3] mfd: da9063: MFD support for OnKey driver
Quoted 33 lines · S Twiss
From: Steve Twiss <[email protected]>
Add MFD support for the DA9063 OnKey driver
The function
da9063_clear_fault_log()is added to mitigate the case of a hardware power-cut after a long-long OnKey press. Although there is no software intervention in this case (by definition) such a shutdown would cause persistent information within the DA9063FAULT_LOGthat would be available during the next device restart.Clearance of this persistent register must be completed after such a hardware power-cut operation has happened so that the
FAULT_LOGdoes not continue with previous values. The clearance function has been added here in the kernel driver because wiping the fault-log cannot be counted on outside the Linux kernel.Acked-by Lee Jones <[email protected]>Signed-off-by Steve Twiss <[email protected]>---
Version HistoryChanges in V4
- Additional description of MFD patch changes forFAULT_LOGin relation to the requirements of the OnKey driver. Please see a further explanation of the OnKey's operation in this thread: https://lkml.org/lkml/2015/4/29/406Changes in V3
- The MFD code was originally in [PATCH V2 1/2]. This is now been moved into this patch [PATCH V3 3/3].
- Whitespace cleanup
Quoted 6 lines
This patch applies against linux-next and v4.1-rc3
drivers/mfd/da9063-core.c | 54 ++++++++++++++++++++++++++++++++++++++++ include/linux/mfd/da9063/pdata.h | 1 + 2 files changed, 55 insertions(+)
Applied, thanks.
Quoted 97 lines
drivers/mfd/da9063-core.c +54
-0@@ -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;include/linux/mfd/da9063/pdata.h +1
-0@@ -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;
Signature · 8 lines
Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [RESEND PATCH V4 3/3] mfd: da9063: MFD support for OnKey driver
Quoted 45 lines · On 26 May 2015 14:58 Lee Jones wrote:
To: Opensource [Steve Twiss]
Cc: Samuel Ortiz; DT; David Dajun Chen; Dmitry Torokhov; INPUT; Ian Campbell; Kumar Gala; LKML; Mark Rutland; Pawel Moll; Rob Herring; Support Opensource
Subject: Re: [RESEND PATCH V4 3/3] mfd: da9063: MFD support for OnKey driverQuoted 36 lines · S Twiss
From: Steve Twiss <[email protected]>
Add MFD support for the DA9063 OnKey driver
The function
da9063_clear_fault_log()is added to mitigate the case of a hardware power-cut after a long-long OnKey press. Although there is no software intervention in this case (by definition) such a shutdown would cause persistent information within the DA9063FAULT_LOGthat would be available during the next device restart.Clearance of this persistent register must be completed after such a hardware power-cut operation has happened so that the
FAULT_LOGdoes not continue with previous values. The clearance function has been added here in the kernel driver because wiping the fault-log cannot be counted on outside the Linux kernel.Acked-by Lee Jones <[email protected]>Signed-off-by Steve Twiss <[email protected]>---
Version HistoryChanges in V4
- Additional description of MFD patch changes forFAULT_LOGin relation to the requirements of the OnKey driver. Please see a further explanation of the OnKey's operation in this thread: https://lkml.org/lkml/2015/4/29/406Changes in V3
- The MFD code was originally in [PATCH V2 1/2]. This is now been moved into this patch [PATCH V3 3/3].
- Whitespace cleanupThis patch applies against linux-next and v4.1-rc3
Quoted 7 lines
Quoted 1 line
drivers/mfd/da9063-core.c | 54++++++++++++++++++++++++++++++++++++++++
Quoted 2 lines
include/linux/mfd/da9063/pdata.h | 1 + 2 files changed, 55 insertions(+)Applied, thanks.
Thank you
Regards,
Steve
ps.
and also for DT patch
[...]
Dmitry Torokhov
maintainerRe: [RESEND PATCH V4 3/3] mfd: da9063: MFD support for OnKey driver
In reply to S TwissQuoted 19 lines · S Twiss
From: Steve Twiss <[email protected]>
Add MFD support for the DA9063 OnKey driver
The function
da9063_clear_fault_log()is added to mitigate the case of a hardware power-cut after a long-long OnKey press. Although there is no software intervention in this case (by definition) such a shutdown would cause persistent information within the DA9063FAULT_LOGthat would be available during the next device restart.Clearance of this persistent register must be completed after such a hardware power-cut operation has happened so that the
FAULT_LOGdoes not continue with previous values. The clearance function has been added here in the kernel driver because wiping the fault-log cannot be counted on outside the Linux kernel.Acked-by Lee Jones <[email protected]>Signed-off-by Steve Twiss <[email protected]>
...
include/linux/mfd/da9063/pdata.h struct da9063; · line 109
Quoted 12 lines
include/linux/mfd/da9063/pdata.h +1
-0@@ -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;
I need this bit of pdata to merge the OnKey driver... Lee, any chance you could drop it from the patch in your tree?
Alternatively, can you pick the OnKey driver (the latest version is below)?
Thanks.
Signature · 16 lines
Dmitry Input: add OnKey driver for DA9063 MFD part From: Steve Twiss <[email protected]> Add OnKey driver support for DA9063 Signed-off-by: Steve Twiss <[email protected]> Signed-off-by: Dmitry Torokhov <[email protected]> --- drivers/input/misc/Kconfig | 10 ++ drivers/input/misc/Makefile | 1 drivers/input/misc/da9063_onkey.c | 226 +++++++++++++++++++++++++++++++++++++ 3 files changed, 237 insertions(+) create mode 100644 drivers/input/misc/da9063_onkey.c
drivers/input/misc/Kconfig +10 -0
@@ -610,6 +610,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
drivers/input/misc/Makefile +1 -0
@@ -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
drivers/input/misc/da9063_onkey.c new file +226 -0
226 lines not on this page · raw message
Re: [RESEND PATCH V4 3/3] mfd: da9063: MFD support for OnKey driver
Quoted 23 lines · Dmitry Torokhov
Quoted 19 lines · S Twiss
From: Steve Twiss <[email protected]>
Add MFD support for the DA9063 OnKey driver
The function
da9063_clear_fault_log()is added to mitigate the case of a hardware power-cut after a long-long OnKey press. Although there is no software intervention in this case (by definition) such a shutdown would cause persistent information within the DA9063FAULT_LOGthat would be available during the next device restart.Clearance of this persistent register must be completed after such a hardware power-cut operation has happened so that the
FAULT_LOGdoes not continue with previous values. The clearance function has been added here in the kernel driver because wiping the fault-log cannot be counted on outside the Linux kernel.Acked-by Lee Jones <[email protected]>Signed-off-by Steve Twiss <[email protected]>...
Quoted 15 lines
include/linux/mfd/da9063/pdata.h struct da9063; · line 109
Quoted 12 lines
include/linux/mfd/da9063/pdata.h +1
-0@@ -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;I need this bit of pdata to merge the OnKey driver... Lee, any chance you could drop it from the patch in your tree?
Consider it done.
Quoted 5 lines
Alternatively, can you pick the OnKey driver (the latest version is below)?
Thanks.
Signature · 4 lines
Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog
RE: [RESEND PATCH V4 3/3] mfd: da9063: MFD support for OnKey driver
Quoted 41 lines · On 09 June 2015 07:51 Lee Jones wrote:
Quoted 17 lines · Dmitry Torokhov
Quoted 16 lines · S Twiss
From: Steve Twiss <[email protected]>
Add MFD support for the DA9063 OnKey driver
The function
da9063_clear_fault_log()is added to mitigate the case of a hardware power-cut after a long-long OnKey press. Although there is no software intervention in this case (by definition) such a shutdown would cause persistent information within the DA9063FAULT_LOGthat would be available during the next device restart.Clearance of this persistent register must be completed after such a hardware power-cut operation has happened so that the
FAULT_LOGdoes not continue with previous values. The clearance function has been added here in the kernel driver because wiping the fault-log cannot be counted on outside the Linux kernel.Quoted 7 lines
Quoted 3 lines
Acked-by Lee Jones <[email protected]>Signed-off-by Steve Twiss <[email protected]>...
Review
Quoted 1 line
(quoted diff) +0
-0
b/include/linux/mfd/da9063/pdata.hQuoted 6 lines
Quoted 6 lines
index 95c8742..612383b 100644
include/linux/mfd/da9063/pdata.h +0
-0@@ -103,6 +103,7 @@ struct da9063;struct da9063_pdata {int (*init)(struct da9063 *da9063);Quoted 8 lines
include/linux/mfd/da9063/pdata.h struct da9063; · line 109
Quoted 5 lines
include/linux/mfd/da9063/pdata.h +1
-0int irq_base; +bool key_power;unsigned flags;struct da9063_regulators_pdata *regulators_pdata;struct led_platform_data *leds_pdata;I need this bit of pdata to merge the OnKey driver... Lee, any chance you could drop it from the patch in your tree?
Quoted 7 lines
Consider it done.
Quoted 5 lines
Alternatively, can you pick the OnKey driver (the latest version is below)?
Thanks.
Thank you both for your help.
Regards,
Steve