From patchwork Wed Mar 7 02:01:33 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrey Smirnov X-Patchwork-Id: 10263297 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 3059B60211 for ; Wed, 7 Mar 2018 02:03:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1FE3A28E2E for ; Wed, 7 Mar 2018 02:03:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1591129335; Wed, 7 Mar 2018 02:03:36 +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 6936F28E2E for ; Wed, 7 Mar 2018 02:02:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933055AbeCGCC2 (ORCPT ); Tue, 6 Mar 2018 21:02:28 -0500 Received: from mail-pl0-f67.google.com ([209.85.160.67]:41733 "EHLO mail-pl0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932078AbeCGCC1 (ORCPT ); Tue, 6 Mar 2018 21:02:27 -0500 Received: by mail-pl0-f67.google.com with SMTP id d9-v6so446955plo.8; Tue, 06 Mar 2018 18:02:27 -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=YBTMsdm0yBKa/ixRfpP8ALKQ0v5rJDeylUIiQMARwl0=; b=ZRrbhEXaUS0FDI+QooCmLZ+8EmuGkSdLHkNqOTptut2JOjc2nE76debTHNbLtSd4mL QyNIzx1m3Mmiipfk7/8O1UGGsk16NJl/+mtrgIqJhqd7a8AVivAc5zNjWJHETXTcRBkm CxGBmhNNkGnAjCFMBXbVigq/bpzfxHphNRDaed5zHIisu2ESbSGFFJSq1EG1gvXlNsZv VmqykooertRbOpE7P+hBlOReher9XzSsNAvM24jHHIi0vemAPFZFSWxVMK+jQVMHYZvf KqBC0+qOKfTfgm1JgNP8sfi0FyNkK++/UdmlPUtvciHb6FYfuEnyOAUdNOmOAHv5r7+A W85g== 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=YBTMsdm0yBKa/ixRfpP8ALKQ0v5rJDeylUIiQMARwl0=; b=ieLkgdxXXWc+b79VkYhFlEx/8ltjyifaHzRa3Vn5KgLIXCqY7p2PMQsYCDjFFBkEPb 5vuwSqErl4dVp7+43iGrJtAeLoTPqcg2t5V9+wqDNU4Ut5APp1JG/nVJoIXTLZk/yvCn eKOQreYk5tQg45TvF7DLVqwUqpvswYq2hb0iJIzoXAajeqotYFZv6pZOitk+PjLrBnKf excHe7Zt+sEzidDqQWLzQ0p8gfK9G23dw98RjAfwVSvDyH4q2QtbNhtO5vxXt/1oiPJ4 EqMyPlWMa0kbs25M61yZ9kjM0xRdp0v5OsOR0+t+uSs4Rjlv7C5WLUjDia1wK0mYIY/X h5tw== X-Gm-Message-State: APf1xPCgpY7dethf4Uv3I76EZpTw5v4iC7DotupqNN90bnjz76IPUxCY +n3Y8rtHKD9KG+cHxUHA18k= X-Google-Smtp-Source: AG47ELvZf+jNueV9LELHwun2q+MYM/MVJjpciaRBCz6xsfUfMKabYZqXOyRbBTltlEBDFoAeysxB2A== X-Received: by 2002:a17:902:467:: with SMTP id 94-v6mr18364876ple.57.1520388146724; Tue, 06 Mar 2018 18:02:26 -0800 (PST) Received: from squirtle.westlake.spaceflightindustries.com ([173.226.206.194]) by smtp.gmail.com with ESMTPSA id e125sm25652473pgc.76.2018.03.06.18.02.25 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 06 Mar 2018 18:02:25 -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 v3 1/2] input: Add RAVE SP Powerbutton driver Date: Tue, 6 Mar 2018 18:01:33 -0800 Message-Id: <20180307020134.26293-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 Reviewed-by: Lucas Stach Signed-off-by: Andrey Smirnov --- Changes since [v2]: - Collected Reviewed-by from Lucas Changes since [v1]: - Removed redundant dev.parent assignment - Various cosmetic changes [v2] lkml.kernel.org/r/20180301165527.22274-1-andrew.smirnov@gmail.com [v1] lkml.kernel.org/r/20180226154130.25774-1-andrew.smirnov@gmail.com drivers/input/misc/Kconfig | 9 ++++ drivers/input/misc/Makefile | 1 + drivers/input/misc/rave-sp-pwrbutton.c | 94 ++++++++++++++++++++++++++++++++++ 3 files changed, 104 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..8cc58f362bb8 100644 --- a/drivers/input/misc/Makefile +++ b/drivers/input/misc/Makefile @@ -60,6 +60,7 @@ obj-$(CONFIG_INPUT_PMIC8XXX_PWRKEY) += pmic8xxx-pwrkey.o obj-$(CONFIG_INPUT_POWERMATE) += powermate.o obj-$(CONFIG_INPUT_PWM_BEEPER) += pwm-beeper.o obj-$(CONFIG_INPUT_PWM_VIBRA) += pwm-vibra.o +obj-$(CONFIG_INPUT_RAVE_SP_PWRBUTTON) += rave-sp-pwrbutton.o obj-$(CONFIG_INPUT_RB532_BUTTON) += rb532_button.o obj-$(CONFIG_INPUT_REGULATOR_HAPTIC) += regulator-haptic.o obj-$(CONFIG_INPUT_RETU_PWRBUTTON) += retu-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..bcab3cdb7ebd --- /dev/null +++ b/drivers/input/misc/rave-sp-pwrbutton.c @@ -0,0 +1,94 @@ +// 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 error; + + 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; + + input_set_capability(idev, EV_KEY, KEY_POWER); + + error = input_register_device(idev); + if (error) + return error; + + pb->idev = idev; + pb->nb.notifier_call = rave_sp_power_button_event; + pb->nb.priority = 128; + + error = devm_rave_sp_register_event_notifier(dev, &pb->nb); + if (error) + return error; + + return 0; +} + +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");