diff options
Diffstat (limited to 'drivers/input/misc')
| -rw-r--r-- | drivers/input/misc/88pm860x_onkey.c | 1 | ||||
| -rw-r--r-- | drivers/input/misc/Kconfig | 11 | ||||
| -rw-r--r-- | drivers/input/misc/Makefile | 1 | ||||
| -rw-r--r-- | drivers/input/misc/ati_remote.c | 14 | ||||
| -rw-r--r-- | drivers/input/misc/ati_remote2.c | 15 | ||||
| -rw-r--r-- | drivers/input/misc/bfin_rotary.c | 1 | ||||
| -rw-r--r-- | drivers/input/misc/cobalt_btns.c | 1 | ||||
| -rw-r--r-- | drivers/input/misc/dm355evm_keys.c | 1 | ||||
| -rw-r--r-- | drivers/input/misc/pcap_keys.c | 1 | ||||
| -rw-r--r-- | drivers/input/misc/pcf50633-input.c | 1 | ||||
| -rw-r--r-- | drivers/input/misc/rotary_encoder.c | 1 | ||||
| -rw-r--r-- | drivers/input/misc/sgi_btns.c | 1 | ||||
| -rw-r--r-- | drivers/input/misc/sparcspkr.c | 1 | ||||
| -rw-r--r-- | drivers/input/misc/twl4030-vibra.c | 298 | ||||
| -rw-r--r-- | drivers/input/misc/winbond-cir.c | 13 | ||||
| -rw-r--r-- | drivers/input/misc/wistron_btns.c | 1 | ||||
| -rw-r--r-- | drivers/input/misc/wm831x-on.c | 10 | ||||
| -rw-r--r-- | drivers/input/misc/yealink.h | 2 | 
18 files changed, 350 insertions, 24 deletions
diff --git a/drivers/input/misc/88pm860x_onkey.c b/drivers/input/misc/88pm860x_onkey.c index 69a48e8701b..40dabd8487b 100644 --- a/drivers/input/misc/88pm860x_onkey.c +++ b/drivers/input/misc/88pm860x_onkey.c @@ -25,6 +25,7 @@  #include <linux/input.h>  #include <linux/interrupt.h>  #include <linux/mfd/88pm860x.h> +#include <linux/slab.h>  #define PM8607_WAKEUP		0x0b diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index 7097bfe581d..23140a3bb8e 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig @@ -214,6 +214,17 @@ config INPUT_TWL4030_PWRBUTTON  	  To compile this driver as a module, choose M here. The module will  	  be called twl4030_pwrbutton. +config INPUT_TWL4030_VIBRA +	tristate "Support for TWL4030 Vibrator" +	depends on TWL4030_CORE +	select TWL4030_CODEC +	select INPUT_FF_MEMLESS +	help +	  This option enables support for TWL4030 Vibrator Driver. + +	  To compile this driver as a module, choose M here. The module will +	  be called twl4030_vibra. +  config INPUT_UINPUT  	tristate "User level driver support"  	help diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile index b611615e24a..7e95a5d474d 100644 --- a/drivers/input/misc/Makefile +++ b/drivers/input/misc/Makefile @@ -26,6 +26,7 @@ obj-$(CONFIG_INPUT_GPIO_ROTARY_ENCODER)	+= rotary_encoder.o  obj-$(CONFIG_INPUT_SGI_BTNS)		+= sgi_btns.o  obj-$(CONFIG_INPUT_SPARCSPKR)		+= sparcspkr.o  obj-$(CONFIG_INPUT_TWL4030_PWRBUTTON)	+= twl4030-pwrbutton.o +obj-$(CONFIG_INPUT_TWL4030_VIBRA)	+= twl4030-vibra.o  obj-$(CONFIG_INPUT_UINPUT)		+= uinput.o  obj-$(CONFIG_INPUT_WINBOND_CIR)		+= winbond-cir.o  obj-$(CONFIG_INPUT_WISTRON_BTNS)	+= wistron_btns.o diff --git a/drivers/input/misc/ati_remote.c b/drivers/input/misc/ati_remote.c index 614b65d78fe..e8bbc619f6d 100644 --- a/drivers/input/misc/ati_remote.c +++ b/drivers/input/misc/ati_remote.c @@ -98,10 +98,12 @@   * Module and Version Information, Module Parameters   */ -#define ATI_REMOTE_VENDOR_ID	0x0bc7 -#define ATI_REMOTE_PRODUCT_ID	0x004 -#define LOLA_REMOTE_PRODUCT_ID	0x002 -#define MEDION_REMOTE_PRODUCT_ID 0x006 +#define ATI_REMOTE_VENDOR_ID		0x0bc7 +#define LOLA_REMOTE_PRODUCT_ID		0x0002 +#define LOLA2_REMOTE_PRODUCT_ID		0x0003 +#define ATI_REMOTE_PRODUCT_ID		0x0004 +#define NVIDIA_REMOTE_PRODUCT_ID	0x0005 +#define MEDION_REMOTE_PRODUCT_ID	0x0006  #define DRIVER_VERSION	        "2.2.1"  #define DRIVER_AUTHOR           "Torrey Hoffman <thoffman@arnor.net>" @@ -142,8 +144,10 @@ MODULE_PARM_DESC(repeat_delay, "Delay before sending repeats, default = 500 msec  #define err(format, arg...) printk(KERN_ERR format , ## arg)  static struct usb_device_id ati_remote_table[] = { -	{ USB_DEVICE(ATI_REMOTE_VENDOR_ID, ATI_REMOTE_PRODUCT_ID) },  	{ USB_DEVICE(ATI_REMOTE_VENDOR_ID, LOLA_REMOTE_PRODUCT_ID) }, +	{ USB_DEVICE(ATI_REMOTE_VENDOR_ID, LOLA2_REMOTE_PRODUCT_ID) }, +	{ USB_DEVICE(ATI_REMOTE_VENDOR_ID, ATI_REMOTE_PRODUCT_ID) }, +	{ USB_DEVICE(ATI_REMOTE_VENDOR_ID, NVIDIA_REMOTE_PRODUCT_ID) },  	{ USB_DEVICE(ATI_REMOTE_VENDOR_ID, MEDION_REMOTE_PRODUCT_ID) },  	{}	/* Terminating entry */  }; diff --git a/drivers/input/misc/ati_remote2.c b/drivers/input/misc/ati_remote2.c index 0501f0e6515..2124b99378b 100644 --- a/drivers/input/misc/ati_remote2.c +++ b/drivers/input/misc/ati_remote2.c @@ -10,6 +10,7 @@   */  #include <linux/usb/input.h> +#include <linux/slab.h>  #define DRIVER_DESC    "ATI/Philips USB RF remote driver"  #define DRIVER_VERSION "0.3" @@ -474,10 +475,11 @@ static void ati_remote2_complete_key(struct urb *urb)  }  static int ati_remote2_getkeycode(struct input_dev *idev, -				  int scancode, int *keycode) +				  unsigned int scancode, unsigned int *keycode)  {  	struct ati_remote2 *ar2 = input_get_drvdata(idev); -	int index, mode; +	unsigned int mode; +	int index;  	mode = scancode >> 8;  	if (mode > ATI_REMOTE2_PC || !((1 << mode) & ar2->mode_mask)) @@ -491,10 +493,12 @@ static int ati_remote2_getkeycode(struct input_dev *idev,  	return 0;  } -static int ati_remote2_setkeycode(struct input_dev *idev, int scancode, int keycode) +static int ati_remote2_setkeycode(struct input_dev *idev, +				  unsigned int scancode, unsigned int keycode)  {  	struct ati_remote2 *ar2 = input_get_drvdata(idev); -	int index, mode, old_keycode; +	unsigned int mode, old_keycode; +	int index;  	mode = scancode >> 8;  	if (mode > ATI_REMOTE2_PC || !((1 << mode) & ar2->mode_mask)) @@ -504,9 +508,6 @@ static int ati_remote2_setkeycode(struct input_dev *idev, int scancode, int keyc  	if (index < 0)  		return -EINVAL; -	if (keycode < KEY_RESERVED || keycode > KEY_MAX) -		return -EINVAL; -  	old_keycode = ar2->keycode[mode][index];  	ar2->keycode[mode][index] = keycode;  	__set_bit(keycode, idev->keybit); diff --git a/drivers/input/misc/bfin_rotary.c b/drivers/input/misc/bfin_rotary.c index 61d10177fa8..4f72bdd6941 100644 --- a/drivers/input/misc/bfin_rotary.c +++ b/drivers/input/misc/bfin_rotary.c @@ -13,6 +13,7 @@  #include <linux/pm.h>  #include <linux/platform_device.h>  #include <linux/input.h> +#include <linux/slab.h>  #include <asm/portmux.h>  #include <asm/bfin_rotary.h> diff --git a/drivers/input/misc/cobalt_btns.c b/drivers/input/misc/cobalt_btns.c index ee73d7219c9..fd8407a2963 100644 --- a/drivers/input/misc/cobalt_btns.c +++ b/drivers/input/misc/cobalt_btns.c @@ -22,6 +22,7 @@  #include <linux/ioport.h>  #include <linux/module.h>  #include <linux/platform_device.h> +#include <linux/slab.h>  #define BUTTONS_POLL_INTERVAL	30	/* msec */  #define BUTTONS_COUNT_THRESHOLD	3 diff --git a/drivers/input/misc/dm355evm_keys.c b/drivers/input/misc/dm355evm_keys.c index 766c06911f4..19af682c24f 100644 --- a/drivers/input/misc/dm355evm_keys.c +++ b/drivers/input/misc/dm355evm_keys.c @@ -10,6 +10,7 @@   */  #include <linux/kernel.h>  #include <linux/init.h> +#include <linux/slab.h>  #include <linux/input.h>  #include <linux/input/sparse-keymap.h>  #include <linux/platform_device.h> diff --git a/drivers/input/misc/pcap_keys.c b/drivers/input/misc/pcap_keys.c index 7ea969347ca..99335c28625 100644 --- a/drivers/input/misc/pcap_keys.c +++ b/drivers/input/misc/pcap_keys.c @@ -17,6 +17,7 @@  #include <linux/platform_device.h>  #include <linux/input.h>  #include <linux/mfd/ezx-pcap.h> +#include <linux/slab.h>  struct pcap_keys {  	struct pcap_chip *pcap; diff --git a/drivers/input/misc/pcf50633-input.c b/drivers/input/misc/pcf50633-input.c index 008de0c5834..95562735728 100644 --- a/drivers/input/misc/pcf50633-input.c +++ b/drivers/input/misc/pcf50633-input.c @@ -20,6 +20,7 @@  #include <linux/device.h>  #include <linux/platform_device.h>  #include <linux/input.h> +#include <linux/slab.h>  #include <linux/mfd/pcf50633/core.h> diff --git a/drivers/input/misc/rotary_encoder.c b/drivers/input/misc/rotary_encoder.c index 4ae07935985..1f8e0108962 100644 --- a/drivers/input/misc/rotary_encoder.c +++ b/drivers/input/misc/rotary_encoder.c @@ -22,6 +22,7 @@  #include <linux/platform_device.h>  #include <linux/gpio.h>  #include <linux/rotary_encoder.h> +#include <linux/slab.h>  #define DRV_NAME "rotary-encoder" diff --git a/drivers/input/misc/sgi_btns.c b/drivers/input/misc/sgi_btns.c index be3a15f5b25..1a80c0dab83 100644 --- a/drivers/input/misc/sgi_btns.c +++ b/drivers/input/misc/sgi_btns.c @@ -22,6 +22,7 @@  #include <linux/ioport.h>  #include <linux/module.h>  #include <linux/platform_device.h> +#include <linux/slab.h>  #ifdef CONFIG_SGI_IP22  #include <asm/sgi/ioc.h> diff --git a/drivers/input/misc/sparcspkr.c b/drivers/input/misc/sparcspkr.c index b064419b90a..0d45422f809 100644 --- a/drivers/input/misc/sparcspkr.c +++ b/drivers/input/misc/sparcspkr.c @@ -9,6 +9,7 @@  #include <linux/init.h>  #include <linux/input.h>  #include <linux/of_device.h> +#include <linux/slab.h>  #include <asm/io.h> diff --git a/drivers/input/misc/twl4030-vibra.c b/drivers/input/misc/twl4030-vibra.c new file mode 100644 index 00000000000..fee9eac8e04 --- /dev/null +++ b/drivers/input/misc/twl4030-vibra.c @@ -0,0 +1,298 @@ +/* + * twl4030-vibra.c - TWL4030 Vibrator driver + * + * Copyright (C) 2008-2010 Nokia Corporation + * + * Written by Henrik Saari <henrik.saari@nokia.com> + * Updates by Felipe Balbi <felipe.balbi@nokia.com> + * Input by Jari Vanhala <ext-jari.vanhala@nokia.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 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., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + */ + +#include <linux/module.h> +#include <linux/jiffies.h> +#include <linux/platform_device.h> +#include <linux/workqueue.h> +#include <linux/i2c/twl.h> +#include <linux/mfd/twl4030-codec.h> +#include <linux/input.h> +#include <linux/slab.h> + +/* MODULE ID2 */ +#define LEDEN		0x00 + +/* ForceFeedback */ +#define EFFECT_DIR_180_DEG	0x8000 /* range is 0 - 0xFFFF */ + +struct vibra_info { +	struct device		*dev; +	struct input_dev	*input_dev; + +	struct workqueue_struct *workqueue; +	struct work_struct	play_work; + +	bool			enabled; +	int			speed; +	int			direction; + +	bool			coexist; +}; + +static void vibra_disable_leds(void) +{ +	u8 reg; + +	/* Disable LEDA & LEDB, cannot be used with vibra (PWM) */ +	twl_i2c_read_u8(TWL4030_MODULE_LED, ®, LEDEN); +	reg &= ~0x03; +	twl_i2c_write_u8(TWL4030_MODULE_LED, LEDEN, reg); +} + +/* Powers H-Bridge and enables audio clk */ +static void vibra_enable(struct vibra_info *info) +{ +	u8 reg; + +	twl4030_codec_enable_resource(TWL4030_CODEC_RES_POWER); + +	/* turn H-Bridge on */ +	twl_i2c_read_u8(TWL4030_MODULE_AUDIO_VOICE, +			®, TWL4030_REG_VIBRA_CTL); +	twl_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, +			 (reg | TWL4030_VIBRA_EN), TWL4030_REG_VIBRA_CTL); + +	twl4030_codec_enable_resource(TWL4030_CODEC_RES_APLL); + +	info->enabled = true; +} + +static void vibra_disable(struct vibra_info *info) +{ +	u8 reg; + +	/* Power down H-Bridge */ +	twl_i2c_read_u8(TWL4030_MODULE_AUDIO_VOICE, +			®, TWL4030_REG_VIBRA_CTL); +	twl_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, +			 (reg & ~TWL4030_VIBRA_EN), TWL4030_REG_VIBRA_CTL); + +	twl4030_codec_disable_resource(TWL4030_CODEC_RES_POWER); +	twl4030_codec_disable_resource(TWL4030_CODEC_RES_APLL); + +	info->enabled = false; +} + +static void vibra_play_work(struct work_struct *work) +{ +	struct vibra_info *info = container_of(work, +			struct vibra_info, play_work); +	int dir; +	int pwm; +	u8 reg; + +	dir = info->direction; +	pwm = info->speed; + +	twl_i2c_read_u8(TWL4030_MODULE_AUDIO_VOICE, +			®, TWL4030_REG_VIBRA_CTL); +	if (pwm && (!info->coexist || !(reg & TWL4030_VIBRA_SEL))) { + +		if (!info->enabled) +			vibra_enable(info); + +		/* set vibra rotation direction */ +		twl_i2c_read_u8(TWL4030_MODULE_AUDIO_VOICE, +				®, TWL4030_REG_VIBRA_CTL); +		reg = (dir) ? (reg | TWL4030_VIBRA_DIR) : +			(reg & ~TWL4030_VIBRA_DIR); +		twl_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, +				 reg, TWL4030_REG_VIBRA_CTL); + +		/* set PWM, 1 = max, 255 = min */ +		twl_i2c_write_u8(TWL4030_MODULE_AUDIO_VOICE, +				 256 - pwm, TWL4030_REG_VIBRA_SET); +	} else { +		if (info->enabled) +			vibra_disable(info); +	} +} + +/*** Input/ForceFeedback ***/ + +static int vibra_play(struct input_dev *input, void *data, +		      struct ff_effect *effect) +{ +	struct vibra_info *info = input_get_drvdata(input); + +	info->speed = effect->u.rumble.strong_magnitude >> 8; +	if (!info->speed) +		info->speed = effect->u.rumble.weak_magnitude >> 9; +	info->direction = effect->direction < EFFECT_DIR_180_DEG ? 0 : 1; +	queue_work(info->workqueue, &info->play_work); +	return 0; +} + +static int twl4030_vibra_open(struct input_dev *input) +{ +	struct vibra_info *info = input_get_drvdata(input); + +	info->workqueue = create_singlethread_workqueue("vibra"); +	if (info->workqueue == NULL) { +		dev_err(&input->dev, "couldn't create workqueue\n"); +		return -ENOMEM; +	} +	return 0; +} + +static void twl4030_vibra_close(struct input_dev *input) +{ +	struct vibra_info *info = input_get_drvdata(input); + +	cancel_work_sync(&info->play_work); +	INIT_WORK(&info->play_work, vibra_play_work); /* cleanup */ +	destroy_workqueue(info->workqueue); +	info->workqueue = NULL; + +	if (info->enabled) +		vibra_disable(info); +} + +/*** Module ***/ +#if CONFIG_PM +static int twl4030_vibra_suspend(struct device *dev) +{ +	struct platform_device *pdev = to_platform_device(dev); +	struct vibra_info *info = platform_get_drvdata(pdev); + +	if (info->enabled) +		vibra_disable(info); + +	return 0; +} + +static int twl4030_vibra_resume(struct device *dev) +{ +	vibra_disable_leds(); +	return 0; +} + +static SIMPLE_DEV_PM_OPS(twl4030_vibra_pm_ops, +			 twl4030_vibra_suspend, twl4030_vibra_resume); +#endif + +static int __devinit twl4030_vibra_probe(struct platform_device *pdev) +{ +	struct twl4030_codec_vibra_data *pdata = pdev->dev.platform_data; +	struct vibra_info *info; +	int ret; + +	if (!pdata) { +		dev_dbg(&pdev->dev, "platform_data not available\n"); +		return -EINVAL; +	} + +	info = kzalloc(sizeof(*info), GFP_KERNEL); +	if (!info) +		return -ENOMEM; + +	info->dev = &pdev->dev; +	info->coexist = pdata->coexist; +	INIT_WORK(&info->play_work, vibra_play_work); + +	info->input_dev = input_allocate_device(); +	if (info->input_dev == NULL) { +		dev_err(&pdev->dev, "couldn't allocate input device\n"); +		ret = -ENOMEM; +		goto err_kzalloc; +	} + +	input_set_drvdata(info->input_dev, info); + +	info->input_dev->name = "twl4030:vibrator"; +	info->input_dev->id.version = 1; +	info->input_dev->dev.parent = pdev->dev.parent; +	info->input_dev->open = twl4030_vibra_open; +	info->input_dev->close = twl4030_vibra_close; +	__set_bit(FF_RUMBLE, info->input_dev->ffbit); + +	ret = input_ff_create_memless(info->input_dev, NULL, vibra_play); +	if (ret < 0) { +		dev_dbg(&pdev->dev, "couldn't register vibrator to FF\n"); +		goto err_ialloc; +	} + +	ret = input_register_device(info->input_dev); +	if (ret < 0) { +		dev_dbg(&pdev->dev, "couldn't register input device\n"); +		goto err_iff; +	} + +	vibra_disable_leds(); + +	platform_set_drvdata(pdev, info); +	return 0; + +err_iff: +	input_ff_destroy(info->input_dev); +err_ialloc: +	input_free_device(info->input_dev); +err_kzalloc: +	kfree(info); +	return ret; +} + +static int __devexit twl4030_vibra_remove(struct platform_device *pdev) +{ +	struct vibra_info *info = platform_get_drvdata(pdev); + +	/* this also free ff-memless and calls close if needed */ +	input_unregister_device(info->input_dev); +	kfree(info); +	platform_set_drvdata(pdev, NULL); + +	return 0; +} + +static struct platform_driver twl4030_vibra_driver = { +	.probe		= twl4030_vibra_probe, +	.remove		= __devexit_p(twl4030_vibra_remove), +	.driver		= { +		.name	= "twl4030_codec_vibra", +		.owner	= THIS_MODULE, +#ifdef CONFIG_PM +		.pm	= &twl4030_vibra_pm_ops, +#endif +	}, +}; + +static int __init twl4030_vibra_init(void) +{ +	return platform_driver_register(&twl4030_vibra_driver); +} +module_init(twl4030_vibra_init); + +static void __exit twl4030_vibra_exit(void) +{ +	platform_driver_unregister(&twl4030_vibra_driver); +} +module_exit(twl4030_vibra_exit); + +MODULE_ALIAS("platform:twl4030_codec_vibra"); + +MODULE_DESCRIPTION("TWL4030 Vibra driver"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Nokia Corporation"); diff --git a/drivers/input/misc/winbond-cir.c b/drivers/input/misc/winbond-cir.c index cbec3dfdd42..64f1de7960c 100644 --- a/drivers/input/misc/winbond-cir.c +++ b/drivers/input/misc/winbond-cir.c @@ -56,6 +56,7 @@  #include <linux/io.h>  #include <linux/bitrev.h>  #include <linux/bitops.h> +#include <linux/slab.h>  #define DRVNAME "winbond-cir" @@ -385,26 +386,24 @@ wbcir_do_getkeycode(struct wbcir_data *data, u32 scancode)  }  static int -wbcir_getkeycode(struct input_dev *dev, int scancode, int *keycode) +wbcir_getkeycode(struct input_dev *dev, +		 unsigned int scancode, unsigned int *keycode)  {  	struct wbcir_data *data = input_get_drvdata(dev); -	*keycode = (int)wbcir_do_getkeycode(data, (u32)scancode); +	*keycode = wbcir_do_getkeycode(data, scancode);  	return 0;  }  static int -wbcir_setkeycode(struct input_dev *dev, int sscancode, int keycode) +wbcir_setkeycode(struct input_dev *dev, +		 unsigned int scancode, unsigned int keycode)  {  	struct wbcir_data *data = input_get_drvdata(dev);  	struct wbcir_keyentry *keyentry;  	struct wbcir_keyentry *new_keyentry;  	unsigned long flags;  	unsigned int old_keycode = KEY_RESERVED; -	u32 scancode = (u32)sscancode; - -	if (keycode < 0 || keycode > KEY_MAX) -		return -EINVAL;  	new_keyentry = kmalloc(sizeof(*new_keyentry), GFP_KERNEL);  	if (!new_keyentry) diff --git a/drivers/input/misc/wistron_btns.c b/drivers/input/misc/wistron_btns.c index c0afb71a3a6..04d5a4a3181 100644 --- a/drivers/input/misc/wistron_btns.c +++ b/drivers/input/misc/wistron_btns.c @@ -29,6 +29,7 @@  #include <linux/module.h>  #include <linux/preempt.h>  #include <linux/string.h> +#include <linux/slab.h>  #include <linux/types.h>  #include <linux/platform_device.h>  #include <linux/leds.h> diff --git a/drivers/input/misc/wm831x-on.c b/drivers/input/misc/wm831x-on.c index ba4f5dd7c60..c3d7ba5f5b4 100644 --- a/drivers/input/misc/wm831x-on.c +++ b/drivers/input/misc/wm831x-on.c @@ -19,6 +19,7 @@  #include <linux/module.h>  #include <linux/init.h> +#include <linux/slab.h>  #include <linux/kernel.h>  #include <linux/errno.h>  #include <linux/input.h> @@ -97,8 +98,9 @@ static int __devinit wm831x_on_probe(struct platform_device *pdev)  	wm831x_on->dev->phys = "wm831x_on/input0";  	wm831x_on->dev->dev.parent = &pdev->dev; -	ret = wm831x_request_irq(wm831x, irq, wm831x_on_irq, -				 IRQF_TRIGGER_RISING, "wm831x_on", wm831x_on); +	ret = request_threaded_irq(irq, NULL, wm831x_on_irq, +				   IRQF_TRIGGER_RISING, "wm831x_on", +				   wm831x_on);  	if (ret < 0) {  		dev_err(&pdev->dev, "Unable to request IRQ: %d\n", ret);  		goto err_input_dev; @@ -114,7 +116,7 @@ static int __devinit wm831x_on_probe(struct platform_device *pdev)  	return 0;  err_irq: -	wm831x_free_irq(wm831x, irq, NULL); +	free_irq(irq, wm831x_on);  err_input_dev:  	input_free_device(wm831x_on->dev);  err: @@ -127,7 +129,7 @@ static int __devexit wm831x_on_remove(struct platform_device *pdev)  	struct wm831x_on *wm831x_on = platform_get_drvdata(pdev);  	int irq = platform_get_irq(pdev, 0); -	wm831x_free_irq(wm831x_on->wm831x, irq, wm831x_on); +	free_irq(irq, wm831x_on);  	cancel_delayed_work_sync(&wm831x_on->work);  	input_unregister_device(wm831x_on->dev);  	kfree(wm831x_on); diff --git a/drivers/input/misc/yealink.h b/drivers/input/misc/yealink.h index 48af0be9cbd..1e0f5239701 100644 --- a/drivers/input/misc/yealink.h +++ b/drivers/input/misc/yealink.h @@ -127,7 +127,7 @@ struct yld_ctl_packet {   * yld_status struct.   */ -/* LCD, each segment must be driven seperately. +/* LCD, each segment must be driven separately.   *   * Layout:   *  |