Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

HWMON: ams - convert to use input-polldev

Switch to using input-polldev skeleton instead of implementing polling
loop by itself.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Acked-by: Michael Hanselmann <linux-kernel@hansmi.ch>

+35 -47
+1
drivers/hwmon/Kconfig
··· 131 131 config SENSORS_AMS 132 132 tristate "Apple Motion Sensor driver" 133 133 depends on PPC_PMAC && !PPC64 && INPUT && ((ADB_PMU && I2C = y) || (ADB_PMU && !I2C) || I2C) && EXPERIMENTAL 134 + select INPUT_POLLDEV 134 135 help 135 136 Support for the motion sensor included in PowerBooks. Includes 136 137 implementations for PMU and I2C.
+32 -44
drivers/hwmon/ams/ams-input.c
··· 27 27 module_param(invert, bool, 0644); 28 28 MODULE_PARM_DESC(invert, "Invert input data on X and Y axis"); 29 29 30 - static int ams_input_kthread(void *data) 30 + static void ams_idev_poll(struct input_polled_dev *dev) 31 31 { 32 + struct input_dev *idev = dev->input; 32 33 s8 x, y, z; 33 34 34 - while (!kthread_should_stop()) { 35 - mutex_lock(&ams_info.lock); 35 + mutex_lock(&ams_info.lock); 36 36 37 - ams_sensors(&x, &y, &z); 37 + ams_sensors(&x, &y, &z); 38 38 39 - x -= ams_info.xcalib; 40 - y -= ams_info.ycalib; 41 - z -= ams_info.zcalib; 39 + x -= ams_info.xcalib; 40 + y -= ams_info.ycalib; 41 + z -= ams_info.zcalib; 42 42 43 - input_report_abs(ams_info.idev, ABS_X, invert ? -x : x); 44 - input_report_abs(ams_info.idev, ABS_Y, invert ? -y : y); 45 - input_report_abs(ams_info.idev, ABS_Z, z); 43 + input_report_abs(idev, ABS_X, invert ? -x : x); 44 + input_report_abs(idev, ABS_Y, invert ? -y : y); 45 + input_report_abs(idev, ABS_Z, z); 46 46 47 - input_sync(ams_info.idev); 47 + input_sync(idev); 48 48 49 - mutex_unlock(&ams_info.lock); 50 - 51 - msleep(25); 52 - } 53 - 54 - return 0; 55 - } 56 - 57 - static int ams_input_open(struct input_dev *dev) 58 - { 59 - ams_info.kthread = kthread_run(ams_input_kthread, NULL, "kams"); 60 - return IS_ERR(ams_info.kthread) ? PTR_ERR(ams_info.kthread) : 0; 61 - } 62 - 63 - static void ams_input_close(struct input_dev *dev) 64 - { 65 - kthread_stop(ams_info.kthread); 49 + mutex_unlock(&ams_info.lock); 66 50 } 67 51 68 52 /* Call with ams_info.lock held! */ 69 53 static void ams_input_enable(void) 70 54 { 55 + struct input_dev *input; 71 56 s8 x, y, z; 72 57 73 58 if (ams_info.idev) ··· 63 78 ams_info.ycalib = y; 64 79 ams_info.zcalib = z; 65 80 66 - ams_info.idev = input_allocate_device(); 81 + ams_info.idev = input_allocate_polled_device(); 67 82 if (!ams_info.idev) 68 83 return; 69 84 70 - ams_info.idev->name = "Apple Motion Sensor"; 71 - ams_info.idev->id.bustype = ams_info.bustype; 72 - ams_info.idev->id.vendor = 0; 73 - ams_info.idev->open = ams_input_open; 74 - ams_info.idev->close = ams_input_close; 75 - ams_info.idev->dev.parent = &ams_info.of_dev->dev; 85 + ams_info.idev->poll = ams_idev_poll; 86 + ams_info.idev->poll_interval = 25; 76 87 77 - input_set_abs_params(ams_info.idev, ABS_X, -50, 50, 3, 0); 78 - input_set_abs_params(ams_info.idev, ABS_Y, -50, 50, 3, 0); 79 - input_set_abs_params(ams_info.idev, ABS_Z, -50, 50, 3, 0); 88 + input = ams_info.idev->input; 89 + input->name = "Apple Motion Sensor"; 90 + input->id.bustype = ams_info.bustype; 91 + input->id.vendor = 0; 92 + input->dev.parent = &ams_info.of_dev->dev; 80 93 81 - set_bit(EV_ABS, ams_info.idev->evbit); 82 - set_bit(EV_KEY, ams_info.idev->evbit); 83 - set_bit(BTN_TOUCH, ams_info.idev->keybit); 94 + input_set_abs_params(input, ABS_X, -50, 50, 3, 0); 95 + input_set_abs_params(input, ABS_Y, -50, 50, 3, 0); 96 + input_set_abs_params(input, ABS_Z, -50, 50, 3, 0); 84 97 85 - if (input_register_device(ams_info.idev)) { 86 - input_free_device(ams_info.idev); 98 + set_bit(EV_ABS, input->evbit); 99 + set_bit(EV_KEY, input->evbit); 100 + set_bit(BTN_TOUCH, input->keybit); 101 + 102 + if (input_register_polled_device(ams_info.idev)) { 103 + input_free_polled_device(ams_info.idev); 87 104 ams_info.idev = NULL; 88 105 return; 89 106 } ··· 95 108 static void ams_input_disable(void) 96 109 { 97 110 if (ams_info.idev) { 98 - input_unregister_device(ams_info.idev); 111 + input_unregister_polled_device(ams_info.idev); 112 + input_free_polled_device(ams_info.idev); 99 113 ams_info.idev = NULL; 100 114 } 101 115 }
+2 -3
drivers/hwmon/ams/ams.h
··· 1 1 #include <linux/i2c.h> 2 - #include <linux/input.h> 2 + #include <linux/input-polldev.h> 3 3 #include <linux/kthread.h> 4 4 #include <linux/mutex.h> 5 5 #include <linux/spinlock.h> ··· 52 52 #endif 53 53 54 54 /* Joystick emulation */ 55 - struct task_struct *kthread; 56 - struct input_dev *idev; 55 + struct input_polled_dev *idev; 57 56 __u16 bustype; 58 57 59 58 /* calibrated null values */