Exemple #1
0
static int bl86x8_input_chip_probe(struct hua_input_chip *chip)
{
	int ret;

	struct hua_bl86x8_device *dev;
	struct hua_input_device *base_dev;
	struct hua_ts_device *ts;

	dev = kzalloc(sizeof(*dev), GFP_KERNEL);
	if (chip == NULL)
	{
		pr_red_info("kzalloc");
		return -ENOMEM;
	}

	hua_input_chip_set_dev_data(chip, dev);

	// ============================================================

	ts = &dev->ts;
	ts->xmin = BL86X8_XAXIS_MIN;
	ts->xmax = BL86X8_XAXIS_MAX;
	ts->ymin = BL86X8_YAXIS_MIN;
	ts->ymax = BL86X8_YAXIS_MAX;
	ts->point_count = BL86X8_POINT_COUNT;
	ts->key_count = ARRAY_SIZE(bl86x8_touch_keys);
	ts->keys = bl86x8_touch_keys;

	base_dev = &ts->dev;
	base_dev->type = HUA_INPUT_DEVICE_TYPE_TOUCHSCREEN;
	base_dev->use_irq = true;
	base_dev->event_handler = bl86x8_ts_event_handler;

	ret = hua_input_device_register(chip, base_dev);
	if (ret < 0)
	{
		pr_red_info("hua_input_device_register");
		goto out_free_dev;
	}

	return 0;

out_free_dev:
	kfree(dev);
	return ret;
}
Exemple #2
0
static int adxl34x_input_chip_probe(struct hua_input_chip *chip)
{
	int ret;
	struct hua_sensor_device *sensor;
	struct hua_input_device *dev;

	pr_pos_info();

	sensor = kzalloc(sizeof(*sensor), GFP_KERNEL);
	if (sensor == NULL)
	{
		pr_red_info("kzalloc");
		return -ENOMEM;
	}

	hua_input_chip_set_dev_data(chip, sensor);

	sensor->min_delay = 20;
	sensor->max_range = 16;
	sensor->resolution = 4096;
	sensor->power_consume = 145;

	dev = &sensor->dev;
	dev->name = "Three-Axis Digital Accelerometer";
	dev->fuzz = 3;
	dev->flat = 3;
	dev->use_irq = true;
	dev->type = HUA_INPUT_DEVICE_TYPE_ACCELEROMETER;
	dev->poll_delay = 200;
	dev->event_handler = adxl34x_acceleration_event_handler;

	ret = hua_input_device_register(chip, dev);
	if (ret < 0)
	{
		pr_red_info("hua_input_device_register");
		goto out_kfree_sensor;
	}

	return 0;

out_kfree_sensor:
	kfree(sensor);
	return ret;
}