@@ -11,6 +11,7 @@
#include <linux/device.h>
#include <linux/err.h>
#include <linux/i2c.h>
+#include <linux/gpio/consumer.h>
#include <linux/mfd/adp5585.h>
#include <linux/mfd/core.h>
#include <linux/mod_devicetable.h>
@@ -712,6 +713,7 @@ static int adp5585_i2c_probe(struct i2c_client *i2c)
{
struct regmap_config regmap_config;
struct adp5585_dev *adp5585;
+ struct gpio_desc *gpio;
struct mfd_cell *devs;
unsigned int id;
int ret, n_devs;
@@ -730,6 +732,20 @@ static int adp5585_i2c_probe(struct i2c_client *i2c)
if (ret)
return ret;
+ gpio = devm_gpiod_get_optional(&i2c->dev, "reset", GPIOD_OUT_HIGH);
+ if (IS_ERR(gpio))
+ return PTR_ERR(gpio);
+
+ /*
+ * Note the timings are not documented anywhere in the DS. They are just
+ * reasonable values that work...
+ */
+ if (gpio) {
+ fsleep(30);
+ gpiod_set_value_cansleep(gpio, 0);
+ fsleep(60);
+ }
+
adp5585->regmap = devm_regmap_init_i2c(i2c, ®map_config);
if (IS_ERR(adp5585->regmap))
return dev_err_probe(&i2c->dev, PTR_ERR(adp5585->regmap),