Пример #1
0
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;
}
Пример #2
0
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;
}