static int bh1780_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct bh1780_data *bh1780; int err; /* setup private data */ bh1780 = kzalloc(sizeof(struct bh1780_data), GFP_KERNEL); if (!bh1780) { err = -ENOMEM; goto error_0; } mutex_init(&bh1780->enable_mutex); mutex_init(&bh1780->data_mutex); /* setup i2c client */ if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { err = -ENODEV; goto error_1; } i2c_set_clientdata(client, bh1780); bh1780->client = client; /* detect and init hardware */ if ((err = bh1780_detect(client, NULL))) { goto error_1; } if((err = i2c_smbus_write_byte(bh1780->client, (BH1780_COMMAND_REG + BH1780_PART_REV_REG))) < 0) { dev_err(&client->dev, "I2C write byte error: data=0x%02x\n", (BH1780_COMMAND_REG + BH1780_PART_REV_REG)); goto error_1; } if((err = i2c_smbus_read_byte(client)) < 0) { dev_err(&client->dev, "I2C read byte error\n"); goto error_1; } dev_info(&client->dev, "%s found\n", id->name); dev_info(&client->dev, "part number=%d, rev=%d\n", ((err >> 4) & 0x0F), (err & 0x0F)); bh1780_power_up(bh1780); bh1780_set_delay(&client->dev, BH1780_DEFAULT_DELAY); /* setup driver interfaces */ INIT_DELAYED_WORK(&bh1780->work, bh1780_work_func); if ((err = bh1780_input_init(bh1780)) < 0) goto error_1; if ((err = sysfs_create_group(&bh1780->input->dev.kobj, &bh1780_attribute_group)) < 0) goto error_2; return 0; error_2: bh1780_input_fini(bh1780); error_1: kfree(bh1780); error_0: return err; }
//[*]--------------------------------------------------------------------------------------------------[*] static int bh1780_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct bh1780_data *bh1780; int err; /* setup private data */ bh1780 = kzalloc(sizeof(struct bh1780_data), GFP_KERNEL); if (!bh1780) { pr_err("%s: failed to allocate memory for module\n", __func__); return -ENOMEM; } i2c_set_clientdata(client, bh1780); dev_set_drvdata(&client->dev, bh1780); bh1780->client = client; /* detect and init hardware */ if ((err = bh1780_detect(client, NULL)) != 0) goto error; if((err = i2c_smbus_write_byte(bh1780->client, (BH1780_COMMAND_REG + BH1780_PART_REV_REG))) < 0) { dev_err(&client->dev, "I2C write byte error: data=0x%02x\n", (BH1780_COMMAND_REG + BH1780_PART_REV_REG)); goto error; } if((err = i2c_smbus_read_byte(client)) < 0) { dev_err(&client->dev, "I2C read byte error\n"); goto error; } dev_info(&client->dev, "%s found\n", id->name); dev_info(&client->dev, "part number=%d, rev=%d\n", ((err >> 4) & 0x0F), (err & 0x0F)); bh1780_power_up(bh1780); INIT_DELAYED_WORK(&bh1780->work, bh1780_work_func); #if defined(CONFIG_ODROID_EXYNOS5_IOBOARD_DEBUG) bh1780->enabled = 1; #endif if(bh1780->enabled) schedule_delayed_work(&bh1780->work, BH1780_WORK_PERIOD); if ((err = sysfs_create_group(&client->dev.kobj, &bh1780_attribute_group)) < 0) goto error; printk("\n=================== ioboard_%s ===================\n\n", __func__); return 0; error: printk("\n=================== ioboard_%s FAIL! ===================\n\n", __func__); return err; }