2018-01-03 20:01:20

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 00/22] Verbatim device names and devm_nvmem_(un)register()

Srinivas, all:

This patchset contains various small changes that I recently made to
NVMEM, more specifically:

- Patches 1 and 3 are two changes I am hoping are acceptable upstream

- Patches 4 to 15 are a follow up to patch 2

- Patches 16 to 22 are just trivial fixups and I am more than happy
to drop them if they seem to add more pointless churn rather then
value.

Feedback is appreciated!

Thanks,
Andrey Smirnov

Changes since [v2]:

- Added a patch with kerenl doc for struct nvmem_config as a
prerequsite for patch #2

- Documented behaviour of nvmem_register() when id is set to -1

- Added kernel doc for devm_nvmem_(un)register()


Changes since [v1]:

- Fixed a build break detected by kbuild test robot

- Added a patch to unconditionally enable COMPILE_TEST for meson-efuse

- Dropped Joachim Eastwood from CC list due to bouncing e-mail

[v2] lkml.kernel.org/r/[email protected]
[v1] lkml.kernel.org/r/[email protected]


Andrey Smirnov (22):
nvmem: Document struct nvmem_config
nvmem: core: Allow specifying device name verbatim
nvmem: Introduce devm_nvmem_(un)register()
nvmem: vf610-ocotp: Convert to use devm_nvmem_register()
nvmem: imx-ocotp: Convert to use devm_nvmem_register()
nvmem: uniphier-efuse: Convert to use devm_nvmem_register()
nvmem: snvs_lgpr: Convert to use devm_nvmem_register()
nvmem: rockchip-efuse: Convert to use devm_nvmem_register()
nvmem: qfprom: Convert to use devm_nvmem_register()
nvmem: mtk-efuse: Convert to use devm_nvmem_register()
nvmem: meson-mx-efuse: Convert to use devm_nvmem_register()
nvmem: meson-efuse: Convert to use devm_nvmem_register()
nvmem: lpc18xx_otp: Convert to use devm_nvmem_register()
nvmem: imx-iim: Convert to use devm_nvmem_register()
nvmem: bcm-ocotp: Convert to use devm_nvmem_register()
nvmem: meson-efuse: Do no gate COMPILE_TEST with MESON_SM
nvmem: snvs_lpgpr: Convert commas to semicolons
nvmem: rockchip-efuse: Make use of of_device_get_match_data()
nvmem: vf610-ocotp: Do not use "&pdev->dev" explicitly
nvmem: rockchip-efuse: Do not use "&pdev->dev" explicitly
nvmem: imx-iim: Do not use "&pdev->dev" explicitly
nvmem: bcm-ocotp: Do not use "&pdev->dev" explicitly

drivers/nvmem/Kconfig | 2 +-
drivers/nvmem/bcm-ocotp.c | 15 ++--------
drivers/nvmem/core.c | 68 ++++++++++++++++++++++++++++++++++++++++--
drivers/nvmem/imx-iim.c | 14 ++-------
drivers/nvmem/imx-ocotp.c | 12 +-------
drivers/nvmem/lpc18xx_otp.c | 12 +-------
drivers/nvmem/meson-efuse.c | 12 +-------
drivers/nvmem/meson-mx-efuse.c | 12 +-------
drivers/nvmem/mtk-efuse.c | 12 +-------
drivers/nvmem/qfprom.c | 12 +-------
drivers/nvmem/rockchip-efuse.c | 28 ++++++-----------
drivers/nvmem/snvs_lpgpr.c | 26 +++++-----------
drivers/nvmem/uniphier-efuse.c | 12 +-------
drivers/nvmem/vf610-ocotp.c | 15 ++--------
include/linux/nvmem-provider.h | 42 ++++++++++++++++++++++++++
15 files changed, 138 insertions(+), 156 deletions(-)

--
2.14.3


2018-01-03 20:01:23

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 01/22] nvmem: Document struct nvmem_config

Add a simple description of struct nvmem_config and its fields.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
include/linux/nvmem-provider.h | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)

diff --git a/include/linux/nvmem-provider.h b/include/linux/nvmem-provider.h
index 497706f5adca..27e599222ec1 100644
--- a/include/linux/nvmem-provider.h
+++ b/include/linux/nvmem-provider.h
@@ -22,6 +22,28 @@ typedef int (*nvmem_reg_read_t)(void *priv, unsigned int offset,
typedef int (*nvmem_reg_write_t)(void *priv, unsigned int offset,
void *val, size_t bytes);

+/**
+ * struct nvmem_config - NVMEM device configuration
+ *
+ * @dev: Parent device.
+ * @name: Optional name.
+ * @id: Optional device ID used in full name. Ignored if name is NULL.
+ * @owner: Pointer to exporter module. Used for refcounting.
+ * @cells: Optional array of pre-defined NVMEM cells.
+ * @ncells: Number of elements in cells.
+ * @read_only: Device is read-only.
+ * @root_only: Device is accessibly to root only.
+ * @reg_read: Callback to read data.
+ * @reg_write: Callback to write data.
+ * @size: Device size.
+ * @word_size: Minimum read/write access granularity.
+ * @stride: Minimum read/write access stide.
+ * @priv: User context passed to read/write callbacks.
+ *
+ * Note: A default "nvmem<id>" name will be assigned to the device if
+ * no name is specified in its configuration. In such case "<id>" is
+ * generated with ida_simple_get() and provided id field is ignored.
+ */
struct nvmem_config {
struct device *dev;
const char *name;
--
2.14.3

2018-01-03 20:01:34

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 07/22] nvmem: snvs_lgpr: Convert to use devm_nvmem_register()

Drop all of the code related to .remove hook and make use of
devm_nvmem_register() instead.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/snvs_lpgpr.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/nvmem/snvs_lpgpr.c b/drivers/nvmem/snvs_lpgpr.c
index e5c2a4a17f03..6a2fdd09e74a 100644
--- a/drivers/nvmem/snvs_lpgpr.c
+++ b/drivers/nvmem/snvs_lpgpr.c
@@ -117,22 +117,13 @@ static int snvs_lpgpr_probe(struct platform_device *pdev)
cfg->reg_read = snvs_lpgpr_read,
cfg->reg_write = snvs_lpgpr_write,

- nvmem = nvmem_register(cfg);
+ nvmem = devm_nvmem_register(dev, cfg);
if (IS_ERR(nvmem))
return PTR_ERR(nvmem);

- platform_set_drvdata(pdev, nvmem);
-
return 0;
}

-static int snvs_lpgpr_remove(struct platform_device *pdev)
-{
- struct nvmem_device *nvmem = platform_get_drvdata(pdev);
-
- return nvmem_unregister(nvmem);
-}
-
static const struct of_device_id snvs_lpgpr_dt_ids[] = {
{ .compatible = "fsl,imx6q-snvs-lpgpr", .data = &snvs_lpgpr_cfg_imx6q },
{ .compatible = "fsl,imx6ul-snvs-lpgpr",
@@ -143,7 +134,6 @@ MODULE_DEVICE_TABLE(of, snvs_lpgpr_dt_ids);

static struct platform_driver snvs_lpgpr_driver = {
.probe = snvs_lpgpr_probe,
- .remove = snvs_lpgpr_remove,
.driver = {
.name = "snvs_lpgpr",
.of_match_table = snvs_lpgpr_dt_ids,
--
2.14.3

2018-01-03 20:01:43

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 17/22] nvmem: snvs_lpgpr: Convert commas to semicolons

Looks like commas were accidentally used where semicolons were
supposed to be. Fix that.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/snvs_lpgpr.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/nvmem/snvs_lpgpr.c b/drivers/nvmem/snvs_lpgpr.c
index 6a2fdd09e74a..90aaf818563b 100644
--- a/drivers/nvmem/snvs_lpgpr.c
+++ b/drivers/nvmem/snvs_lpgpr.c
@@ -110,12 +110,12 @@ static int snvs_lpgpr_probe(struct platform_device *pdev)
cfg->priv = priv;
cfg->name = dev_name(dev);
cfg->dev = dev;
- cfg->stride = 4,
- cfg->word_size = 4,
- cfg->size = 4,
- cfg->owner = THIS_MODULE,
- cfg->reg_read = snvs_lpgpr_read,
- cfg->reg_write = snvs_lpgpr_write,
+ cfg->stride = 4;
+ cfg->word_size = 4;
+ cfg->size = 4;
+ cfg->owner = THIS_MODULE;
+ cfg->reg_read = snvs_lpgpr_read;
+ cfg->reg_write = snvs_lpgpr_write;

nvmem = devm_nvmem_register(dev, cfg);
if (IS_ERR(nvmem))
--
2.14.3

2018-01-03 20:01:47

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 20/22] nvmem: rockchip-efuse: Do not use "&pdev->dev" explicitly

There's "dev" variable for this already. Use it.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/rockchip-efuse.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/nvmem/rockchip-efuse.c b/drivers/nvmem/rockchip-efuse.c
index 979ba0a376a0..3120329aea94 100644
--- a/drivers/nvmem/rockchip-efuse.c
+++ b/drivers/nvmem/rockchip-efuse.c
@@ -202,21 +202,21 @@ static int rockchip_efuse_probe(struct platform_device *pdev)
return -EINVAL;
}

- efuse = devm_kzalloc(&pdev->dev, sizeof(struct rockchip_efuse_chip),
+ efuse = devm_kzalloc(dev, sizeof(struct rockchip_efuse_chip),
GFP_KERNEL);
if (!efuse)
return -ENOMEM;

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- efuse->base = devm_ioremap_resource(&pdev->dev, res);
+ efuse->base = devm_ioremap_resource(dev, res);
if (IS_ERR(efuse->base))
return PTR_ERR(efuse->base);

- efuse->clk = devm_clk_get(&pdev->dev, "pclk_efuse");
+ efuse->clk = devm_clk_get(dev, "pclk_efuse");
if (IS_ERR(efuse->clk))
return PTR_ERR(efuse->clk);

- efuse->dev = &pdev->dev;
+ efuse->dev = dev;
econfig.size = resource_size(res);
econfig.reg_read = data;
econfig.priv = efuse;
--
2.14.3

2018-01-03 20:01:57

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 22/22] nvmem: bcm-ocotp: Do not use "&pdev->dev" explicitly

There's "dev" variable for this already. Use it.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/bcm-ocotp.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/nvmem/bcm-ocotp.c b/drivers/nvmem/bcm-ocotp.c
index 24c30fa475cc..4159b3f41d79 100644
--- a/drivers/nvmem/bcm-ocotp.c
+++ b/drivers/nvmem/bcm-ocotp.c
@@ -262,8 +262,7 @@ static int bcm_otpc_probe(struct platform_device *pdev)
else if (of_device_is_compatible(dev->of_node, "brcm,ocotp-v2"))
priv->map = &otp_map_v2;
else {
- dev_err(&pdev->dev,
- "%s otpc config map not defined\n", __func__);
+ dev_err(dev, "%s otpc config map not defined\n", __func__);
return -EINVAL;
}

--
2.14.3

2018-01-03 20:01:45

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 19/22] nvmem: vf610-ocotp: Do not use "&pdev->dev" explicitly

There already a "dev" variable for that. Use it.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/vf610-ocotp.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/nvmem/vf610-ocotp.c b/drivers/nvmem/vf610-ocotp.c
index 752a0983e7fb..6e6bf7987d9d 100644
--- a/drivers/nvmem/vf610-ocotp.c
+++ b/drivers/nvmem/vf610-ocotp.c
@@ -223,8 +223,7 @@ static int vf610_ocotp_probe(struct platform_device *pdev)
struct resource *res;
struct vf610_ocotp *ocotp_dev;

- ocotp_dev = devm_kzalloc(&pdev->dev,
- sizeof(struct vf610_ocotp), GFP_KERNEL);
+ ocotp_dev = devm_kzalloc(dev, sizeof(struct vf610_ocotp), GFP_KERNEL);
if (!ocotp_dev)
return -ENOMEM;

--
2.14.3

2018-01-03 20:02:13

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 21/22] nvmem: imx-iim: Do not use "&pdev->dev" explicitly

