Re: [PATCH] Input: add switch event(SW_EXT_PEN_ATTACHED)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Oct 30, 2020 at 03:27:40PM +0900, HyungJae Im wrote:
> We need support to various accessories on the device,
> some requiring switch does not exist in switch list.
> So added switch for the following purpose.
> 
> SW_EXT_PEN_ATTACHED is for the checking the external pen
> attached or not on the device. We also added driver
> that uses such event.
> 
> Signed-off-by: Hyungjae Im <hj2.im@xxxxxxxxxxx>
> ---
>  drivers/input/Kconfig                  |  12 ++
>  drivers/input/Makefile                 |   1 +
>  drivers/input/ext_pen_detect.c         | 237 +++++++++++++++++++++++++
>  include/linux/mod_devicetable.h        |   2 +-
>  include/uapi/linux/input-event-codes.h |   3 +-
>  5 files changed, 253 insertions(+), 2 deletions(-)
>  create mode 100644 drivers/input/ext_pen_detect.c
> 
> diff --git a/drivers/input/Kconfig b/drivers/input/Kconfig
> index ba5e7444c547..5d6d15c8f7e7 100644
> --- a/drivers/input/Kconfig
> +++ b/drivers/input/Kconfig
> @@ -197,6 +197,18 @@ config INPUT_COVER_DETECT
>  	  To compile this driver as a module, choose M here: the
>  	  module will be called cover_detect.
>  
> +config INPUT_EXT_PEN_DETECT
> +	tristate "Enable external pen attach detection"
> +	help
> +	  Say Y here to enable external pen detection
> +	  and send a event when external pen is attached/detached.
> +	  Active gpio state is low and active event value is 0.
> +
> +	  If unsure, say N.
> +
> +	  To compile this driver as a module, choose M here: the
> +	  module will be called ext_pen_detect.
> +
>  comment "Input Device Drivers"
>  
>  source "drivers/input/keyboard/Kconfig"
> diff --git a/drivers/input/Makefile b/drivers/input/Makefile
> index fc8dd9091821..0ccf02e34557 100644
> --- a/drivers/input/Makefile
> +++ b/drivers/input/Makefile
> @@ -31,3 +31,4 @@ obj-$(CONFIG_INPUT_APMPOWER)	+= apm-power.o
>  obj-$(CONFIG_RMI4_CORE)		+= rmi4/
>  
>  obj-$(CONFIG_INPUT_COVER_DETECT)+= cover_detect.o
> +obj-$(CONFIG_INPUT_EXT_PEN_DETECT)+= ext_pen_detect.o
> diff --git a/drivers/input/ext_pen_detect.c b/drivers/input/ext_pen_detect.c
> new file mode 100644
> index 000000000000..9a0d106e49f8
> --- /dev/null
> +++ b/drivers/input/ext_pen_detect.c
> @@ -0,0 +1,237 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Support detection pen attachment externally on device
> + *
> + * Copyright (C) 2020 Samsung Electronics Co. Ltd. All Rights Reserved.
> + *
> + */
> +
> +#include <linux/module.h>
> +#include <linux/interrupt.h>
> +#include <linux/pm.h>
> +#include <linux/slab.h>
> +#include <linux/platform_device.h>
> +#include <linux/input.h>
> +#include <linux/gpio.h>
> +#include <linux/of_gpio.h>
> +#include <linux/wakelock.h>
> +
> +struct ext_pen_detect_drvdata {
> +	struct input_dev *input;
> +	struct delayed_work ext_pen_detect_dwork;
> +	struct wakeup_source *ws;
> +	int gpio_ext_pen_detect;
> +	int irq_ext_pen_detect;
> +};
> +
> +static void ext_pen_detect_work(struct work_struct *work)
> +{
> +	struct ext_pen_detect_drvdata *ddata =
> +		container_of(work, struct ext_pen_detect_drvdata,
> +				ext_pen_detect_dwork.work);
> +	bool ext_pen_status;
> +
> +	ext_pen_status = gpio_get_value(ddata->gpio_ext_pen_detect);
> +
> +	input_report_switch(ddata->input,
> +			SW_EXT_PEN_ATTACHED, ext_pen_status);

As this is just a gpio device, again, why is this needed and you can't
just use the gpio_keys driver instead?

Why does this have to be a new driver?

thanks,

greg k-h



[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux