static int ncp6335b_dcdc_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct ncp6335b_platform_data *pdata; int ret; pr_err("[syscamera][%s::%d]\n", __func__, __LINE__); comp_dcdc_type = NCP6335B; pdata = devm_kzalloc(&client->dev, sizeof(struct ncp6335b_platform_data), GFP_KERNEL); if (!pdata) { dev_err(&client->dev, "Failed to allocate memory\n"); return -ENOMEM; } ret = ncp6335b_parse_dt(&client->dev, pdata); if (ret) { pr_err("[%s] mc5587 parse dt failed\n", __func__); return ret; } if (pdata == NULL) { pr_err("[syscamera][%s::%d]missing platform data\n", __func__, __LINE__); return -ENODEV; } ncp_dev = kzalloc(sizeof(*ncp_dev), GFP_KERNEL); if (ncp_dev == NULL) { pr_err("[syscamera][%s::%d]failed to alloc memory\n", __func__, __LINE__); return -ENOMEM; } ncp_dev->client = client; mutex_init(&ncp_dev->lock); if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { pr_err("[syscamera][%s::%d]SMBUS Byte Data not Supported\n", __func__, __LINE__); kfree(ncp_dev); ncp_dev = NULL; return -EIO; } #if 0 //delete init setting ret = ncp6335b_read(ncp_dev->client); pr_err("[syscamera][%s::%d][PID::%d]",__FUNCTION__, __LINE__, ret); ncp6335b_write(ncp_dev->client, 0xC0);//default 1.0V #endif i2c_set_clientdata(client, ncp_dev); return 0; }
static int __devinit ncp6335b_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct ncp6335b_platform_data *pdata; struct ncp6335b_dev *dev = NULL; #ifdef CONFIG_SOC_EXYNOS5422 struct regulator *regulator = NULL; const char power_name[] = "CAM_IO_1.8V_AP"; #endif int ret = 0; if (client->dev.of_node) { pdata = devm_kzalloc(&client->dev, sizeof(struct ncp6335b_platform_data), GFP_KERNEL); if (!pdata) { dev_err(&client->dev, "Failed to allocate memory\n"); return -ENOMEM; } ret = ncp6335b_parse_dt(&client->dev, pdata); if (ret) { pr_err("%s: ncp6335b parse dt failed\n", __func__); return ret; } } else pdata = client->dev.platform_data; if (!pdata) { pr_err("%s: missing platform data\n", __func__); ret = -ENODEV; goto pdata_err; } if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA)) { pr_err("%s: SMBUS Byte Data not Supported\n", __func__); ret = -EIO; goto pdata_err; } dev = (struct ncp6335b_dev *)kzalloc(sizeof(*dev), GFP_KERNEL); if (unlikely(!dev)) { pr_err("%s: failed to alloc memory\n", __func__); ret = -ENOMEM; goto pdata_err; } dev->client = client; mutex_init(&dev->lock); #ifdef CONFIG_SOC_EXYNOS5422 regulator = regulator_get(NULL, power_name); if (IS_ERR(regulator)) { pr_err("%s : regulator_get(%s) fail\n", __func__, power_name); goto err; } if (regulator_is_enabled(regulator)) { pr_info("%s regulator is already enabled\n", power_name); } else { ret = regulator_enable(regulator); if (unlikely(ret)) { pr_err("%s : regulator_enable(%s) fail\n", __func__, power_name); goto err; } } usleep_range(1000, 1000); #endif /*ret = ncp6335b_read_voltage(dev->client); if (ret < 0) { pr_err("%s: error, first read\n", __func__); goto err; }*/ ret = ncp6335b_set_voltage(dev->client); if (ret < 0) { pr_err("%s: error, fail to set voltage\n", __func__); goto err; } ret = ncp6335b_read_voltage(dev->client); if (ret < 0) { pr_err("%s: error, fail to read voltage\n", __func__); goto err; } #ifdef CONFIG_SOC_EXYNOS5422 ret = regulator_disable(regulator); if (unlikely(ret)) { pr_err("%s: regulator_disable(%s) fail\n", __func__, power_name); goto err; } regulator_put(regulator); #endif i2c_set_clientdata(client, dev); pr_info("%s %s: ncp6335b probed\n", dev_driver_string(&client->dev), dev_name(&client->dev)); return 0; err: mutex_destroy(&dev->lock); kfree((void *)dev); pdata_err: devm_kfree(&client->dev, (void *)pdata); #ifdef CONFIG_SOC_EXYNOS5422 if (!IS_ERR_OR_NULL(regulator)) { ret = regulator_disable(regulator); if (unlikely(ret)) { pr_err("%s: regulator_disable(%s) fail\n", __func__, power_name); } regulator_put(regulator); } #endif return ret; }