There's already "dev" variable for that. Use it.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/imx-iim.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/nvmem/imx-iim.c b/drivers/nvmem/imx-iim.c
index 635561a441bd..3022bd96bd7e 100644
--- a/drivers/nvmem/imx-iim.c
+++ b/drivers/nvmem/imx-iim.c
@@ -125,7 +125,7 @@ static int imx_iim_probe(struct platform_device *pdev)

drvdata = of_id->data;

- iim->clk = devm_clk_get(&pdev->dev, NULL);
+ iim->clk = devm_clk_get(dev, NULL);
if (IS_ERR(iim->clk))
return PTR_ERR(iim->clk);

--
2.14.3

2018-01-03 20:01:40

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 12/22] nvmem: meson-efuse: Convert to use devm_nvmem_register()

Drop all of the code related to .remove hook and make use of
devm_nvmem_register() instead.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/meson-efuse.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/nvmem/meson-efuse.c b/drivers/nvmem/meson-efuse.c
index a43c68f90937..66029fc85ba9 100644
--- a/drivers/nvmem/meson-efuse.c
+++ b/drivers/nvmem/meson-efuse.c
@@ -60,25 +60,15 @@ static int meson_efuse_probe(struct platform_device *pdev)
econfig.reg_read = meson_efuse_read;
econfig.size = size;

- nvmem = nvmem_register(&econfig);
+ nvmem = devm_nvmem_register(&pdev->dev, &econfig);
if (IS_ERR(nvmem))
return PTR_ERR(nvmem);

- platform_set_drvdata(pdev, nvmem);
-
return 0;
}

-static int meson_efuse_remove(struct platform_device *pdev)
-{
- struct nvmem_device *nvmem = platform_get_drvdata(pdev);
-
- return nvmem_unregister(nvmem);
-}
-
static struct platform_driver meson_efuse_driver = {
.probe = meson_efuse_probe,
- .remove = meson_efuse_remove,
.driver = {
.name = "meson-efuse",
.of_match_table = meson_efuse_match,
--
2.14.3

2018-01-03 20:02:58

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 18/22] nvmem: rockchip-efuse: Make use of of_device_get_match_data()

Simplify code a bit by using of_device_get_match_data() instead of
of_match_device().

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/rockchip-efuse.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/nvmem/rockchip-efuse.c b/drivers/nvmem/rockchip-efuse.c
index d6dc1330f895..979ba0a376a0 100644
--- a/drivers/nvmem/rockchip-efuse.c
+++ b/drivers/nvmem/rockchip-efuse.c
@@ -193,11 +193,11 @@ static int rockchip_efuse_probe(struct platform_device *pdev)
struct resource *res;
struct nvmem_device *nvmem;
struct rockchip_efuse_chip *efuse;
- const struct of_device_id *match;
+ const void *data;
struct device *dev = &pdev->dev;

- match = of_match_device(dev->driver->of_match_table, dev);
- if (!match || !match->data) {
+ data = of_device_get_match_data(dev);
+ if (!data) {
dev_err(dev, "failed to get match data\n");
return -EINVAL;
}
@@ -218,7 +218,7 @@ static int rockchip_efuse_probe(struct platform_device *pdev)

efuse->dev = &pdev->dev;
econfig.size = resource_size(res);
- econfig.reg_read = match->data;
+ econfig.reg_read = data;
econfig.priv = efuse;
econfig.dev = efuse->dev;
nvmem = devm_nvmem_register(dev, &econfig);
--
2.14.3

2018-01-03 20:03:18

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 16/22] nvmem: meson-efuse: Do no gate COMPILE_TEST with MESON_SM

Being able to build this driver when COMPILE_TEST is selected is still
useful even when MESON_SM is not selected, since selecting this
driver as a module and doing "make modules" will result in successful
build and would detect trivial coding errors. For an example of type
of errors that could be prevented see [1] and [2]

[1] lkml.kernel.org/r/[email protected]
[2] https://marc.info/?l=linux-arm-kernel&m=151461599104358&w=2

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/Kconfig | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
index ff505af064ba..42e84e1b2a26 100644
--- a/drivers/nvmem/Kconfig
+++ b/drivers/nvmem/Kconfig
@@ -147,7 +147,7 @@ config NVMEM_VF610_OCOTP

config MESON_EFUSE
tristate "Amlogic Meson GX eFuse Support"
- depends on (ARCH_MESON || COMPILE_TEST) && MESON_SM
+ depends on (ARCH_MESON && MESON_SM) || COMPILE_TEST
help
This is a driver to retrieve specific values from the eFuse found on
the Amlogic Meson GX SoCs.
--
2.14.3

2018-01-03 20:03:44

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 15/22] nvmem: bcm-ocotp: Convert to use devm_nvmem_register()

Drop all of the code related to .remove hook and make use of
devm_nvmem_register() instead.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/bcm-ocotp.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/nvmem/bcm-ocotp.c b/drivers/nvmem/bcm-ocotp.c
index 5e9e324427f9..24c30fa475cc 100644
--- a/drivers/nvmem/bcm-ocotp.c
+++ b/drivers/nvmem/bcm-ocotp.c
@@ -302,27 +302,17 @@ static int bcm_otpc_probe(struct platform_device *pdev)

priv->config = &bcm_otpc_nvmem_config;

- nvmem = nvmem_register(&bcm_otpc_nvmem_config);
+ nvmem = devm_nvmem_register(dev, &bcm_otpc_nvmem_config);
if (IS_ERR(nvmem)) {
dev_err(dev, "error registering nvmem config\n");
return PTR_ERR(nvmem);
}

- platform_set_drvdata(pdev, nvmem);
-
return 0;
}

