gpio: fx6408: Add suspend/resume support
PATCH 1/1 gpio: fx6408: Add suspend/resume support
Add suspend and resume support to the fxl6408 gpio driver.
Signed-off-by Jisheng Zhang <[email protected]>
--- drivers/gpio/gpio-fxl6408.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)
drivers/gpio/gpio-fxl6408.c +23 -0
@@ -43,6 +43,10 @@#define FXL6408_NGPIO 8 +struct fxl6408_chip { +struct regmap *regmap; +}; +static const struct regmap_range rd_range[] = { {FXL6408_REG_DEVICE_ID ,FXL6408_REG_DEVICE_ID }, {FXL6408_REG_IO_DIR ,FXL6408_REG_OUTPUT },
@@ -103,6 +107,7 @@ static int fxl6408_identify(struct device *dev, struct regmap *regmap)static int fxl6408_probe (struct i2c_client *client) { +struct fxl6408_chip *chip;struct device *dev = &client->dev;int ret;struct gpio_regmap_config gpio_config = {
@@ -114,6 +119,10 @@ static int fxl6408_probe(struct i2c_client *client) .ngpio_per_reg = FXL6408_NGPIO, }; + chip =devm_kzalloc (dev,sizeof (*chip),GFP_KERNEL ); +if (!chip) +return -ENOMEM ; + gpio_config.regmap =devm_regmap_init_i2c (client, ®map);if (IS_ERR (gpio_config.regmap)) return dev_err_probe(dev, PTR_ERR(gpio_config.regmap),
@@ -123,6 +132,9 @@ static int fxl6408_probe(struct i2c_client *client)if (ret)return ret; + chip->regmap = gpio_config.regmap; +i2c_set_clientdata (client, chip); +/* Disable High-Z of outputs, so that our OUTPUT updates actually take effect. */ ret =regmap_write (gpio_config.regmap,FXL6408_REG_OUTPUT_HIGH_Z ,0 );if (ret)
@@ -131,6 +143,16 @@ static int fxl6408_probe(struct i2c_client *client)return PTR_ERR_OR_ZERO (devm_gpio_regmap_register (dev, &gpio_config)); } +static int fxl6408_resume (struct device *dev) +{ +struct fxl6408_chip *chip =dev_get_drvdata (dev); + +regcache_mark_dirty (chip->regmap); +return regcache_sync (chip->regmap); +} + +static DEFINE_SIMPLE_DEV_PM_OPS(fxl6408_pm_ops, NULL, fxl6408_resume); +static const __maybe_unused struct of_device_id fxl6408_dt_ids[] = { { .compatible ="fcs,fxl6408" }, { }
@@ -146,6 +168,7 @@ MODULE_DEVICE_TABLE(i2c, fxl6408_id);static struct i2c_driver fxl6408_driver = { .driver = { .name ="fxl6408" , + .pm =pm_sleep_ptr (&fxl6408_pm_ops), .of_match_table = fxl6408_dt_ids, }, .probe = fxl6408_probe,
Signature · 1 line
2.50.0