Lines Matching refs:tj9

97 static int kxtj9_i2c_read(struct kxtj9_data *tj9, u8 addr, u8 *data, int len)  in kxtj9_i2c_read()  argument
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()
117 static void kxtj9_report_acceleration_data(struct kxtj9_data *tj9) in kxtj9_report_acceleration_data() argument
123 err = kxtj9_i2c_read(tj9, XOUT_L, (u8 *)acc_data, 6); in kxtj9_report_acceleration_data()
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()
143 struct kxtj9_data *tj9 = dev; in kxtj9_isr() local
147 kxtj9_report_acceleration_data(tj9); in kxtj9_isr()
149 err = i2c_smbus_read_byte_data(tj9->client, INT_REL); in kxtj9_isr()
151 dev_err(&tj9->client->dev, in kxtj9_isr()
157 static int kxtj9_update_g_range(struct kxtj9_data *tj9, u8 new_g_range) in kxtj9_update_g_range() argument
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()
173 tj9->ctrl_reg1 &= 0xe7; in kxtj9_update_g_range()
174 tj9->ctrl_reg1 |= new_g_range; in kxtj9_update_g_range()
179 static int kxtj9_update_odr(struct kxtj9_data *tj9, unsigned int poll_interval) in kxtj9_update_odr() argument
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()
206 static int kxtj9_device_power_on(struct kxtj9_data *tj9) in kxtj9_device_power_on() argument
208 if (tj9->pdata.power_on) in kxtj9_device_power_on()
209 return tj9->pdata.power_on(); in kxtj9_device_power_on()
214 static void kxtj9_device_power_off(struct kxtj9_data *tj9) in kxtj9_device_power_off() argument
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()
227 static int kxtj9_enable(struct kxtj9_data *tj9) in kxtj9_enable() argument
231 err = kxtj9_device_power_on(tj9); in kxtj9_enable()
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()
275 kxtj9_device_power_off(tj9); in kxtj9_enable()
279 static void kxtj9_disable(struct kxtj9_data *tj9) in kxtj9_disable() argument
281 kxtj9_device_power_off(tj9); in kxtj9_disable()
286 struct kxtj9_data *tj9 = input_get_drvdata(input); in kxtj9_input_open() local
288 return kxtj9_enable(tj9); in kxtj9_input_open()
293 struct kxtj9_data *tj9 = input_get_drvdata(dev); in kxtj9_input_close() local
295 kxtj9_disable(tj9); in kxtj9_input_close()
298 static void kxtj9_init_input_device(struct kxtj9_data *tj9, in kxtj9_init_input_device() argument
308 input_dev->dev.parent = &tj9->client->dev; in kxtj9_init_input_device()
311 static int kxtj9_setup_input_device(struct kxtj9_data *tj9) in kxtj9_setup_input_device() argument
318 dev_err(&tj9->client->dev, "input device allocate failed\n"); in kxtj9_setup_input_device()
322 tj9->input_dev = input_dev; in kxtj9_setup_input_device()
326 input_set_drvdata(input_dev, tj9); in kxtj9_setup_input_device()
328 kxtj9_init_input_device(tj9, input_dev); 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()
358 struct kxtj9_data *tj9 = i2c_get_clientdata(client); in kxtj9_get_poll() local
360 return sprintf(buf, "%d\n", tj9->last_poll_interval); in kxtj9_get_poll()
368 struct kxtj9_data *tj9 = i2c_get_clientdata(client); in kxtj9_set_poll() local
369 struct input_dev *input_dev = tj9->input_dev; 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()
411 struct kxtj9_data *tj9 = dev->private; in kxtj9_poll() local
414 kxtj9_report_acceleration_data(tj9); in kxtj9_poll()
416 if (poll_interval != tj9->last_poll_interval) { in kxtj9_poll()
417 kxtj9_update_odr(tj9, 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() local
426 kxtj9_enable(tj9); in kxtj9_polled_input_open()
431 struct kxtj9_data *tj9 = dev->private; in kxtj9_polled_input_close() local
433 kxtj9_disable(tj9); in kxtj9_polled_input_close()
436 static int kxtj9_setup_polled_device(struct kxtj9_data *tj9) in kxtj9_setup_polled_device() argument
443 dev_err(&tj9->client->dev, 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()
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()
469 static void kxtj9_teardown_polled_device(struct kxtj9_data *tj9) in kxtj9_teardown_polled_device() argument
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()
477 static inline int kxtj9_setup_polled_device(struct kxtj9_data *tj9) in kxtj9_setup_polled_device() argument
482 static inline void kxtj9_teardown_polled_device(struct kxtj9_data *tj9) in kxtj9_teardown_polled_device() argument
488 static int kxtj9_verify(struct kxtj9_data *tj9) in kxtj9_verify() argument
492 retval = kxtj9_device_power_on(tj9); in kxtj9_verify()
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()
505 kxtj9_device_power_off(tj9); in kxtj9_verify()
514 struct kxtj9_data *tj9; in kxtj9_probe() local
528 tj9 = kzalloc(sizeof(*tj9), GFP_KERNEL); in kxtj9_probe()
529 if (!tj9) { in kxtj9_probe()
535 tj9->client = client; in kxtj9_probe()
536 tj9->pdata = *pdata; in kxtj9_probe()
544 err = kxtj9_verify(tj9); in kxtj9_probe()
550 i2c_set_clientdata(client, tj9); 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()
557 tj9->int_ctrl |= KXTJ9_IEN | KXTJ9_IEA | KXTJ9_IEL; in kxtj9_probe()
558 tj9->ctrl_reg1 |= DRDYE; in kxtj9_probe()
560 err = kxtj9_setup_input_device(tj9); in kxtj9_probe()
566 "kxtj9-irq", tj9); in kxtj9_probe()
579 err = kxtj9_setup_polled_device(tj9); 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()
594 kfree(tj9); in kxtj9_probe()
600 struct kxtj9_data *tj9 = i2c_get_clientdata(client); in kxtj9_remove() local
604 free_irq(client->irq, tj9); in kxtj9_remove()
605 input_unregister_device(tj9->input_dev); in kxtj9_remove()
607 kxtj9_teardown_polled_device(tj9); in kxtj9_remove()
610 if (tj9->pdata.exit) in kxtj9_remove()
611 tj9->pdata.exit(); in kxtj9_remove()
613 kfree(tj9); in kxtj9_remove()
621 struct kxtj9_data *tj9 = i2c_get_clientdata(client); in kxtj9_suspend() local
622 struct input_dev *input_dev = tj9->input_dev; in kxtj9_suspend()
627 kxtj9_disable(tj9); in kxtj9_suspend()
636 struct kxtj9_data *tj9 = i2c_get_clientdata(client); in kxtj9_resume() local
637 struct input_dev *input_dev = tj9->input_dev; in kxtj9_resume()
642 kxtj9_enable(tj9); in kxtj9_resume()