diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-10 13:55:52 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-10 13:55:52 -0500 |
| commit | dbe950f201a8edd353b0bd9079e8d536ee4ce37c (patch) | |
| tree | dffbada6b3d33cc67383758570de22b4f45693b6 /drivers/input/misc | |
| parent | f62f61917d72c1fb0101ad405664f6fc868d676b (diff) | |
| parent | da733563be5a9da26fe81d9f007262d00b846e22 (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (64 commits)
Input: tc3589x-keypad - add missing kerneldoc
Input: ucb1400-ts - switch to using dev_xxx() for diagnostic messages
Input: ucb1400_ts - convert to threaded IRQ
Input: ucb1400_ts - drop inline annotations
Input: usb1400_ts - add __devinit/__devexit section annotations
Input: ucb1400_ts - set driver owner
Input: ucb1400_ts - convert to use dev_pm_ops
Input: psmouse - make sure we do not use stale methods
Input: evdev - do not block waiting for an event if fd is nonblock
Input: evdev - if no events and non-block, return EAGAIN not 0
Input: evdev - only allow reading events if a full packet is present
Input: add driver for pixcir i2c touchscreens
Input: samsung-keypad - implement runtime power management support
Input: tegra-kbc - report wakeup key for some platforms
Input: tegra-kbc - add device tree bindings
Input: add driver for AUO In-Cell touchscreens using pixcir ICs
Input: mpu3050 - configure the sampling method
Input: mpu3050 - ensure we enable interrupts
Input: mpu3050 - add of_match table for device-tree probing
Input: sentelic - document the latest hardware
...
Fix up fairly trivial conflicts (device tree matching conflicting with
some independent cleanups) in drivers/input/keyboard/samsung-keypad.c
Diffstat (limited to 'drivers/input/misc')
29 files changed, 703 insertions, 282 deletions
diff --git a/drivers/input/misc/88pm860x_onkey.c b/drivers/input/misc/88pm860x_onkey.c index 3dca3c14510e..f2e0cbc5ab64 100644 --- a/drivers/input/misc/88pm860x_onkey.c +++ b/drivers/input/misc/88pm860x_onkey.c | |||
| @@ -137,18 +137,7 @@ static struct platform_driver pm860x_onkey_driver = { | |||
| 137 | .probe = pm860x_onkey_probe, | 137 | .probe = pm860x_onkey_probe, |
| 138 | .remove = __devexit_p(pm860x_onkey_remove), | 138 | .remove = __devexit_p(pm860x_onkey_remove), |
| 139 | }; | 139 | }; |
| 140 | 140 | module_platform_driver(pm860x_onkey_driver); | |
| 141 | static int __init pm860x_onkey_init(void) | ||
| 142 | { | ||
| 143 | return platform_driver_register(&pm860x_onkey_driver); | ||
| 144 | } | ||
| 145 | module_init(pm860x_onkey_init); | ||
| 146 | |||
| 147 | static void __exit pm860x_onkey_exit(void) | ||
| 148 | { | ||
| 149 | platform_driver_unregister(&pm860x_onkey_driver); | ||
| 150 | } | ||
| 151 | module_exit(pm860x_onkey_exit); | ||
| 152 | 141 | ||
| 153 | MODULE_DESCRIPTION("Marvell 88PM860x ONKEY driver"); | 142 | MODULE_DESCRIPTION("Marvell 88PM860x ONKEY driver"); |
| 154 | MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com>"); | 143 | MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com>"); |
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index 22d875fde53a..7b46781c30c9 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig | |||
| @@ -179,6 +179,31 @@ config INPUT_APANEL | |||
| 179 | To compile this driver as a module, choose M here: the module will | 179 | To compile this driver as a module, choose M here: the module will |
| 180 | be called apanel. | 180 | be called apanel. |
| 181 | 181 | ||
| 182 | config INPUT_GP2A | ||
| 183 | tristate "Sharp GP2AP002A00F I2C Proximity/Opto sensor driver" | ||
| 184 | depends on I2C | ||
| 185 | depends on GENERIC_GPIO | ||
| 186 | help | ||
| 187 | Say Y here if you have a Sharp GP2AP002A00F proximity/als combo-chip | ||
| 188 | hooked to an I2C bus. | ||
| 189 | |||
| 190 | To compile this driver as a module, choose M here: the | ||
| 191 | module will be called gp2ap002a00f. | ||
| 192 | |||
| 193 | config INPUT_GPIO_TILT_POLLED | ||
| 194 | tristate "Polled GPIO tilt switch" | ||
| 195 | depends on GENERIC_GPIO | ||
| 196 | select INPUT_POLLDEV | ||
| 197 | help | ||
| 198 | This driver implements support for tilt switches connected | ||
| 199 | to GPIO pins that are not capable of generating interrupts. | ||
| 200 | |||
| 201 | The list of gpios to use and the mapping of their states | ||
| 202 | to specific angles is done via platform data. | ||
| 203 | |||
| 204 | To compile this driver as a module, choose M here: the | ||
| 205 | module will be called gpio_tilt_polled. | ||
| 206 | |||
| 182 | config INPUT_IXP4XX_BEEPER | 207 | config INPUT_IXP4XX_BEEPER |
| 183 | tristate "IXP4XX Beeper support" | 208 | tristate "IXP4XX Beeper support" |
| 184 | depends on ARCH_IXP4XX | 209 | depends on ARCH_IXP4XX |
diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile index a244fc6a781c..46671a875b91 100644 --- a/drivers/input/misc/Makefile +++ b/drivers/input/misc/Makefile | |||
| @@ -22,6 +22,8 @@ obj-$(CONFIG_INPUT_CMA3000) += cma3000_d0x.o | |||
| 22 | obj-$(CONFIG_INPUT_CMA3000_I2C) += cma3000_d0x_i2c.o | 22 | obj-$(CONFIG_INPUT_CMA3000_I2C) += cma3000_d0x_i2c.o |
| 23 | obj-$(CONFIG_INPUT_COBALT_BTNS) += cobalt_btns.o | 23 | obj-$(CONFIG_INPUT_COBALT_BTNS) += cobalt_btns.o |
| 24 | obj-$(CONFIG_INPUT_DM355EVM) += dm355evm_keys.o | 24 | obj-$(CONFIG_INPUT_DM355EVM) += dm355evm_keys.o |
| 25 | obj-$(CONFIG_INPUT_GP2A) += gp2ap002a00f.o | ||
| 26 | obj-$(CONFIG_INPUT_GPIO_TILT_POLLED) += gpio_tilt_polled.o | ||
| 25 | obj-$(CONFIG_HP_SDC_RTC) += hp_sdc_rtc.o | 27 | obj-$(CONFIG_HP_SDC_RTC) += hp_sdc_rtc.o |
| 26 | obj-$(CONFIG_INPUT_IXP4XX_BEEPER) += ixp4xx-beeper.o | 28 | obj-$(CONFIG_INPUT_IXP4XX_BEEPER) += ixp4xx-beeper.o |
| 27 | obj-$(CONFIG_INPUT_KEYSPAN_REMOTE) += keyspan_remote.o | 29 | obj-$(CONFIG_INPUT_KEYSPAN_REMOTE) += keyspan_remote.o |
diff --git a/drivers/input/misc/ab8500-ponkey.c b/drivers/input/misc/ab8500-ponkey.c index 3d3288a78fdc..79d901633635 100644 --- a/drivers/input/misc/ab8500-ponkey.c +++ b/drivers/input/misc/ab8500-ponkey.c | |||
| @@ -139,18 +139,7 @@ static struct platform_driver ab8500_ponkey_driver = { | |||
| 139 | .probe = ab8500_ponkey_probe, | 139 | .probe = ab8500_ponkey_probe, |
| 140 | .remove = __devexit_p(ab8500_ponkey_remove), | 140 | .remove = __devexit_p(ab8500_ponkey_remove), |
| 141 | }; | 141 | }; |
| 142 | 142 | module_platform_driver(ab8500_ponkey_driver); | |
| 143 | static int __init ab8500_ponkey_init(void) | ||
| 144 | { | ||
| 145 | return platform_driver_register(&ab8500_ponkey_driver); | ||
| 146 | } | ||
| 147 | module_init(ab8500_ponkey_init); | ||
| 148 | |||
| 149 | static void __exit ab8500_ponkey_exit(void) | ||
| 150 | { | ||
| 151 | platform_driver_unregister(&ab8500_ponkey_driver); | ||
| 152 | } | ||
| 153 | module_exit(ab8500_ponkey_exit); | ||
| 154 | 143 | ||
| 155 | MODULE_LICENSE("GPL v2"); | 144 | MODULE_LICENSE("GPL v2"); |
| 156 | MODULE_AUTHOR("Sundar Iyer <sundar.iyer@stericsson.com>"); | 145 | MODULE_AUTHOR("Sundar Iyer <sundar.iyer@stericsson.com>"); |
diff --git a/drivers/input/misc/adxl34x-spi.c b/drivers/input/misc/adxl34x-spi.c index f29de22fdda0..34d401efd4a1 100644 --- a/drivers/input/misc/adxl34x-spi.c +++ b/drivers/input/misc/adxl34x-spi.c | |||
| @@ -122,7 +122,6 @@ static SIMPLE_DEV_PM_OPS(adxl34x_spi_pm, adxl34x_spi_suspend, | |||
| 122 | static struct spi_driver adxl34x_driver = { | 122 | static struct spi_driver adxl34x_driver = { |
| 123 | .driver = { | 123 | .driver = { |
| 124 | .name = "adxl34x", | 124 | .name = "adxl34x", |
| 125 | .bus = &spi_bus_type, | ||
| 126 | .owner = THIS_MODULE, | 125 | .owner = THIS_MODULE, |
| 127 | .pm = &adxl34x_spi_pm, | 126 | .pm = &adxl34x_spi_pm, |
| 128 | }, | 127 | }, |
diff --git a/drivers/input/misc/adxl34x.c b/drivers/input/misc/adxl34x.c index 09244804fb97..1cf72fe513e6 100644 --- a/drivers/input/misc/adxl34x.c +++ b/drivers/input/misc/adxl34x.c | |||
| @@ -452,10 +452,10 @@ static ssize_t adxl34x_disable_store(struct device *dev, | |||
| 452 | const char *buf, size_t count) | 452 | const char *buf, size_t count) |
| 453 | { | 453 | { |
| 454 | struct adxl34x *ac = dev_get_drvdata(dev); | 454 | struct adxl34x *ac = dev_get_drvdata(dev); |
| 455 | unsigned long val; | 455 | unsigned int val; |
| 456 | int error; | 456 | int error; |
| 457 | 457 | ||
| 458 | error = strict_strtoul(buf, 10, &val); | 458 | error = kstrtouint(buf, 10, &val); |
| 459 | if (error) | 459 | if (error) |
| 460 | return error; | 460 | return error; |
| 461 | 461 | ||
| @@ -541,10 +541,10 @@ static ssize_t adxl34x_rate_store(struct device *dev, | |||
| 541 | const char *buf, size_t count) | 541 | const char *buf, size_t count) |
| 542 | { | 542 | { |
| 543 | struct adxl34x *ac = dev_get_drvdata(dev); | 543 | struct adxl34x *ac = dev_get_drvdata(dev); |
| 544 | unsigned long val; | 544 | unsigned char val; |
| 545 | int error; | 545 | int error; |
| 546 | 546 | ||
| 547 | error = strict_strtoul(buf, 10, &val); | 547 | error = kstrtou8(buf, 10, &val); |
| 548 | if (error) | 548 | if (error) |
| 549 | return error; | 549 | return error; |
| 550 | 550 | ||
| @@ -576,10 +576,10 @@ static ssize_t adxl34x_autosleep_store(struct device *dev, | |||
| 576 | const char *buf, size_t count) | 576 | const char *buf, size_t count) |
| 577 | { | 577 | { |
| 578 | struct adxl34x *ac = dev_get_drvdata(dev); | 578 | struct adxl34x *ac = dev_get_drvdata(dev); |
| 579 | unsigned long val; | 579 | unsigned int val; |
| 580 | int error; | 580 | int error; |
| 581 | 581 | ||
| 582 | error = strict_strtoul(buf, 10, &val); | 582 | error = kstrtouint(buf, 10, &val); |
| 583 | if (error) | 583 | if (error) |
| 584 | return error; | 584 | return error; |
| 585 | 585 | ||
| @@ -623,13 +623,13 @@ static ssize_t adxl34x_write_store(struct device *dev, | |||
| 623 | const char *buf, size_t count) | 623 | const char *buf, size_t count) |
| 624 | { | 624 | { |
| 625 | struct adxl34x *ac = dev_get_drvdata(dev); | 625 | struct adxl34x *ac = dev_get_drvdata(dev); |
| 626 | unsigned long val; | 626 | unsigned int val; |
| 627 | int error; | 627 | int error; |
| 628 | 628 | ||
| 629 | /* | 629 | /* |
| 630 | * This allows basic ADXL register write access for debug purposes. | 630 | * This allows basic ADXL register write access for debug purposes. |
| 631 | */ | 631 | */ |
| 632 | error = strict_strtoul(buf, 16, &val); | 632 | error = kstrtouint(buf, 16, &val); |
| 633 | if (error) | 633 | if (error) |
| 634 | return error; | 634 | return error; |
| 635 | 635 | ||
diff --git a/drivers/input/misc/ati_remote2.c b/drivers/input/misc/ati_remote2.c index 874a51c2fbb2..f63341f20b91 100644 --- a/drivers/input/misc/ati_remote2.c +++ b/drivers/input/misc/ati_remote2.c | |||
| @@ -42,13 +42,13 @@ static int ati_remote2_set_mask(const char *val, | |||
| 42 | const struct kernel_param *kp, | 42 | const struct kernel_param *kp, |
| 43 | unsigned int max) | 43 | unsigned int max) |
| 44 | { | 44 | { |
| 45 | unsigned long mask; | 45 | unsigned int mask; |
| 46 | int ret; | 46 | int ret; |
| 47 | 47 | ||
| 48 | if (!val) | 48 | if (!val) |
| 49 | return -EINVAL; | 49 | return -EINVAL; |
| 50 | 50 | ||
| 51 | ret = strict_strtoul(val, 0, &mask); | 51 | ret = kstrtouint(val, 0, &mask); |
| 52 | if (ret) | 52 | if (ret) |
| 53 | return ret; | 53 | return ret; |
| 54 | 54 | ||
| @@ -720,11 +720,12 @@ static ssize_t ati_remote2_store_channel_mask(struct device *dev, | |||
| 720 | struct usb_device *udev = to_usb_device(dev); | 720 | struct usb_device *udev = to_usb_device(dev); |
| 721 | struct usb_interface *intf = usb_ifnum_to_if(udev, 0); | 721 | struct usb_interface *intf = usb_ifnum_to_if(udev, 0); |
| 722 | struct ati_remote2 *ar2 = usb_get_intfdata(intf); | 722 | struct ati_remote2 *ar2 = usb_get_intfdata(intf); |
| 723 | unsigned long mask; | 723 | unsigned int mask; |
| 724 | int r; | 724 | int r; |
| 725 | 725 | ||
| 726 | if (strict_strtoul(buf, 0, &mask)) | 726 | r = kstrtouint(buf, 0, &mask); |
| 727 | return -EINVAL; | 727 | if (r) |
| 728 | return r; | ||
| 728 | 729 | ||
| 729 | if (mask & ~ATI_REMOTE2_MAX_CHANNEL_MASK) | 730 | if (mask & ~ATI_REMOTE2_MAX_CHANNEL_MASK) |
| 730 | return -EINVAL; | 731 | return -EINVAL; |
| @@ -769,10 +770,12 @@ static ssize_t ati_remote2_store_mode_mask(struct device *dev, | |||
| 769 | struct usb_device *udev = to_usb_device(dev); | 770 | struct usb_device *udev = to_usb_device(dev); |
| 770 | struct usb_interface *intf = usb_ifnum_to_if(udev, 0); | 771 | struct usb_interface *intf = usb_ifnum_to_if(udev, 0); |
| 771 | struct ati_remote2 *ar2 = usb_get_intfdata(intf); | 772 | struct ati_remote2 *ar2 = usb_get_intfdata(intf); |
| 772 | unsigned long mask; | 773 | unsigned int mask; |
| 774 | int err; | ||
| 773 | 775 | ||
| 774 | if (strict_strtoul(buf, 0, &mask)) | 776 | err = kstrtouint(buf, 0, &mask); |
| 775 | return -EINVAL; | 777 | if (err) |
| 778 | return err; | ||
| 776 | 779 | ||
| 777 | if (mask & ~ATI_REMOTE2_MAX_MODE_MASK) | 780 | if (mask & ~ATI_REMOTE2_MAX_MODE_MASK) |
| 778 | return -EINVAL; | 781 | return -EINVAL; |
diff --git a/drivers/input/misc/bfin_rotary.c b/drivers/input/misc/bfin_rotary.c index d00edc9f39d1..1c4146fccfdf 100644 --- a/drivers/input/misc/bfin_rotary.c +++ b/drivers/input/misc/bfin_rotary.c | |||
| @@ -264,18 +264,7 @@ static struct platform_driver bfin_rotary_device_driver = { | |||
| 264 | #endif | 264 | #endif |
| 265 | }, | 265 | }, |
| 266 | }; | 266 | }; |
| 267 | 267 | module_platform_driver(bfin_rotary_device_driver); | |
| 268 | static int __init bfin_rotary_init(void) | ||
| 269 | { | ||
| 270 | return platform_driver_register(&bfin_rotary_device_driver); | ||
| 271 | } | ||
| 272 | module_init(bfin_rotary_init); | ||
| 273 | |||
| 274 | static void __exit bfin_rotary_exit(void) | ||
| 275 | { | ||
| 276 | platform_driver_unregister(&bfin_rotary_device_driver); | ||
| 277 | } | ||
| 278 | module_exit(bfin_rotary_exit); | ||
| 279 | 268 | ||
| 280 | MODULE_LICENSE("GPL"); | 269 | MODULE_LICENSE("GPL"); |
| 281 | MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>"); | 270 | MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>"); |
diff --git a/drivers/input/misc/cobalt_btns.c b/drivers/input/misc/cobalt_btns.c index fd8407a29631..53e43d295148 100644 --- a/drivers/input/misc/cobalt_btns.c +++ b/drivers/input/misc/cobalt_btns.c | |||
| @@ -163,16 +163,4 @@ static struct platform_driver cobalt_buttons_driver = { | |||
| 163 | .owner = THIS_MODULE, | 163 | .owner = THIS_MODULE, |
| 164 | }, | 164 | }, |
| 165 | }; | 165 | }; |
| 166 | 166 | module_platform_driver(cobalt_buttons_driver); | |
| 167 | static int __init cobalt_buttons_init(void) | ||
| 168 | { | ||
| 169 | return platform_driver_register(&cobalt_buttons_driver); | ||
| 170 | } | ||
| 171 | |||
| 172 | static void __exit cobalt_buttons_exit(void) | ||
| 173 | { | ||
| 174 | platform_driver_unregister(&cobalt_buttons_driver); | ||
| 175 | } | ||
| 176 | |||
| 177 | module_init(cobalt_buttons_init); | ||
| 178 | module_exit(cobalt_buttons_exit); | ||
diff --git a/drivers/input/misc/dm355evm_keys.c b/drivers/input/misc/dm355evm_keys.c index 7283dd2a1ad3..35083c6836c3 100644 --- a/drivers/input/misc/dm355evm_keys.c +++ b/drivers/input/misc/dm355evm_keys.c | |||
| @@ -267,17 +267,6 @@ static struct platform_driver dm355evm_keys_driver = { | |||
| 267 | .name = "dm355evm_keys", | 267 | .name = "dm355evm_keys", |
| 268 | }, | 268 | }, |
| 269 | }; | 269 | }; |
| 270 | 270 | module_platform_driver(dm355evm_keys_driver); | |
| 271 | static int __init dm355evm_keys_init(void) | ||
| 272 | { | ||
| 273 | return platform_driver_register(&dm355evm_keys_driver); | ||
| 274 | } | ||
| 275 | module_init(dm355evm_keys_init); | ||
| 276 | |||
| 277 | static void __exit dm355evm_keys_exit(void) | ||
| 278 | { | ||
| 279 | platform_driver_unregister(&dm355evm_keys_driver); | ||
| 280 | } | ||
| 281 | module_exit(dm355evm_keys_exit); | ||
| 282 | 271 | ||
| 283 | MODULE_LICENSE("GPL"); | 272 | MODULE_LICENSE("GPL"); |
diff --git a/drivers/input/misc/gp2ap002a00f.c b/drivers/input/misc/gp2ap002a00f.c new file mode 100644 index 000000000000..71fba8c2fc66 --- /dev/null +++ b/drivers/input/misc/gp2ap002a00f.c | |||
| @@ -0,0 +1,299 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2011 Sony Ericsson Mobile Communications Inc. | ||
| 3 | * | ||
| 4 | * Author: Courtney Cavin <courtney.cavin@sonyericsson.com> | ||
| 5 | * Prepared for up-stream by: Oskar Andero <oskar.andero@sonyericsson.com> | ||
| 6 | * | ||
| 7 | * This program is free software; you can redistribute it and/or modify | ||
| 8 | * it under the terms of the GNU General Public License version 2, as | ||
| 9 | * published by the Free Software Foundation. | ||
| 10 | */ | ||
| 11 | |||
| 12 | #include <linux/i2c.h> | ||
| 13 | #include <linux/irq.h> | ||
| 14 | #include <linux/slab.h> | ||
| 15 | #include <linux/input.h> | ||
| 16 | #include <linux/module.h> | ||
| 17 | #include <linux/interrupt.h> | ||
| 18 | #include <linux/gpio.h> | ||
| 19 | #include <linux/delay.h> | ||
| 20 | #include <linux/input/gp2ap002a00f.h> | ||
| 21 | |||
| 22 | struct gp2a_data { | ||
| 23 | struct input_dev *input; | ||
| 24 | const struct gp2a_platform_data *pdata; | ||
| 25 | struct i2c_client *i2c_client; | ||
| 26 | }; | ||
| 27 | |||
| 28 | enum gp2a_addr { | ||
| 29 | GP2A_ADDR_PROX = 0x0, | ||
| 30 | GP2A_ADDR_GAIN = 0x1, | ||
| 31 | GP2A_ADDR_HYS = 0x2, | ||
| 32 | GP2A_ADDR_CYCLE = 0x3, | ||
| 33 | GP2A_ADDR_OPMOD = 0x4, | ||
| 34 | GP2A_ADDR_CON = 0x6 | ||
| 35 | }; | ||
| 36 | |||
| 37 | enum gp2a_controls { | ||
| 38 | /* Software Shutdown control: 0 = shutdown, 1 = normal operation */ | ||
| 39 | GP2A_CTRL_SSD = 0x01 | ||
| 40 | }; | ||
| 41 | |||
| 42 | static int gp2a_report(struct gp2a_data *dt) | ||
| 43 | { | ||
| 44 | int vo = gpio_get_value(dt->pdata->vout_gpio); | ||
| 45 | |||
| 46 | input_report_switch(dt->input, SW_FRONT_PROXIMITY, !vo); | ||
| 47 | input_sync(dt->input); | ||
| 48 | |||
| 49 | return 0; | ||
| 50 | } | ||
| 51 | |||
| 52 | static irqreturn_t gp2a_irq(int irq, void *handle) | ||
| 53 | { | ||
| 54 | struct gp2a_data *dt = handle; | ||
| 55 | |||
| 56 | gp2a_report(dt); | ||
| 57 | |||
| 58 | return IRQ_HANDLED; | ||
| 59 | } | ||
| 60 | |||
| 61 | static int gp2a_enable(struct gp2a_data *dt) | ||
| 62 | { | ||
| 63 | return i2c_smbus_write_byte_data(dt->i2c_client, GP2A_ADDR_OPMOD, | ||
| 64 | GP2A_CTRL_SSD); | ||
| 65 | } | ||
| 66 | |||
| 67 | static int gp2a_disable(struct gp2a_data *dt) | ||
| 68 | { | ||
| 69 | return i2c_smbus_write_byte_data(dt->i2c_client, GP2A_ADDR_OPMOD, | ||
| 70 | 0x00); | ||
| 71 | } | ||
| 72 | |||
| 73 | static int gp2a_device_open(struct input_dev *dev) | ||
| 74 | { | ||
| 75 | struct gp2a_data *dt = input_get_drvdata(dev); | ||
| 76 | int error; | ||
| 77 | |||
| 78 | error = gp2a_enable(dt); | ||
| 79 | if (error < 0) { | ||
| 80 | dev_err(&dt->i2c_client->dev, | ||
| 81 | "unable to activate, err %d\n", error); | ||
| 82 | return error; | ||
| 83 | } | ||
| 84 | |||
| 85 | gp2a_report(dt); | ||
| 86 | |||
| 87 | return 0; | ||
| 88 | } | ||
| 89 | |||
| 90 | static void gp2a_device_close(struct input_dev *dev) | ||
| 91 | { | ||
| 92 | struct gp2a_data *dt = input_get_drvdata(dev); | ||
| 93 | int error; | ||
| 94 | |||
| 95 | error = gp2a_disable(dt); | ||
| 96 | if (error < 0) | ||
| 97 | dev_err(&dt->i2c_client->dev, | ||
| 98 | "unable to deactivate, err %d\n", error); | ||
| 99 | } | ||
| 100 | |||
| 101 | static int __devinit gp2a_initialize(struct gp2a_data *dt) | ||
| 102 | { | ||
| 103 | int error; | ||
| 104 | |||
| 105 | error = i2c_smbus_write_byte_data(dt->i2c_client, GP2A_ADDR_GAIN, | ||
| 106 | 0x08); | ||
| 107 | if (error < 0) | ||
| 108 | return error; | ||
| 109 | |||
| 110 | error = i2c_smbus_write_byte_data(dt->i2c_client, GP2A_ADDR_HYS, | ||
| 111 | 0xc2); | ||
| 112 | if (error < 0) | ||
| 113 | return error; | ||
| 114 | |||
| 115 | error = i2c_smbus_write_byte_data(dt->i2c_client, GP2A_ADDR_CYCLE, | ||
| 116 | 0x04); | ||
| 117 | if (error < 0) | ||
| 118 | return error; | ||
| 119 | |||
| 120 | error = gp2a_disable(dt); | ||
| 121 | |||
| 122 | return error; | ||
| 123 | } | ||
| 124 | |||
| 125 | static int __devinit gp2a_probe(struct i2c_client *client, | ||
| 126 | const struct i2c_device_id *id) | ||
| 127 | { | ||
| 128 | const struct gp2a_platform_data *pdata = client->dev.platform_data; | ||
| 129 | struct gp2a_data *dt; | ||
| 130 | int error; | ||
| 131 | |||
| 132 | if (!pdata) | ||
| 133 | return -EINVAL; | ||
| 134 | |||
| 135 | if (pdata->hw_setup) { | ||
| 136 | error = pdata->hw_setup(client); | ||
| 137 | if (error < 0) | ||
| 138 | return error; | ||
| 139 | } | ||
| 140 | |||
| 141 | error = gpio_request_one(pdata->vout_gpio, GPIOF_IN, GP2A_I2C_NAME); | ||
| 142 | if (error) | ||
| 143 | goto err_hw_shutdown; | ||
| 144 | |||
| 145 | dt = kzalloc(sizeof(struct gp2a_data), GFP_KERNEL); | ||
| 146 | if (!dt) { | ||
| 147 | error = -ENOMEM; | ||
| 148 | goto err_free_gpio; | ||
| 149 | } | ||
| 150 | |||
| 151 | dt->pdata = pdata; | ||
| 152 | dt->i2c_client = client; | ||
| 153 | |||
| 154 | error = gp2a_initialize(dt); | ||
| 155 | if (error < 0) | ||
| 156 | goto err_free_mem; | ||
| 157 | |||
| 158 | dt->input = input_allocate_device(); | ||
| 159 | if (!dt->input) { | ||
| 160 | error = -ENOMEM; | ||
| 161 | goto err_free_mem; | ||
| 162 | } | ||
| 163 | |||
| 164 | input_set_drvdata(dt->input, dt); | ||
| 165 | |||
| 166 | dt->input->open = gp2a_device_open; | ||
| 167 | dt->input->close = gp2a_device_close; | ||
| 168 | dt->input->name = GP2A_I2C_NAME; | ||
| 169 | dt->input->id.bustype = BUS_I2C; | ||
| 170 | dt->input->dev.parent = &client->dev; | ||
| 171 | |||
| 172 | input_set_capability(dt->input, EV_SW, SW_FRONT_PROXIMITY); | ||
| 173 | |||
| 174 | error = request_threaded_irq(client->irq, NULL, gp2a_irq, | ||
| 175 | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | | ||
| 176 | IRQF_ONESHOT, | ||
| 177 | GP2A_I2C_NAME, dt); | ||
| 178 | if (error) { | ||
| 179 | dev_err(&client->dev, "irq request failed\n"); | ||
| 180 | goto err_free_input_dev; | ||
| 181 | } | ||
| 182 | |||
| 183 | error = input_register_device(dt->input); | ||
| 184 | if (error) { | ||
| 185 | dev_err(&client->dev, "device registration failed\n"); | ||
| 186 | goto err_free_irq; | ||
| 187 | } | ||
| 188 | |||
| 189 | device_init_wakeup(&client->dev, pdata->wakeup); | ||
| 190 | i2c_set_clientdata(client, dt); | ||
| 191 | |||
| 192 | return 0; | ||
| 193 | |||
| 194 | err_free_irq: | ||
| 195 | free_irq(client->irq, dt); | ||
| 196 | err_free_input_dev: | ||
| 197 | input_free_device(dt->input); | ||
| 198 | err_free_mem: | ||
| 199 | kfree(dt); | ||
| 200 | err_free_gpio: | ||
| 201 | gpio_free(pdata->vout_gpio); | ||
| 202 | err_hw_shutdown: | ||
| 203 | if (pdata->hw_shutdown) | ||
| 204 | pdata->hw_shutdown(client); | ||
| 205 | return error; | ||
| 206 | } | ||
| 207 | |||
| 208 | static int __devexit gp2a_remove(struct i2c_client *client) | ||
| 209 | { | ||
| 210 | struct gp2a_data *dt = i2c_get_clientdata(client); | ||
| 211 | const struct gp2a_platform_data *pdata = dt->pdata; | ||
| 212 | |||
| 213 | device_init_wakeup(&client->dev, false); | ||
| 214 | |||
| 215 | free_irq(client->irq, dt); | ||
| 216 | |||
| 217 | input_unregister_device(dt->input); | ||
| 218 | kfree(dt); | ||
| 219 | |||
| 220 | gpio_free(pdata->vout_gpio); | ||
| 221 | |||
| 222 | if (pdata->hw_shutdown) | ||
| 223 | pdata->hw_shutdown(client); | ||
| 224 | |||
| 225 | return 0; | ||
| 226 | } | ||
| 227 | |||
| 228 | #ifdef CONFIG_PM_SLEEP | ||
| 229 | static int gp2a_suspend(struct device *dev) | ||
| 230 | { | ||
| 231 | struct i2c_client *client = to_i2c_client(dev); | ||
| 232 | struct gp2a_data *dt = i2c_get_clientdata(client); | ||
| 233 | int retval = 0; | ||
| 234 | |||
| 235 | if (device_may_wakeup(&client->dev)) { | ||
| 236 | enable_irq_wake(client->irq); | ||
| 237 | } else { | ||
| 238 | mutex_lock(&dt->input->mutex); | ||
| 239 | if (dt->input->users) | ||
| 240 | retval = gp2a_disable(dt); | ||
| 241 | mutex_unlock(&dt->input->mutex); | ||
| 242 | } | ||
| 243 | |||
| 244 | return retval; | ||
| 245 | } | ||
| 246 | |||
| 247 | static int gp2a_resume(struct device *dev) | ||
| 248 | { | ||
| 249 | struct i2c_client *client = to_i2c_client(dev); | ||
| 250 | struct gp2a_data *dt = i2c_get_clientdata(client); | ||
| 251 | int retval = 0; | ||
| 252 | |||
| 253 | if (device_may_wakeup(&client->dev)) { | ||
| 254 | disable_irq_wake(client->irq); | ||
| 255 | } else { | ||
| 256 | mutex_lock(&dt->input->mutex); | ||
| 257 | if (dt->input->users) | ||
| 258 | retval = gp2a_enable(dt); | ||
| 259 | mutex_unlock(&dt->input->mutex); | ||
| 260 | } | ||
| 261 | |||
| 262 | return retval; | ||
| 263 | } | ||
| 264 | #endif | ||
| 265 | |||
| 266 | static SIMPLE_DEV_PM_OPS(gp2a_pm, gp2a_suspend, gp2a_resume); | ||
| 267 | |||
| 268 | static const struct i2c_device_id gp2a_i2c_id[] = { | ||
| 269 | { GP2A_I2C_NAME, 0 }, | ||
| 270 | { } | ||
| 271 | }; | ||
| 272 | |||
| 273 | static struct i2c_driver gp2a_i2c_driver = { | ||
| 274 | .driver = { | ||
| 275 | .name = GP2A_I2C_NAME, | ||
| 276 | .owner = THIS_MODULE, | ||
| 277 | .pm = &gp2a_pm, | ||
| 278 | }, | ||
| 279 | .probe = gp2a_probe, | ||
| 280 | .remove = __devexit_p(gp2a_remove), | ||
| 281 | .id_table = gp2a_i2c_id, | ||
| 282 | }; | ||
| 283 | |||
| 284 | static int __init gp2a_init(void) | ||
| 285 | { | ||
| 286 | return i2c_add_driver(&gp2a_i2c_driver); | ||
| 287 | } | ||
| 288 | |||
| 289 | static void __exit gp2a_exit(void) | ||
| 290 | { | ||
| 291 | i2c_del_driver(&gp2a_i2c_driver); | ||
| 292 | } | ||
| 293 | |||
| 294 | module_init(gp2a_init); | ||
| 295 | module_exit(gp2a_exit); | ||
| 296 | |||
| 297 | MODULE_AUTHOR("Courtney Cavin <courtney.cavin@sonyericsson.com>"); | ||
| 298 | MODULE_DESCRIPTION("Sharp GP2AP002A00F I2C Proximity/Opto sensor driver"); | ||
| 299 | MODULE_LICENSE("GPL v2"); | ||
diff --git a/drivers/input/misc/gpio_tilt_polled.c b/drivers/input/misc/gpio_tilt_polled.c new file mode 100644 index 000000000000..277a0574c199 --- /dev/null +++ b/drivers/input/misc/gpio_tilt_polled.c | |||
| @@ -0,0 +1,213 @@ | |||
| 1 | /* | ||
| 2 | * Driver for tilt switches connected via GPIO lines | ||
| 3 | * not capable of generating interrupts | ||
| 4 | * | ||
| 5 | * Copyright (C) 2011 Heiko Stuebner <heiko@sntech.de> | ||
| 6 | * | ||
| 7 | * based on: drivers/input/keyboard/gpio_keys_polled.c | ||
| 8 | * | ||
| 9 | * Copyright (C) 2007-2010 Gabor Juhos <juhosg@openwrt.org> | ||
| 10 | * Copyright (C) 2010 Nuno Goncalves <nunojpg@gmail.com> | ||
| 11 | * | ||
| 12 | * This program is free software; you can redistribute it and/or modify | ||
| 13 | * it under the terms of the GNU General Public License version 2 as | ||
| 14 | * published by the Free Software Foundation. | ||
| 15 | */ | ||
| 16 | |||
| 17 | #include <linux/kernel.h> | ||
| 18 | #include <linux/module.h> | ||
| 19 | #include <linux/init.h> | ||
| 20 | #include <linux/slab.h> | ||
| 21 | #include <linux/input.h> | ||
| 22 | #include <linux/input-polldev.h> | ||
| 23 | #include <linux/ioport.h> | ||
| 24 | #include <linux/platform_device.h> | ||
| 25 | #include <linux/gpio.h> | ||
| 26 | #include <linux/input/gpio_tilt.h> | ||
| 27 | |||
| 28 | #define DRV_NAME "gpio-tilt-polled" | ||
| 29 | |||
| 30 | struct gpio_tilt_polled_dev { | ||
| 31 | struct input_polled_dev *poll_dev; | ||
| 32 | struct device *dev; | ||
| 33 | const struct gpio_tilt_platform_data *pdata; | ||
| 34 | |||
| 35 | int last_state; | ||
| 36 | |||
| 37 | int threshold; | ||
| 38 | int count; | ||
| 39 | }; | ||
| 40 | |||
| 41 | static void gpio_tilt_polled_poll(struct input_polled_dev *dev) | ||
| 42 | { | ||
| 43 | struct gpio_tilt_polled_dev *tdev = dev->private; | ||
| 44 | const struct gpio_tilt_platform_data *pdata = tdev->pdata; | ||
| 45 | struct input_dev *input = dev->input; | ||
| 46 | struct gpio_tilt_state *tilt_state = NULL; | ||
| 47 | int state, i; | ||
| 48 | |||
| 49 | if (tdev->count < tdev->threshold) { | ||
| 50 | tdev->count++; | ||
| 51 | } else { | ||
| 52 | state = 0; | ||
| 53 | for (i = 0; i < pdata->nr_gpios; i++) | ||
| 54 | state |= (!!gpio_get_value(pdata->gpios[i].gpio) << i); | ||
| 55 | |||
| 56 | if (state != tdev->last_state) { | ||
| 57 | for (i = 0; i < pdata->nr_states; i++) | ||
| 58 | if (pdata->states[i].gpios == state) | ||
| 59 | tilt_state = &pdata->states[i]; | ||
| 60 | |||
| 61 | if (tilt_state) { | ||
| 62 | for (i = 0; i < pdata->nr_axes; i++) | ||
| 63 | input_report_abs(input, | ||
| 64 | pdata->axes[i].axis, | ||
| 65 | tilt_state->axes[i]); | ||
| 66 | |||
| 67 | input_sync(input); | ||
| 68 | } | ||
| 69 | |||
| 70 | tdev->count = 0; | ||
| 71 | tdev->last_state = state; | ||
| 72 | } | ||
| 73 | } | ||
| 74 | } | ||
| 75 | |||
| 76 | static void gpio_tilt_polled_open(struct input_polled_dev *dev) | ||
| 77 | { | ||
| 78 | struct gpio_tilt_polled_dev *tdev = dev->private; | ||
| 79 | const struct gpio_tilt_platform_data *pdata = tdev->pdata; | ||
| 80 | |||
| 81 | if (pdata->enable) | ||
| 82 | pdata->enable(tdev->dev); | ||
| 83 | |||
| 84 | /* report initial state of the axes */ | ||
| 85 | tdev->last_state = -1; | ||
| 86 | tdev->count = tdev->threshold; | ||
| 87 | gpio_tilt_polled_poll(tdev->poll_dev); | ||
| 88 | } | ||
| 89 | |||
| 90 | static void gpio_tilt_polled_close(struct input_polled_dev *dev) | ||
| 91 | { | ||
| 92 | struct gpio_tilt_polled_dev *tdev = dev->private; | ||
| 93 | const struct gpio_tilt_platform_data *pdata = tdev->pdata; | ||
| 94 | |||
| 95 | if (pdata->disable) | ||
| 96 | pdata->disable(tdev->dev); | ||
| 97 | } | ||
| 98 | |||
| 99 | static int __devinit gpio_tilt_polled_probe(struct platform_device *pdev) | ||
| 100 | { | ||
| 101 | const struct gpio_tilt_platform_data *pdata = pdev->dev.platform_data; | ||
| 102 | struct device *dev = &pdev->dev; | ||
| 103 | struct gpio_tilt_polled_dev *tdev; | ||
| 104 | struct input_polled_dev *poll_dev; | ||
| 105 | struct input_dev *input; | ||
| 106 | int error, i; | ||
| 107 | |||
| 108 | if (!pdata || !pdata->poll_interval) | ||
| 109 | return -EINVAL; | ||
| 110 | |||
| 111 | tdev = kzalloc(sizeof(struct gpio_tilt_polled_dev), GFP_KERNEL); | ||
| 112 | if (!tdev) { | ||
| 113 | dev_err(dev, "no memory for private data\n"); | ||
| 114 | return -ENOMEM; | ||
| 115 | } | ||
| 116 | |||
| 117 | error = gpio_request_array(pdata->gpios, pdata->nr_gpios); | ||
| 118 | if (error) { | ||
| 119 | dev_err(dev, | ||
| 120 | "Could not request tilt GPIOs: %d\n", error); | ||
| 121 | goto err_free_tdev; | ||
| 122 | } | ||
| 123 | |||
| 124 | poll_dev = input_allocate_polled_device(); | ||
| 125 | if (!poll_dev) { | ||
| 126 | dev_err(dev, "no memory for polled device\n"); | ||
| 127 | error = -ENOMEM; | ||
| 128 | goto err_free_gpios; | ||
| 129 | } | ||
| 130 | |||
| 131 | poll_dev->private = tdev; | ||
| 132 | poll_dev->poll = gpio_tilt_polled_poll; | ||
| 133 | poll_dev->poll_interval = pdata->poll_interval; | ||
| 134 | poll_dev->open = gpio_tilt_polled_open; | ||
| 135 | poll_dev->close = gpio_tilt_polled_close; | ||
| 136 | |||
| 137 | input = poll_dev->input; | ||
| 138 | |||
| 139 | input->name = pdev->name; | ||
| 140 | input->phys = DRV_NAME"/input0"; | ||
| 141 | input->dev.parent = &pdev->dev; | ||
| 142 | |||
| 143 | input->id.bustype = BUS_HOST; | ||
| 144 | input->id.vendor = 0x0001; | ||
| 145 | input->id.product = 0x0001; | ||
| 146 | input->id.version = 0x0100; | ||
| 147 | |||
| 148 | __set_bit(EV_ABS, input->evbit); | ||
| 149 | for (i = 0; i < pdata->nr_axes; i++) | ||
| 150 | input_set_abs_params(input, pdata->axes[i].axis, | ||
| 151 | pdata->axes[i].min, pdata->axes[i].max, | ||
| 152 | pdata->axes[i].fuzz, pdata->axes[i].flat); | ||
| 153 | |||
| 154 | tdev->threshold = DIV_ROUND_UP(pdata->debounce_interval, | ||
| 155 | pdata->poll_interval); | ||
| 156 | |||
| 157 | tdev->poll_dev = poll_dev; | ||
| 158 | tdev->dev = dev; | ||
| 159 | tdev->pdata = pdata; | ||
| 160 | |||
| 161 | error = input_register_polled_device(poll_dev); | ||
| 162 | if (error) { | ||
| 163 | dev_err(dev, "unable to register polled device, err=%d\n", | ||
| 164 | error); | ||
| 165 | goto err_free_polldev; | ||
| 166 | } | ||
| 167 | |||
| 168 | platform_set_drvdata(pdev, tdev); | ||
| 169 | |||
| 170 | return 0; | ||
| 171 | |||
| 172 | err_free_polldev: | ||
| 173 | input_free_polled_device(poll_dev); | ||
| 174 | err_free_gpios: | ||
| 175 | gpio_free_array(pdata->gpios, pdata->nr_gpios); | ||
| 176 | err_free_tdev: | ||
| 177 | kfree(tdev); | ||
| 178 | |||
| 179 | return error; | ||
| 180 | } | ||
| 181 | |||
| 182 | static int __devexit gpio_tilt_polled_remove(struct platform_device *pdev) | ||
| 183 | { | ||
| 184 | struct gpio_tilt_polled_dev *tdev = platform_get_drvdata(pdev); | ||
| 185 | const struct gpio_tilt_platform_data *pdata = tdev->pdata; | ||
| 186 | |||
| 187 | platform_set_drvdata(pdev, NULL); | ||
| 188 | |||
| 189 | input_unregister_polled_device(tdev->poll_dev); | ||
| 190 | input_free_polled_device(tdev->poll_dev); | ||
| 191 | |||
| 192 | gpio_free_array(pdata->gpios, pdata->nr_gpios); | ||
| 193 | |||
| 194 | kfree(tdev); | ||
| 195 | |||
| 196 | return 0; | ||
| 197 | } | ||
| 198 | |||
| 199 | static struct platform_driver gpio_tilt_polled_driver = { | ||
| 200 | .probe = gpio_tilt_polled_probe, | ||
| 201 | .remove = __devexit_p(gpio_tilt_polled_remove), | ||
| 202 | .driver = { | ||
| 203 | .name = DRV_NAME, | ||
| 204 | .owner = THIS_MODULE, | ||
| 205 | }, | ||
| 206 | }; | ||
| 207 | |||
| 208 | module_platform_driver(gpio_tilt_polled_driver); | ||
| 209 | |||
| 210 | MODULE_LICENSE("GPL v2"); | ||
| 211 | MODULE_AUTHOR("Heiko Stuebner <heiko@sntech.de>"); | ||
| 212 | MODULE_DESCRIPTION("Polled GPIO tilt driver"); | ||
| 213 | MODULE_ALIAS("platform:" DRV_NAME); | ||
diff --git a/drivers/input/misc/ixp4xx-beeper.c b/drivers/input/misc/ixp4xx-beeper.c index 302ab46ce752..50e283068301 100644 --- a/drivers/input/misc/ixp4xx-beeper.c +++ b/drivers/input/misc/ixp4xx-beeper.c | |||
| @@ -168,16 +168,5 @@ static struct platform_driver ixp4xx_spkr_platform_driver = { | |||
| 168 | .remove = __devexit_p(ixp4xx_spkr_remove), | 168 | .remove = __devexit_p(ixp4xx_spkr_remove), |
| 169 | .shutdown = ixp4xx_spkr_shutdown, | 169 | .shutdown = ixp4xx_spkr_shutdown, |
| 170 | }; | 170 | }; |
| 171 | module_platform_driver(ixp4xx_spkr_platform_driver); | ||
| 171 | 172 | ||
| 172 | static int __init ixp4xx_spkr_init(void) | ||
| 173 | { | ||
| 174 | return platform_driver_register(&ixp4xx_spkr_platform_driver); | ||
| 175 | } | ||
| 176 | |||
| 177 | static void __exit ixp4xx_spkr_exit(void) | ||
| 178 | { | ||
| 179 | platform_driver_unregister(&ixp4xx_spkr_platform_driver); | ||
| 180 | } | ||
| 181 | |||
| 182 | module_init(ixp4xx_spkr_init); | ||
| 183 | module_exit(ixp4xx_spkr_exit); | ||
diff --git a/drivers/input/misc/max8925_onkey.c b/drivers/input/misc/max8925_onkey.c index 7de0ded4ccc3..23cf08271049 100644 --- a/drivers/input/misc/max8925_onkey.c +++ b/drivers/input/misc/max8925_onkey.c | |||
| @@ -166,18 +166,7 @@ static struct platform_driver max8925_onkey_driver = { | |||
| 166 | .probe = max8925_onkey_probe, | 166 | .probe = max8925_onkey_probe, |
| 167 | .remove = __devexit_p(max8925_onkey_remove), | 167 | .remove = __devexit_p(max8925_onkey_remove), |
| 168 | }; | 168 | }; |
| 169 | 169 | module_platform_driver(max8925_onkey_driver); | |
| 170 | static int __init max8925_onkey_init(void) | ||
| 171 | { | ||
| 172 | return platform_driver_register(&max8925_onkey_driver); | ||
| 173 | } | ||
| 174 | module_init(max8925_onkey_init); | ||
| 175 | |||
| 176 | static void __exit max8925_onkey_exit(void) | ||
| 177 | { | ||
| 178 | platform_driver_unregister(&max8925_onkey_driver); | ||
| 179 | } | ||
| 180 | module_exit(max8925_onkey_exit); | ||
| 181 | 170 | ||
| 182 | MODULE_DESCRIPTION("Maxim MAX8925 ONKEY driver"); | 171 | MODULE_DESCRIPTION("Maxim MAX8925 ONKEY driver"); |
| 183 | MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com>"); | 172 | MODULE_AUTHOR("Haojian Zhuang <haojian.zhuang@marvell.com>"); |
diff --git a/drivers/input/misc/mc13783-pwrbutton.c b/drivers/input/misc/mc13783-pwrbutton.c index 09b052288657..8428f1e8e83e 100644 --- a/drivers/input/misc/mc13783-pwrbutton.c +++ b/drivers/input/misc/mc13783-pwrbutton.c | |||
| @@ -255,7 +255,7 @@ static int __devexit mc13783_pwrbutton_remove(struct platform_device *pdev) | |||
| 255 | return 0; | 255 | return 0; |
| 256 | } | 256 | } |
| 257 | 257 | ||
| 258 | struct platform_driver mc13783_pwrbutton_driver = { | 258 | static struct platform_driver mc13783_pwrbutton_driver = { |
| 259 | .probe = mc13783_pwrbutton_probe, | 259 | .probe = mc13783_pwrbutton_probe, |
| 260 | .remove = __devexit_p(mc13783_pwrbutton_remove), | 260 | .remove = __devexit_p(mc13783_pwrbutton_remove), |
| 261 | .driver = { | 261 | .driver = { |
| @@ -264,17 +264,7 @@ struct platform_driver mc13783_pwrbutton_driver = { | |||
| 264 | }, | 264 | }, |
| 265 | }; | 265 | }; |
| 266 | 266 | ||
| 267 | static int __init mc13783_pwrbutton_init(void) | 267 | module_platform_driver(mc13783_pwrbutton_driver); |
| 268 | { | ||
| 269 | return platform_driver_register(&mc13783_pwrbutton_driver); | ||
| 270 | } | ||
| 271 | module_init(mc13783_pwrbutton_init); | ||
| 272 | |||
| 273 | static void __exit mc13783_pwrbutton_exit(void) | ||
| 274 | { | ||
| 275 | platform_driver_unregister(&mc13783_pwrbutton_driver); | ||
| 276 | } | ||
| 277 | module_exit(mc13783_pwrbutton_exit); | ||
| 278 | 268 | ||
| 279 | MODULE_ALIAS("platform:mc13783-pwrbutton"); | 269 | MODULE_ALIAS("platform:mc13783-pwrbutton"); |
| 280 | MODULE_DESCRIPTION("MC13783 Power Button"); | 270 | MODULE_DESCRIPTION("MC13783 Power Button"); |
diff --git a/drivers/input/misc/mpu3050.c b/drivers/input/misc/mpu3050.c index f71dc728da58..208d1a1cc7f3 100644 --- a/drivers/input/misc/mpu3050.c +++ b/drivers/input/misc/mpu3050.c | |||
| @@ -41,18 +41,67 @@ | |||
| 41 | #include <linux/slab.h> | 41 | #include <linux/slab.h> |
| 42 | #include <linux/pm_runtime.h> | 42 | #include <linux/pm_runtime.h> |
| 43 | 43 | ||
| 44 | #define MPU3050_CHIP_ID_REG 0x00 | ||
| 45 | #define MPU3050_CHIP_ID 0x69 | 44 | #define MPU3050_CHIP_ID 0x69 |
| 46 | #define MPU3050_XOUT_H 0x1D | ||
| 47 | #define MPU3050_PWR_MGM 0x3E | ||
| 48 | #define MPU3050_PWR_MGM_POS 6 | ||
| 49 | #define MPU3050_PWR_MGM_MASK 0x40 | ||
| 50 | 45 | ||
| 51 | #define MPU3050_AUTO_DELAY 1000 | 46 | #define MPU3050_AUTO_DELAY 1000 |
| 52 | 47 | ||
| 53 | #define MPU3050_MIN_VALUE -32768 | 48 | #define MPU3050_MIN_VALUE -32768 |
| 54 | #define MPU3050_MAX_VALUE 32767 | 49 | #define MPU3050_MAX_VALUE 32767 |
| 55 | 50 | ||
| 51 | #define MPU3050_DEFAULT_POLL_INTERVAL 200 | ||
| 52 | #define MPU3050_DEFAULT_FS_RANGE 3 | ||
| 53 | |||
| 54 | /* Register map */ | ||
| 55 | #define MPU3050_CHIP_ID_REG 0x00 | ||
| 56 | #define MPU3050_SMPLRT_DIV 0x15 | ||
| 57 | #define MPU3050_DLPF_FS_SYNC 0x16 | ||
| 58 | #define MPU3050_INT_CFG 0x17 | ||
| 59 | #define MPU3050_XOUT_H 0x1D | ||
| 60 | #define MPU3050_PWR_MGM 0x3E | ||
| 61 | #define MPU3050_PWR_MGM_POS 6 | ||
| 62 | |||
| 63 | /* Register bits */ | ||
| 64 | |||
| 65 | /* DLPF_FS_SYNC */ | ||
| 66 | #define MPU3050_EXT_SYNC_NONE 0x00 | ||
| 67 | #define MPU3050_EXT_SYNC_TEMP 0x20 | ||
| 68 | #define MPU3050_EXT_SYNC_GYROX 0x40 | ||
| 69 | #define MPU3050_EXT_SYNC_GYROY 0x60 | ||
| 70 | #define MPU3050_EXT_SYNC_GYROZ 0x80 | ||
| 71 | #define MPU3050_EXT_SYNC_ACCELX 0xA0 | ||
| 72 | #define MPU3050_EXT_SYNC_ACCELY 0xC0 | ||
| 73 | #define MPU3050_EXT_SYNC_ACCELZ 0xE0 | ||
| 74 | #define MPU3050_EXT_SYNC_MASK 0xE0 | ||
| 75 | #define MPU3050_FS_250DPS 0x00 | ||
| 76 | #define MPU3050_FS_500DPS 0x08 | ||
| 77 | #define MPU3050_FS_1000DPS 0x10 | ||
| 78 | #define MPU3050_FS_2000DPS 0x18 | ||
| 79 | #define MPU3050_FS_MASK 0x18 | ||
| 80 | #define MPU3050_DLPF_CFG_256HZ_NOLPF2 0x00 | ||
| 81 | #define MPU3050_DLPF_CFG_188HZ 0x01 | ||
| 82 | #define MPU3050_DLPF_CFG_98HZ 0x02 | ||
| 83 | #define MPU3050_DLPF_CFG_42HZ 0x03 | ||
| 84 | #define MPU3050_DLPF_CFG_20HZ 0x04 | ||
| 85 | #define MPU3050_DLPF_CFG_10HZ 0x05 | ||
| 86 | #define MPU3050_DLPF_CFG_5HZ 0x06 | ||
| 87 | #define MPU3050_DLPF_CFG_2100HZ_NOLPF 0x07 | ||
| 88 | #define MPU3050_DLPF_CFG_MASK 0x07 | ||
| 89 | /* INT_CFG */ | ||
| 90 | #define MPU3050_RAW_RDY_EN 0x01 | ||
| 91 | #define MPU3050_MPU_RDY_EN 0x02 | ||
| 92 | #define MPU3050_LATCH_INT_EN 0x04 | ||
| 93 | /* PWR_MGM */ | ||
| 94 | #define MPU3050_PWR_MGM_PLL_X 0x01 | ||
| 95 | #define MPU3050_PWR_MGM_PLL_Y 0x02 | ||
| 96 | #define MPU3050_PWR_MGM_PLL_Z 0x03 | ||
| 97 | #define MPU3050_PWR_MGM_CLKSEL 0x07 | ||
| 98 | #define MPU3050_PWR_MGM_STBY_ZG 0x08 | ||
| 99 | #define MPU3050_PWR_MGM_STBY_YG 0x10 | ||
| 100 | #define MPU3050_PWR_MGM_STBY_XG 0x20 | ||
| 101 | #define MPU3050_PWR_MGM_SLEEP 0x40 | ||
| 102 | #define MPU3050_PWR_MGM_RESET 0x80 | ||
| 103 | #define MPU3050_PWR_MGM_MASK 0x40 | ||
| 104 | |||
| 56 | struct axis_data { | 105 | struct axis_data { |
| 57 | s16 x; | 106 | s16 x; |
| 58 | s16 y; | 107 | s16 y; |
| @@ -148,9 +197,20 @@ static void mpu3050_set_power_mode(struct i2c_client *client, u8 val) | |||
| 148 | static int mpu3050_input_open(struct input_dev *input) | 197 | static int mpu3050_input_open(struct input_dev *input) |
| 149 | { | 198 | { |
| 150 | struct mpu3050_sensor *sensor = input_get_drvdata(input); | 199 | struct mpu3050_sensor *sensor = input_get_drvdata(input); |
| 200 | int error; | ||
| 151 | 201 | ||
| 152 | pm_runtime_get(sensor->dev); | 202 | pm_runtime_get(sensor->dev); |
| 153 | 203 | ||
| 204 | /* Enable interrupts */ | ||
| 205 | error = i2c_smbus_write_byte_data(sensor->client, MPU3050_INT_CFG, | ||
| 206 | MPU3050_LATCH_INT_EN | | ||
| 207 | MPU3050_RAW_RDY_EN | | ||
| 208 | MPU3050_MPU_RDY_EN); | ||
| 209 | if (error < 0) { | ||
| 210 | pm_runtime_put(sensor->dev); | ||
| 211 | return error; | ||
| 212 | } | ||
| 213 | |||
| 154 | return 0; | 214 | return 0; |
| 155 | } | 215 | } |
| 156 | 216 | ||
| @@ -192,6 +252,51 @@ static irqreturn_t mpu3050_interrupt_thread(int irq, void *data) | |||
| 192 | } | 252 | } |
| 193 | 253 | ||
| 194 | /** | 254 | /** |
| 255 | * mpu3050_hw_init - initialize hardware | ||
| 256 | * @sensor: the sensor | ||
| 257 | * | ||
| 258 | * Called during device probe; configures the sampling method. | ||
| 259 | */ | ||
| 260 | static int __devinit mpu3050_hw_init(struct mpu3050_sensor *sensor) | ||
| 261 | { | ||
| 262 | struct i2c_client *client = sensor->client; | ||
| 263 | int ret; | ||
| 264 | u8 reg; | ||
| 265 | |||
| 266 | /* Reset */ | ||
| 267 | ret = i2c_smbus_write_byte_data(client, MPU3050_PWR_MGM, | ||
| 268 | MPU3050_PWR_MGM_RESET); | ||
| 269 | if (ret < 0) | ||
| 270 | return ret; | ||
| 271 | |||
| 272 | ret = i2c_smbus_read_byte_data(client, MPU3050_PWR_MGM); | ||
| 273 | if (ret < 0) | ||
| 274 | return ret; | ||
| 275 | |||
| 276 | ret &= ~MPU3050_PWR_MGM_CLKSEL; | ||
| 277 | ret |= MPU3050_PWR_MGM_PLL_Z; | ||
| 278 | ret = i2c_smbus_write_byte_data(client, MPU3050_PWR_MGM, ret); | ||
| 279 | if (ret < 0) | ||
| 280 | return ret; | ||
| 281 | |||
| 282 | /* Output frequency divider. The poll interval */ | ||
| 283 | ret = i2c_smbus_write_byte_data(client, MPU3050_SMPLRT_DIV, | ||
| 284 | MPU3050_DEFAULT_POLL_INTERVAL - 1); | ||
| 285 | if (ret < 0) | ||
| 286 | return ret; | ||
| 287 | |||
| 288 | /* Set low pass filter and full scale */ | ||
| 289 | reg = MPU3050_DEFAULT_FS_RANGE; | ||
| 290 | reg |= MPU3050_DLPF_CFG_42HZ << 3; | ||
| 291 | reg |= MPU3050_EXT_SYNC_NONE << 5; | ||
| 292 | ret = i2c_smbus_write_byte_data(client, MPU3050_DLPF_FS_SYNC, reg); | ||
| 293 | if (ret < 0) | ||
| 294 | return ret; | ||
| 295 | |||
| 296 | return 0; | ||
| 297 | } | ||
| 298 | |||
| 299 | /** | ||
| 195 | * mpu3050_probe - device detection callback | 300 | * mpu3050_probe - device detection callback |
| 196 | * @client: i2c client of found device | 301 | * @client: i2c client of found device |
| 197 | * @id: id match information | 302 | * @id: id match information |
| @@ -256,10 +361,14 @@ static int __devinit mpu3050_probe(struct i2c_client *client, | |||
| 256 | 361 | ||
| 257 | pm_runtime_set_active(&client->dev); | 362 | pm_runtime_set_active(&client->dev); |
| 258 | 363 | ||
| 364 | error = mpu3050_hw_init(sensor); | ||
| 365 | if (error) | ||
| 366 | goto err_pm_set_suspended; | ||
| 367 | |||
| 259 | error = request_threaded_irq(client->irq, | 368 | error = request_threaded_irq(client->irq, |
| 260 | NULL, mpu3050_interrupt_thread, | 369 | NULL, mpu3050_interrupt_thread, |
| 261 | IRQF_TRIGGER_RISING, | 370 | IRQF_TRIGGER_RISING, |
| 262 | "mpu_int", sensor); | 371 | "mpu3050", sensor); |
| 263 | if (error) { | 372 | if (error) { |
| 264 | dev_err(&client->dev, | 373 | dev_err(&client->dev, |
| 265 | "can't get IRQ %d, error %d\n", client->irq, error); | 374 | "can't get IRQ %d, error %d\n", client->irq, error); |
| @@ -348,11 +457,18 @@ static const struct i2c_device_id mpu3050_ids[] = { | |||
| 348 | }; | 457 | }; |
| 349 | MODULE_DEVICE_TABLE(i2c, mpu3050_ids); | 458 | MODULE_DEVICE_TABLE(i2c, mpu3050_ids); |
| 350 | 459 | ||
| 460 | static const struct of_device_id mpu3050_of_match[] = { | ||
| 461 | { .compatible = "invn,mpu3050", }, | ||
| 462 | { }, | ||
| 463 | }; | ||
| 464 | MODULE_DEVICE_TABLE(of, mpu3050_of_match); | ||
| 465 | |||
| 351 | static struct i2c_driver mpu3050_i2c_driver = { | 466 | static struct i2c_driver mpu3050_i2c_driver = { |
| 352 | .driver = { | 467 | .driver = { |
| 353 | .name = "mpu3050", | 468 | .name = "mpu3050", |
| 354 | .owner = THIS_MODULE, | 469 | .owner = THIS_MODULE, |
| 355 | .pm = &mpu3050_pm, | 470 | .pm = &mpu3050_pm, |
| 471 | .of_match_table = mpu3050_of_match, | ||
| 356 | }, | 472 | }, |
| 357 | .probe = mpu3050_probe, | 473 | .probe = mpu3050_probe, |
| 358 | .remove = __devexit_p(mpu3050_remove), | 474 | .remove = __devexit_p(mpu3050_remove), |
diff --git a/drivers/input/misc/pcap_keys.c b/drivers/input/misc/pcap_keys.c index 99335c286250..e09b4fe81913 100644 --- a/drivers/input/misc/pcap_keys.c +++ b/drivers/input/misc/pcap_keys.c | |||
| @@ -125,19 +125,7 @@ static struct platform_driver pcap_keys_device_driver = { | |||
| 125 | .owner = THIS_MODULE, | 125 | .owner = THIS_MODULE, |
| 126 | } | 126 | } |
| 127 | }; | 127 | }; |
| 128 | 128 | module_platform_driver(pcap_keys_device_driver); | |
| 129 | static int __init pcap_keys_init(void) | ||
| 130 | { | ||
| 131 | return platform_driver_register(&pcap_keys_device_driver); | ||
| 132 | }; | ||
| 133 | |||
| 134 | static void __exit pcap_keys_exit(void) | ||
| 135 | { | ||
| 136 | platform_driver_unregister(&pcap_keys_device_driver); | ||
| 137 | }; | ||
| 138 | |||
| 139 | module_init(pcap_keys_init); | ||
| 140 | module_exit(pcap_keys_exit); | ||
| 141 | 129 | ||
| 142 | MODULE_DESCRIPTION("Motorola PCAP2 input events driver"); | 130 | MODULE_DESCRIPTION("Motorola PCAP2 input events driver"); |
| 143 | MODULE_AUTHOR("Ilya Petrov <ilya.muromec@gmail.com>"); | 131 | MODULE_AUTHOR("Ilya Petrov <ilya.muromec@gmail.com>"); |
diff --git a/drivers/input/misc/pcf50633-input.c b/drivers/input/misc/pcf50633-input.c index 95562735728d..53891de80b0e 100644 --- a/drivers/input/misc/pcf50633-input.c +++ b/drivers/input/misc/pcf50633-input.c | |||
| @@ -113,18 +113,7 @@ static struct platform_driver pcf50633_input_driver = { | |||
| 113 | .probe = pcf50633_input_probe, | 113 | .probe = pcf50633_input_probe, |
| 114 | .remove = __devexit_p(pcf50633_input_remove), | 114 | .remove = __devexit_p(pcf50633_input_remove), |
| 115 | }; | 115 | }; |
| 116 | 116 | module_platform_driver(pcf50633_input_driver); | |
| 117 | static int __init pcf50633_input_init(void) | ||
| 118 | { | ||
| 119 | return platform_driver_register(&pcf50633_input_driver); | ||
| 120 | } | ||
| 121 | module_init(pcf50633_input_init); | ||
| 122 | |||
| 123 | static void __exit pcf50633_input_exit(void) | ||
| 124 | { | ||
| 125 | platform_driver_unregister(&pcf50633_input_driver); | ||
| 126 | } | ||
| 127 | module_exit(pcf50633_input_exit); | ||
| 128 | 117 | ||
| 129 | MODULE_AUTHOR("Balaji Rao <balajirrao@openmoko.org>"); | 118 | MODULE_AUTHOR("Balaji Rao <balajirrao@openmoko.org>"); |
| 130 | MODULE_DESCRIPTION("PCF50633 input driver"); | 119 | MODULE_DESCRIPTION("PCF50633 input driver"); |
diff --git a/drivers/input/misc/pcspkr.c b/drivers/input/misc/pcspkr.c index 34f4d2e0f50f..b2484aa07f32 100644 --- a/drivers/input/misc/pcspkr.c +++ b/drivers/input/misc/pcspkr.c | |||
| @@ -134,17 +134,5 @@ static struct platform_driver pcspkr_platform_driver = { | |||
| 134 | .remove = __devexit_p(pcspkr_remove), | 134 | .remove = __devexit_p(pcspkr_remove), |
| 135 | .shutdown = pcspkr_shutdown, | 135 | .shutdown = pcspkr_shutdown, |
| 136 | }; | 136 | }; |
| 137 | module_platform_driver(pcspkr_platform_driver); | ||
| 137 | 138 | ||
| 138 | |||
| 139 | static int __init pcspkr_init(void) | ||
| 140 | { | ||
| 141 | return platform_driver_register(&pcspkr_platform_driver); | ||
| 142 | } | ||
| 143 | |||
| 144 | static void __exit pcspkr_exit(void) | ||
| 145 | { | ||
| 146 | platform_driver_unregister(&pcspkr_platform_driver); | ||
| 147 | } | ||
| 148 | |||
| 149 | module_init(pcspkr_init); | ||
| 150 | module_exit(pcspkr_exit); | ||
diff --git a/drivers/input/misc/pm8xxx-vibrator.c b/drivers/input/misc/pm8xxx-vibrator.c index 43192930824b..dfbfb463ea5d 100644 --- a/drivers/input/misc/pm8xxx-vibrator.c +++ b/drivers/input/misc/pm8xxx-vibrator.c | |||
| @@ -277,18 +277,7 @@ static struct platform_driver pm8xxx_vib_driver = { | |||
| 277 | .pm = &pm8xxx_vib_pm_ops, | 277 | .pm = &pm8xxx_vib_pm_ops, |
| 278 | }, | 278 | }, |
| 279 | }; | 279 | }; |
| 280 | 280 | module_platform_driver(pm8xxx_vib_driver); | |
| 281 | static int __init pm8xxx_vib_init(void) | ||
| 282 | { | ||
| 283 | return platform_driver_register(&pm8xxx_vib_driver); | ||
| 284 | } | ||
| 285 | module_init(pm8xxx_vib_init); | ||
| 286 | |||
| 287 | static void __exit pm8xxx_vib_exit(void) | ||
| 288 | { | ||
| 289 | platform_driver_unregister(&pm8xxx_vib_driver); | ||
| 290 | } | ||
| 291 | module_exit(pm8xxx_vib_exit); | ||
| 292 | 281 | ||
| 293 | MODULE_ALIAS("platform:pm8xxx_vib"); | 282 | MODULE_ALIAS("platform:pm8xxx_vib"); |
| 294 | MODULE_DESCRIPTION("PMIC8xxx vibrator driver based on ff-memless framework"); | 283 | MODULE_DESCRIPTION("PMIC8xxx vibrator driver based on ff-memless framework"); |
diff --git a/drivers/input/misc/pmic8xxx-pwrkey.c b/drivers/input/misc/pmic8xxx-pwrkey.c index b3cfb9c71e66..0f83d0f1d015 100644 --- a/drivers/input/misc/pmic8xxx-pwrkey.c +++ b/drivers/input/misc/pmic8xxx-pwrkey.c | |||
| @@ -213,18 +213,7 @@ static struct platform_driver pmic8xxx_pwrkey_driver = { | |||
| 213 | .pm = &pm8xxx_pwr_key_pm_ops, | 213 | .pm = &pm8xxx_pwr_key_pm_ops, |
| 214 | }, | 214 | }, |
| 215 | }; | 215 | }; |
| 216 | 216 | module_platform_driver(pmic8xxx_pwrkey_driver); | |
| 217 | static int __init pmic8xxx_pwrkey_init(void) | ||
| 218 | { | ||
| 219 | return platform_driver_register(&pmic8xxx_pwrkey_driver); | ||
| 220 | } | ||
| 221 | module_init(pmic8xxx_pwrkey_init); | ||
| 222 | |||
| 223 | static void __exit pmic8xxx_pwrkey_exit(void) | ||
| 224 | { | ||
| 225 | platform_driver_unregister(&pmic8xxx_pwrkey_driver); | ||
| 226 | } | ||
| 227 | module_exit(pmic8xxx_pwrkey_exit); | ||
| 228 | 217 | ||
| 229 | MODULE_ALIAS("platform:pmic8xxx_pwrkey"); | 218 | MODULE_ALIAS("platform:pmic8xxx_pwrkey"); |
| 230 | MODULE_DESCRIPTION("PMIC8XXX Power Key driver"); | 219 | MODULE_DESCRIPTION("PMIC8XXX Power Key driver"); |
diff --git a/drivers/input/misc/pwm-beeper.c b/drivers/input/misc/pwm-beeper.c index 57c294f07198..fc84c8a51147 100644 --- a/drivers/input/misc/pwm-beeper.c +++ b/drivers/input/misc/pwm-beeper.c | |||
| @@ -180,18 +180,7 @@ static struct platform_driver pwm_beeper_driver = { | |||
| 180 | .pm = PWM_BEEPER_PM_OPS, | 180 | .pm = PWM_BEEPER_PM_OPS, |
| 181 | }, | 181 | }, |
| 182 | }; | 182 | }; |
| 183 | 183 | module_platform_driver(pwm_beeper_driver); | |
| 184 | static int __init pwm_beeper_init(void) | ||
| 185 | { | ||
| 186 | return platform_driver_register(&pwm_beeper_driver); | ||
| 187 | } | ||
| 188 | module_init(pwm_beeper_init); | ||
| 189 | |||
| 190 | static void __exit pwm_beeper_exit(void) | ||
| 191 | { | ||
| 192 | platform_driver_unregister(&pwm_beeper_driver); | ||
| 193 | } | ||
| 194 | module_exit(pwm_beeper_exit); | ||
| 195 | 184 | ||
| 196 | MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>"); | 185 | MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>"); |
| 197 | MODULE_DESCRIPTION("PWM beeper driver"); | 186 | MODULE_DESCRIPTION("PWM beeper driver"); |
diff --git a/drivers/input/misc/rb532_button.c b/drivers/input/misc/rb532_button.c index e2c7f622a0b5..aeb02bcf7233 100644 --- a/drivers/input/misc/rb532_button.c +++ b/drivers/input/misc/rb532_button.c | |||
| @@ -100,19 +100,7 @@ static struct platform_driver rb532_button_driver = { | |||
| 100 | .owner = THIS_MODULE, | 100 | .owner = THIS_MODULE, |
| 101 | }, | 101 | }, |
| 102 | }; | 102 | }; |
| 103 | 103 | module_platform_driver(rb532_button_driver); | |
| 104 | static int __init rb532_button_init(void) | ||
| 105 | { | ||
| 106 | return platform_driver_register(&rb532_button_driver); | ||
| 107 | } | ||
| 108 | |||
| 109 | static void __exit rb532_button_exit(void) | ||
| 110 | { | ||
| 111 | platform_driver_unregister(&rb532_button_driver); | ||
| 112 | } | ||
| 113 | |||
| 114 | module_init(rb532_button_init); | ||
| 115 | module_exit(rb532_button_exit); | ||
| 116 | 104 | ||
| 117 | MODULE_AUTHOR("Phil Sutter <n0-1@freewrt.org>"); | 105 | MODULE_AUTHOR("Phil Sutter <n0-1@freewrt.org>"); |
| 118 | MODULE_LICENSE("GPL"); | 106 | MODULE_LICENSE("GPL"); |
diff --git a/drivers/input/misc/rotary_encoder.c b/drivers/input/misc/rotary_encoder.c index 2be21694fac1..f07f784198b9 100644 --- a/drivers/input/misc/rotary_encoder.c +++ b/drivers/input/misc/rotary_encoder.c | |||
| @@ -284,19 +284,7 @@ static struct platform_driver rotary_encoder_driver = { | |||
| 284 | .owner = THIS_MODULE, | 284 | .owner = THIS_MODULE, |
| 285 | } | 285 | } |
| 286 | }; | 286 | }; |
| 287 | 287 | module_platform_driver(rotary_encoder_driver); | |
| 288 | static int __init rotary_encoder_init(void) | ||
| 289 | { | ||
| 290 | return platform_driver_register(&rotary_encoder_driver); | ||
| 291 | } | ||
| 292 | |||
| 293 | static void __exit rotary_encoder_exit(void) | ||
| 294 | { | ||
| 295 | platform_driver_unregister(&rotary_encoder_driver); | ||
| 296 | } | ||
| 297 | |||
| 298 | module_init(rotary_encoder_init); | ||
| 299 | module_exit(rotary_encoder_exit); | ||
| 300 | 288 | ||
| 301 | MODULE_ALIAS("platform:" DRV_NAME); | 289 | MODULE_ALIAS("platform:" DRV_NAME); |
| 302 | MODULE_DESCRIPTION("GPIO rotary encoder driver"); | 290 | MODULE_DESCRIPTION("GPIO rotary encoder driver"); |
diff --git a/drivers/input/misc/sgi_btns.c b/drivers/input/misc/sgi_btns.c index 1a80c0dab83b..5d9fd5571199 100644 --- a/drivers/input/misc/sgi_btns.c +++ b/drivers/input/misc/sgi_btns.c | |||
| @@ -164,17 +164,6 @@ static struct platform_driver sgi_buttons_driver = { | |||
| 164 | .owner = THIS_MODULE, | 164 | .owner = THIS_MODULE, |
| 165 | }, | 165 | }, |
| 166 | }; | 166 | }; |
| 167 | 167 | module_platform_driver(sgi_buttons_driver); | |
| 168 | static int __init sgi_buttons_init(void) | ||
| 169 | { | ||
| 170 | return platform_driver_register(&sgi_buttons_driver); | ||
| 171 | } | ||
| 172 | |||
| 173 | static void __exit sgi_buttons_exit(void) | ||
| 174 | { | ||
| 175 | platform_driver_unregister(&sgi_buttons_driver); | ||
| 176 | } | ||
| 177 | 168 | ||
| 178 | MODULE_LICENSE("GPL"); | 169 | MODULE_LICENSE("GPL"); |
| 179 | module_init(sgi_buttons_init); | ||
| 180 | module_exit(sgi_buttons_exit); | ||
diff --git a/drivers/input/misc/twl4030-pwrbutton.c b/drivers/input/misc/twl4030-pwrbutton.c index 38e4b507b94c..19a68828cd86 100644 --- a/drivers/input/misc/twl4030-pwrbutton.c +++ b/drivers/input/misc/twl4030-pwrbutton.c | |||
| @@ -107,25 +107,14 @@ static int __exit twl4030_pwrbutton_remove(struct platform_device *pdev) | |||
| 107 | } | 107 | } |
| 108 | 108 | ||
| 109 | static struct platform_driver twl4030_pwrbutton_driver = { | 109 | static struct platform_driver twl4030_pwrbutton_driver = { |
| 110 | .probe = twl4030_pwrbutton_probe, | ||
| 110 | .remove = __exit_p(twl4030_pwrbutton_remove), | 111 | .remove = __exit_p(twl4030_pwrbutton_remove), |
| 111 | .driver = { | 112 | .driver = { |
| 112 | .name = "twl4030_pwrbutton", | 113 | .name = "twl4030_pwrbutton", |
| 113 | .owner = THIS_MODULE, | 114 | .owner = THIS_MODULE, |
| 114 | }, | 115 | }, |
| 115 | }; | 116 | }; |
| 116 | 117 | module_platform_driver(twl4030_pwrbutton_driver); | |
| 117 | static int __init twl4030_pwrbutton_init(void) | ||
| 118 | { | ||
| 119 | return platform_driver_probe(&twl4030_pwrbutton_driver, | ||
| 120 | twl4030_pwrbutton_probe); | ||
| 121 | } | ||
| 122 | module_init(twl4030_pwrbutton_init); | ||
| 123 | |||
| 124 | static void __exit twl4030_pwrbutton_exit(void) | ||
| 125 | { | ||
| 126 | platform_driver_unregister(&twl4030_pwrbutton_driver); | ||
| 127 | } | ||
| 128 | module_exit(twl4030_pwrbutton_exit); | ||
| 129 | 118 | ||
| 130 | MODULE_ALIAS("platform:twl4030_pwrbutton"); | 119 | MODULE_ALIAS("platform:twl4030_pwrbutton"); |
| 131 | MODULE_DESCRIPTION("Triton2 Power Button"); | 120 | MODULE_DESCRIPTION("Triton2 Power Button"); |
diff --git a/drivers/input/misc/twl4030-vibra.c b/drivers/input/misc/twl4030-vibra.c index 3c1a432c14dc..37651373a95b 100644 --- a/drivers/input/misc/twl4030-vibra.c +++ b/drivers/input/misc/twl4030-vibra.c | |||
| @@ -278,21 +278,9 @@ static struct platform_driver twl4030_vibra_driver = { | |||
| 278 | #endif | 278 | #endif |
| 279 | }, | 279 | }, |
| 280 | }; | 280 | }; |
| 281 | 281 | module_platform_driver(twl4030_vibra_driver); | |
| 282 | static int __init twl4030_vibra_init(void) | ||
| 283 | { | ||
| 284 | return platform_driver_register(&twl4030_vibra_driver); | ||
| 285 | } | ||
| 286 | module_init(twl4030_vibra_init); | ||
| 287 | |||
| 288 | static void __exit twl4030_vibra_exit(void) | ||
| 289 | { | ||
| 290 | platform_driver_unregister(&twl4030_vibra_driver); | ||
| 291 | } | ||
| 292 | module_exit(twl4030_vibra_exit); | ||
| 293 | 282 | ||
| 294 | MODULE_ALIAS("platform:twl4030-vibra"); | 283 | MODULE_ALIAS("platform:twl4030-vibra"); |
| 295 | |||
| 296 | MODULE_DESCRIPTION("TWL4030 Vibra driver"); | 284 | MODULE_DESCRIPTION("TWL4030 Vibra driver"); |
| 297 | MODULE_LICENSE("GPL"); | 285 | MODULE_LICENSE("GPL"); |
| 298 | MODULE_AUTHOR("Nokia Corporation"); | 286 | MODULE_AUTHOR("Nokia Corporation"); |
diff --git a/drivers/input/misc/twl6040-vibra.c b/drivers/input/misc/twl6040-vibra.c index ad153a417eed..45874fed523a 100644 --- a/drivers/input/misc/twl6040-vibra.c +++ b/drivers/input/misc/twl6040-vibra.c | |||
| @@ -410,18 +410,7 @@ static struct platform_driver twl6040_vibra_driver = { | |||
| 410 | .pm = &twl6040_vibra_pm_ops, | 410 | .pm = &twl6040_vibra_pm_ops, |
| 411 | }, | 411 | }, |
| 412 | }; | 412 | }; |
| 413 | 413 | module_platform_driver(twl6040_vibra_driver); | |
| 414 | static int __init twl6040_vibra_init(void) | ||
| 415 | { | ||
| 416 | return platform_driver_register(&twl6040_vibra_driver); | ||
| 417 | } | ||
| 418 | module_init(twl6040_vibra_init); | ||
| 419 | |||
| 420 | static void __exit twl6040_vibra_exit(void) | ||
| 421 | { | ||
| 422 | platform_driver_unregister(&twl6040_vibra_driver); | ||
| 423 | } | ||
| 424 | module_exit(twl6040_vibra_exit); | ||
| 425 | 414 | ||
| 426 | MODULE_ALIAS("platform:twl6040-vibra"); | 415 | MODULE_ALIAS("platform:twl6040-vibra"); |
| 427 | MODULE_DESCRIPTION("TWL6040 Vibra driver"); | 416 | MODULE_DESCRIPTION("TWL6040 Vibra driver"); |
diff --git a/drivers/input/misc/wm831x-on.c b/drivers/input/misc/wm831x-on.c index c3d7ba5f5b47..47f18d6bce46 100644 --- a/drivers/input/misc/wm831x-on.c +++ b/drivers/input/misc/wm831x-on.c | |||
| @@ -145,18 +145,7 @@ static struct platform_driver wm831x_on_driver = { | |||
| 145 | .owner = THIS_MODULE, | 145 | .owner = THIS_MODULE, |
| 146 | }, | 146 | }, |
| 147 | }; | 147 | }; |
| 148 | 148 | module_platform_driver(wm831x_on_driver); | |
| 149 | static int __init wm831x_on_init(void) | ||
| 150 | { | ||
| 151 | return platform_driver_register(&wm831x_on_driver); | ||
| 152 | } | ||
| 153 | module_init(wm831x_on_init); | ||
| 154 | |||
| 155 | static void __exit wm831x_on_exit(void) | ||
| 156 | { | ||
| 157 | platform_driver_unregister(&wm831x_on_driver); | ||
| 158 | } | ||
| 159 | module_exit(wm831x_on_exit); | ||
| 160 | 149 | ||
| 161 | MODULE_ALIAS("platform:wm831x-on"); | 150 | MODULE_ALIAS("platform:wm831x-on"); |
| 162 | MODULE_DESCRIPTION("WM831x ON pin"); | 151 | MODULE_DESCRIPTION("WM831x ON pin"); |
