From patchwork Mon Feb 26 15:41:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrey Smirnov X-Patchwork-Id: 10242645 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id D76DF602DC for ; Mon, 26 Feb 2018 15:43:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C622C28948 for ; Mon, 26 Feb 2018 15:43:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BA8812A04F; Mon, 26 Feb 2018 15:43:12 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2717A2A061 for ; Mon, 26 Feb 2018 15:43:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751947AbeBZPnK (ORCPT ); Mon, 26 Feb 2018 10:43:10 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:40731 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751094AbeBZPll (ORCPT ); Mon, 26 Feb 2018 10:41:41 -0500 Received: by mail-pg0-f65.google.com with SMTP id g2so6306620pgn.7; Mon, 26 Feb 2018 07:41:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=5lVbtUe6K8IOODE/ggd8gAE0gHXBxLV0jgjSQNhOzYQ=; b=flqA+tLek1IBkRvsYq9ZYMu9pHjW1lAUvc8hjMJuUpUP/0Bv5IQyEYwgtBlzUOlB6P 47ywYWNNRfxEROsZDxRdBWIalsizn6Ucfwtb1ld2nibqwD84o2rviti0JBsEQYG9DjC2 HwXSHN/o2REQf+bSQt2BHhmBKEfcLHLYR4ZZIDx5c82Y22gbuOzyj290t3OAFDFXw2sc 9wNJY8hj79KJrzak9NLdOqwpr2MhO70jmxyL5qghdd/mdbICQXCIsX6Qd/ASMgAjjKLu DyJhhEqiSjWgqJ2Fzdb/7+93l57xB0xq5Pt3HbWUajp2MbddFXLvEQjpuqLNXZgiFJVS uSvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=5lVbtUe6K8IOODE/ggd8gAE0gHXBxLV0jgjSQNhOzYQ=; b=gXNe/lIOTT29vfNynn/oLE0CztfH9NXPmcx4UvgEWmN2P3aSfPTGWagkA7jbvhFQZF VZJ8YsSUoxoPYwAuXZY1IYL84wzo6UiKXDOFV388ePAmJORuRajuUIg8xyy0b4OWrsI2 EoSGYavWd9gPqVadQM1Q1ImBrPRBHm+iJ/XFcJOzbBcMhRaWKKhb7YT+Pl3x4XUojHn5 mB0/JZQD1hjbWc+ZsGc5h6//qDAXM2F5sJBhgYCGTNgLiB5ZT9Rw1GtVfFqW2CleVawG bwc5J0Atrv+bR84y99wrDvuDiZO60yHIZu/ZD/as35W2vRMYin9TnTHgkwWFBR2IMLsa Egew== X-Gm-Message-State: APf1xPAilgU7ZKIn33tgeii4o7BEFHuNyZ5PwXelZB9VnvaSV5/cCVtp ZXbCw8OwP0j2dUHJODJFWPAw3RYHv7k= X-Google-Smtp-Source: AH8x2240KwffrBY3NMapUpErgHJurBX2ZS0o3eouSkP6mHk4o4CYBP8lAYG9jSbip677BShNzwQqiA== X-Received: by 10.98.13.196 with SMTP id 65mr10940227pfn.139.1519659700773; Mon, 26 Feb 2018 07:41:40 -0800 (PST) Received: from localhost.localdomain ([173.226.206.194]) by smtp.gmail.com with ESMTPSA id s62sm15138394pgc.12.2018.02.26.07.41.39 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 26 Feb 2018 07:41:40 -0800 (PST) From: Andrey Smirnov To: Dmitry Torokhov Cc: Andrey Smirnov , linux-input@vger.kernel.org, linux-kernel@vger.kernel.org, Rob Herring , Mark Rutland , devicetree@vger.kernel.org, Guenter Roeck , Chris Healy , Lucas Stach Subject: [PATCH 1/2] input: Add RAVE SP Powerbutton driver Date: Mon, 26 Feb 2018 07:41:29 -0800 Message-Id: <20180226154130.25774-1-andrew.smirnov@gmail.com> X-Mailer: git-send-email 2.14.3 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add driver that properly handles input event emitted by RAVE SP devices. Cc: Dmitry Torokhov Cc: linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org Cc: Rob Herring Cc: Mark Rutland Cc: devicetree@vger.kernel.org Cc: Guenter Roeck Cc: Chris Healy Cc: Lucas Stach Signed-off-by: Andrey Smirnov --- drivers/input/misc/Kconfig | 9 ++++ drivers/input/misc/Makefile | 1 + drivers/input/misc/rave-sp-pwrbutton.c | 92 ++++++++++++++++++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 drivers/input/misc/rave-sp-pwrbutton.c diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index 62a1312a7387..6a3c753b093b 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig @@ -841,4 +841,13 @@ config INPUT_HISI_POWERKEY To compile this driver as a module, choose M here: the module will be called hisi_powerkey. +config INPUT_RAVE_SP_PWRBUTTON + tristate "RAVE SP Power button Driver" + depends on RAVE_SP_CORE + help + Say Y here if you want to enable power key reporting from RAVE SP + + To compile this driver as a module, choose M here: the + module will be called rave-sp-pwrbutton. + endif diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile index a8f61af865aa..6ebeec1f4dd0 100644 --- a/drivers/input/misc/Makefile +++ b/drivers/input/misc/Makefile @@ -80,3 +80,4 @@ obj-$(CONFIG_INPUT_WM831X_ON) += wm831x-on.o obj-$(CONFIG_INPUT_XEN_KBDDEV_FRONTEND) += xen-kbdfront.o obj-$(CONFIG_INPUT_YEALINK) += yealink.o obj-$(CONFIG_INPUT_IDEAPAD_SLIDEBAR) += ideapad_slidebar.o +obj-$(CONFIG_INPUT_RAVE_SP_PWRBUTTON) += rave-sp-pwrbutton.o diff --git a/drivers/input/misc/rave-sp-pwrbutton.c b/drivers/input/misc/rave-sp-pwrbutton.c new file mode 100644 index 000000000000..7511062c724b --- /dev/null +++ b/drivers/input/misc/rave-sp-pwrbutton.c @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: GPL-2.0+ + +/* + * Power Button driver for RAVE SP + * + * Copyright (C) 2017 Zodiac Inflight Innovations + * + */ + +#include +#include +#include +#include +#include + +#define RAVE_SP_EVNT_BUTTON_PRESS (RAVE_SP_EVNT_BASE + 0x00) + +struct rave_sp_power_button { + struct input_dev *idev; + struct notifier_block nb; +}; + +static int rave_sp_power_button_event(struct notifier_block *nb, + unsigned long action, void *data) +{ + struct rave_sp_power_button *pb = + container_of(nb, struct rave_sp_power_button, nb); + const u8 event = rave_sp_action_unpack_event(action); + const u8 value = rave_sp_action_unpack_value(action); + struct input_dev *idev = pb->idev; + + if (event == RAVE_SP_EVNT_BUTTON_PRESS) { + input_report_key(idev, KEY_POWER, value); + input_sync(idev); + + return NOTIFY_STOP; + } + + return NOTIFY_DONE; +} + +static int rave_sp_pwrbutton_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct rave_sp_power_button *pb; + struct input_dev *idev; + int ret; + + pb = devm_kzalloc(dev, sizeof(*pb), GFP_KERNEL); + if (!pb) + return -ENOMEM; + + idev = devm_input_allocate_device(dev); + if (!idev) + return -ENOMEM; + + idev->name = pdev->name; + idev->dev.parent = dev; + + input_set_capability(idev, EV_KEY, KEY_POWER); + + ret = input_register_device(idev); + if (ret) + return ret; + + pb->idev = idev; + pb->nb.notifier_call = rave_sp_power_button_event; + pb->nb.priority = 128; + + return devm_rave_sp_register_event_notifier(dev, &pb->nb); +} + +static const struct of_device_id rave_sp_pwrbutton_of_match[] = { + { .compatible = "zii,rave-sp-pwrbutton" }, + {} +}; + +static struct platform_driver rave_sp_pwrbutton_driver = { + .probe = rave_sp_pwrbutton_probe, + .driver = { + .name = KBUILD_MODNAME, + .of_match_table = rave_sp_pwrbutton_of_match, + }, +}; +module_platform_driver(rave_sp_pwrbutton_driver); + +MODULE_DEVICE_TABLE(of, rave_sp_pwrbutton_of_match); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Andrey Vostrikov "); +MODULE_AUTHOR("Nikita Yushchenko "); +MODULE_AUTHOR("Andrey Smirnov "); +MODULE_DESCRIPTION("RAVE SP Power Button driver");