X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=drivers%2Fnvmem%2Fcore.c;h=ef326f243f36f30eddbcd86a714701934093ae87;hb=60ea27e936f2b9b7f011644a499c292f9cc11de3;hp=1e4a798dce6eecfc6f4d0d671531fb9a843917ec;hpb=9717c1cea16e3eae81ca226f4c3670bb799b61ad;p=linux-2.6-block.git diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index 1e4a798dce6e..ef326f243f36 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include "nvmem.h" @@ -54,8 +55,14 @@ static int nvmem_reg_read(struct nvmem_device *nvmem, unsigned int offset, static int nvmem_reg_write(struct nvmem_device *nvmem, unsigned int offset, void *val, size_t bytes) { - if (nvmem->reg_write) - return nvmem->reg_write(nvmem->priv, offset, val, bytes); + int ret; + + if (nvmem->reg_write) { + gpiod_set_value_cansleep(nvmem->wp_gpio, 0); + ret = nvmem->reg_write(nvmem->priv, offset, val, bytes); + gpiod_set_value_cansleep(nvmem->wp_gpio, 1); + return ret; + } return -EINVAL; } @@ -340,6 +347,14 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config) kfree(nvmem); return ERR_PTR(rval); } + if (config->wp_gpio) + nvmem->wp_gpio = config->wp_gpio; + else + nvmem->wp_gpio = gpiod_get_optional(config->dev, "wp", + GPIOD_OUT_HIGH); + if (IS_ERR(nvmem->wp_gpio)) + return ERR_CAST(nvmem->wp_gpio); + kref_init(&nvmem->refcnt); INIT_LIST_HEAD(&nvmem->cells);