-static int bcm_otpc_remove(struct platform_device *pdev)
-{
- struct nvmem_device *nvmem = platform_get_drvdata(pdev);
-
- return nvmem_unregister(nvmem);
-}
-
static struct platform_driver bcm_otpc_driver = {
.probe = bcm_otpc_probe,
- .remove = bcm_otpc_remove,
.driver = {
.name = "brcm-otpc",
.of_match_table = bcm_otpc_dt_ids,
--
2.14.3

2018-01-03 20:01:37

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 13/22] nvmem: lpc18xx_otp: Convert to use devm_nvmem_register()

Drop all of the code related to .remove hook and make use of
devm_nvmem_register() instead.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/lpc18xx_otp.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/nvmem/lpc18xx_otp.c b/drivers/nvmem/lpc18xx_otp.c
index 95268db155e9..74777bfe2dcd 100644
--- a/drivers/nvmem/lpc18xx_otp.c
+++ b/drivers/nvmem/lpc18xx_otp.c
@@ -86,22 +86,13 @@ static int lpc18xx_otp_probe(struct platform_device *pdev)
lpc18xx_otp_nvmem_config.dev = &pdev->dev;
lpc18xx_otp_nvmem_config.priv = otp;

- nvmem = nvmem_register(&lpc18xx_otp_nvmem_config);
+ nvmem = devm_nvmem_register(&pdev->dev, &lpc18xx_otp_nvmem_config);
if (IS_ERR(nvmem))
return PTR_ERR(nvmem);

- platform_set_drvdata(pdev, nvmem);
-
return 0;
}

-static int lpc18xx_otp_remove(struct platform_device *pdev)
-{
- struct nvmem_device *nvmem = platform_get_drvdata(pdev);
-
- return nvmem_unregister(nvmem);
-}
-
static const struct of_device_id lpc18xx_otp_dt_ids[] = {
{ .compatible = "nxp,lpc1850-otp" },
{ },
@@ -110,7 +101,6 @@ MODULE_DEVICE_TABLE(of, lpc18xx_otp_dt_ids);

static struct platform_driver lpc18xx_otp_driver = {
.probe = lpc18xx_otp_probe,
- .remove = lpc18xx_otp_remove,
.driver = {
.name = "lpc18xx_otp",
.of_match_table = lpc18xx_otp_dt_ids,
--
2.14.3

2018-01-03 20:04:38

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 14/22] nvmem: imx-iim: Convert to use devm_nvmem_register()

Drop all of the code related to .remove hook and make use of
devm_nvmem_register() instead.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/imx-iim.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/nvmem/imx-iim.c b/drivers/nvmem/imx-iim.c
index 52cfe91d9762..635561a441bd 100644
--- a/drivers/nvmem/imx-iim.c
+++ b/drivers/nvmem/imx-iim.c
@@ -138,25 +138,15 @@ static int imx_iim_probe(struct platform_device *pdev)
cfg.size = drvdata->nregs;
cfg.priv = iim;

- nvmem = nvmem_register(&cfg);
+ nvmem = devm_nvmem_register(dev, &cfg);
if (IS_ERR(nvmem))
return PTR_ERR(nvmem);

- platform_set_drvdata(pdev, nvmem);
-
return 0;
}

-static int imx_iim_remove(struct platform_device *pdev)
-{
- struct nvmem_device *nvmem = platform_get_drvdata(pdev);
-
- return nvmem_unregister(nvmem);
-}
-
static struct platform_driver imx_iim_driver = {
.probe = imx_iim_probe,
- .remove = imx_iim_remove,
.driver = {
.name = "imx-iim",
.of_match_table = imx_iim_dt_ids,
--
2.14.3

2018-01-03 20:01:32

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 08/22] nvmem: rockchip-efuse: Convert to use devm_nvmem_register()

Drop all of the code related to .remove hook and make use of
devm_nvmem_register() instead.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/rockchip-efuse.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/nvmem/rockchip-efuse.c b/drivers/nvmem/rockchip-efuse.c
index 123de77ca5d6..d6dc1330f895 100644
--- a/drivers/nvmem/rockchip-efuse.c
+++ b/drivers/nvmem/rockchip-efuse.c
@@ -221,25 +221,15 @@ static int rockchip_efuse_probe(struct platform_device *pdev)
econfig.reg_read = match->data;
econfig.priv = efuse;
econfig.dev = efuse->dev;
- nvmem = nvmem_register(&econfig);
+ nvmem = devm_nvmem_register(dev, &econfig);
if (IS_ERR(nvmem))
return PTR_ERR(nvmem);

- platform_set_drvdata(pdev, nvmem);
-
return 0;
}

-static int rockchip_efuse_remove(struct platform_device *pdev)
-{
- struct nvmem_device *nvmem = platform_get_drvdata(pdev);
-
- return nvmem_unregister(nvmem);
-}
-
static struct platform_driver rockchip_efuse_driver = {
.probe = rockchip_efuse_probe,
- .remove = rockchip_efuse_remove,
.driver = {
.name = "rockchip-efuse",
.of_match_table = rockchip_efuse_match,
--
2.14.3

2018-01-03 20:04:59

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 11/22] nvmem: meson-mx-efuse: Convert to use devm_nvmem_register()

Drop all of the code related to .remove hook and make use of
devm_nvmem_register() instead.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/meson-mx-efuse.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/nvmem/meson-mx-efuse.c b/drivers/nvmem/meson-mx-efuse.c
index a346b4923550..f8e0b92e40ba 100644
--- a/drivers/nvmem/meson-mx-efuse.c
+++ b/drivers/nvmem/meson-mx-efuse.c
@@ -233,25 +233,15 @@ static int meson_mx_efuse_probe(struct platform_device *pdev)
return PTR_ERR(efuse->core_clk);
}

- efuse->nvmem = nvmem_register(&efuse->config);
+ efuse->nvmem = devm_nvmem_register(&pdev->dev, &efuse->config);
if (IS_ERR(efuse->nvmem))
return PTR_ERR(efuse->nvmem);

- platform_set_drvdata(pdev, efuse);
-
return 0;
}

