Re: [PATCH] staging: quickstart: remove driver

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

 



Hi all,

I cannot maintain the driver anymore since my only machine with support
to the "quickstart" hardware died quite some time ago.
I would be happy if someone else could continue maintaining the driver
though. :)

Best regards,
- Angelo Arrifano

On Thu, 2014-07-24 at 21:58 +0300, Kristina Martšenko wrote:
> The driver hasn't been cleaned up and it doesn't look like anyone is
> working on it anymore (including the original author). So remove the
> driver from the kernel. If someone wants to work on cleaning it up and
> moving it out of staging, this commit can be reverted.
> 
> Signed-off-by: Kristina Martšenko <kristina.martsenko@xxxxxxxxx>
> Cc: Angelo Arrifano <miknix@xxxxxxxxxx>
> ---
> To be applied after "staging: phison: remove driver".
> 
>  drivers/staging/Kconfig                 |   2 -
>  drivers/staging/Makefile                |   1 -
>  drivers/staging/quickstart/Kconfig      |  10 -
>  drivers/staging/quickstart/Makefile     |   1 -
>  drivers/staging/quickstart/quickstart.c | 458 --------------------------------
>  5 files changed, 472 deletions(-)
>  delete mode 100644 drivers/staging/quickstart/Kconfig
>  delete mode 100644 drivers/staging/quickstart/Makefile
>  delete mode 100644 drivers/staging/quickstart/quickstart.c
> 
> diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
> index be3f91c..b08394c 100644
> --- a/drivers/staging/Kconfig
> +++ b/drivers/staging/Kconfig
> @@ -70,8 +70,6 @@ source "drivers/staging/iio/Kconfig"
>  
>  source "drivers/staging/xgifb/Kconfig"
>  
> -source "drivers/staging/quickstart/Kconfig"
> -
>  source "drivers/staging/emxx_udc/Kconfig"
>  
>  source "drivers/staging/bcm/Kconfig"
> diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
> index a4408a8..9623308 100644
> --- a/drivers/staging/Makefile
> +++ b/drivers/staging/Makefile
> @@ -29,7 +29,6 @@ obj-$(CONFIG_VME_BUS)		+= vme/
>  obj-$(CONFIG_DX_SEP)            += sep/
>  obj-$(CONFIG_IIO)		+= iio/
>  obj-$(CONFIG_FB_XGI)		+= xgifb/
> -obj-$(CONFIG_ACPI_QUICKSTART)	+= quickstart/
>  obj-$(CONFIG_USB_EMXX)		+= emxx_udc/
>  obj-$(CONFIG_BCM_WIMAX)		+= bcm/
>  obj-$(CONFIG_FT1000)		+= ft1000/
> diff --git a/drivers/staging/quickstart/Kconfig b/drivers/staging/quickstart/Kconfig
> deleted file mode 100644
> index 5bea487..0000000
> --- a/drivers/staging/quickstart/Kconfig
> +++ /dev/null
> @@ -1,10 +0,0 @@
> -config ACPI_QUICKSTART
> -	tristate "ACPI Quickstart key driver"
> -	depends on ACPI && INPUT
> -	help
> -	  Say Y here if you have a platform that supports the ACPI
> -	  quickstart key protocol.
> -
> -	  To compile this driver as a module, choose M here: the module will be
> -	  called quickstart.
> -
> diff --git a/drivers/staging/quickstart/Makefile b/drivers/staging/quickstart/Makefile
> deleted file mode 100644
> index 290e0e4..0000000
> --- a/drivers/staging/quickstart/Makefile
> +++ /dev/null
> @@ -1 +0,0 @@
> -obj-$(CONFIG_ACPI_QUICKSTART)		+= quickstart.o
> diff --git a/drivers/staging/quickstart/quickstart.c b/drivers/staging/quickstart/quickstart.c
> deleted file mode 100644
> index a85c3d6..0000000
> --- a/drivers/staging/quickstart/quickstart.c
> +++ /dev/null
> @@ -1,458 +0,0 @@
> -/*
> - *  quickstart.c - ACPI Direct App Launch driver
> - *
> - *
> - *  Copyright (C) 2007-2010 Angelo Arrifano <miknix@xxxxxxxxx>
> - *
> - *  Information gathered from disassembled dsdt and from here:
> - *  <http://www.microsoft.com/whdc/system/platform/firmware/DirAppLaunch.mspx>
> - *
> - *  This program is free software; you can redistribute it and/or modify
> - *  it under the terms of the GNU General Public License as published by
> - *  the Free Software Foundation; either version 2 of the License, or
> - *  (at your option) any later version.
> - *
> - *  This program is distributed in the hope that it will be useful,
> - *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> - *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - *  GNU General Public License for more details.
> - *
> - *  You should have received a copy of the GNU General Public License
> - *  along with this program; if not, write to the Free Software
> - *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
> - *
> - */
> -
> -#define QUICKSTART_VERSION "1.04"
> -
> -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
> -
> -#include <linux/kernel.h>
> -#include <linux/module.h>
> -#include <linux/init.h>
> -#include <linux/types.h>
> -#include <linux/acpi.h>
> -#include <linux/platform_device.h>
> -#include <linux/input.h>
> -
> -MODULE_AUTHOR("Angelo Arrifano");
> -MODULE_DESCRIPTION("ACPI Direct App Launch driver");
> -MODULE_LICENSE("GPL");
> -
> -#define QUICKSTART_ACPI_DEVICE_NAME	"quickstart"
> -#define QUICKSTART_ACPI_CLASS		"quickstart"
> -#define QUICKSTART_ACPI_HID		"PNP0C32"
> -
> -#define QUICKSTART_PF_DRIVER_NAME	"quickstart"
> -#define QUICKSTART_PF_DEVICE_NAME	"quickstart"
> -
> -/*
> - * There will be two events:
> - * 0x02 - A hot button was pressed while device was off/sleeping.
> - * 0x80 - A hot button was pressed while device was up.
> - */
> -#define QUICKSTART_EVENT_WAKE		0x02
> -#define QUICKSTART_EVENT_RUNTIME	0x80
> -
> -struct quickstart_button {
> -	char *name;
> -	unsigned int id;
> -	struct list_head list;
> -};
> -
> -struct quickstart_acpi {
> -	struct acpi_device *device;
> -	struct quickstart_button *button;
> -};
> -
> -static LIST_HEAD(buttons);
> -static struct quickstart_button *pressed;
> -
> -static struct input_dev *quickstart_input;
> -
> -/* Platform driver functions */
> -static ssize_t buttons_show(struct device *dev, struct device_attribute *attr,
> -			    char *buf)
> -{
> -	int count = 0;
> -	struct quickstart_button *b;
> -
> -	if (list_empty(&buttons))
> -		return snprintf(buf, PAGE_SIZE, "none");
> -
> -	list_for_each_entry(b, &buttons, list) {
> -		count += snprintf(buf + count, PAGE_SIZE - count, "%u\t%s\n",
> -							b->id, b->name);
> -
> -		if (count >= PAGE_SIZE) {
> -			count = PAGE_SIZE;
> -			break;
> -		}
> -	}
> -
> -	return count;
> -}
> -
> -static ssize_t pressed_button_show(struct device *dev,
> -				   struct device_attribute *attr, char *buf)
> -{
> -	return scnprintf(buf, PAGE_SIZE, "%s\n",
> -					(pressed ? pressed->name : "none"));
> -}
> -
> -
> -static ssize_t pressed_button_store(struct device *dev,
> -				    struct device_attribute *attr,
> -				    const char *buf, size_t count)
> -{
> -	if (count < 2)
> -		return -EINVAL;
> -
> -	if (strncasecmp(buf, "none", 4) != 0)
> -		return -EINVAL;
> -
> -	pressed = NULL;
> -	return count;
> -}
> -
> -/* Helper functions */
> -static struct quickstart_button *quickstart_buttons_add(void)
> -{
> -	struct quickstart_button *b;
> -
> -	b = kzalloc(sizeof(*b), GFP_KERNEL);
> -	if (!b)
> -		return NULL;
> -
> -	list_add_tail(&b->list, &buttons);
> -
> -	return b;
> -}
> -
> -static void quickstart_button_del(struct quickstart_button *data)
> -{
> -	if (!data)
> -		return;
> -
> -	list_del(&data->list);
> -	kfree(data->name);
> -	kfree(data);
> -}
> -
> -static void quickstart_buttons_free(void)
> -{
> -	struct quickstart_button *b, *n;
> -
> -	list_for_each_entry_safe(b, n, &buttons, list)
> -		quickstart_button_del(b);
> -}
> -
> -/* ACPI Driver functions */
> -static void quickstart_acpi_notify(acpi_handle handle, u32 event, void *data)
> -{
> -	struct quickstart_acpi *quickstart = data;
> -
> -	if (!quickstart)
> -		return;
> -
> -	switch (event) {
> -	case QUICKSTART_EVENT_WAKE:
> -		pressed = quickstart->button;
> -		break;
> -	case QUICKSTART_EVENT_RUNTIME:
> -		input_report_key(quickstart_input, quickstart->button->id, 1);
> -		input_sync(quickstart_input);
> -		input_report_key(quickstart_input, quickstart->button->id, 0);
> -		input_sync(quickstart_input);
> -		break;
> -	default:
> -		pr_err("Unexpected ACPI event notify (%u)\n", event);
> -		break;
> -	}
> -}
> -
> -static int quickstart_acpi_ghid(struct quickstart_acpi *quickstart)
> -{
> -	acpi_status status;
> -	struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
> -	int ret = 0;
> -
> -	/*
> -	 * This returns a buffer telling the button usage ID,
> -	 * and triggers pending notify events (The ones before booting).
> -	 */
> -	status = acpi_evaluate_object(quickstart->device->handle, "GHID", NULL,
> -								&buffer);
> -	if (ACPI_FAILURE(status)) {
> -		pr_err("%s GHID method failed\n", quickstart->button->name);
> -		return -EINVAL;
> -	}
> -
> -	/*
> -	 * <<The GHID method can return a BYTE, WORD, or DWORD.
> -	 * The value must be encoded in little-endian byte
> -	 * order (least significant byte first).>>
> -	 */
> -	switch (buffer.length) {
> -	case 1:
> -		quickstart->button->id = *(uint8_t *)buffer.pointer;
> -		break;
> -	case 2:
> -		quickstart->button->id = *(uint16_t *)buffer.pointer;
> -		break;
> -	case 4:
> -		quickstart->button->id = *(uint32_t *)buffer.pointer;
> -		break;
> -	case 8:
> -		quickstart->button->id = *(uint64_t *)buffer.pointer;
> -		break;
> -	default:
> -		pr_err("%s GHID method returned buffer of unexpected length %lu\n",
> -				quickstart->button->name,
> -				(unsigned long)buffer.length);
> -		ret = -EINVAL;
> -		break;
> -	}
> -
> -	kfree(buffer.pointer);
> -
> -	return ret;
> -}
> -
> -static int quickstart_acpi_config(struct quickstart_acpi *quickstart)
> -{
> -	char *bid = acpi_device_bid(quickstart->device);
> -	char *name;
> -
> -	name = kmalloc(strlen(bid) + 1, GFP_KERNEL);
> -	if (!name)
> -		return -ENOMEM;
> -
> -	/* Add new button to list */
> -	quickstart->button = quickstart_buttons_add();
> -	if (!quickstart->button) {
> -		kfree(name);
> -		return -ENOMEM;
> -	}
> -
> -	quickstart->button->name = name;
> -	strcpy(quickstart->button->name, bid);
> -
> -	return 0;
> -}
> -
> -static int quickstart_acpi_add(struct acpi_device *device)
> -{
> -	int ret;
> -	acpi_status status;
> -	struct quickstart_acpi *quickstart;
> -
> -	if (!device)
> -		return -EINVAL;
> -
> -	quickstart = kzalloc(sizeof(*quickstart), GFP_KERNEL);
> -	if (!quickstart)
> -		return -ENOMEM;
> -
> -	quickstart->device = device;
> -
> -	strcpy(acpi_device_name(device), QUICKSTART_ACPI_DEVICE_NAME);
> -	strcpy(acpi_device_class(device), QUICKSTART_ACPI_CLASS);
> -	device->driver_data = quickstart;
> -
> -	/* Add button to list and initialize some stuff */
> -	ret = quickstart_acpi_config(quickstart);
> -	if (ret < 0)
> -		goto fail_config;
> -
> -	status = acpi_install_notify_handler(device->handle, ACPI_ALL_NOTIFY,
> -						quickstart_acpi_notify,
> -						quickstart);
> -	if (ACPI_FAILURE(status)) {
> -		pr_err("Notify handler install error\n");
> -		ret = -ENODEV;
> -		goto fail_installnotify;
> -	}
> -
> -	ret = quickstart_acpi_ghid(quickstart);
> -	if (ret < 0)
> -		goto fail_ghid;
> -
> -	return 0;
> -
> -fail_ghid:
> -	acpi_remove_notify_handler(device->handle, ACPI_ALL_NOTIFY,
> -						quickstart_acpi_notify);
> -
> -fail_installnotify:
> -	quickstart_button_del(quickstart->button);
> -
> -fail_config:
> -
> -	kfree(quickstart);
> -
> -	return ret;
> -}
> -
> -static int quickstart_acpi_remove(struct acpi_device *device)
> -{
> -	acpi_status status;
> -	struct quickstart_acpi *quickstart;
> -
> -	if (!device)
> -		return -EINVAL;
> -
> -	quickstart = acpi_driver_data(device);
> -	if (!quickstart)
> -		return -EINVAL;
> -
> -	status = acpi_remove_notify_handler(device->handle, ACPI_ALL_NOTIFY,
> -						quickstart_acpi_notify);
> -	if (ACPI_FAILURE(status))
> -		pr_err("Error removing notify handler\n");
> -
> -	kfree(quickstart);
> -
> -	return 0;
> -}
> -
> -/* Platform driver structs */
> -static DEVICE_ATTR_RW(pressed_button);
> -static DEVICE_ATTR_RO(buttons);
> -static struct platform_device *pf_device;
> -static struct platform_driver pf_driver = {
> -	.driver = {
> -		.name = QUICKSTART_PF_DRIVER_NAME,
> -		.owner = THIS_MODULE,
> -	}
> -};
> -
> -static const struct acpi_device_id quickstart_device_ids[] = {
> -	{QUICKSTART_ACPI_HID, 0},
> -	{"", 0},
> -};
> -
> -static struct acpi_driver quickstart_acpi_driver = {
> -	.name = "quickstart",
> -	.class = QUICKSTART_ACPI_CLASS,
> -	.ids = quickstart_device_ids,
> -	.ops = {
> -			.add = quickstart_acpi_add,
> -			.remove = quickstart_acpi_remove,
> -		},
> -};
> -
> -/* Module functions */
> -static void quickstart_exit(void)
> -{
> -	input_unregister_device(quickstart_input);
> -
> -	device_remove_file(&pf_device->dev, &dev_attr_pressed_button);
> -	device_remove_file(&pf_device->dev, &dev_attr_buttons);
> -
> -	platform_device_unregister(pf_device);
> -
> -	platform_driver_unregister(&pf_driver);
> -
> -	acpi_bus_unregister_driver(&quickstart_acpi_driver);
> -
> -	quickstart_buttons_free();
> -}
> -
> -static int __init quickstart_init_input(void)
> -{
> -	struct quickstart_button *b;
> -	int ret;
> -
> -	quickstart_input = input_allocate_device();
> -
> -	if (!quickstart_input)
> -		return -ENOMEM;
> -
> -	quickstart_input->name = "Quickstart ACPI Buttons";
> -	quickstart_input->id.bustype = BUS_HOST;
> -
> -	list_for_each_entry(b, &buttons, list) {
> -		set_bit(EV_KEY, quickstart_input->evbit);
> -		set_bit(b->id, quickstart_input->keybit);
> -	}
> -
> -	ret = input_register_device(quickstart_input);
> -	if (ret) {
> -		input_free_device(quickstart_input);
> -		return ret;
> -	}
> -
> -	return 0;
> -}
> -
> -static int __init quickstart_init(void)
> -{
> -	int ret;
> -
> -	/* ACPI driver register */
> -	ret = acpi_bus_register_driver(&quickstart_acpi_driver);
> -	if (ret)
> -		return ret;
> -
> -	/* If existing bus with no devices */
> -	if (list_empty(&buttons)) {
> -		ret = -ENODEV;
> -		goto fail_pfdrv_reg;
> -	}
> -
> -	/* Platform driver register */
> -	ret = platform_driver_register(&pf_driver);
> -	if (ret)
> -		goto fail_pfdrv_reg;
> -
> -	/* Platform device register */
> -	pf_device = platform_device_alloc(QUICKSTART_PF_DEVICE_NAME, -1);
> -	if (!pf_device) {
> -		ret = -ENOMEM;
> -		goto fail_pfdev_alloc;
> -	}
> -	ret = platform_device_add(pf_device);
> -	if (ret)
> -		goto fail_pfdev_add;
> -
> -	/* Create device sysfs file */
> -	ret = device_create_file(&pf_device->dev, &dev_attr_pressed_button);
> -	if (ret)
> -		goto fail_dev_file;
> -
> -	ret = device_create_file(&pf_device->dev, &dev_attr_buttons);
> -	if (ret)
> -		goto fail_dev_file2;
> -
> -	/* Input device */
> -	ret = quickstart_init_input();
> -	if (ret)
> -		goto fail_input;
> -
> -	pr_info("ACPI Direct App Launch ver %s\n", QUICKSTART_VERSION);
> -
> -	return 0;
> -fail_input:
> -	device_remove_file(&pf_device->dev, &dev_attr_buttons);
> -
> -fail_dev_file2:
> -	device_remove_file(&pf_device->dev, &dev_attr_pressed_button);
> -
> -fail_dev_file:
> -	platform_device_del(pf_device);
> -
> -fail_pfdev_add:
> -	platform_device_put(pf_device);
> -
> -fail_pfdev_alloc:
> -	platform_driver_unregister(&pf_driver);
> -
> -fail_pfdrv_reg:
> -	acpi_bus_unregister_driver(&quickstart_acpi_driver);
> -
> -	return ret;
> -}
> -
> -module_init(quickstart_init);
> -module_exit(quickstart_exit);



_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel





[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux