Message ID | 20190129133545.1931-14-brgl@bgdev.pl (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | mfd: add support for max77650 PMIC | expand |
On Tue, Jan 29, 2019 at 02:35:44PM +0100, Bartosz Golaszewski wrote: > From: Bartosz Golaszewski <bgolaszewski@baylibre.com> > > Add support for the push- and slide-button events for max77650. > > Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com> Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Please feel free to merge with other patches (MFD tree I suppose?). Thanks.
śr., 30 sty 2019 o 19:53 Dmitry Torokhov <dmitry.torokhov@gmail.com> napisał(a): > > On Tue, Jan 29, 2019 at 02:35:44PM +0100, Bartosz Golaszewski wrote: > > From: Bartosz Golaszewski <bgolaszewski@baylibre.com> > > > > Add support for the push- and slide-button events for max77650. > > > > Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com> > > Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> > > Please feel free to merge with other patches (MFD tree I suppose?). > Hi Dmitry, I'm not sure what the policy is on merging MFD drivers, but I'm seeing that Mark Brown has already picked up the regulator part into his tree (including the binding document). I think you can just pick up the input patches and it will simply not show up in Kconfig until the core mfd module is upstream. @Mark: could you please confirm it? Best regards, Bartosz Golaszewski
On Thu, Jan 31, 2019 at 09:15:01AM +0100, Bartosz Golaszewski wrote: > I'm not sure what the policy is on merging MFD drivers, but I'm seeing > that Mark Brown has already picked up the regulator part into his tree > (including the binding document). I think you can just pick up the > input patches and it will simply not show up in Kconfig until the core > mfd module is upstream. > @Mark: could you please confirm it? Right, as it's a new MFD the Kconfig will stop it causing build breakage until the MFD is merged. I'm doing it partly just to cut down on the amount of mail from resends while the rest of the series gets reviewed.
On Thu, Jan 31, 2019 at 4:28 AM Mark Brown <broonie@kernel.org> wrote: > > On Thu, Jan 31, 2019 at 09:15:01AM +0100, Bartosz Golaszewski wrote: > > > I'm not sure what the policy is on merging MFD drivers, but I'm seeing > > that Mark Brown has already picked up the regulator part into his tree > > (including the binding document). I think you can just pick up the > > input patches and it will simply not show up in Kconfig until the core > > mfd module is upstream. > > > @Mark: could you please confirm it? > > Right, as it's a new MFD the Kconfig will stop it causing build breakage > until the MFD is merged. I'm doing it partly just to cut down on the > amount of mail from resends while the rest of the series gets reviewed. Ugh, I might have pulled it in if it did not reference the new header file. As a rule I try to enable all symbols that result in input devices being created so as much of input code is covered... I'd prefer input piece be merged with MFD. Thanks.
On Thu, 31 Jan 2019, Dmitry Torokhov wrote: > On Thu, Jan 31, 2019 at 4:28 AM Mark Brown <broonie@kernel.org> wrote: > > > > On Thu, Jan 31, 2019 at 09:15:01AM +0100, Bartosz Golaszewski wrote: > > > > > I'm not sure what the policy is on merging MFD drivers, but I'm seeing > > > that Mark Brown has already picked up the regulator part into his tree > > > (including the binding document). I think you can just pick up the > > > input patches and it will simply not show up in Kconfig until the core > > > mfd module is upstream. > > > > > @Mark: could you please confirm it? > > > > Right, as it's a new MFD the Kconfig will stop it causing build breakage > > until the MFD is merged. I'm doing it partly just to cut down on the > > amount of mail from resends while the rest of the series gets reviewed. > > Ugh, I might have pulled it in if it did not reference the new header > file. As a rule I try to enable all symbols that result in input > devices being created so as much of input code is covered... I'd > prefer input piece be merged with MFD. That's no problem.
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index ca59a2be9bc5..bb9c45c1269e 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig @@ -180,6 +180,15 @@ config INPUT_M68K_BEEP tristate "M68k Beeper support" depends on M68K +config INPUT_MAX77650_ONKEY + tristate "Maxim MAX77650 ONKEY support" + depends on MFD_MAX77650 + help + Support the ONKEY of the MAX77650 PMIC as an input device. + + To compile this driver as a module, choose M here: the module + will be called max77650-onkey. + config INPUT_MAX77693_HAPTIC tristate "MAXIM MAX77693/MAX77843 haptic controller support" depends on (MFD_MAX77693 || MFD_MAX77843) && PWM diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile index 9d0f9d1ff68f..5bd53590ce60 100644 --- a/drivers/input/misc/Makefile +++ b/drivers/input/misc/Makefile @@ -43,6 +43,7 @@ obj-$(CONFIG_INPUT_IXP4XX_BEEPER) += ixp4xx-beeper.o obj-$(CONFIG_INPUT_KEYSPAN_REMOTE) += keyspan_remote.o obj-$(CONFIG_INPUT_KXTJ9) += kxtj9.o obj-$(CONFIG_INPUT_M68K_BEEP) += m68kspkr.o +obj-$(CONFIG_INPUT_MAX77650_ONKEY) += max77650-onkey.o obj-$(CONFIG_INPUT_MAX77693_HAPTIC) += max77693-haptic.o obj-$(CONFIG_INPUT_MAX8925_ONKEY) += max8925_onkey.o obj-$(CONFIG_INPUT_MAX8997_HAPTIC) += max8997_haptic.o diff --git a/drivers/input/misc/max77650-onkey.c b/drivers/input/misc/max77650-onkey.c new file mode 100644 index 000000000000..7fc3e9196abb --- /dev/null +++ b/drivers/input/misc/max77650-onkey.c @@ -0,0 +1,127 @@ +// SPDX-License-Identifier: GPL-2.0 +// +// Copyright (C) 2018 BayLibre SAS +// Author: Bartosz Golaszewski <bgolaszewski@baylibre.com> +// +// ONKEY driver for MAXIM 77650/77651 charger/power-supply. + +#include <linux/i2c.h> +#include <linux/input.h> +#include <linux/interrupt.h> +#include <linux/mfd/max77650.h> +#include <linux/module.h> +#include <linux/platform_device.h> +#include <linux/regmap.h> + +#define MAX77650_ONKEY_MODE_MASK BIT(3) +#define MAX77650_ONKEY_MODE_PUSH 0x00 +#define MAX77650_ONKEY_MODE_SLIDE BIT(3) + +struct max77650_onkey { + struct input_dev *input; + unsigned int code; +}; + +static irqreturn_t max77650_onkey_falling(int irq, void *data) +{ + struct max77650_onkey *onkey = data; + + input_report_key(onkey->input, onkey->code, 0); + input_sync(onkey->input); + + return IRQ_HANDLED; +} + +static irqreturn_t max77650_onkey_rising(int irq, void *data) +{ + struct max77650_onkey *onkey = data; + + input_report_key(onkey->input, onkey->code, 1); + input_sync(onkey->input); + + return IRQ_HANDLED; +} + +static int max77650_onkey_probe(struct platform_device *pdev) +{ + int irq_r, irq_f, error, mode; + struct max77650_onkey *onkey; + struct device *dev, *parent; + const char *mode_prop; + struct regmap *map; + + dev = &pdev->dev; + parent = dev->parent; + + map = dev_get_regmap(parent, NULL); + if (!map) + return -ENODEV; + + onkey = devm_kzalloc(dev, sizeof(*onkey), GFP_KERNEL); + if (!onkey) + return -ENOMEM; + + error = device_property_read_u32(dev, "linux,code", &onkey->code); + if (error) + onkey->code = KEY_POWER; + + error = device_property_read_string(dev, + "maxim,onkey-mode", &mode_prop); + if (error) + mode_prop = "push"; + + if (strcmp(mode_prop, "push") == 0) + mode = MAX77650_ONKEY_MODE_PUSH; + else if (strcmp(mode_prop, "slide") == 0) + mode = MAX77650_ONKEY_MODE_SLIDE; + else + return -EINVAL; + + error = regmap_update_bits(map, MAX77650_REG_CNFG_GLBL, + MAX77650_ONKEY_MODE_MASK, mode); + if (error) + return error; + + irq_f = platform_get_irq_byname(pdev, "nEN_F"); + if (irq_f < 0) + return irq_f; + + irq_r = platform_get_irq_byname(pdev, "nEN_R"); + if (irq_r < 0) + return irq_r; + + onkey->input = devm_input_allocate_device(dev); + if (!onkey->input) + return -ENOMEM; + + onkey->input->name = "max77650_onkey"; + onkey->input->phys = "max77650_onkey/input0"; + onkey->input->id.bustype = BUS_I2C; + input_set_capability(onkey->input, EV_KEY, onkey->code); + + error = devm_request_any_context_irq(dev, irq_f, + max77650_onkey_falling, + IRQF_ONESHOT, "onkey-down", + onkey); + if (error < 0) + return error; + + error = devm_request_any_context_irq(dev, irq_r, max77650_onkey_rising, + IRQF_ONESHOT, "onkey-up", onkey); + if (error < 0) + return error; + + return input_register_device(onkey->input); +} + +static struct platform_driver max77650_onkey_driver = { + .driver = { + .name = "max77650-onkey", + }, + .probe = max77650_onkey_probe, +}; +module_platform_driver(max77650_onkey_driver); + +MODULE_DESCRIPTION("MAXIM 77650/77651 ONKEY driver"); +MODULE_AUTHOR("Bartosz Golaszewski <bgolaszewski@baylibre.com>"); +MODULE_LICENSE("GPL v2");