Lines Matching +full:poll +full:- +full:interval
17 * 02111-1307, USA
27 #include <linux/input-polldev.h>
67 * The following table lists the maximum appropriate poll interval for each
101 .addr = tj9->client->addr, in kxtj9_i2c_read()
102 .flags = tj9->client->flags, in kxtj9_i2c_read()
107 .addr = tj9->client->addr, in kxtj9_i2c_read()
108 .flags = tj9->client->flags | I2C_M_RD, in kxtj9_i2c_read()
114 return i2c_transfer(tj9->client->adapter, msgs, 2); in kxtj9_i2c_read()
125 dev_err(&tj9->client->dev, "accelerometer data read failed\n"); in kxtj9_report_acceleration_data()
127 x = le16_to_cpu(acc_data[tj9->pdata.axis_map_x]); in kxtj9_report_acceleration_data()
128 y = le16_to_cpu(acc_data[tj9->pdata.axis_map_y]); in kxtj9_report_acceleration_data()
129 z = le16_to_cpu(acc_data[tj9->pdata.axis_map_z]); in kxtj9_report_acceleration_data()
131 x >>= tj9->shift; in kxtj9_report_acceleration_data()
132 y >>= tj9->shift; in kxtj9_report_acceleration_data()
133 z >>= tj9->shift; in kxtj9_report_acceleration_data()
135 input_report_abs(tj9->input_dev, ABS_X, tj9->pdata.negate_x ? -x : x); in kxtj9_report_acceleration_data()
136 input_report_abs(tj9->input_dev, ABS_Y, tj9->pdata.negate_y ? -y : y); in kxtj9_report_acceleration_data()
137 input_report_abs(tj9->input_dev, ABS_Z, tj9->pdata.negate_z ? -z : z); in kxtj9_report_acceleration_data()
138 input_sync(tj9->input_dev); in kxtj9_report_acceleration_data()
149 err = i2c_smbus_read_byte_data(tj9->client, INT_REL); in kxtj9_isr()
151 dev_err(&tj9->client->dev, in kxtj9_isr()
161 tj9->shift = 4; in kxtj9_update_g_range()
164 tj9->shift = 3; in kxtj9_update_g_range()
167 tj9->shift = 2; in kxtj9_update_g_range()
170 return -EINVAL; in kxtj9_update_g_range()
173 tj9->ctrl_reg1 &= 0xe7; in kxtj9_update_g_range()
174 tj9->ctrl_reg1 |= new_g_range; in kxtj9_update_g_range()
184 /* Use the lowest ODR that can support the requested poll interval */ in kxtj9_update_odr()
186 tj9->data_ctrl = kxtj9_odr_table[i].mask; in kxtj9_update_odr()
191 err = i2c_smbus_write_byte_data(tj9->client, CTRL_REG1, 0); in kxtj9_update_odr()
195 err = i2c_smbus_write_byte_data(tj9->client, DATA_CTRL, tj9->data_ctrl); in kxtj9_update_odr()
199 err = i2c_smbus_write_byte_data(tj9->client, CTRL_REG1, tj9->ctrl_reg1); in kxtj9_update_odr()
208 if (tj9->pdata.power_on) in kxtj9_device_power_on()
209 return tj9->pdata.power_on(); in kxtj9_device_power_on()
218 tj9->ctrl_reg1 &= PC1_OFF; in kxtj9_device_power_off()
219 err = i2c_smbus_write_byte_data(tj9->client, CTRL_REG1, tj9->ctrl_reg1); in kxtj9_device_power_off()
221 dev_err(&tj9->client->dev, "soft power off failed\n"); in kxtj9_device_power_off()
223 if (tj9->pdata.power_off) in kxtj9_device_power_off()
224 tj9->pdata.power_off(); in kxtj9_device_power_off()
236 err = i2c_smbus_write_byte_data(tj9->client, CTRL_REG1, 0); in kxtj9_enable()
241 if (tj9->client->irq) { in kxtj9_enable()
242 err = i2c_smbus_write_byte_data(tj9->client, in kxtj9_enable()
243 INT_CTRL1, tj9->int_ctrl); in kxtj9_enable()
248 err = kxtj9_update_g_range(tj9, tj9->pdata.g_range); in kxtj9_enable()
253 tj9->ctrl_reg1 |= PC1_ON; in kxtj9_enable()
254 err = i2c_smbus_write_byte_data(tj9->client, CTRL_REG1, tj9->ctrl_reg1); in kxtj9_enable()
258 err = kxtj9_update_odr(tj9, tj9->last_poll_interval); in kxtj9_enable()
263 if (tj9->client->irq) { in kxtj9_enable()
264 err = i2c_smbus_read_byte_data(tj9->client, INT_REL); in kxtj9_enable()
266 dev_err(&tj9->client->dev, in kxtj9_enable()
301 __set_bit(EV_ABS, input_dev->evbit); in kxtj9_init_input_device()
302 input_set_abs_params(input_dev, ABS_X, -G_MAX, G_MAX, FUZZ, FLAT); in kxtj9_init_input_device()
303 input_set_abs_params(input_dev, ABS_Y, -G_MAX, G_MAX, FUZZ, FLAT); in kxtj9_init_input_device()
304 input_set_abs_params(input_dev, ABS_Z, -G_MAX, G_MAX, FUZZ, FLAT); in kxtj9_init_input_device()
306 input_dev->name = "kxtj9_accel"; in kxtj9_init_input_device()
307 input_dev->id.bustype = BUS_I2C; in kxtj9_init_input_device()
308 input_dev->dev.parent = &tj9->client->dev; in kxtj9_init_input_device()
318 dev_err(&tj9->client->dev, "input device allocate failed\n"); in kxtj9_setup_input_device()
319 return -ENOMEM; in kxtj9_setup_input_device()
322 tj9->input_dev = input_dev; in kxtj9_setup_input_device()
324 input_dev->open = kxtj9_input_open; in kxtj9_setup_input_device()
325 input_dev->close = kxtj9_input_close; in kxtj9_setup_input_device()
330 err = input_register_device(tj9->input_dev); in kxtj9_setup_input_device()
332 dev_err(&tj9->client->dev, in kxtj9_setup_input_device()
334 tj9->input_dev->name, err); in kxtj9_setup_input_device()
335 input_free_device(tj9->input_dev); in kxtj9_setup_input_device()
345 * the set_poll method, which accepts a poll interval in milliseconds, and then
347 * data outputs will not be read AT the requested poll interval, rather, the
348 * lowest ODR that can support the requested interval. The client application
350 * interval.
353 /* Returns currently selected poll interval (in ms) */
360 return sprintf(buf, "%d\n", tj9->last_poll_interval); in kxtj9_get_poll()
363 /* Allow users to select a new poll interval (in ms) */
369 struct input_dev *input_dev = tj9->input_dev; in kxtj9_set_poll()
370 unsigned int interval; in kxtj9_set_poll() local
373 error = kstrtouint(buf, 10, &interval); in kxtj9_set_poll()
378 mutex_lock(&input_dev->mutex); in kxtj9_set_poll()
380 disable_irq(client->irq); in kxtj9_set_poll()
383 * Set current interval to the greater of the minimum interval or in kxtj9_set_poll()
384 * the requested interval in kxtj9_set_poll()
386 tj9->last_poll_interval = max(interval, tj9->pdata.min_interval); in kxtj9_set_poll()
388 kxtj9_update_odr(tj9, tj9->last_poll_interval); in kxtj9_set_poll()
390 enable_irq(client->irq); in kxtj9_set_poll()
391 mutex_unlock(&input_dev->mutex); in kxtj9_set_poll()
396 static DEVICE_ATTR(poll, S_IRUGO|S_IWUSR, kxtj9_get_poll, kxtj9_set_poll);
411 struct kxtj9_data *tj9 = dev->private; in kxtj9_poll()
412 unsigned int poll_interval = dev->poll_interval; in kxtj9_poll()
416 if (poll_interval != tj9->last_poll_interval) { in kxtj9_poll()
418 tj9->last_poll_interval = poll_interval; in kxtj9_poll()
424 struct kxtj9_data *tj9 = dev->private; in kxtj9_polled_input_open()
431 struct kxtj9_data *tj9 = dev->private; in kxtj9_polled_input_close()
443 dev_err(&tj9->client->dev, in kxtj9_setup_polled_device()
445 return -ENOMEM; in kxtj9_setup_polled_device()
448 tj9->poll_dev = poll_dev; in kxtj9_setup_polled_device()
449 tj9->input_dev = poll_dev->input; in kxtj9_setup_polled_device()
451 poll_dev->private = tj9; in kxtj9_setup_polled_device()
452 poll_dev->poll = kxtj9_poll; in kxtj9_setup_polled_device()
453 poll_dev->open = kxtj9_polled_input_open; in kxtj9_setup_polled_device()
454 poll_dev->close = kxtj9_polled_input_close; in kxtj9_setup_polled_device()
456 kxtj9_init_input_device(tj9, poll_dev->input); in kxtj9_setup_polled_device()
460 dev_err(&tj9->client->dev, in kxtj9_setup_polled_device()
471 input_unregister_polled_device(tj9->poll_dev); in kxtj9_teardown_polled_device()
472 input_free_polled_device(tj9->poll_dev); in kxtj9_teardown_polled_device()
479 return -ENOSYS; in kxtj9_setup_polled_device()
496 retval = i2c_smbus_read_byte_data(tj9->client, WHO_AM_I); in kxtj9_verify()
498 dev_err(&tj9->client->dev, "read err int source\n"); in kxtj9_verify()
502 retval = (retval != 0x07 && retval != 0x08) ? -EIO : 0; in kxtj9_verify()
513 dev_get_platdata(&client->dev); in kxtj9_probe()
517 if (!i2c_check_functionality(client->adapter, in kxtj9_probe()
519 dev_err(&client->dev, "client is not i2c capable\n"); in kxtj9_probe()
520 return -ENXIO; in kxtj9_probe()
524 dev_err(&client->dev, "platform data is NULL; exiting\n"); in kxtj9_probe()
525 return -EINVAL; in kxtj9_probe()
530 dev_err(&client->dev, in kxtj9_probe()
532 return -ENOMEM; in kxtj9_probe()
535 tj9->client = client; in kxtj9_probe()
536 tj9->pdata = *pdata; in kxtj9_probe()
538 if (pdata->init) { in kxtj9_probe()
539 err = pdata->init(); in kxtj9_probe()
546 dev_err(&client->dev, "device not recognized\n"); in kxtj9_probe()
552 tj9->ctrl_reg1 = tj9->pdata.res_12bit | tj9->pdata.g_range; in kxtj9_probe()
553 tj9->last_poll_interval = tj9->pdata.init_interval; in kxtj9_probe()
555 if (client->irq) { in kxtj9_probe()
557 tj9->int_ctrl |= KXTJ9_IEN | KXTJ9_IEA | KXTJ9_IEL; in kxtj9_probe()
558 tj9->ctrl_reg1 |= DRDYE; in kxtj9_probe()
564 err = request_threaded_irq(client->irq, NULL, kxtj9_isr, in kxtj9_probe()
566 "kxtj9-irq", tj9); in kxtj9_probe()
568 dev_err(&client->dev, "request irq failed: %d\n", err); in kxtj9_probe()
572 err = sysfs_create_group(&client->dev.kobj, &kxtj9_attribute_group); in kxtj9_probe()
574 dev_err(&client->dev, "sysfs create failed: %d\n", err); in kxtj9_probe()
587 free_irq(client->irq, tj9); in kxtj9_probe()
589 input_unregister_device(tj9->input_dev); in kxtj9_probe()
591 if (tj9->pdata.exit) in kxtj9_probe()
592 tj9->pdata.exit(); in kxtj9_probe()
602 if (client->irq) { in kxtj9_remove()
603 sysfs_remove_group(&client->dev.kobj, &kxtj9_attribute_group); in kxtj9_remove()
604 free_irq(client->irq, tj9); in kxtj9_remove()
605 input_unregister_device(tj9->input_dev); in kxtj9_remove()
610 if (tj9->pdata.exit) in kxtj9_remove()
611 tj9->pdata.exit(); in kxtj9_remove()
622 struct input_dev *input_dev = tj9->input_dev; in kxtj9_suspend()
624 mutex_lock(&input_dev->mutex); in kxtj9_suspend()
626 if (input_dev->users) in kxtj9_suspend()
629 mutex_unlock(&input_dev->mutex); in kxtj9_suspend()
637 struct input_dev *input_dev = tj9->input_dev; in kxtj9_resume()
639 mutex_lock(&input_dev->mutex); in kxtj9_resume()
641 if (input_dev->users) in kxtj9_resume()
644 mutex_unlock(&input_dev->mutex); in kxtj9_resume()