int lp55xx_init_device(struct lp55xx_chip *chip) { struct lp55xx_platform_data *pdata; struct lp55xx_device_config *cfg; struct device *dev = &chip->cl->dev; int ret = 0; WARN_ON(!chip); pdata = chip->pdata; cfg = chip->cfg; if (!pdata || !cfg) return -EINVAL; if (gpio_is_valid(pdata->enable_gpio)) { ret = devm_gpio_request_one(dev, pdata->enable_gpio, GPIOF_DIR_OUT, "lp5523_enable"); if (ret < 0) { dev_err(dev, "could not acquire enable gpio (err=%d)\n", ret); goto err; } gpio_set_value(pdata->enable_gpio, 0); usleep_range(1000, 2000); /* Keep enable down at least 1ms */ gpio_set_value(pdata->enable_gpio, 1); usleep_range(1000, 2000); /* 500us abs min. */ } lp55xx_reset_device(chip); /* * Exact value is not available. 10 - 20ms * appears to be enough for reset. */ usleep_range(10000, 20000); ret = lp55xx_detect_device(chip); if (ret) { dev_err(dev, "device detection err: %d\n", ret); goto err; } /* chip specific initialization */ ret = lp55xx_post_init_device(chip); if (ret) { dev_err(dev, "post init device err: %d\n", ret); goto err_post_init; } return 0; err_post_init: lp55xx_deinit_device(chip); err: return ret; }
int lp55xx_init_device(struct lp55xx_chip *chip) { struct lp55xx_platform_data *pdata; struct lp55xx_device_config *cfg; struct device *dev = &chip->cl->dev; int ret = 0; WARN_ON(!chip); pdata = chip->pdata; cfg = chip->cfg; if (!pdata || !cfg) return -EINVAL; #if 0 if (pdata->setup_resources) { ret = pdata->setup_resources(); if (ret < 0) { dev_err(dev, "setup resoure err: %d\n", ret); goto err; } } if (pdata->enable) { pdata->enable(0); usleep_range(1000, 2000); /* Keep enable down at least 1ms */ pdata->enable(1); usleep_range(1000, 2000); /* 500us abs min. */ } #else ret = gpio_request(pdata->en_gpio, "led_en"); if(ret) { pr_err("%s: Failed to get gpio %d (code: %d)", __func__, pdata->en_gpio, ret); return ret; } ret = gpio_direction_output(pdata->en_gpio, 1); gpio_set_value(pdata->en_gpio, 0); usleep_range(1000,2000); gpio_set_value(pdata->en_gpio, 1); usleep_range(1000,2000); #endif lp55xx_reset_device(chip); /* * Exact value is not available. 10 - 20ms * appears to be enough for reset. */ usleep_range(10000, 20000); ret = lp55xx_detect_device(chip); if (ret) { dev_err(dev, "device detection err: %d\n", ret); goto err; } /* chip specific initialization */ ret = lp55xx_post_init_device(chip); if (ret) { dev_err(dev, "post init device err: %d\n", ret); goto err_post_init; } return 0; err_post_init: lp55xx_deinit_device(chip); err: return ret; }