static int bl86x8_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id) { int ret; struct hua_input_chip *chip; pr_pos_info(); chip = kzalloc(sizeof(*chip), GFP_KERNEL); if (chip == NULL) { pr_red_info("kzalloc"); return -ENOMEM; } i2c_set_clientdata(client, chip); hua_input_chip_set_bus_data(chip, client); chip->irq = client->irq; chip->irq_flags = IRQF_TRIGGER_FALLING; chip->name = "BL86X8"; chip->devmask = 1 << HUA_INPUT_DEVICE_TYPE_TOUCHSCREEN | 1 << HUA_INPUT_DEVICE_TYPE_PROXIMITY; chip->set_power = bl86x8_set_power; chip->readid = bl86x8_readid; chip->probe = bl86x8_input_chip_probe; chip->remove = bl86x8_input_chip_remove; chip->read_data = hua_input_read_data_i2c; chip->write_data = hua_input_write_data_i2c; chip->read_register = hua_input_read_register_i2c_smbus; chip->write_register = hua_input_write_register_i2c_smbus; ret = hua_input_chip_register(chip, &client->dev); if (ret < 0) { pr_red_info("hua_input_chip_register"); goto out_kfree_chip; } pr_green_info("BL86X8 Probe Complete"); return 0; out_kfree_chip: kfree(chip); return ret; }
static int adxl34x_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id) { int ret; struct hua_input_chip *chip; pr_pos_info(); chip = kzalloc(sizeof(*chip), GFP_KERNEL); if (chip == NULL) { pr_red_info("sensor == NULL"); return -ENOMEM; } i2c_set_clientdata(client, chip); hua_input_chip_set_bus_data(chip, client); #if defined(ADXL346_GINT2) || defined(ADXL346_GINT1) #ifdef ADXL346_GINT2 ret = sprd_alloc_eic_irq(ADXL346_GINT2); #else ret = sprd_alloc_eic_irq(ADXL346_GINT1); #endif if (ret < 0) { pr_red_info("sprd_alloc_eic_irq"); goto out_kfree_sensor; } chip->irq = ret; #else chip->irq = -1; #endif chip->name = "ADXL34X"; chip->devmask = 1 << HUA_INPUT_DEVICE_TYPE_ACCELEROMETER; chip->irq_flags = IRQF_TRIGGER_HIGH; chip->init_data = adxl34x_init_data; chip->init_data_size = ARRAY_SIZE(adxl34x_init_data); chip->read_data = hua_input_read_data_i2c; chip->write_data = hua_input_write_data_i2c; chip->write_register = hua_input_write_register_i2c_smbus; chip->readid = adxl34x_sensor_chip_readid; chip->set_active = adxl34x_sensor_chip_set_active; chip->event_handler = adxl34x_sensor_chip_event_handler; chip->probe = adxl34x_input_chip_probe; chip->remove = adxl34x_input_chip_remove; ret = hua_input_chip_register(chip); if (ret < 0) { pr_red_info("hua_input_chip_register"); goto out_free_eic_irq; } return 0; out_free_eic_irq: if (chip->irq > 0) { sprd_free_eic_irq(chip->irq); } out_kfree_sensor: kfree(chip); return ret; }