static int st_lsm6ds3_i2c_probe(struct i2c_client *client,
						const struct i2c_device_id *id)
{
	int err;
	struct lsm6ds3_data *cdata;
	pr_info("%s - i2c Probe Start!\n", __func__);

	if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
		err = -ENOSYS;
		pr_err("I2c function error\n");
		goto out_no_free;
	}
	
	cdata = kmalloc(sizeof(*cdata), GFP_KERNEL);
	if (!cdata)
		return -ENOMEM;

	cdata->dev = &client->dev;
	cdata->name = client->name;
	cdata->client = client;
	i2c_set_clientdata(client, cdata);

	cdata->tf = &st_lsm6ds3_tf_i2c;

	err = st_lsm6ds3_common_probe(cdata, client->irq);
	if (err < 0)
		goto free_data;
	pr_info("%s - i2c Probe Done!\n", __func__);
	return 0;

free_data:
	kfree(cdata);
out_no_free:
	return err;
}
static int st_lsm6ds3_i2c_probe(struct i2c_client *client,
						const struct i2c_device_id *id)
{
	int err;
	struct lsm6ds3_data *cdata;

	cdata = kmalloc(sizeof(*cdata), GFP_KERNEL);
	if (!cdata)
		return -ENOMEM;

	cdata->dev = &client->dev;
	cdata->name = client->name;
	i2c_set_clientdata(client, cdata);

	cdata->tf = &st_lsm6ds3_tf_i2c;
	if (((struct st_lsm6ds3_platform_data *)client->dev.platform_data)->gpio_int1 > 0)
		client->irq = gpio_to_irq(((struct st_lsm6ds3_platform_data *)client->dev.platform_data)->gpio_int1);

	err = st_lsm6ds3_common_probe(cdata, client->irq);
	if (err < 0)
		goto free_data;

	return 0;

free_data:
	kfree(cdata);
	return err;
}