-static int meson_mx_efuse_remove(struct platform_device *pdev)
-{
- struct meson_mx_efuse *efuse = platform_get_drvdata(pdev);
-
- return nvmem_unregister(efuse->nvmem);
-}
-
static struct platform_driver meson_mx_efuse_driver = {
.probe = meson_mx_efuse_probe,
- .remove = meson_mx_efuse_remove,
.driver = {
.name = "meson-mx-efuse",
.of_match_table = meson_mx_efuse_match,
--
2.14.3

2018-01-03 20:05:35

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 10/22] nvmem: mtk-efuse: Convert to use devm_nvmem_register()

Drop all of the code related to .remove hook and make use of
devm_nvmem_register() instead.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/mtk-efuse.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/nvmem/mtk-efuse.c b/drivers/nvmem/mtk-efuse.c
index 9ee3479cfc7b..97ab7e6a4789 100644
--- a/drivers/nvmem/mtk-efuse.c
+++ b/drivers/nvmem/mtk-efuse.c
@@ -72,22 +72,13 @@ static int mtk_efuse_probe(struct platform_device *pdev)
econfig.size = resource_size(res);
econfig.priv = priv;
econfig.dev = dev;
- nvmem = nvmem_register(&econfig);
+ nvmem = devm_nvmem_register(dev, &econfig);
if (IS_ERR(nvmem))
return PTR_ERR(nvmem);

- platform_set_drvdata(pdev, nvmem);
-
return 0;
}

-static int mtk_efuse_remove(struct platform_device *pdev)
-{
- struct nvmem_device *nvmem = platform_get_drvdata(pdev);
-
- return nvmem_unregister(nvmem);
-}
-
static const struct of_device_id mtk_efuse_of_match[] = {
{ .compatible = "mediatek,mt8173-efuse",},
{ .compatible = "mediatek,efuse",},
@@ -97,7 +88,6 @@ MODULE_DEVICE_TABLE(of, mtk_efuse_of_match);

static struct platform_driver mtk_efuse_driver = {
.probe = mtk_efuse_probe,
- .remove = mtk_efuse_remove,
.driver = {
.name = "mediatek,efuse",
.of_match_table = mtk_efuse_of_match,
--
2.14.3

2018-01-03 20:01:28

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 04/22] nvmem: vf610-ocotp: Convert to use devm_nvmem_register()

Drop all of the code related to .remove hook and make use of
devm_nvmem_register() instead.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/vf610-ocotp.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/nvmem/vf610-ocotp.c b/drivers/nvmem/vf610-ocotp.c
index 5ae9e002f195..752a0983e7fb 100644
--- a/drivers/nvmem/vf610-ocotp.c
+++ b/drivers/nvmem/vf610-ocotp.c
@@ -217,13 +217,6 @@ static const struct of_device_id ocotp_of_match[] = {
};
MODULE_DEVICE_TABLE(of, ocotp_of_match);

-static int vf610_ocotp_remove(struct platform_device *pdev)
-{
- struct vf610_ocotp *ocotp_dev = platform_get_drvdata(pdev);
-
- return nvmem_unregister(ocotp_dev->nvmem);
-}
-
static int vf610_ocotp_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
@@ -251,13 +244,11 @@ static int vf610_ocotp_probe(struct platform_device *pdev)
ocotp_config.priv = ocotp_dev;
ocotp_config.dev = dev;

- ocotp_dev->nvmem = nvmem_register(&ocotp_config);
+ ocotp_dev->nvmem = devm_nvmem_register(dev, &ocotp_config);
if (IS_ERR(ocotp_dev->nvmem))
return PTR_ERR(ocotp_dev->nvmem);

ocotp_dev->dev = dev;
- platform_set_drvdata(pdev, ocotp_dev);
-
ocotp_dev->timing = vf610_ocotp_calculate_timing(ocotp_dev);

return 0;
@@ -265,7 +256,6 @@ static int vf610_ocotp_probe(struct platform_device *pdev)

static struct platform_driver vf610_ocotp_driver = {
.probe = vf610_ocotp_probe,
- .remove = vf610_ocotp_remove,
.driver = {
.name = "vf610-ocotp",
.of_match_table = ocotp_of_match,
--
2.14.3

2018-01-03 20:05:50

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 09/22] nvmem: qfprom: Convert to use devm_nvmem_register()

Drop all of the code related to .remove hook and make use of
devm_nvmem_register() instead.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/qfprom.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/nvmem/qfprom.c b/drivers/nvmem/qfprom.c
index cb3b48b47d64..13bf43c84bd4 100644
--- a/drivers/nvmem/qfprom.c
+++ b/drivers/nvmem/qfprom.c
@@ -47,13 +47,6 @@ static int qfprom_reg_write(void *context,
return 0;
}

-static int qfprom_remove(struct platform_device *pdev)
-{
- struct nvmem_device *nvmem = platform_get_drvdata(pdev);
-
- return nvmem_unregister(nvmem);
-}
-
static struct nvmem_config econfig = {
.name = "qfprom",
.stride = 1,
@@ -82,12 +75,10 @@ static int qfprom_probe(struct platform_device *pdev)
econfig.dev = dev;
econfig.priv = priv;

- nvmem = nvmem_register(&econfig);
+ nvmem = devm_nvmem_register(dev, &econfig);
if (IS_ERR(nvmem))
return PTR_ERR(nvmem);

- platform_set_drvdata(pdev, nvmem);
-
return 0;
}

@@ -99,7 +90,6 @@ MODULE_DEVICE_TABLE(of, qfprom_of_match);

static struct platform_driver qfprom_driver = {
.probe = qfprom_probe,
- .remove = qfprom_remove,
.driver = {
.name = "qcom,qfprom",
.of_match_table = qfprom_of_match,
--
2.14.3

2018-01-03 20:01:26

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 03/22] nvmem: Introduce devm_nvmem_(un)register()

Introduce devm_nvmem_register()/devm_nvmem_unregister() to make
.remove() unnecessary in trivial drivers.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/core.c | 57 ++++++++++++++++++++++++++++++++++++++++++
include/linux/nvmem-provider.h | 17 +++++++++++++
2 files changed, 74 insertions(+)

diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
index 57cbeacfbeb2..1f387a2d915f 100644
--- a/drivers/nvmem/core.c
+++ b/drivers/nvmem/core.c
@@ -551,6 +551,63 @@ int nvmem_unregister(struct nvmem_device *nvmem)
}
EXPORT_SYMBOL_GPL(nvmem_unregister);

+static void devm_nvmem_release(struct device *dev, void *res)
+{
+ WARN_ON(nvmem_unregister(*(struct nvmem_device **)res));
+}
+
+/**
+ * devm_nvmem_register() - Register a managed nvmem device for given nvmem_config.
+ * Also creates an binary entry in /sys/bus/nvmem/devices/dev-name/nvmem
+ *
+ * @config: nvmem device configuration with which nvmem device is created.
+ *
+ * Return: Will be an ERR_PTR() on error or a valid pointer to nvmem_device
+ * on success.
+ */
+struct nvmem_device *devm_nvmem_register(struct device *dev,
+ const struct nvmem_config *config)
+{
+ struct nvmem_device **ptr, *nvmem;
+
+ ptr = devres_alloc(devm_nvmem_release, sizeof(*ptr), GFP_KERNEL);
+ if (!ptr)
+ return ERR_PTR(-ENOMEM);
+
+ nvmem = nvmem_register(config);
+
+ if (!IS_ERR(nvmem)) {
+ *ptr = nvmem;
+ devres_add(dev, ptr);
+ } else {
+ devres_free(ptr);
+ }
+
+ return nvmem;
+}
+EXPORT_SYMBOL_GPL(devm_nvmem_register);
+
+static int devm_nvmem_match(struct device *dev, void *res, void *data)
+{
+ struct nvmem_device **r = res;
+
+ return *r == data;
+}
+
+/**
+ * devm_nvmem_unregister() - Unregister previously registered managed nvmem device
+ *
+ * @nvmem: Pointer to previously registered nvmem device.
+ *
+ * Return: Will be an negative on error or a zero on success.
+ */
+int devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem)
+{
+ return devres_release(dev, devm_nvmem_release, devm_nvmem_match, nvmem);
+}
+EXPORT_SYMBOL(devm_nvmem_unregister);
+
+
static struct nvmem_device *__nvmem_device_get(struct device_node *np,
struct nvmem_cell **cellp,
const char *cell_id)
diff --git a/include/linux/nvmem-provider.h b/include/linux/nvmem-provider.h
index 4889a6c62a81..7f2f610c6eea 100644
--- a/include/linux/nvmem-provider.h
+++ b/include/linux/nvmem-provider.h
@@ -72,6 +72,11 @@ struct nvmem_config {
struct nvmem_device *nvmem_register(const struct nvmem_config *cfg);
int nvmem_unregister(struct nvmem_device *nvmem);

+struct nvmem_device *devm_nvmem_register(struct device *dev,
+ const struct nvmem_config *cfg);
+
+int devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem);
+
#else

static inline struct nvmem_device *nvmem_register(const struct nvmem_config *c)
@@ -84,5 +89,17 @@ static inline int nvmem_unregister(struct nvmem_device *nvmem)
return -ENOSYS;
}

+static inline struct nvmem_device *
+devm_nvmem_register(struct device *dev, const struct nvmem_config *c)
+{
+ return nvmem_register(c);
+}
+
+static inline int
+devm_nvmem_unregister(struct device *dev, struct nvmem_device *nvmem)
+{
+ return nvmem_unregister(nvmem);
+}
+
#endif /* CONFIG_NVMEM */
#endif /* ifndef _LINUX_NVMEM_PROVIDER_H */
--
2.14.3

2018-01-03 20:06:14

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 06/22] nvmem: uniphier-efuse: Convert to use devm_nvmem_register()

