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; }
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; }