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