Drop all of the code related to .remove hook and make use of
devm_nvmem_register() instead.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/uniphier-efuse.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/nvmem/uniphier-efuse.c b/drivers/nvmem/uniphier-efuse.c
index 9d278b4e1dc7..7ddc6fc012c9 100644
--- a/drivers/nvmem/uniphier-efuse.c
+++ b/drivers/nvmem/uniphier-efuse.c
@@ -60,22 +60,13 @@ static int uniphier_efuse_probe(struct platform_device *pdev)
econfig.size = resource_size(res);
econfig.priv = priv;
econfig.dev = dev;
- nvmem = nvmem_register(&econfig);
+ nvmem = devm_nvmem_register(dev, &econfig);
if (IS_ERR(nvmem))
return PTR_ERR(nvmem);

- platform_set_drvdata(pdev, nvmem);
-
return 0;
}

-static int uniphier_efuse_remove(struct platform_device *pdev)
-{
- struct nvmem_device *nvmem = platform_get_drvdata(pdev);
-
- return nvmem_unregister(nvmem);
-}
-
static const struct of_device_id uniphier_efuse_of_match[] = {
{ .compatible = "socionext,uniphier-efuse",},
{/* sentinel */},
@@ -84,7 +75,6 @@ MODULE_DEVICE_TABLE(of, uniphier_efuse_of_match);

static struct platform_driver uniphier_efuse_driver = {
.probe = uniphier_efuse_probe,
- .remove = uniphier_efuse_remove,
.driver = {
.name = "uniphier-efuse",
.of_match_table = uniphier_efuse_of_match,
--
2.14.3

2018-01-03 20:06:46

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 05/22] nvmem: imx-ocotp: Convert to use devm_nvmem_register()

Drop all of the code related to .remove hook and make use of
devm_nvmem_register() instead.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/imx-ocotp.c | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/nvmem/imx-ocotp.c b/drivers/nvmem/imx-ocotp.c
index d7ba351a70c9..68deffe636f3 100644
--- a/drivers/nvmem/imx-ocotp.c
+++ b/drivers/nvmem/imx-ocotp.c
@@ -466,26 +466,16 @@ static int imx_ocotp_probe(struct platform_device *pdev)
imx_ocotp_nvmem_config.dev = dev;
imx_ocotp_nvmem_config.priv = priv;
priv->config = &imx_ocotp_nvmem_config;
- nvmem = nvmem_register(&imx_ocotp_nvmem_config);
+ nvmem = devm_nvmem_register(dev, &imx_ocotp_nvmem_config);

if (IS_ERR(nvmem))
return PTR_ERR(nvmem);

- platform_set_drvdata(pdev, nvmem);
-
return 0;
}

-static int imx_ocotp_remove(struct platform_device *pdev)
-{
- struct nvmem_device *nvmem = platform_get_drvdata(pdev);
-
- return nvmem_unregister(nvmem);
-}
-
static struct platform_driver imx_ocotp_driver = {
.probe = imx_ocotp_probe,
- .remove = imx_ocotp_remove,
.driver = {
.name = "imx_ocotp",
.of_match_table = imx_ocotp_dt_ids,
--
2.14.3

2018-01-03 20:07:21

by Andrey Smirnov

[permalink] [raw]
Subject: [PATCH v3 02/22] nvmem: core: Allow specifying device name verbatim

Add code to allow avoid having nvmem core append a numeric suffix to
the end of the name by passing config->id of -1.

Cc: Srinivas Kandagatla <[email protected]>
Cc: Heiko Stuebner <[email protected]>
Cc: Masahiro Yamada <[email protected]>
Cc: Carlo Caione <[email protected]>
Cc: Kevin Hilman <[email protected]>
Cc: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Signed-off-by: Andrey Smirnov <[email protected]>
---
drivers/nvmem/core.c | 11 ++++++++---
include/linux/nvmem-provider.h | 3 +++
2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
index 5a5cefd12153..57cbeacfbeb2 100644
--- a/drivers/nvmem/core.c
+++ b/drivers/nvmem/core.c
@@ -475,9 +475,14 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config)
nvmem->reg_write = config->reg_write;
np = config->dev->of_node;
nvmem->dev.of_node = np;
- dev_set_name(&nvmem->dev, "%s%d",
- config->name ? : "nvmem",
- config->name ? config->id : nvmem->id);
+
+ if (config->id == -1 && config->name) {
+ dev_set_name(&nvmem->dev, "%s", config->name);
+ } else {
+ dev_set_name(&nvmem->dev, "%s%d",
+ config->name ? : "nvmem",
+ config->name ? config->id : nvmem->id);
+ }

nvmem->read_only = of_property_read_bool(np, "read-only") |
config->read_only;
diff --git a/include/linux/nvmem-provider.h b/include/linux/nvmem-provider.h
index 27e599222ec1..4889a6c62a81 100644
--- a/include/linux/nvmem-provider.h
+++ b/include/linux/nvmem-provider.h
@@ -43,6 +43,9 @@ typedef int (*nvmem_reg_write_t)(void *priv, unsigned int offset,
* Note: A default "nvmem<id>" name will be assigned to the device if
* no name is specified in its configuration. In such case "<id>" is
* generated with ida_simple_get() and provided id field is ignored.
+ *
+ * Note: Specifying name and setting id to -1 implies a unique device
+ * whose name is provided as-is (kept unaltered).
*/
struct nvmem_config {
struct device *dev;
--
2.14.3

2018-01-24 11:15:17

by Bartosz Golaszewski

[permalink] [raw]
Subject: Re: [PATCH v3 00/22] Verbatim device names and devm_nvmem_(un)register()

2018-01-03 21:00 GMT+01:00 Andrey Smirnov <[email protected]>:
> Srinivas, all:
>
> This patchset contains various small changes that I recently made to
> NVMEM, more specifically:
>
> - Patches 1 and 3 are two changes I am hoping are acceptable upstream
>
> - Patches 4 to 15 are a follow up to patch 2
>
> - Patches 16 to 22 are just trivial fixups and I am more than happy
> to drop them if they seem to add more pointless churn rather then
> value.
>
> Feedback is appreciated!
>
> Thanks,
> Andrey Smirnov
>
> Changes since [v2]:
>
> - Added a patch with kerenl doc for struct nvmem_config as a
> prerequsite for patch #2
>
> - Documented behaviour of nvmem_register() when id is set to -1
>
> - Added kernel doc for devm_nvmem_(un)register()
>
>
> Changes since [v1]:
>
> - Fixed a build break detected by kbuild test robot
>
> - Added a patch to unconditionally enable COMPILE_TEST for meson-efuse
>
> - Dropped Joachim Eastwood from CC list due to bouncing e-mail
>
> [v2] lkml.kernel.org/r/[email protected]
> [v1] lkml.kernel.org/r/[email protected]
>
>

Hi Srinivas,

I don't see this series in next - is it going to miss this merge window?

Thanks,
Bartosz

2018-01-25 09:18:09

by Srinivas Kandagatla

[permalink] [raw]
Subject: Re: [PATCH v3 00/22] Verbatim device names and devm_nvmem_(un)register()



On 24/01/18 11:13, Bartosz Golaszewski wrote:
>>
> Hi Srinivas,
>
> I don't see this series in next - is it going to miss this merge window?
>

Thanks for your patience.

In general, I pick stuff which are sent before rc5-rc6 and send it to
Greg KH for inclusion in char-misc tree.

These patches will be queued for next release cycle..

Thanks,
srini

> Thanks,
> Bartosz

2018-02-26 03:47:08

by Andrey Smirnov

[permalink] [raw]
Subject: Re: [PATCH v3 00/22] Verbatim device names and devm_nvmem_(un)register()

On Thu, Jan 25, 2018 at 1:17 AM, Srinivas Kandagatla
<[email protected]> wrote:
>
>
> On 24/01/18 11:13, Bartosz Golaszewski wrote:
>>>
>>>
>> Hi Srinivas,
>>
>> I don't see this series in next - is it going to miss this merge window?
>>
>
> Thanks for your patience.
>
> In general, I pick stuff which are sent before rc5-rc6 and send it to Greg
> KH for inclusion in char-misc tree.
>
> These patches will be queued for next release cycle..
>

Srinivas:

Correct me if I am wrong, but doesn't seem like these patches made it
to char-misc tree yet. I was recently rebasing them on top of Linus'
master and ended up having to resolve a couple of merge conflicts, so
would you like me to re-spin v4 on top of 4.16-rc1 (or any other
version) and re-submit the series?

Thanks,
Andrey Smirnov

2018-02-26 09:31:51

by Srinivas Kandagatla

[permalink] [raw]
Subject: Re: [PATCH v3 00/22] Verbatim device names and devm_nvmem_(un)register()

Hi Andrey,
Thankyou for your patience.

On 26/02/18 03:45, Andrey Smirnov wrote:
> On Thu, Jan 25, 2018 at 1:17 AM, Srinivas Kandagatla
> <[email protected]> wrote:
>>
>>
>> On 24/01/18 11:13, Bartosz Golaszewski wrote:
>>>>
>>>>
>>> Hi Srinivas,
>>>
>>> I don't see this series in next - is it going to miss this merge window?
>>>
>>
>> Thanks for your patience.
>>
>> In general, I pick stuff which are sent before rc5-rc6 and send it to Greg
>> KH for inclusion in char-misc tree.
>>
>> These patches will be queued for next release cycle..
>>
>
> Srinivas:
>
> Correct me if I am wrong, but doesn't seem like these patches made it
> to char-misc tree yet. I was recently rebasing them on top of Linus'

As this is 4.17 material, these will not go into char-misc tree until or
after rc5.
> master and ended up having to resolve a couple of merge conflicts, so
> would you like me to re-spin v4 on top of 4.16-rc1 (or any other
> version) and re-submit the series?
Sure thanks, If you can respin the patches than that would reduce my
time while sending it to Greg. I will send them to Greg next week.

thanks,
Srini
>
> Thanks,
> Andrey Smirnov
>

2018-02-28 18:36:30

by Sean Wang

[permalink] [raw]
Subject: Re: [PATCH v3 01/22] nvmem: Document struct nvmem_config

On Wed, 2018-01-03 at 12:00 -0800, Andrey Smirnov wrote:
> Add a simple description of struct nvmem_config and its fields.
>
> Cc: Srinivas Kandagatla <[email protected]>
> Cc: Heiko Stuebner <[email protected]>
> Cc: Masahiro Yamada <[email protected]>
> Cc: Carlo Caione <[email protected]>
> Cc: Kevin Hilman <[email protected]>
> Cc: Matthias Brugger <[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Signed-off-by: Andrey Smirnov <[email protected]>
> ---
> include/linux/nvmem-provider.h | 22 ++++++++++++++++++++++
> 1 file changed, 22 insertions(+)
>
> diff --git a/include/linux/nvmem-provider.h b/include/linux/nvmem-provider.h
> index 497706f5adca..27e599222ec1 100644
> --- a/include/linux/nvmem-provider.h
> +++ b/include/linux/nvmem-provider.h
> @@ -22,6 +22,28 @@ typedef int (*nvmem_reg_read_t)(void *priv, unsigned int offset,
> typedef int (*nvmem_reg_write_t)(void *priv, unsigned int offset,
> void *val, size_t bytes);
>
> +/**
> + * struct nvmem_config - NVMEM device configuration
> + *
> + * @dev: Parent device.
> + * @name: Optional name.
> + * @id: Optional device ID used in full name. Ignored if name is NULL.
> + * @owner: Pointer to exporter module. Used for refcounting.
> + * @cells: Optional array of pre-defined NVMEM cells.
> + * @ncells: Number of elements in cells.
> + * @read_only: Device is read-only.
> + * @root_only: Device is accessibly to root only.
> + * @reg_read: Callback to read data.
> + * @reg_write: Callback to write data.
> + * @size: Device size.
> + * @word_size: Minimum read/write access granularity.
> + * @stride: Minimum read/write access stide.

typo on stide ?

> + * @priv: User context passed to read/write callbacks.
> + *
> + * Note: A default "nvmem<id>" name will be assigned to the device if
> + * no name is specified in its configuration. In such case "<id>" is
> + * generated with ida_simple_get() and provided id field is ignored.
> + */
> struct nvmem_config {
> struct device *dev;
> const char *name;



2018-03-08 18:23:38

by Andrey Smirnov

[permalink] [raw]
Subject: Re: [PATCH v3 01/22] nvmem: Document struct nvmem_config

On Wed, Feb 28, 2018 at 10:34 AM, Sean Wang <[email protected]> wrote:
> On Wed, 2018-01-03 at 12:00 -0800, Andrey Smirnov wrote:
>> Add a simple description of struct nvmem_config and its fields.
>>
>> Cc: Srinivas Kandagatla <[email protected]>
>> Cc: Heiko Stuebner <[email protected]>
>> Cc: Masahiro Yamada <[email protected]>
>> Cc: Carlo Caione <[email protected]>
>> Cc: Kevin Hilman <[email protected]>
>> Cc: Matthias Brugger <[email protected]>
>> Cc: [email protected]
>> Cc: [email protected]
>> Cc: [email protected]
>> Cc: [email protected]
>> Cc: [email protected]
>> Cc: [email protected]
>> Signed-off-by: Andrey Smirnov <[email protected]>
>> ---
>> include/linux/nvmem-provider.h | 22 ++++++++++++++++++++++
>> 1 file changed, 22 insertions(+)
>>
>> diff --git a/include/linux/nvmem-provider.h b/include/linux/nvmem-provider.h
>> index 497706f5adca..27e599222ec1 100644
>> --- a/include/linux/nvmem-provider.h
>> +++ b/include/linux/nvmem-provider.h
>> @@ -22,6 +22,28 @@ typedef int (*nvmem_reg_read_t)(void *priv, unsigned int offset,
>> typedef int (*nvmem_reg_write_t)(void *priv, unsigned int offset,
>> void *val, size_t bytes);
>>
>> +/**
>> + * struct nvmem_config - NVMEM device configuration
>> + *
>> + * @dev: Parent device.
>> + * @name: Optional name.
>> + * @id: Optional device ID used in full name. Ignored if name is NULL.
>> + * @owner: Pointer to exporter module. Used for refcounting.
>> + * @cells: Optional array of pre-defined NVMEM cells.
>> + * @ncells: Number of elements in cells.
>> + * @read_only: Device is read-only.
>> + * @root_only: Device is accessibly to root only.
>> + * @reg_read: Callback to read data.
>> + * @reg_write: Callback to write data.
>> + * @size: Device size.
>> + * @word_size: Minimum read/write access granularity.
>> + * @stride: Minimum read/write access stide.
>
> typo on stide ?

Definitely, will fix in next version.

Thanks,
Andrey Smirnov