* [PATCH V2] drivers: input: keyboard: add mediatek matrix keypad driver @ 2019-12-27 1:37 fengping yu 2019-12-27 1:37 ` [PATCH V2 1/2] Documentation: devicetree: bindings: input fengping yu 2019-12-27 1:37 ` [PATCH V2 2/2] drivers: input: keyboard fengping yu 0 siblings, 2 replies; 7+ messages in thread From: fengping yu @ 2019-12-27 1:37 UTC (permalink / raw) To: Matthias Brugger; +Cc: devicetree, linux-mediatek, linux-kernel, wsd_upstream fengping.yu (2): Documentation: devicetree: bindings: input drivers: input: keyboard .../devicetree/bindings/input/mtk-kpd.txt | 45 +++ arch/arm64/configs/defconfig | 1 + drivers/input/keyboard/Kconfig | 8 + drivers/input/keyboard/Makefile | 1 + drivers/input/keyboard/mtk-kpd.c | 357 ++++++++++++++++++ 5 files changed, 412 insertions(+) create mode 100644 Documentation/devicetree/bindings/input/mtk-kpd.txt create mode 100644 drivers/input/keyboard/mtk-kpd.c _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH V2 1/2] Documentation: devicetree: bindings: input 2019-12-27 1:37 [PATCH V2] drivers: input: keyboard: add mediatek matrix keypad driver fengping yu @ 2019-12-27 1:37 ` fengping yu 2020-01-07 7:49 ` Yingjoe Chen 2019-12-27 1:37 ` [PATCH V2 2/2] drivers: input: keyboard fengping yu 1 sibling, 1 reply; 7+ messages in thread From: fengping yu @ 2019-12-27 1:37 UTC (permalink / raw) To: Matthias Brugger Cc: devicetree, fengping.yu, linux-mediatek, linux-kernel, wsd_upstream From: "fengping.yu" <fengping.yu@mediatek.com> Add mtk keypad device tree documentation. Change-Id: I415b76ee980784992763c768829b2dda76699dea Signed-off-by: fengping.yu <fengping.yu@mediatek.com> --- .../devicetree/bindings/input/mtk-kpd.txt | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Documentation/devicetree/bindings/input/mtk-kpd.txt diff --git a/Documentation/devicetree/bindings/input/mtk-kpd.txt b/Documentation/devicetree/bindings/input/mtk-kpd.txt new file mode 100644 index 000000000000..2af81e696159 --- /dev/null +++ b/Documentation/devicetree/bindings/input/mtk-kpd.txt @@ -0,0 +1,45 @@ +* Mediatek's Keypad Controller device tree binding + +Mediatek's Keypad controller is used to interface a SoC with a matrix-type +keypad device. The keypad controller supports multiple row and column lines. +A key can be placed at each intersection of a unique row and a unique column. +The keypad controller can sense a key-press and key-release and report the +event using a interrupt to the cpu. + +Required properties: +- compatible should contain: + * "mediatek,mt6779-keypad" for MT6779 keypad + * "mediatek,kp" for common keypad + +- reg: The base address of the Keypad register bank. + +- interrupts: A single interrupt specifier. + +- mediatek,key-debounce-ms: Debounce interval in milliseconds, maximum value + is 256ms + +- mediatek,hw-map-num: Number of entries of keycode in mediatek,hw-init-map + +- mediatek,hw-init-map: An array of packed 1-cell entries containing the + equivalent of hw-map-num linux key-code. Each cell is Linux keymap of + corresponding row/col, arrange like this: + + row0col0, row0col1, row0col2,...row0col8, + row1col0, row1col1, row1col2,...row1col8, + ... + row7col0, row7col1, row7col2,...row7col8. + +Example: + + keypad: kp@10010000 { + compatible = "mediatek,mt6779-keypad", "mediatek,kp"; + reg = <0 0x10010000 0 0x1000>; + interrupts = <GIC_SPI 75 IRQ_TYPE_EDGE_FALLING>; + }; + + &keypad { + mediatek,key-debounce-ms = <1024>; + /*HW Keycode [0~71] -> Linux Keycode*/ + mediatek,khw-map-num = <72>; + mediatek,hw-init-map = <114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >; + }; -- 2.18.0 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH V2 1/2] Documentation: devicetree: bindings: input 2019-12-27 1:37 ` [PATCH V2 1/2] Documentation: devicetree: bindings: input fengping yu @ 2020-01-07 7:49 ` Yingjoe Chen 0 siblings, 0 replies; 7+ messages in thread From: Yingjoe Chen @ 2020-01-07 7:49 UTC (permalink / raw) To: fengping yu Cc: Matthias Brugger, devicetree, linux-mediatek, linux-kernel, wsd_upstream Hi, Fengping, You missed several maintainers and mailing lists. Please use ./scripts/get_maintainer.pl to find proper maintainers & lists. Bad summary, You can use git log --oneline to find proper summary. Maybe: dt-bindings: input: keyboard: add MediaTek keypad controller binding On Fri, 2019-12-27 at 09:37 +0800, fengping yu wrote: > From: "fengping.yu" <fengping.yu@mediatek.com> > > Add mtk keypad device tree documentation. > > Change-Id: I415b76ee980784992763c768829b2dda76699dea Please remove Change-Id > Signed-off-by: fengping.yu <fengping.yu@mediatek.com> > --- > .../devicetree/bindings/input/mtk-kpd.txt | 45 +++++++++++++++++++ > 1 file changed, 45 insertions(+) > create mode 100644 Documentation/devicetree/bindings/input/mtk-kpd.txt > > diff --git a/Documentation/devicetree/bindings/input/mtk-kpd.txt b/Documentation/devicetree/bindings/input/mtk-kpd.txt > new file mode 100644 > index 000000000000..2af81e696159 > --- /dev/null > +++ b/Documentation/devicetree/bindings/input/mtk-kpd.txt > @@ -0,0 +1,45 @@ > +* Mediatek's Keypad Controller device tree binding > + > +Mediatek's Keypad controller is used to interface a SoC with a matrix-type > +keypad device. The keypad controller supports multiple row and column lines. > +A key can be placed at each intersection of a unique row and a unique column. > +The keypad controller can sense a key-press and key-release and report the > +event using a interrupt to the cpu. > + > +Required properties: > +- compatible should contain: > + * "mediatek,mt6779-keypad" for MT6779 keypad > + * "mediatek,kp" for common keypad > + > +- reg: The base address of the Keypad register bank. > + > +- interrupts: A single interrupt specifier. > + > +- mediatek,key-debounce-ms: Debounce interval in milliseconds, maximum value > + is 256ms > + > +- mediatek,hw-map-num: Number of entries of keycode in mediatek,hw-init-map > + > +- mediatek,hw-init-map: An array of packed 1-cell entries containing the > + equivalent of hw-map-num linux key-code. Each cell is Linux keymap of > + corresponding row/col, arrange like this: > + > + row0col0, row0col1, row0col2,...row0col8, > + row1col0, row1col1, row1col2,...row1col8, > + ... > + row7col0, row7col1, row7col2,...row7col8. > + > +Example: > + > + keypad: kp@10010000 { > + compatible = "mediatek,mt6779-keypad", "mediatek,kp"; > + reg = <0 0x10010000 0 0x1000>; > + interrupts = <GIC_SPI 75 IRQ_TYPE_EDGE_FALLING>; > + }; > + > + &keypad { > + mediatek,key-debounce-ms = <1024>; The maximum value is 256ms, why set it to 1024? > + /*HW Keycode [0~71] -> Linux Keycode*/ Don't need this line. > + mediatek,khw-map-num = <72>; typo? > + mediatek,hw-init-map = <114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >; I think it make sense to arrange it as 9*8 array to make it shorter in lines and easier to find entries. Joe.C > + }; _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH V2 2/2] drivers: input: keyboard 2019-12-27 1:37 [PATCH V2] drivers: input: keyboard: add mediatek matrix keypad driver fengping yu 2019-12-27 1:37 ` [PATCH V2 1/2] Documentation: devicetree: bindings: input fengping yu @ 2019-12-27 1:37 ` fengping yu 1 sibling, 0 replies; 7+ messages in thread From: fengping yu @ 2019-12-27 1:37 UTC (permalink / raw) To: Matthias Brugger Cc: devicetree, fengping.yu, linux-mediatek, linux-kernel, wsd_upstream From: "fengping.yu" <fengping.yu@mediatek.com> add mtk keypad driver Change-Id: I778def5a83621a5242d0bac7abfa20a7e5f89924 Signed-off-by: fengping.yu <fengping.yu@mediatek.com> --- arch/arm64/configs/defconfig | 1 + drivers/input/keyboard/Kconfig | 8 + drivers/input/keyboard/Makefile | 1 + drivers/input/keyboard/mtk-kpd.c | 357 +++++++++++++++++++++++++++++++ 4 files changed, 367 insertions(+) create mode 100644 drivers/input/keyboard/mtk-kpd.c diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig index 8e05c39eab08..62bed77ec127 100644 --- a/arch/arm64/configs/defconfig +++ b/arch/arm64/configs/defconfig @@ -315,6 +315,7 @@ CONFIG_KEYBOARD_ADC=m CONFIG_KEYBOARD_GPIO=y CONFIG_KEYBOARD_SNVS_PWRKEY=m CONFIG_KEYBOARD_CROS_EC=y +CONFIG_KEYBOARD_MTK=y CONFIG_INPUT_TOUCHSCREEN=y CONFIG_TOUCHSCREEN_ATMEL_MXT=m CONFIG_INPUT_MISC=y diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig index 8911bc2ec42a..01747a97536b 100644 --- a/drivers/input/keyboard/Kconfig +++ b/drivers/input/keyboard/Kconfig @@ -775,4 +775,12 @@ config KEYBOARD_MTK_PMIC To compile this driver as a module, choose M here: the module will be called pmic-keys. +config KEYBOARD_MTK + tristate "MediaTek Keypad Support" + help + Say Y here if you want to use the keypad. + If unuse, say N. + To compile this driver as a module, choose M here: the + module will be called mtk-kpd. + endif diff --git a/drivers/input/keyboard/Makefile b/drivers/input/keyboard/Makefile index 9510325c0c5d..daa654bcce6e 100644 --- a/drivers/input/keyboard/Makefile +++ b/drivers/input/keyboard/Makefile @@ -41,6 +41,7 @@ obj-$(CONFIG_KEYBOARD_MATRIX) += matrix_keypad.o obj-$(CONFIG_KEYBOARD_MAX7359) += max7359_keypad.o obj-$(CONFIG_KEYBOARD_MCS) += mcs_touchkey.o obj-$(CONFIG_KEYBOARD_MPR121) += mpr121_touchkey.o +obj-$(CONFIG_KEYBOARD_MTK) += mtk-kpd.o obj-$(CONFIG_KEYBOARD_MTK_PMIC) += mtk-pmic-keys.o obj-$(CONFIG_KEYBOARD_NEWTON) += newtonkbd.o obj-$(CONFIG_KEYBOARD_NOMADIK) += nomadik-ske-keypad.o diff --git a/drivers/input/keyboard/mtk-kpd.c b/drivers/input/keyboard/mtk-kpd.c new file mode 100644 index 000000000000..740a58b44dac --- /dev/null +++ b/drivers/input/keyboard/mtk-kpd.c @@ -0,0 +1,357 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2019 MediaTek Inc. + * Author Terry Chang <terry.chang@mediatek.com> + */ +#include <linux/atomic.h> +#include <linux/clk.h> +#include <linux/debugfs.h> +#include <linux/delay.h> +#include <linux/fs.h> +#include <linux/gpio.h> +#include <linux/init.h> +#include <linux/input.h> +#include <linux/interrupt.h> +#include <linux/io.h> +#include <linux/ioctl.h> +#include <linux/kernel.h> +#include <linux/miscdevice.h> +#include <linux/module.h> +#include <linux/of.h> +#include <linux/of_address.h> +#include <linux/of_irq.h> +#include <linux/pinctrl/consumer.h> +#include <linux/platform_device.h> +#include <linux/pm_wakeup.h> +#include <linux/regmap.h> +#include <linux/timer.h> +#include <linux/workqueue.h> + +#define KPD_NAME "mtk-kpd" + +#define KP_STA (0x0000) +#define KP_MEM1 (0x0004) +#define KP_MEM2 (0x0008) +#define KP_MEM3 (0x000c) +#define KP_MEM4 (0x0010) +#define KP_MEM5 (0x0014) +#define KP_DEBOUNCE (0x0018) +#define KP_SEL (0x0020) +#define KP_EN (0x0024) + +#define KP_COL0_SEL (1 << 10) +#define KP_COL1_SEL (1 << 11) +#define KP_COL2_SEL (1 << 12) + +#define KPD_DEBOUNCE_MASK ((1U << 14) - 1) +#define KPD_DOUBLE_KEY_MASK (1U << 0) + +#define KPD_NUM_MEMS 5 +#define KPD_MEM5_BITS 8 +#define KPD_NUM_KEYS 72 /* 4 * 16 + KPD_MEM5_BITS */ + +struct mtk_keypad { + struct input_dev *input_dev; + struct wakeup_source *suspend_lock; + struct tasklet_struct tasklet; + struct clk *clk; + void __iomem *base; + unsigned int irqnr; + u32 key_debounce; + u32 hw_map_num; + u32 hw_init_map[KPD_NUM_KEYS]; + u16 keymap_state[KPD_NUM_MEMS]; +}; + +/* for keymap handling */ +static void kpd_keymap_handler(unsigned long data); + +static int kpd_pdrv_probe(struct platform_device *pdev); + +static void kpd_get_keymap_state(void __iomem *kp_base, u16 state[]) +{ + state[0] = readw(kp_base + KP_MEM1); + state[1] = readw(kp_base + KP_MEM2); + state[2] = readw(kp_base + KP_MEM3); + state[3] = readw(kp_base + KP_MEM4); + state[4] = readw(kp_base + KP_MEM5); + pr_debug("kpd register = %x %x %x %x %x\n", + state[0], state[1], state[2], state[3], state[4]); +} + +static void kpd_keymap_handler(unsigned long data) +{ + int i, j; + int pressed; + u16 new_state[KPD_NUM_MEMS], change, mask; + u16 hw_keycode, keycode; + void *dest; + struct mtk_keypad *keypad = (struct mtk_keypad *)data; + + kpd_get_keymap_state(keypad->base, new_state); + + __pm_wakeup_event(keypad->suspend_lock, 500); + + for (i = 0; i < KPD_NUM_MEMS; i++) { + change = new_state[i] ^ keypad->keymap_state[i]; + if (!change) + continue; + + for (j = 0; j < 16U; j++) { + mask = (u16)1 << j; + if (!(change & mask)) + continue; + + hw_keycode = (i << 4) + j; + + if (hw_keycode >= KPD_NUM_KEYS) + continue; + + /* bit is 1: not pressed, 0: pressed */ + pressed = (new_state[i] & mask) == 0U; + pr_debug("(%s) HW keycode = %d\n", + (pressed) ? "pressed" : "released", + hw_keycode); + + keycode = keypad->hw_init_map[hw_keycode]; + if (!keycode) + continue; + input_report_key(keypad->input_dev, keycode, pressed); + input_sync(keypad->input_dev); + pr_debug("report Linux keycode = %d\n", keycode); + } + } + + dest = memcpy(keypad->keymap_state, new_state, sizeof(new_state)); + enable_irq(keypad->irqnr); +} + +static irqreturn_t kpd_irq_handler(int irq, void *dev_id) +{ + /* use _nosync to avoid deadlock */ + struct mtk_keypad *keypad = dev_id; + + disable_irq_nosync(keypad->irqnr); + tasklet_schedule(&keypad->tasklet); + return IRQ_HANDLED; +} + +static int kpd_get_dts_info(struct mtk_keypad *keypad, + struct device_node *node) +{ + int ret; + + ret = of_property_read_u32(node, "mediatek,key-debounce-ms", + &keypad->key_debounce); + if (ret) { + pr_debug("read mediatek,key-debounce-ms error.\n"); + return ret; + } + + ret = of_property_read_u32(node, "mediatek,hw-map-num", + &keypad->hw_map_num); + if (ret) { + pr_debug("read mediatek,hw-map-num error.\n"); + return ret; + } + + if (keypad->hw_map_num > KPD_NUM_KEYS) { + pr_debug("hw-map-num error, it cannot bigger than %d.\n", + KPD_NUM_KEYS); + return -EINVAL; + } + + ret = of_property_read_u32_array(node, "mediatek,hw-init-map", + keypad->hw_init_map, + keypad->hw_map_num); + + if (ret) { + pr_debug("hw-init-map was not defined in dts.\n"); + return ret; + } + + pr_debug("deb= %d\n", keypad->key_debounce); + + return 0; +} + +static int kpd_gpio_init(struct device *dev) +{ + struct pinctrl *keypad_pinctrl; + struct pinctrl_state *kpd_default; + + keypad_pinctrl = devm_pinctrl_get(dev); + if (IS_ERR(keypad_pinctrl)) { + pr_debug("Cannot find keypad_pinctrl!\n"); + + return (int)PTR_ERR(keypad_pinctrl); + } + + kpd_default = pinctrl_lookup_state(keypad_pinctrl, "default"); + if (IS_ERR(kpd_default)) { + pr_debug("Cannot find ecall_state!\n"); + + return (int)PTR_ERR(kpd_default); + } + + return pinctrl_select_state(keypad_pinctrl, + kpd_default); +} + +static int kpd_pdrv_probe(struct platform_device *pdev) +{ + struct mtk_keypad *keypad; + struct resource *res; + int i; + int err; + + keypad = devm_kzalloc(&pdev->dev, sizeof(*keypad), GFP_KERNEL); + if (!keypad) + return -ENOMEM; + + keypad->clk = devm_clk_get(&pdev->dev, "kpd"); + if (IS_ERR(keypad->clk)) { + pr_notice("get kpd-clk fail: %d\n", (int)PTR_ERR(keypad->clk)); + return (int)PTR_ERR(keypad->clk); + } + + err = clk_prepare_enable(keypad->clk); + if (err) { + pr_notice("kpd-clk prepare enable failed.\n"); + return err; + } + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + if (!res) { + err = -ENODEV; + goto err_unprepare_clk; + } + + keypad->base = devm_ioremap(&pdev->dev, res->start, + resource_size(res)); + if (!keypad->base) { + pr_notice("KP iomap failed\n"); + err = -EBUSY; + goto err_unprepare_clk; + } + + keypad->irqnr = irq_of_parse_and_map(pdev->dev.of_node, 0); + if (!keypad->irqnr) { + pr_notice("KP get irqnr failed\n"); + err = -ENODEV; + goto err_unprepare_clk; + } + + pr_info("kp base: 0x%p, addr:0x%p, kp irq: %d\n", + keypad->base, &keypad->base, keypad->irqnr); + err = kpd_gpio_init(&pdev->dev); + if (err) { + pr_debug("gpio init failed\n"); + goto err_unprepare_clk; + } + + err = kpd_get_dts_info(keypad, pdev->dev.of_node); + if (err) { + pr_debug("get dts info failed.\n"); + goto err_unprepare_clk; + } + + memset(keypad->keymap_state, 0xff, sizeof(keypad->keymap_state)); + + keypad->input_dev = devm_input_allocate_device(&pdev->dev); + if (!keypad->input_dev) { + pr_notice("input allocate device fail.\n"); + err = -ENOMEM; + goto err_unprepare_clk; + } + + keypad->input_dev->name = KPD_NAME; + keypad->input_dev->id.bustype = BUS_HOST; + keypad->input_dev->dev.parent = &pdev->dev; + + __set_bit(EV_KEY, keypad->input_dev->evbit); + + for (i = 0; i < KPD_NUM_KEYS; i++) { + if (keypad->hw_init_map[i]) + __set_bit(keypad->hw_init_map[i], + keypad->input_dev->keybit); + } + + err = input_register_device(keypad->input_dev); + if (err) { + pr_notice("register input device failed (%d)\n", err); + goto err_unprepare_clk; + } + + input_set_drvdata(keypad->input_dev, keypad); + + keypad->suspend_lock = wakeup_source_register(NULL, "kpd wakelock"); + if (!keypad->suspend_lock) { + pr_notice("wakeup source init failed.\n"); + err = -ENOMEM; + goto err_unregister_device; + } + + tasklet_init(&keypad->tasklet, kpd_keymap_handler, + (unsigned long)keypad); + + writew((u16)(keypad->key_debounce & KPD_DEBOUNCE_MASK), + keypad->base + KP_DEBOUNCE); + + /* register IRQ */ + err = request_irq(keypad->irqnr, kpd_irq_handler, IRQF_TRIGGER_NONE, + KPD_NAME, keypad); + if (err) { + pr_notice("register IRQ failed (%d)\n", err); + goto err_irq; + } + + pr_info("kpd_probe OK.\n"); + + return 0; + +err_irq: + tasklet_kill(&keypad->tasklet); + wakeup_source_unregister(keypad->suspend_lock); + +err_unregister_device: + input_unregister_device(keypad->input_dev); + +err_unprepare_clk: + clk_disable_unprepare(keypad->clk); + + return err; +} + +static int kpd_pdrv_remove(struct platform_device *pdev) +{ + struct mtk_keypad *keypad = platform_get_drvdata(pdev); + + tasklet_kill(&keypad->tasklet); + wakeup_source_unregister(keypad->suspend_lock); + input_unregister_device(keypad->input_dev); + clk_disable_unprepare(keypad->clk); + + return 0; +} + +static const struct of_device_id kpd_of_match[] = { + {.compatible = "mediatek,mt6779-keypad"}, + {.compatible = "mediatek,kp"}, + {}, +}; + +static struct platform_driver kpd_pdrv = { + .probe = kpd_pdrv_probe, + .remove = kpd_pdrv_remove, + .driver = { + .name = KPD_NAME, + .of_match_table = kpd_of_match, + }, +}; + +module_platform_driver(kpd_pdrv); + +MODULE_AUTHOR("Mediatek Corporation"); +MODULE_DESCRIPTION("MTK Keypad (KPD) Driver"); +MODULE_LICENSE("GPL"); -- 2.18.0 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Resend [PATCH V2] dt-bindings:input:keyboard:add MediaTek keypad controller binding @ 2020-01-08 6:29 fengping yu 2020-01-08 6:29 ` [PATCH V2 1/2] Documentation: devicetree: bindings: input fengping yu 0 siblings, 1 reply; 7+ messages in thread From: fengping yu @ 2020-01-08 6:29 UTC (permalink / raw) To: Matthias Brugger, Dmitry Torokhov, Rob Herring, Mark Rutland, Catalin Marinas, Will Deacon, Shawn Guo, Olof Johansson, Aisheng Dong, Anson Huang, Maxime Ripard, Leonard Crestez, Dinh Nguyen, Marcin Juszkiewicz, Valentin Schneider, Arnd Bergmann, Andy Shevchenko, Mark Brown, Thierry Reding, YueHaibing, Stefan Agner, Jacky Bai, Marco Felsch Cc: devicetree, wsd_upstream, linux-kernel, linux-mediatek, linux-input, linux-arm-kernel fengping.yu (2): Documentation: devicetree: bindings: input drivers: input: keyboard .../devicetree/bindings/input/mtk-kpd.txt | 52 +++ arch/arm64/configs/defconfig | 1 + drivers/input/keyboard/Kconfig | 8 + drivers/input/keyboard/Makefile | 1 + drivers/input/keyboard/mtk-kpd.c | 357 ++++++++++++++++++ 5 files changed, 419 insertions(+) create mode 100644 Documentation/devicetree/bindings/input/mtk-kpd.txt create mode 100644 drivers/input/keyboard/mtk-kpd.c _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH V2 1/2] Documentation: devicetree: bindings: input 2020-01-08 6:29 Resend [PATCH V2] dt-bindings:input:keyboard:add MediaTek keypad controller binding fengping yu @ 2020-01-08 6:29 ` fengping yu 2020-01-10 1:16 ` Dmitry Torokhov 0 siblings, 1 reply; 7+ messages in thread From: fengping yu @ 2020-01-08 6:29 UTC (permalink / raw) To: Matthias Brugger, Dmitry Torokhov, Rob Herring, Mark Rutland, Catalin Marinas, Will Deacon, Shawn Guo, Olof Johansson, Aisheng Dong, Anson Huang, Maxime Ripard, Leonard Crestez, Dinh Nguyen, Marcin Juszkiewicz, Valentin Schneider, Arnd Bergmann, Andy Shevchenko, Mark Brown, Thierry Reding, YueHaibing, Stefan Agner, Jacky Bai, Marco Felsch Cc: devicetree, wsd_upstream, linux-kernel, linux-mediatek, linux-input, fengping.yu, linux-arm-kernel From: "fengping.yu" <fengping.yu@mediatek.com> Add mtk keypad device tree documentation. Change-Id: I415b76ee980784992763c768829b2dda76699dea Signed-off-by: fengping.yu <fengping.yu@mediatek.com> --- .../devicetree/bindings/input/mtk-kpd.txt | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Documentation/devicetree/bindings/input/mtk-kpd.txt diff --git a/Documentation/devicetree/bindings/input/mtk-kpd.txt b/Documentation/devicetree/bindings/input/mtk-kpd.txt new file mode 100644 index 000000000000..2af81e696159 --- /dev/null +++ b/Documentation/devicetree/bindings/input/mtk-kpd.txt @@ -0,0 +1,45 @@ +* Mediatek's Keypad Controller device tree binding + +Mediatek's Keypad controller is used to interface a SoC with a matrix-type +keypad device. The keypad controller supports multiple row and column lines. +A key can be placed at each intersection of a unique row and a unique column. +The keypad controller can sense a key-press and key-release and report the +event using a interrupt to the cpu. + +Required properties: +- compatible should contain: + * "mediatek,mt6779-keypad" for MT6779 keypad + * "mediatek,kp" for common keypad + +- reg: The base address of the Keypad register bank. + +- interrupts: A single interrupt specifier. + +- mediatek,key-debounce-ms: Debounce interval in milliseconds, maximum value + is 256ms + +- mediatek,hw-map-num: Number of entries of keycode in mediatek,hw-init-map + +- mediatek,hw-init-map: An array of packed 1-cell entries containing the + equivalent of hw-map-num linux key-code. Each cell is Linux keymap of + corresponding row/col, arrange like this: + + row0col0, row0col1, row0col2,...row0col8, + row1col0, row1col1, row1col2,...row1col8, + ... + row7col0, row7col1, row7col2,...row7col8. + +Example: + + keypad: kp@10010000 { + compatible = "mediatek,mt6779-keypad", "mediatek,kp"; + reg = <0 0x10010000 0 0x1000>; + interrupts = <GIC_SPI 75 IRQ_TYPE_EDGE_FALLING>; + }; + + &keypad { + mediatek,key-debounce-ms = <1024>; + /*HW Keycode [0~71] -> Linux Keycode*/ + mediatek,khw-map-num = <72>; + mediatek,hw-init-map = <114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >; + }; -- 2.18.0 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH V2 1/2] Documentation: devicetree: bindings: input 2020-01-08 6:29 ` [PATCH V2 1/2] Documentation: devicetree: bindings: input fengping yu @ 2020-01-10 1:16 ` Dmitry Torokhov 0 siblings, 0 replies; 7+ messages in thread From: Dmitry Torokhov @ 2020-01-10 1:16 UTC (permalink / raw) To: fengping yu Cc: Mark Rutland, Jacky Bai, wsd_upstream, Stefan Agner, Catalin Marinas, Marco Felsch, Leonard Crestez, Will Deacon, Anson Huang, YueHaibing, Marcin Juszkiewicz, linux-input, Thierry Reding, Valentin Schneider, devicetree, Arnd Bergmann, Maxime Ripard, Mark Brown, linux-mediatek, Matthias Brugger, Andy Shevchenko, linux-arm-kernel, Aisheng Dong, linux-kernel, Dinh Nguyen, Rob Herring, Olof Johansson, Shawn Guo Hi Fengping, On Wed, Jan 08, 2020 at 02:29:22PM +0800, fengping yu wrote: > From: "fengping.yu" <fengping.yu@mediatek.com> > > Add mtk keypad device tree documentation. > > Change-Id: I415b76ee980784992763c768829b2dda76699dea > Signed-off-by: fengping.yu <fengping.yu@mediatek.com> > --- > .../devicetree/bindings/input/mtk-kpd.txt | 45 +++++++++++++++++++ > 1 file changed, 45 insertions(+) > create mode 100644 Documentation/devicetree/bindings/input/mtk-kpd.txt > > diff --git a/Documentation/devicetree/bindings/input/mtk-kpd.txt b/Documentation/devicetree/bindings/input/mtk-kpd.txt > new file mode 100644 > index 000000000000..2af81e696159 > --- /dev/null > +++ b/Documentation/devicetree/bindings/input/mtk-kpd.txt > @@ -0,0 +1,45 @@ > +* Mediatek's Keypad Controller device tree binding > + > +Mediatek's Keypad controller is used to interface a SoC with a matrix-type > +keypad device. The keypad controller supports multiple row and column lines. > +A key can be placed at each intersection of a unique row and a unique column. > +The keypad controller can sense a key-press and key-release and report the > +event using a interrupt to the cpu. > + > +Required properties: > +- compatible should contain: > + * "mediatek,mt6779-keypad" for MT6779 keypad > + * "mediatek,kp" for common keypad > + > +- reg: The base address of the Keypad register bank. > + > +- interrupts: A single interrupt specifier. > + > +- mediatek,key-debounce-ms: Debounce interval in milliseconds, maximum value > + is 256ms > + > +- mediatek,hw-map-num: Number of entries of keycode in mediatek,hw-init-map > + > +- mediatek,hw-init-map: An array of packed 1-cell entries containing the > + equivalent of hw-map-num linux key-code. Each cell is Linux keymap of > + corresponding row/col, arrange like this: > + > + row0col0, row0col1, row0col2,...row0col8, > + row1col0, row1col1, row1col2,...row1col8, > + ... > + row7col0, row7col1, row7col2,...row7col8. Please use standard "linux,keymap" property as defined in Documentation/devicetree/bindings/input/matrix-keymap.txt. You can use API from drivers/input/matrix-keymap.c to handle the property. Thanks. -- Dmitry _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 7+ messages in thread
* [patch v2] drivers: input: keyboard: add mediatek matrix keypad drivers @ 2019-12-27 1:34 fengping.yu 2019-12-27 1:34 ` [PATCH V2 1/2] Documentation: devicetree: bindings: input fengping.yu 0 siblings, 1 reply; 7+ messages in thread From: fengping.yu @ 2019-12-27 1:34 UTC (permalink / raw) To: Matthias Brugger; +Cc: devicetree, linux-mediatek, linux-kernel, wsd_upstream fengping.yu (2): Documentation: devicetree: bindings: input drivers: input: keyboard .../devicetree/bindings/input/mtk-kpd.txt | 45 +++ arch/arm64/configs/defconfig | 1 + drivers/input/keyboard/Kconfig | 8 + drivers/input/keyboard/Makefile | 1 + drivers/input/keyboard/mtk-kpd.c | 357 ++++++++++++++++++ 5 files changed, 412 insertions(+) create mode 100644 Documentation/devicetree/bindings/input/mtk-kpd.txt create mode 100644 drivers/input/keyboard/mtk-kpd.c _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH V2 1/2] Documentation: devicetree: bindings: input 2019-12-27 1:34 [patch v2] drivers: input: keyboard: add mediatek matrix keypad drivers fengping.yu @ 2019-12-27 1:34 ` fengping.yu 0 siblings, 0 replies; 7+ messages in thread From: fengping.yu @ 2019-12-27 1:34 UTC (permalink / raw) To: Matthias Brugger Cc: devicetree, fengping.yu, linux-mediatek, linux-kernel, wsd_upstream Add mtk keypad device tree documentation. Change-Id: I415b76ee980784992763c768829b2dda76699dea Signed-off-by: fengping.yu <fengping.yu@mediatek.com> --- .../devicetree/bindings/input/mtk-kpd.txt | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 Documentation/devicetree/bindings/input/mtk-kpd.txt diff --git a/Documentation/devicetree/bindings/input/mtk-kpd.txt b/Documentation/devicetree/bindings/input/mtk-kpd.txt new file mode 100644 index 000000000000..2af81e696159 --- /dev/null +++ b/Documentation/devicetree/bindings/input/mtk-kpd.txt @@ -0,0 +1,45 @@ +* Mediatek's Keypad Controller device tree binding + +Mediatek's Keypad controller is used to interface a SoC with a matrix-type +keypad device. The keypad controller supports multiple row and column lines. +A key can be placed at each intersection of a unique row and a unique column. +The keypad controller can sense a key-press and key-release and report the +event using a interrupt to the cpu. + +Required properties: +- compatible should contain: + * "mediatek,mt6779-keypad" for MT6779 keypad + * "mediatek,kp" for common keypad + +- reg: The base address of the Keypad register bank. + +- interrupts: A single interrupt specifier. + +- mediatek,key-debounce-ms: Debounce interval in milliseconds, maximum value + is 256ms + +- mediatek,hw-map-num: Number of entries of keycode in mediatek,hw-init-map + +- mediatek,hw-init-map: An array of packed 1-cell entries containing the + equivalent of hw-map-num linux key-code. Each cell is Linux keymap of + corresponding row/col, arrange like this: + + row0col0, row0col1, row0col2,...row0col8, + row1col0, row1col1, row1col2,...row1col8, + ... + row7col0, row7col1, row7col2,...row7col8. + +Example: + + keypad: kp@10010000 { + compatible = "mediatek,mt6779-keypad", "mediatek,kp"; + reg = <0 0x10010000 0 0x1000>; + interrupts = <GIC_SPI 75 IRQ_TYPE_EDGE_FALLING>; + }; + + &keypad { + mediatek,key-debounce-ms = <1024>; + /*HW Keycode [0~71] -> Linux Keycode*/ + mediatek,khw-map-num = <72>; + mediatek,hw-init-map = <114 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 >; + }; -- 2.18.0 _______________________________________________ Linux-mediatek mailing list Linux-mediatek@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-mediatek ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2020-01-10 1:16 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-12-27 1:37 [PATCH V2] drivers: input: keyboard: add mediatek matrix keypad driver fengping yu 2019-12-27 1:37 ` [PATCH V2 1/2] Documentation: devicetree: bindings: input fengping yu 2020-01-07 7:49 ` Yingjoe Chen 2019-12-27 1:37 ` [PATCH V2 2/2] drivers: input: keyboard fengping yu -- strict thread matches above, loose matches on Subject: below -- 2020-01-08 6:29 Resend [PATCH V2] dt-bindings:input:keyboard:add MediaTek keypad controller binding fengping yu 2020-01-08 6:29 ` [PATCH V2 1/2] Documentation: devicetree: bindings: input fengping yu 2020-01-10 1:16 ` Dmitry Torokhov 2019-12-27 1:34 [patch v2] drivers: input: keyboard: add mediatek matrix keypad drivers fengping.yu 2019-12-27 1:34 ` [PATCH V2 1/2] Documentation: devicetree: bindings: input fengping.yu
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox