tj9                84 drivers/input/misc/kxtj9.c static int kxtj9_i2c_read(struct kxtj9_data *tj9, u8 addr, u8 *data, int len)
tj9                88 drivers/input/misc/kxtj9.c 			.addr = tj9->client->addr,
tj9                89 drivers/input/misc/kxtj9.c 			.flags = tj9->client->flags,
tj9                94 drivers/input/misc/kxtj9.c 			.addr = tj9->client->addr,
tj9                95 drivers/input/misc/kxtj9.c 			.flags = tj9->client->flags | I2C_M_RD,
tj9               101 drivers/input/misc/kxtj9.c 	return i2c_transfer(tj9->client->adapter, msgs, 2);
tj9               104 drivers/input/misc/kxtj9.c static void kxtj9_report_acceleration_data(struct kxtj9_data *tj9)
tj9               110 drivers/input/misc/kxtj9.c 	err = kxtj9_i2c_read(tj9, XOUT_L, (u8 *)acc_data, 6);
tj9               112 drivers/input/misc/kxtj9.c 		dev_err(&tj9->client->dev, "accelerometer data read failed\n");
tj9               114 drivers/input/misc/kxtj9.c 	x = le16_to_cpu(acc_data[tj9->pdata.axis_map_x]);
tj9               115 drivers/input/misc/kxtj9.c 	y = le16_to_cpu(acc_data[tj9->pdata.axis_map_y]);
tj9               116 drivers/input/misc/kxtj9.c 	z = le16_to_cpu(acc_data[tj9->pdata.axis_map_z]);
tj9               118 drivers/input/misc/kxtj9.c 	x >>= tj9->shift;
tj9               119 drivers/input/misc/kxtj9.c 	y >>= tj9->shift;
tj9               120 drivers/input/misc/kxtj9.c 	z >>= tj9->shift;
tj9               122 drivers/input/misc/kxtj9.c 	input_report_abs(tj9->input_dev, ABS_X, tj9->pdata.negate_x ? -x : x);
tj9               123 drivers/input/misc/kxtj9.c 	input_report_abs(tj9->input_dev, ABS_Y, tj9->pdata.negate_y ? -y : y);
tj9               124 drivers/input/misc/kxtj9.c 	input_report_abs(tj9->input_dev, ABS_Z, tj9->pdata.negate_z ? -z : z);
tj9               125 drivers/input/misc/kxtj9.c 	input_sync(tj9->input_dev);
tj9               130 drivers/input/misc/kxtj9.c 	struct kxtj9_data *tj9 = dev;
tj9               134 drivers/input/misc/kxtj9.c 	kxtj9_report_acceleration_data(tj9);
tj9               136 drivers/input/misc/kxtj9.c 	err = i2c_smbus_read_byte_data(tj9->client, INT_REL);
tj9               138 drivers/input/misc/kxtj9.c 		dev_err(&tj9->client->dev,
tj9               144 drivers/input/misc/kxtj9.c static int kxtj9_update_g_range(struct kxtj9_data *tj9, u8 new_g_range)
tj9               148 drivers/input/misc/kxtj9.c 		tj9->shift = 4;
tj9               151 drivers/input/misc/kxtj9.c 		tj9->shift = 3;
tj9               154 drivers/input/misc/kxtj9.c 		tj9->shift = 2;
tj9               160 drivers/input/misc/kxtj9.c 	tj9->ctrl_reg1 &= 0xe7;
tj9               161 drivers/input/misc/kxtj9.c 	tj9->ctrl_reg1 |= new_g_range;
tj9               166 drivers/input/misc/kxtj9.c static int kxtj9_update_odr(struct kxtj9_data *tj9, unsigned int poll_interval)
tj9               173 drivers/input/misc/kxtj9.c 		tj9->data_ctrl = kxtj9_odr_table[i].mask;
tj9               178 drivers/input/misc/kxtj9.c 	err = i2c_smbus_write_byte_data(tj9->client, CTRL_REG1, 0);
tj9               182 drivers/input/misc/kxtj9.c 	err = i2c_smbus_write_byte_data(tj9->client, DATA_CTRL, tj9->data_ctrl);
tj9               186 drivers/input/misc/kxtj9.c 	err = i2c_smbus_write_byte_data(tj9->client, CTRL_REG1, tj9->ctrl_reg1);
tj9               193 drivers/input/misc/kxtj9.c static int kxtj9_device_power_on(struct kxtj9_data *tj9)
tj9               195 drivers/input/misc/kxtj9.c 	if (tj9->pdata.power_on)
tj9               196 drivers/input/misc/kxtj9.c 		return tj9->pdata.power_on();
tj9               201 drivers/input/misc/kxtj9.c static void kxtj9_device_power_off(struct kxtj9_data *tj9)
tj9               205 drivers/input/misc/kxtj9.c 	tj9->ctrl_reg1 &= PC1_OFF;
tj9               206 drivers/input/misc/kxtj9.c 	err = i2c_smbus_write_byte_data(tj9->client, CTRL_REG1, tj9->ctrl_reg1);
tj9               208 drivers/input/misc/kxtj9.c 		dev_err(&tj9->client->dev, "soft power off failed\n");
tj9               210 drivers/input/misc/kxtj9.c 	if (tj9->pdata.power_off)
tj9               211 drivers/input/misc/kxtj9.c 		tj9->pdata.power_off();
tj9               214 drivers/input/misc/kxtj9.c static int kxtj9_enable(struct kxtj9_data *tj9)
tj9               218 drivers/input/misc/kxtj9.c 	err = kxtj9_device_power_on(tj9);
tj9               223 drivers/input/misc/kxtj9.c 	err = i2c_smbus_write_byte_data(tj9->client, CTRL_REG1, 0);
tj9               228 drivers/input/misc/kxtj9.c 	if (tj9->client->irq) {
tj9               229 drivers/input/misc/kxtj9.c 		err = i2c_smbus_write_byte_data(tj9->client,
tj9               230 drivers/input/misc/kxtj9.c 						INT_CTRL1, tj9->int_ctrl);
tj9               235 drivers/input/misc/kxtj9.c 	err = kxtj9_update_g_range(tj9, tj9->pdata.g_range);
tj9               240 drivers/input/misc/kxtj9.c 	tj9->ctrl_reg1 |= PC1_ON;
tj9               241 drivers/input/misc/kxtj9.c 	err = i2c_smbus_write_byte_data(tj9->client, CTRL_REG1, tj9->ctrl_reg1);
tj9               245 drivers/input/misc/kxtj9.c 	err = kxtj9_update_odr(tj9, tj9->last_poll_interval);
tj9               250 drivers/input/misc/kxtj9.c 	if (tj9->client->irq) {
tj9               251 drivers/input/misc/kxtj9.c 		err = i2c_smbus_read_byte_data(tj9->client, INT_REL);
tj9               253 drivers/input/misc/kxtj9.c 			dev_err(&tj9->client->dev,
tj9               262 drivers/input/misc/kxtj9.c 	kxtj9_device_power_off(tj9);
tj9               266 drivers/input/misc/kxtj9.c static void kxtj9_disable(struct kxtj9_data *tj9)
tj9               268 drivers/input/misc/kxtj9.c 	kxtj9_device_power_off(tj9);
tj9               273 drivers/input/misc/kxtj9.c 	struct kxtj9_data *tj9 = input_get_drvdata(input);
tj9               275 drivers/input/misc/kxtj9.c 	return kxtj9_enable(tj9);
tj9               280 drivers/input/misc/kxtj9.c 	struct kxtj9_data *tj9 = input_get_drvdata(dev);
tj9               282 drivers/input/misc/kxtj9.c 	kxtj9_disable(tj9);
tj9               285 drivers/input/misc/kxtj9.c static void kxtj9_init_input_device(struct kxtj9_data *tj9,
tj9               295 drivers/input/misc/kxtj9.c 	input_dev->dev.parent = &tj9->client->dev;
tj9               298 drivers/input/misc/kxtj9.c static int kxtj9_setup_input_device(struct kxtj9_data *tj9)
tj9               305 drivers/input/misc/kxtj9.c 		dev_err(&tj9->client->dev, "input device allocate failed\n");
tj9               309 drivers/input/misc/kxtj9.c 	tj9->input_dev = input_dev;
tj9               313 drivers/input/misc/kxtj9.c 	input_set_drvdata(input_dev, tj9);
tj9               315 drivers/input/misc/kxtj9.c 	kxtj9_init_input_device(tj9, input_dev);
tj9               317 drivers/input/misc/kxtj9.c 	err = input_register_device(tj9->input_dev);
tj9               319 drivers/input/misc/kxtj9.c 		dev_err(&tj9->client->dev,
tj9               321 drivers/input/misc/kxtj9.c 			tj9->input_dev->name, err);
tj9               322 drivers/input/misc/kxtj9.c 		input_free_device(tj9->input_dev);
tj9               345 drivers/input/misc/kxtj9.c 	struct kxtj9_data *tj9 = i2c_get_clientdata(client);
tj9               347 drivers/input/misc/kxtj9.c 	return sprintf(buf, "%d\n", tj9->last_poll_interval);
tj9               355 drivers/input/misc/kxtj9.c 	struct kxtj9_data *tj9 = i2c_get_clientdata(client);
tj9               356 drivers/input/misc/kxtj9.c 	struct input_dev *input_dev = tj9->input_dev;
tj9               373 drivers/input/misc/kxtj9.c 	tj9->last_poll_interval = max(interval, tj9->pdata.min_interval);
tj9               375 drivers/input/misc/kxtj9.c 	kxtj9_update_odr(tj9, tj9->last_poll_interval);
tj9               398 drivers/input/misc/kxtj9.c 	struct kxtj9_data *tj9 = dev->private;
tj9               401 drivers/input/misc/kxtj9.c 	kxtj9_report_acceleration_data(tj9);
tj9               403 drivers/input/misc/kxtj9.c 	if (poll_interval != tj9->last_poll_interval) {
tj9               404 drivers/input/misc/kxtj9.c 		kxtj9_update_odr(tj9, poll_interval);
tj9               405 drivers/input/misc/kxtj9.c 		tj9->last_poll_interval = poll_interval;
tj9               411 drivers/input/misc/kxtj9.c 	struct kxtj9_data *tj9 = dev->private;
tj9               413 drivers/input/misc/kxtj9.c 	kxtj9_enable(tj9);
tj9               418 drivers/input/misc/kxtj9.c 	struct kxtj9_data *tj9 = dev->private;
tj9               420 drivers/input/misc/kxtj9.c 	kxtj9_disable(tj9);
tj9               423 drivers/input/misc/kxtj9.c static int kxtj9_setup_polled_device(struct kxtj9_data *tj9)
tj9               430 drivers/input/misc/kxtj9.c 		dev_err(&tj9->client->dev,
tj9               435 drivers/input/misc/kxtj9.c 	tj9->poll_dev = poll_dev;
tj9               436 drivers/input/misc/kxtj9.c 	tj9->input_dev = poll_dev->input;
tj9               438 drivers/input/misc/kxtj9.c 	poll_dev->private = tj9;
tj9               443 drivers/input/misc/kxtj9.c 	kxtj9_init_input_device(tj9, poll_dev->input);
tj9               447 drivers/input/misc/kxtj9.c 		dev_err(&tj9->client->dev,
tj9               456 drivers/input/misc/kxtj9.c static void kxtj9_teardown_polled_device(struct kxtj9_data *tj9)
tj9               458 drivers/input/misc/kxtj9.c 	input_unregister_polled_device(tj9->poll_dev);
tj9               459 drivers/input/misc/kxtj9.c 	input_free_polled_device(tj9->poll_dev);
tj9               464 drivers/input/misc/kxtj9.c static inline int kxtj9_setup_polled_device(struct kxtj9_data *tj9)
tj9               469 drivers/input/misc/kxtj9.c static inline void kxtj9_teardown_polled_device(struct kxtj9_data *tj9)
tj9               475 drivers/input/misc/kxtj9.c static int kxtj9_verify(struct kxtj9_data *tj9)
tj9               479 drivers/input/misc/kxtj9.c 	retval = kxtj9_device_power_on(tj9);
tj9               483 drivers/input/misc/kxtj9.c 	retval = i2c_smbus_read_byte_data(tj9->client, WHO_AM_I);
tj9               485 drivers/input/misc/kxtj9.c 		dev_err(&tj9->client->dev, "read err int source\n");
tj9               492 drivers/input/misc/kxtj9.c 	kxtj9_device_power_off(tj9);
tj9               501 drivers/input/misc/kxtj9.c 	struct kxtj9_data *tj9;
tj9               515 drivers/input/misc/kxtj9.c 	tj9 = kzalloc(sizeof(*tj9), GFP_KERNEL);
tj9               516 drivers/input/misc/kxtj9.c 	if (!tj9) {
tj9               522 drivers/input/misc/kxtj9.c 	tj9->client = client;
tj9               523 drivers/input/misc/kxtj9.c 	tj9->pdata = *pdata;
tj9               531 drivers/input/misc/kxtj9.c 	err = kxtj9_verify(tj9);
tj9               537 drivers/input/misc/kxtj9.c 	i2c_set_clientdata(client, tj9);
tj9               539 drivers/input/misc/kxtj9.c 	tj9->ctrl_reg1 = tj9->pdata.res_12bit | tj9->pdata.g_range;
tj9               540 drivers/input/misc/kxtj9.c 	tj9->last_poll_interval = tj9->pdata.init_interval;
tj9               544 drivers/input/misc/kxtj9.c 		tj9->int_ctrl |= KXTJ9_IEN | KXTJ9_IEA | KXTJ9_IEL;
tj9               545 drivers/input/misc/kxtj9.c 		tj9->ctrl_reg1 |= DRDYE;
tj9               547 drivers/input/misc/kxtj9.c 		err = kxtj9_setup_input_device(tj9);
tj9               553 drivers/input/misc/kxtj9.c 					   "kxtj9-irq", tj9);
tj9               566 drivers/input/misc/kxtj9.c 		err = kxtj9_setup_polled_device(tj9);
tj9               574 drivers/input/misc/kxtj9.c 	free_irq(client->irq, tj9);
tj9               576 drivers/input/misc/kxtj9.c 	input_unregister_device(tj9->input_dev);
tj9               578 drivers/input/misc/kxtj9.c 	if (tj9->pdata.exit)
tj9               579 drivers/input/misc/kxtj9.c 		tj9->pdata.exit();
tj9               581 drivers/input/misc/kxtj9.c 	kfree(tj9);
tj9               587 drivers/input/misc/kxtj9.c 	struct kxtj9_data *tj9 = i2c_get_clientdata(client);
tj9               591 drivers/input/misc/kxtj9.c 		free_irq(client->irq, tj9);
tj9               592 drivers/input/misc/kxtj9.c 		input_unregister_device(tj9->input_dev);
tj9               594 drivers/input/misc/kxtj9.c 		kxtj9_teardown_polled_device(tj9);
tj9               597 drivers/input/misc/kxtj9.c 	if (tj9->pdata.exit)
tj9               598 drivers/input/misc/kxtj9.c 		tj9->pdata.exit();
tj9               600 drivers/input/misc/kxtj9.c 	kfree(tj9);
tj9               608 drivers/input/misc/kxtj9.c 	struct kxtj9_data *tj9 = i2c_get_clientdata(client);
tj9               609 drivers/input/misc/kxtj9.c 	struct input_dev *input_dev = tj9->input_dev;
tj9               614 drivers/input/misc/kxtj9.c 		kxtj9_disable(tj9);
tj9               623 drivers/input/misc/kxtj9.c 	struct kxtj9_data *tj9 = i2c_get_clientdata(client);
tj9               624 drivers/input/misc/kxtj9.c 	struct input_dev *input_dev = tj9->input_dev;
tj9               629 drivers/input/misc/kxtj9.c 		kxtj9_enable(tj9);