static int SN3193_probe(struct i2c_client *client, const struct i2c_device_id *id) { int ret=0; int i; struct SN3193_sled * sn3193_sled_dev; //client->dev.platform_data = &rgb_pdata; SN3193_power(); msleep(100); if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { pr_err("%s : need I2C_FUNC_I2C\n", __func__); return -ENODEV; } SN3193_sled_dev_sate->gi2c_dev=client; sn3193_sled_dev = kzalloc(sizeof(struct SN3193_sled), GFP_KERNEL); if (sn3193_sled_dev == NULL) { dev_err(&client->dev, "failed to allocate memory for module data\n"); ret = -ENOMEM; goto err_exit; } pr_info("%s:sn3193 probe\n",__func__); sn3193_sled_dev->i2c_dev = client; sn3193_sled_dev->SN3193_miscdev.minor = MISC_DYNAMIC_MINOR; sn3193_sled_dev->SN3193_miscdev.name = "SN3193"; sn3193_sled_dev->SN3193_miscdev.fops = &SN3193_fops; ret = misc_register(&sn3193_sled_dev->SN3193_miscdev); if (ret) { pr_err("%s : misc_register failed\n", __FILE__); goto err_misc_register; } for(i = 0; i < 3; i ++ ) { if (led_classdev_register(&client->dev, &SN3193_lcds[i])) { printk(KERN_ERR "led_classdev_register failed of SN3193_lcds!\n"); goto err_classdev_register; } } ret = sysfs_create_group(&client->dev.kobj, &blink_attr_group); if (ret) { pr_err( "%s : sysfs_create_group failed!\n", __func__); goto err_group_register; } i2c_set_clientdata(client, sn3193_sled_dev); //SN3193_config_feature_sled(0); //dvt not breath //close, light as need SN3193_SetBrightness(RED_SLED,0); SN3193_SetBrightness(GREEN_SLED,0); SN3193_SetBrightness(BLUE_SLED,0); SN3193_upData_sled(); SN3193_TurnOffOut_sled(); SN3193_enable_sled(0); /**************************test*********************/ //enable sled /*SN3193_enable_sled(1); SN3193_config_feature_sled(0x00); SN3193_workmod_sled(1); SN3193_setCurrent_sled(0x01);*/ //SN3193_enable_diff_color_sled(BLUE_SLED); //mod_timer(&SN3193_sled_dev_sate->gsled_last_timer,jiffies+5*HZ); /**************************test******************/ return 0; err_group_register: for(i = 0; i < 3; i ++ ) led_classdev_unregister(&SN3193_lcds[i]); err_classdev_register: misc_deregister(&sn3193_sled_dev->SN3193_miscdev); err_misc_register: kfree(sn3193_sled_dev); err_exit: return ret; }
static int SN3193_probe(struct i2c_client *client, const struct i2c_device_id *id) { int ret = 0; int i, rc; enum of_gpio_flags gpio_flags; struct SN3193_sled * sn3193_sled_dev; SN3193_sled_dev_sate->ena_gpio = of_get_named_gpio_flags(client->dev.of_node, "sn3193,sdb-gpio", 0, &gpio_flags); pr_debug("%s ena_gpio:%d\n", __func__, SN3193_sled_dev_sate->ena_gpio); if (gpio_is_valid(SN3193_sled_dev_sate->ena_gpio)) { rc = gpio_request(SN3193_sled_dev_sate->ena_gpio, "sn3193"); if (rc) { pr_err("%s gpio_request for %d failed rc=%d\n", __func__, SN3193_sled_dev_sate->ena_gpio, rc); return rc; } rc = gpio_direction_output(SN3193_sled_dev_sate->ena_gpio, 0); if (rc) { pr_err("%s set enable gpio direction fail\n",__func__); gpio_free(SN3193_sled_dev_sate->ena_gpio); return rc; } } else { pr_err("%s SN3193 ena_gpio invalid\n",__func__); return -1; } //client->dev.platform_data = &rgb_pdata; /* i2c pull up Regulator configuration */ SN3193_sled_dev_sate->vcc_i2c = regulator_get(&client->dev, "vcc_i2c_sn3193"); if (IS_ERR(SN3193_sled_dev_sate->vcc_i2c)) { pr_err("%s: Failed to get i2c regulator\n", __func__); rc = PTR_ERR(SN3193_sled_dev_sate->vcc_i2c); return -1;//retval; } if (regulator_count_voltages(SN3193_sled_dev_sate->vcc_i2c) > 0) { rc = regulator_set_voltage(SN3193_sled_dev_sate->vcc_i2c, 1800000, 1800000); if (rc) { pr_err("regulator set i2c voltage failed! rc = %d\n", rc); return rc; } } rc = regulator_enable(SN3193_sled_dev_sate->vcc_i2c); if (rc) { pr_err("Regulator vcc_i2c enable failed! rc = %d\n", rc); return rc; } SN3193_power(); msleep(100); if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { pr_err("%s : need I2C_FUNC_I2C\n", __func__); return -ENODEV; } SN3193_sled_dev_sate->gi2c_dev=client; sn3193_sled_dev = kzalloc(sizeof(struct SN3193_sled), GFP_KERNEL); if (sn3193_sled_dev == NULL) { dev_err(&client->dev, "failed to allocate memory for module data\n"); ret = -ENOMEM; goto err_exit; } pr_info("%s:sn3193 probe\n",__func__); sn3193_sled_dev->i2c_dev = client; sn3193_sled_dev->SN3193_miscdev.minor = MISC_DYNAMIC_MINOR; sn3193_sled_dev->SN3193_miscdev.name = "SN3193"; sn3193_sled_dev->SN3193_miscdev.fops = &SN3193_fops; ret = misc_register(&sn3193_sled_dev->SN3193_miscdev); if (ret) { pr_err("%s : misc_register failed\n", __FILE__); goto err_misc_register; } for(i = 0; i < 3; i ++ ) { if (led_classdev_register(&client->dev, &SN3193_lcds[i])) { printk(KERN_ERR "led_classdev_register failed of SN3193_lcds!\n"); goto err_classdev_register; } } ret = sysfs_create_group(&client->dev.kobj, &blink_attr_group); if (ret) { pr_err( "%s : sysfs_create_group failed!\n", __func__); goto err_group_register; } i2c_set_clientdata(client, sn3193_sled_dev); //SN3193_config_feature_sled(0); //dvt not breath //close, light as need SN3193_SetBrightness(RED_SLED, 0); SN3193_SetBrightness(GREEN_SLED, 0); SN3193_SetBrightness(BLUE_SLED, 0); SN3193_upData_sled(); SN3193_TurnOffOut_sled(); SN3193_enable_sled(0); /**************************test*********************/ //enable sled /*SN3193_enable_sled(1); SN3193_config_feature_sled(0x00); SN3193_workmod_sled(1); SN3193_setCurrent_sled(0x01);*/ //SN3193_enable_diff_color_sled(BLUE_SLED); //mod_timer(&SN3193_sled_dev_sate->gsled_last_timer, jiffies+5*HZ); /**************************test******************/ return 0; err_group_register: for(i = 0; i < 3; i ++ ) led_classdev_unregister(&SN3193_lcds[i]); err_classdev_register: misc_deregister(&sn3193_sled_dev->SN3193_miscdev); err_misc_register: kfree(sn3193_sled_dev); err_exit: return ret; }