linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] Mediatek EFUSE Support
@ 2015-10-16  8:39 andrew-ct.chen
  2015-10-16  8:39 ` [PATCH 1/3] dt-bindings: add document of mediatek efuse driver andrew-ct.chen
                   ` (3 more replies)
  0 siblings, 4 replies; 15+ messages in thread
From: andrew-ct.chen @ 2015-10-16  8:39 UTC (permalink / raw)
  To: Srinivas Kandagatla
  Cc: Maxime Ripard, Rob Herring, Pawel Moll, Mark Rutland,
	Ian Campbell, Kumar Gala, Matthias Brugger, Sascha Hauer,
	devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
	srv_heupstream

This patch adds EFUSE support driver which is used by other drivers
like thermal sensor and HDMI impedance.

There are some efuses these fuses store things like calibration data,
speed bins.. etc. Drivers like thermal sensor, HDMI impedance would
read out this data for configuring the driver.

Andrew-CT Chen (3):
  dt-bindings: add document of mediatek efuse driver
  nvmem: mediatek: Add Mediatek EFUSE driver
  dts: arm64: Add EFUSE device node

 .../devicetree/bindings/nvmem/mtk-efuse.txt        | 36 +++++++++
 arch/arm64/boot/dts/mediatek/mt8173.dtsi           |  5 ++
 drivers/nvmem/Kconfig                              | 11 +++
 drivers/nvmem/Makefile                             |  1 +
 drivers/nvmem/mtk-efuse.c                          | 89 ++++++++++++++++++++++
 5 files changed, 142 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
 create mode 100644 drivers/nvmem/mtk-efuse.c

--
1.9.1


^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH 1/3] dt-bindings: add document of mediatek efuse driver
  2015-10-16  8:39 [PATCH 0/3] Mediatek EFUSE Support andrew-ct.chen
@ 2015-10-16  8:39 ` andrew-ct.chen
  2015-10-26  9:56   ` Srinivas Kandagatla
  2015-10-16  8:39 ` [PATCH 2/3] nvmem: mediatek: Add Mediatek EFUSE driver andrew-ct.chen
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 15+ messages in thread
From: andrew-ct.chen @ 2015-10-16  8:39 UTC (permalink / raw)
  To: Srinivas Kandagatla
  Cc: Maxime Ripard, Rob Herring, Pawel Moll, Mark Rutland,
	Ian Campbell, Kumar Gala, Matthias Brugger, Sascha Hauer,
	devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
	srv_heupstream, Andrew-CT Chen

From: Andrew-CT Chen <andrew-ct.chen@mediatek.com>

Add Mediatek MT8173 EFUSE Devicetree binding file

Signed-off-by: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
---
 .../devicetree/bindings/nvmem/mtk-efuse.txt        | 36 ++++++++++++++++++++++
 1 file changed, 36 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/nvmem/mtk-efuse.txt

diff --git a/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt b/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
new file mode 100644
index 0000000..92edc3d
--- /dev/null
+++ b/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
@@ -0,0 +1,36 @@
+= Mediatek MTK-EFUSE device tree bindings =
+
+This binding is intended to represent MTK-EFUSE which is found in most Mediatek SOCs.
+
+Required properties:
+- compatible: should be "mediatek,mt8173-efuse" or "mediatek,mt8135-efuse"
+- reg: Should contain registers location and length
+
+= Data cells =
+Are child nodes of MTK-EFUSE, bindings of which as described in
+bindings/nvmem/nvmem.txt
+
+Example:
+
+	efuse: efuse@10206000 {
+		compatible = "mediatek,mt8173-efuse";
+		reg	   = <0 0x10206000 0 0x1000>;
+		#address-cells = <1>;
+		#size-cells = <1>;
+
+		/* Data cells */
+		thermal_calibration: calib@528 {
+			reg = <0x528 0xc>;
+		};
+	};
+
+= Data consumers =
+Are device nodes which consume nvmem data cells.
+
+For example:
+
+	thermal {
+		...
+		nvmem-cells = <&thermal_calibration>;
+		nvmem-cell-names = "calibration";
+	};
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 2/3] nvmem: mediatek: Add Mediatek EFUSE driver
  2015-10-16  8:39 [PATCH 0/3] Mediatek EFUSE Support andrew-ct.chen
  2015-10-16  8:39 ` [PATCH 1/3] dt-bindings: add document of mediatek efuse driver andrew-ct.chen
@ 2015-10-16  8:39 ` andrew-ct.chen
  2015-10-26  9:56   ` Srinivas Kandagatla
  2015-10-16  8:39 ` [PATCH 3/3] dts: arm64: Add EFUSE device node andrew-ct.chen
  2015-10-19  6:49 ` [PATCH 0/3] Mediatek EFUSE Support Sascha Hauer
  3 siblings, 1 reply; 15+ messages in thread
From: andrew-ct.chen @ 2015-10-16  8:39 UTC (permalink / raw)
  To: Srinivas Kandagatla
  Cc: Maxime Ripard, Rob Herring, Pawel Moll, Mark Rutland,
	Ian Campbell, Kumar Gala, Matthias Brugger, Sascha Hauer,
	devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
	srv_heupstream, Andrew-CT Chen

From: Andrew-CT Chen <andrew-ct.chen@mediatek.com>

Add Mediatek EFUSE driver to access hardware data like
thermal sensor calibration or HDMI impedance.

Signed-off-by: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
---
 drivers/nvmem/Kconfig     | 11 ++++++
 drivers/nvmem/Makefile    |  1 +
 drivers/nvmem/mtk-efuse.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 101 insertions(+)
 create mode 100644 drivers/nvmem/mtk-efuse.c

diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
index 8db2978..1bd5badc 100644
--- a/drivers/nvmem/Kconfig
+++ b/drivers/nvmem/Kconfig
@@ -14,6 +14,17 @@ menuconfig NVMEM
 
 if NVMEM
 
+config MTK_EFUSE
+	tristate "Mediatek SoCs EFUSE support"
+	depends on ARCH_MEDIATEK || COMPILE_TEST
+	select REGMAP_MMIO
+	help
+	  This is a driver to access hardware related data like sensor
+	  calibration, HDMI impedance etc.
+
+	  This driver can also be built as a module. If so, the module
+	  will be called efuse-mtk.
+
 config QCOM_QFPROM
 	tristate "QCOM QFPROM Support"
 	depends on ARCH_QCOM || COMPILE_TEST
diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile
index 4328b93..916b727 100644
--- a/drivers/nvmem/Makefile
+++ b/drivers/nvmem/Makefile
@@ -6,6 +6,7 @@ obj-$(CONFIG_NVMEM)		+= nvmem_core.o
 nvmem_core-y			:= core.o
 
 # Devices
+obj-$(CONFIG_MTK_EFUSE)		+= mtk-efuse.o
 obj-$(CONFIG_QCOM_QFPROM)	+= nvmem_qfprom.o
 nvmem_qfprom-y			:= qfprom.o
 obj-$(CONFIG_NVMEM_SUNXI_SID)	+= nvmem_sunxi_sid.o
diff --git a/drivers/nvmem/mtk-efuse.c b/drivers/nvmem/mtk-efuse.c
new file mode 100644
index 0000000..9021c0b
--- /dev/null
+++ b/drivers/nvmem/mtk-efuse.c
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2015 MediaTek Inc.
+ * Author: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/device.h>
+#include <linux/module.h>
+#include <linux/nvmem-provider.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+
+static struct regmap_config mtk_regmap_config = {
+	.reg_bits = 32,
+	.val_bits = 32,
+	.reg_stride = 4,
+};
+
+static int mtk_efuse_probe(struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+	struct resource *res;
+	struct nvmem_device *nvmem;
+	struct nvmem_config *econfig;
+	struct regmap *regmap;
+	void __iomem *base;
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	base = devm_ioremap_resource(dev, res);
+	if (IS_ERR(base))
+		return PTR_ERR(base);
+
+	econfig = devm_kzalloc(dev, sizeof(*econfig), GFP_KERNEL);
+	if (!econfig)
+		return -ENOMEM;
+
+	mtk_regmap_config.max_register = resource_size(res) - 1;
+
+	regmap = devm_regmap_init_mmio(dev, base, &mtk_regmap_config);
+	if (IS_ERR(regmap)) {
+		dev_err(dev, "regmap init failed\n");
+		return PTR_ERR(regmap);
+	}
+
+	econfig->dev = dev;
+	econfig->owner = THIS_MODULE;
+	nvmem = nvmem_register(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,mt8135-efuse",},
+	{ .compatible = "mediatek,mt8173-efuse",},
+	{/* sentinel */},
+};
+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,
+	},
+};
+module_platform_driver(mtk_efuse_driver);
+MODULE_AUTHOR("Andrew-CT Chen <andrew-ct.chen@mediatek.com>");
+MODULE_DESCRIPTION("Mediatek EFUSE driver");
+MODULE_LICENSE("GPL v2");
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH 3/3] dts: arm64: Add EFUSE device node
  2015-10-16  8:39 [PATCH 0/3] Mediatek EFUSE Support andrew-ct.chen
  2015-10-16  8:39 ` [PATCH 1/3] dt-bindings: add document of mediatek efuse driver andrew-ct.chen
  2015-10-16  8:39 ` [PATCH 2/3] nvmem: mediatek: Add Mediatek EFUSE driver andrew-ct.chen
@ 2015-10-16  8:39 ` andrew-ct.chen
  2015-10-19  6:49 ` [PATCH 0/3] Mediatek EFUSE Support Sascha Hauer
  3 siblings, 0 replies; 15+ messages in thread
From: andrew-ct.chen @ 2015-10-16  8:39 UTC (permalink / raw)
  To: Srinivas Kandagatla
  Cc: Maxime Ripard, Rob Herring, Pawel Moll, Mark Rutland,
	Ian Campbell, Kumar Gala, Matthias Brugger, Sascha Hauer,
	devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
	srv_heupstream, Andrew-CT Chen

From: Andrew-CT Chen <andrew-ct.chen@mediatek.com>

Add Mediatek MT8173 EFUSE device node

Signed-off-by: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
---
 arch/arm64/boot/dts/mediatek/mt8173.dtsi | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8173.dtsi b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
index d18ee42..ab7227a 100644
--- a/arch/arm64/boot/dts/mediatek/mt8173.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
@@ -258,6 +258,11 @@
 			reg = <0 0x10200620 0 0x20>;
 		};
 
+		efuse: efuse@10206000 {
+			compatible = "mediatek,mt8173-efuse";
+			reg = <0 0x10206000 0 0x1000>;
+		};
+
 		apmixedsys: clock-controller@10209000 {
 			compatible = "mediatek,mt8173-apmixedsys";
 			reg = <0 0x10209000 0 0x1000>;
-- 
1.9.1


^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [PATCH 0/3] Mediatek EFUSE Support
  2015-10-16  8:39 [PATCH 0/3] Mediatek EFUSE Support andrew-ct.chen
                   ` (2 preceding siblings ...)
  2015-10-16  8:39 ` [PATCH 3/3] dts: arm64: Add EFUSE device node andrew-ct.chen
@ 2015-10-19  6:49 ` Sascha Hauer
  3 siblings, 0 replies; 15+ messages in thread
From: Sascha Hauer @ 2015-10-19  6:49 UTC (permalink / raw)
  To: andrew-ct.chen
  Cc: Srinivas Kandagatla, Maxime Ripard, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, Kumar Gala, Matthias Brugger,
	devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
	srv_heupstream

Hi,

On Fri, Oct 16, 2015 at 04:39:08PM +0800, andrew-ct.chen@mediatek.com wrote:
> This patch adds EFUSE support driver which is used by other drivers
> like thermal sensor and HDMI impedance.
> 
> There are some efuses these fuses store things like calibration data,
> speed bins.. etc. Drivers like thermal sensor, HDMI impedance would
> read out this data for configuring the driver.
> 
> Andrew-CT Chen (3):
>   dt-bindings: add document of mediatek efuse driver
>   nvmem: mediatek: Add Mediatek EFUSE driver
>   dts: arm64: Add EFUSE device node

Being the one who motivated using nvmem for the efuses and having
reviewed the first internal version of this driver, this version looks
ok to me.

Reviewed-by: Sascha Hauer <s.hauer@pengutronix.de>

Sascha


-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 1/3] dt-bindings: add document of mediatek efuse driver
  2015-10-16  8:39 ` [PATCH 1/3] dt-bindings: add document of mediatek efuse driver andrew-ct.chen
@ 2015-10-26  9:56   ` Srinivas Kandagatla
  2015-10-26 10:23     ` Sascha Hauer
  0 siblings, 1 reply; 15+ messages in thread
From: Srinivas Kandagatla @ 2015-10-26  9:56 UTC (permalink / raw)
  To: andrew-ct.chen
  Cc: Maxime Ripard, Rob Herring, Pawel Moll, Mark Rutland,
	Ian Campbell, Kumar Gala, Matthias Brugger, Sascha Hauer,
	devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
	srv_heupstream



On 16/10/15 09:39, andrew-ct.chen@mediatek.com wrote:
> From: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
>
> Add Mediatek MT8173 EFUSE Devicetree binding file
>
> Signed-off-by: Andrew-CT Chen <andrew-ct.chen@mediatek.com>

Looks good to me, minor comment below.

Will queue this for v4.5 once v4.4-rc1 is released.


> ---
>   .../devicetree/bindings/nvmem/mtk-efuse.txt        | 36 ++++++++++++++++++++++
>   1 file changed, 36 insertions(+)
>   create mode 100644 Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
>
> diff --git a/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt b/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
> new file mode 100644
> index 0000000..92edc3d
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
> @@ -0,0 +1,36 @@
> += Mediatek MTK-EFUSE device tree bindings =
> +
> +This binding is intended to represent MTK-EFUSE which is found in most Mediatek SOCs.
> +
> +Required properties:
> +- compatible: should be "mediatek,mt8173-efuse" or "mediatek,mt8135-efuse"

Can we make the compatible more generic for mediatek socs? Like 
"mediatek,efuse"  Or are they different in each SOC?

--srini
> +- reg: Should contain registers location and length
> +
> += Data cells =
> +Are child nodes of MTK-EFUSE, bindings of which as described in
> +bindings/nvmem/nvmem.txt
> +
> +Example:
> +
> +	efuse: efuse@10206000 {
> +		compatible = "mediatek,mt8173-efuse";
> +		reg	   = <0 0x10206000 0 0x1000>;
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +
> +		/* Data cells */
> +		thermal_calibration: calib@528 {
> +			reg = <0x528 0xc>;
> +		};
> +	};
> +
> += Data consumers =
> +Are device nodes which consume nvmem data cells.
> +
> +For example:
> +
> +	thermal {
> +		...
> +		nvmem-cells = <&thermal_calibration>;
> +		nvmem-cell-names = "calibration";
> +	};
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 2/3] nvmem: mediatek: Add Mediatek EFUSE driver
  2015-10-16  8:39 ` [PATCH 2/3] nvmem: mediatek: Add Mediatek EFUSE driver andrew-ct.chen
@ 2015-10-26  9:56   ` Srinivas Kandagatla
  2015-10-26 10:28     ` Sascha Hauer
  2015-10-27  5:32     ` andrew-ct chen
  0 siblings, 2 replies; 15+ messages in thread
From: Srinivas Kandagatla @ 2015-10-26  9:56 UTC (permalink / raw)
  To: andrew-ct.chen
  Cc: Maxime Ripard, Rob Herring, Pawel Moll, Mark Rutland,
	Ian Campbell, Kumar Gala, Matthias Brugger, Sascha Hauer,
	devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
	srv_heupstream


On 16/10/15 09:39, andrew-ct.chen@mediatek.com wrote:
> From: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
>
> Add Mediatek EFUSE driver to access hardware data like
> thermal sensor calibration or HDMI impedance.
>
> Signed-off-by: Andrew-CT Chen <andrew-ct.chen@mediatek.com>

Dirver looks pretty simple, below are few minor nits.

Please rebase this patch on top of v4.4-rc1 once its released in few 
weeks, so that I can queue this driver for v4.5.

> ---
>   drivers/nvmem/Kconfig     | 11 ++++++
>   drivers/nvmem/Makefile    |  1 +
>   drivers/nvmem/mtk-efuse.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++
>   3 files changed, 101 insertions(+)
>   create mode 100644 drivers/nvmem/mtk-efuse.c
>
> diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
> index 8db2978..1bd5badc 100644
> --- a/drivers/nvmem/Kconfig
> +++ b/drivers/nvmem/Kconfig
> @@ -14,6 +14,17 @@ menuconfig NVMEM
>
>   if NVMEM
>
> +config MTK_EFUSE
> +	tristate "Mediatek SoCs EFUSE support"
> +	depends on ARCH_MEDIATEK || COMPILE_TEST
> +	select REGMAP_MMIO
> +	help
> +	  This is a driver to access hardware related data like sensor
> +	  calibration, HDMI impedance etc.
> +
> +	  This driver can also be built as a module. If so, the module
> +	  will be called efuse-mtk.
> +
>   config QCOM_QFPROM
>   	tristate "QCOM QFPROM Support"
>   	depends on ARCH_QCOM || COMPILE_TEST
> diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile
> index 4328b93..916b727 100644
> --- a/drivers/nvmem/Makefile
> +++ b/drivers/nvmem/Makefile
> @@ -6,6 +6,7 @@ obj-$(CONFIG_NVMEM)		+= nvmem_core.o
>   nvmem_core-y			:= core.o
>
>   # Devices
> +obj-$(CONFIG_MTK_EFUSE)		+= mtk-efuse.o

For consistency reasons, could you do this similar to other drivers.

>   obj-$(CONFIG_QCOM_QFPROM)	+= nvmem_qfprom.o
>   nvmem_qfprom-y			:= qfprom.o
>   obj-$(CONFIG_NVMEM_SUNXI_SID)	+= nvmem_sunxi_sid.o
> diff --git a/drivers/nvmem/mtk-efuse.c b/drivers/nvmem/mtk-efuse.c
> new file mode 100644
> index 0000000..9021c0b
> --- /dev/null
> +++ b/drivers/nvmem/mtk-efuse.c
> @@ -0,0 +1,89 @@
> +/*
> + * Copyright (c) 2015 MediaTek Inc.
> + * Author: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + */
> +
> +#include <linux/device.h>
> +#include <linux/module.h>
> +#include <linux/nvmem-provider.h>
> +#include <linux/platform_device.h>
> +#include <linux/regmap.h>
> +
> +static struct regmap_config mtk_regmap_config = {
> +	.reg_bits = 32,
> +	.val_bits = 32,
> +	.reg_stride = 4,
> +};
> +
> +static int mtk_efuse_probe(struct platform_device *pdev)
> +{
> +	struct device *dev = &pdev->dev;
> +	struct resource *res;
> +	struct nvmem_device *nvmem;
> +	struct nvmem_config *econfig;
> +	struct regmap *regmap;
> +	void __iomem *base;
> +
> +	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> +	base = devm_ioremap_resource(dev, res);
> +	if (IS_ERR(base))
> +		return PTR_ERR(base);
> +
> +	econfig = devm_kzalloc(dev, sizeof(*econfig), GFP_KERNEL);
> +	if (!econfig)
> +		return -ENOMEM;
Why not use static econfig variable?

> +
> +	mtk_regmap_config.max_register = resource_size(res) - 1;
> +
> +	regmap = devm_regmap_init_mmio(dev, base, &mtk_regmap_config);
> +	if (IS_ERR(regmap)) {
> +		dev_err(dev, "regmap init failed\n");
> +		return PTR_ERR(regmap);
> +	}
> +
> +	econfig->dev = dev;
> +	econfig->owner = THIS_MODULE;
> +	nvmem = nvmem_register(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,mt8135-efuse",},
> +	{ .compatible = "mediatek,mt8173-efuse",},
> +	{/* sentinel */},
> +};
> +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,
> +	},
> +};
> +module_platform_driver(mtk_efuse_driver);
> +MODULE_AUTHOR("Andrew-CT Chen <andrew-ct.chen@mediatek.com>");
> +MODULE_DESCRIPTION("Mediatek EFUSE driver");
> +MODULE_LICENSE("GPL v2");
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 1/3] dt-bindings: add document of mediatek efuse driver
  2015-10-26  9:56   ` Srinivas Kandagatla
@ 2015-10-26 10:23     ` Sascha Hauer
  2015-10-26 10:55       ` Srinivas Kandagatla
  0 siblings, 1 reply; 15+ messages in thread
From: Sascha Hauer @ 2015-10-26 10:23 UTC (permalink / raw)
  To: Srinivas Kandagatla
  Cc: andrew-ct.chen, Maxime Ripard, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, Kumar Gala, Matthias Brugger,
	devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
	srv_heupstream

On Mon, Oct 26, 2015 at 09:56:14AM +0000, Srinivas Kandagatla wrote:
> 
> 
> On 16/10/15 09:39, andrew-ct.chen@mediatek.com wrote:
> >From: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
> >
> >Add Mediatek MT8173 EFUSE Devicetree binding file
> >
> >Signed-off-by: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
> 
> Looks good to me, minor comment below.
> 
> Will queue this for v4.5 once v4.4-rc1 is released.
> 
> 
> >---
> >  .../devicetree/bindings/nvmem/mtk-efuse.txt        | 36 ++++++++++++++++++++++
> >  1 file changed, 36 insertions(+)
> >  create mode 100644 Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
> >
> >diff --git a/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt b/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
> >new file mode 100644
> >index 0000000..92edc3d
> >--- /dev/null
> >+++ b/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
> >@@ -0,0 +1,36 @@
> >+= Mediatek MTK-EFUSE device tree bindings =
> >+
> >+This binding is intended to represent MTK-EFUSE which is found in most Mediatek SOCs.
> >+
> >+Required properties:
> >+- compatible: should be "mediatek,mt8173-efuse" or "mediatek,mt8135-efuse"
> 
> Can we make the compatible more generic for mediatek socs? Like
> "mediatek,efuse"  Or are they different in each SOC?

While we can add an additional "mediatek,efuse" compatible we should
always add the most specific compatible first. Otherwise we cannot
differentiate between SoCs later without changing the device tree.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 2/3] nvmem: mediatek: Add Mediatek EFUSE driver
  2015-10-26  9:56   ` Srinivas Kandagatla
@ 2015-10-26 10:28     ` Sascha Hauer
  2015-10-26 10:39       ` Srinivas Kandagatla
  2015-10-27  5:32     ` andrew-ct chen
  1 sibling, 1 reply; 15+ messages in thread
From: Sascha Hauer @ 2015-10-26 10:28 UTC (permalink / raw)
  To: Srinivas Kandagatla
  Cc: andrew-ct.chen, Maxime Ripard, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, Kumar Gala, Matthias Brugger,
	devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
	srv_heupstream

On Mon, Oct 26, 2015 at 09:56:24AM +0000, Srinivas Kandagatla wrote:
> >+	.val_bits = 32,
> >+	.reg_stride = 4,
> >+};
> >+
> >+static int mtk_efuse_probe(struct platform_device *pdev)
> >+{
> >+	struct device *dev = &pdev->dev;
> >+	struct resource *res;
> >+	struct nvmem_device *nvmem;
> >+	struct nvmem_config *econfig;
> >+	struct regmap *regmap;
> >+	void __iomem *base;
> >+
> >+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> >+	base = devm_ioremap_resource(dev, res);
> >+	if (IS_ERR(base))
> >+		return PTR_ERR(base);
> >+
> >+	econfig = devm_kzalloc(dev, sizeof(*econfig), GFP_KERNEL);
> >+	if (!econfig)
> >+		return -ENOMEM;
> Why not use static econfig variable?

Because drivers should not assume there is only one instance of them in
the system. The qfprom driver does this and it's only a matter of
putting a second qcom,qfprom node into the device tree to break the
driver.

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 2/3] nvmem: mediatek: Add Mediatek EFUSE driver
  2015-10-26 10:28     ` Sascha Hauer
@ 2015-10-26 10:39       ` Srinivas Kandagatla
  0 siblings, 0 replies; 15+ messages in thread
From: Srinivas Kandagatla @ 2015-10-26 10:39 UTC (permalink / raw)
  To: Sascha Hauer
  Cc: andrew-ct.chen, Maxime Ripard, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, Kumar Gala, Matthias Brugger,
	devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
	srv_heupstream



On 26/10/15 10:28, Sascha Hauer wrote:
> On Mon, Oct 26, 2015 at 09:56:24AM +0000, Srinivas Kandagatla wrote:
>>> +	.val_bits = 32,
>>> +	.reg_stride = 4,
>>> +};
>>> +
>>> +static int mtk_efuse_probe(struct platform_device *pdev)
>>> +{
>>> +	struct device *dev = &pdev->dev;
>>> +	struct resource *res;
>>> +	struct nvmem_device *nvmem;
>>> +	struct nvmem_config *econfig;
>>> +	struct regmap *regmap;
>>> +	void __iomem *base;
>>> +
>>> +	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>>> +	base = devm_ioremap_resource(dev, res);
>>> +	if (IS_ERR(base))
>>> +		return PTR_ERR(base);
>>> +
>>> +	econfig = devm_kzalloc(dev, sizeof(*econfig), GFP_KERNEL);
>>> +	if (!econfig)
>>> +		return -ENOMEM;
>> Why not use static econfig variable?
>
> Because drivers should not assume there is only one instance of them in
> the system. The qfprom driver does this and it's only a matter of
Good point, Yes, you are right. If MTK has possibility of having more 
than one efuse we can leave the code as it is.
> putting a second qcom,qfprom node into the device tree to break the
> driver.
It would indeed.
--srini
>
> Sascha
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 1/3] dt-bindings: add document of mediatek efuse driver
  2015-10-26 10:23     ` Sascha Hauer
@ 2015-10-26 10:55       ` Srinivas Kandagatla
  2015-10-27  5:32         ` andrew-ct chen
  0 siblings, 1 reply; 15+ messages in thread
From: Srinivas Kandagatla @ 2015-10-26 10:55 UTC (permalink / raw)
  To: Sascha Hauer
  Cc: andrew-ct.chen, Maxime Ripard, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, Kumar Gala, Matthias Brugger,
	devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
	srv_heupstream



On 26/10/15 10:23, Sascha Hauer wrote:
> On Mon, Oct 26, 2015 at 09:56:14AM +0000, Srinivas Kandagatla wrote:
>>
>>
>> On 16/10/15 09:39, andrew-ct.chen@mediatek.com wrote:
>>> From: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
>>>
>>> Add Mediatek MT8173 EFUSE Devicetree binding file
>>>
>>> Signed-off-by: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
>>
>> Looks good to me, minor comment below.
>>
>> Will queue this for v4.5 once v4.4-rc1 is released.
>>
>>
>>> ---
>>>   .../devicetree/bindings/nvmem/mtk-efuse.txt        | 36 ++++++++++++++++++++++
>>>   1 file changed, 36 insertions(+)
>>>   create mode 100644 Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
>>>
>>> diff --git a/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt b/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
>>> new file mode 100644
>>> index 0000000..92edc3d
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
>>> @@ -0,0 +1,36 @@
>>> += Mediatek MTK-EFUSE device tree bindings =
>>> +
>>> +This binding is intended to represent MTK-EFUSE which is found in most Mediatek SOCs.
>>> +
>>> +Required properties:
>>> +- compatible: should be "mediatek,mt8173-efuse" or "mediatek,mt8135-efuse"
>>
>> Can we make the compatible more generic for mediatek socs? Like
>> "mediatek,efuse"  Or are they different in each SOC?
>
> While we can add an additional "mediatek,efuse" compatible we should
> always add the most specific compatible first. Otherwise we cannot
> differentiate between SoCs later without changing the device tree.
Yes, that’s correct.

AFAIK, Ideally the driver should have more generic compatible string 
unless there is any SOC specific thing, and DT can still use the order 
of specific, generic compatible strings. If not we would end up adding 
compatible strings into the driver for every new SOC.

--srini

>
> Sascha
>

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 2/3] nvmem: mediatek: Add Mediatek EFUSE driver
  2015-10-26  9:56   ` Srinivas Kandagatla
  2015-10-26 10:28     ` Sascha Hauer
@ 2015-10-27  5:32     ` andrew-ct chen
  2015-10-27  9:28       ` andrew-ct chen
  1 sibling, 1 reply; 15+ messages in thread
From: andrew-ct chen @ 2015-10-27  5:32 UTC (permalink / raw)
  To: Srinivas Kandagatla
  Cc: Maxime Ripard, Rob Herring, Pawel Moll, Mark Rutland,
	Ian Campbell, Kumar Gala, Matthias Brugger, Sascha Hauer,
	devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
	srv_heupstream

On Mon, 2015-10-26 at 09:56 +0000, Srinivas Kandagatla wrote:
> On 16/10/15 09:39, andrew-ct.chen@mediatek.com wrote:
> > From: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
> >
> > Add Mediatek EFUSE driver to access hardware data like
> > thermal sensor calibration or HDMI impedance.
> >
> > Signed-off-by: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
> 
> Dirver looks pretty simple, below are few minor nits.
> 
> Please rebase this patch on top of v4.4-rc1 once its released in few 
> weeks, so that I can queue this driver for v4.5.

We will rebase it.

> 
> > ---
> >   drivers/nvmem/Kconfig     | 11 ++++++
> >   drivers/nvmem/Makefile    |  1 +
> >   drivers/nvmem/mtk-efuse.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++
> >   3 files changed, 101 insertions(+)
> >   create mode 100644 drivers/nvmem/mtk-efuse.c
> >
> > diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
> > index 8db2978..1bd5badc 100644
> > --- a/drivers/nvmem/Kconfig
> > +++ b/drivers/nvmem/Kconfig
> > @@ -14,6 +14,17 @@ menuconfig NVMEM
> >
> >   if NVMEM
> >
> > +config MTK_EFUSE
> > +	tristate "Mediatek SoCs EFUSE support"
> > +	depends on ARCH_MEDIATEK || COMPILE_TEST
> > +	select REGMAP_MMIO
> > +	help
> > +	  This is a driver to access hardware related data like sensor
> > +	  calibration, HDMI impedance etc.
> > +
> > +	  This driver can also be built as a module. If so, the module
> > +	  will be called efuse-mtk.
> > +
> >   config QCOM_QFPROM
> >   	tristate "QCOM QFPROM Support"
> >   	depends on ARCH_QCOM || COMPILE_TEST
> > diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile
> > index 4328b93..916b727 100644
> > --- a/drivers/nvmem/Makefile
> > +++ b/drivers/nvmem/Makefile
> > @@ -6,6 +6,7 @@ obj-$(CONFIG_NVMEM)		+= nvmem_core.o
> >   nvmem_core-y			:= core.o
> >
> >   # Devices
> > +obj-$(CONFIG_MTK_EFUSE)		+= mtk-efuse.o
> 
> For consistency reasons, could you do this similar to other drivers.
> 
> >   obj-$(CONFIG_QCOM_QFPROM)	+= nvmem_qfprom.o
> >   nvmem_qfprom-y			:= qfprom.o
> >   obj-$(CONFIG_NVMEM_SUNXI_SID)	+= nvmem_sunxi_sid.o
> > diff --git a/drivers/nvmem/mtk-efuse.c b/drivers/nvmem/mtk-efuse.c
> > new file mode 100644
> > index 0000000..9021c0b
> > --- /dev/null
> > +++ b/drivers/nvmem/mtk-efuse.c
> > @@ -0,0 +1,89 @@
> > +/*
> > + * Copyright (c) 2015 MediaTek Inc.
> > + * Author: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
> > + *
> > + * This program is free software; you can redistribute it and/or modify
> > + * it under the terms of the GNU General Public License version 2 as
> > + * published by the Free Software Foundation.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > + * GNU General Public License for more details.
> > + */
> > +
> > +#include <linux/device.h>
> > +#include <linux/module.h>
> > +#include <linux/nvmem-provider.h>
> > +#include <linux/platform_device.h>
> > +#include <linux/regmap.h>
> > +
> > +static struct regmap_config mtk_regmap_config = {
> > +	.reg_bits = 32,
> > +	.val_bits = 32,
> > +	.reg_stride = 4,
> > +};
> > +
> > +static int mtk_efuse_probe(struct platform_device *pdev)
> > +{
> > +	struct device *dev = &pdev->dev;
> > +	struct resource *res;
> > +	struct nvmem_device *nvmem;
> > +	struct nvmem_config *econfig;
> > +	struct regmap *regmap;
> > +	void __iomem *base;
> > +
> > +	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> > +	base = devm_ioremap_resource(dev, res);
> > +	if (IS_ERR(base))
> > +		return PTR_ERR(base);
> > +
> > +	econfig = devm_kzalloc(dev, sizeof(*econfig), GFP_KERNEL);
> > +	if (!econfig)
> > +		return -ENOMEM;
> Why not use static econfig variable?
> 
> > +
> > +	mtk_regmap_config.max_register = resource_size(res) - 1;
> > +
> > +	regmap = devm_regmap_init_mmio(dev, base, &mtk_regmap_config);
> > +	if (IS_ERR(regmap)) {
> > +		dev_err(dev, "regmap init failed\n");
> > +		return PTR_ERR(regmap);
> > +	}
> > +
> > +	econfig->dev = dev;
> > +	econfig->owner = THIS_MODULE;
> > +	nvmem = nvmem_register(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,mt8135-efuse",},
> > +	{ .compatible = "mediatek,mt8173-efuse",},
> > +	{/* sentinel */},
> > +};
> > +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,
> > +	},
> > +};
> > +module_platform_driver(mtk_efuse_driver);
> > +MODULE_AUTHOR("Andrew-CT Chen <andrew-ct.chen@mediatek.com>");
> > +MODULE_DESCRIPTION("Mediatek EFUSE driver");
> > +MODULE_LICENSE("GPL v2");
> >



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 1/3] dt-bindings: add document of mediatek efuse driver
  2015-10-26 10:55       ` Srinivas Kandagatla
@ 2015-10-27  5:32         ` andrew-ct chen
  2015-10-27  9:27           ` andrew-ct chen
  0 siblings, 1 reply; 15+ messages in thread
From: andrew-ct chen @ 2015-10-27  5:32 UTC (permalink / raw)
  To: Srinivas Kandagatla
  Cc: Sascha Hauer, Maxime Ripard, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, Kumar Gala, Matthias Brugger,
	devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
	srv_heupstream

On Mon, 2015-10-26 at 10:55 +0000, Srinivas Kandagatla wrote:
> 
> On 26/10/15 10:23, Sascha Hauer wrote:
> > On Mon, Oct 26, 2015 at 09:56:14AM +0000, Srinivas Kandagatla wrote:
> >>
> >>
> >> On 16/10/15 09:39, andrew-ct.chen@mediatek.com wrote:
> >>> From: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
> >>>
> >>> Add Mediatek MT8173 EFUSE Devicetree binding file
> >>>
> >>> Signed-off-by: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
> >>
> >> Looks good to me, minor comment below.
> >>
> >> Will queue this for v4.5 once v4.4-rc1 is released.
> >>
> >>
> >>> ---
> >>>   .../devicetree/bindings/nvmem/mtk-efuse.txt        | 36 ++++++++++++++++++++++
> >>>   1 file changed, 36 insertions(+)
> >>>   create mode 100644 Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
> >>>
> >>> diff --git a/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt b/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
> >>> new file mode 100644
> >>> index 0000000..92edc3d
> >>> --- /dev/null
> >>> +++ b/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
> >>> @@ -0,0 +1,36 @@
> >>> += Mediatek MTK-EFUSE device tree bindings =
> >>> +
> >>> +This binding is intended to represent MTK-EFUSE which is found in most Mediatek SOCs.
> >>> +
> >>> +Required properties:
> >>> +- compatible: should be "mediatek,mt8173-efuse" or "mediatek,mt8135-efuse"
> >>
> >> Can we make the compatible more generic for mediatek socs? Like
> >> "mediatek,efuse"  Or are they different in each SOC?
> >
> > While we can add an additional "mediatek,efuse" compatible we should
> > always add the most specific compatible first. Otherwise we cannot
> > differentiate between SoCs later without changing the device tree.
> Yes, that’s correct.
> 
> AFAIK, Ideally the driver should have more generic compatible string 
> unless there is any SOC specific thing, and DT can still use the order 
> of specific, generic compatible strings. If not we would end up adding 
> compatible strings into the driver for every new SOC.

We will modify for generic compatible string like "mediatek,efuse" and
rebase it to v4.4-rc1.

> 
> --srini
> 
> >
> > Sascha
> >



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 1/3] dt-bindings: add document of mediatek efuse driver
  2015-10-27  5:32         ` andrew-ct chen
@ 2015-10-27  9:27           ` andrew-ct chen
  0 siblings, 0 replies; 15+ messages in thread
From: andrew-ct chen @ 2015-10-27  9:27 UTC (permalink / raw)
  To: Srinivas Kandagatla
  Cc: Sascha Hauer, Maxime Ripard, Rob Herring, Pawel Moll,
	Mark Rutland, Ian Campbell, Kumar Gala, Matthias Brugger,
	devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
	srv_heupstream

On Tue, 2015-10-27 at 13:32 +0800, andrew-ct chen wrote:
> On Mon, 2015-10-26 at 10:55 +0000, Srinivas Kandagatla wrote:
> > 
> > On 26/10/15 10:23, Sascha Hauer wrote:
> > > On Mon, Oct 26, 2015 at 09:56:14AM +0000, Srinivas Kandagatla wrote:
> > >>
> > >>
> > >> On 16/10/15 09:39, andrew-ct.chen@mediatek.com wrote:
> > >>> From: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
> > >>>
> > >>> Add Mediatek MT8173 EFUSE Devicetree binding file
> > >>>
> > >>> Signed-off-by: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
> > >>
> > >> Looks good to me, minor comment below.
> > >>
> > >> Will queue this for v4.5 once v4.4-rc1 is released.
> > >>
> > >>
> > >>> ---
> > >>>   .../devicetree/bindings/nvmem/mtk-efuse.txt        | 36 ++++++++++++++++++++++
> > >>>   1 file changed, 36 insertions(+)
> > >>>   create mode 100644 Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
> > >>>
> > >>> diff --git a/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt b/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
> > >>> new file mode 100644
> > >>> index 0000000..92edc3d
> > >>> --- /dev/null
> > >>> +++ b/Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
> > >>> @@ -0,0 +1,36 @@
> > >>> += Mediatek MTK-EFUSE device tree bindings =
> > >>> +
> > >>> +This binding is intended to represent MTK-EFUSE which is found in most Mediatek SOCs.
> > >>> +
> > >>> +Required properties:
> > >>> +- compatible: should be "mediatek,mt8173-efuse" or "mediatek,mt8135-efuse"
> > >>
> > >> Can we make the compatible more generic for mediatek socs? Like
> > >> "mediatek,efuse"  Or are they different in each SOC?
> > >
> > > While we can add an additional "mediatek,efuse" compatible we should
> > > always add the most specific compatible first. Otherwise we cannot
> > > differentiate between SoCs later without changing the device tree.
> > Yes, that’s correct.
> > 
> > AFAIK, Ideally the driver should have more generic compatible string 
> > unless there is any SOC specific thing, and DT can still use the order 
> > of specific, generic compatible strings. If not we would end up adding 
> > compatible strings into the driver for every new SOC.
> 
> We will modify for generic compatible string like "mediatek,efuse" and
> rebase it to v4.4-rc1.

For more clearly, we will modify the compatible string to
"mediatek,mt8173-efuse" and "mediatek,efuse".

> 
> > 
> > --srini
> > 
> > >
> > > Sascha
> > >
> 



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [PATCH 2/3] nvmem: mediatek: Add Mediatek EFUSE driver
  2015-10-27  5:32     ` andrew-ct chen
@ 2015-10-27  9:28       ` andrew-ct chen
  0 siblings, 0 replies; 15+ messages in thread
From: andrew-ct chen @ 2015-10-27  9:28 UTC (permalink / raw)
  To: Srinivas Kandagatla
  Cc: Maxime Ripard, Rob Herring, Pawel Moll, Mark Rutland,
	Ian Campbell, Kumar Gala, Matthias Brugger, Sascha Hauer,
	devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
	srv_heupstream

On Tue, 2015-10-27 at 13:32 +0800, andrew-ct chen wrote:
> On Mon, 2015-10-26 at 09:56 +0000, Srinivas Kandagatla wrote:
> > On 16/10/15 09:39, andrew-ct.chen@mediatek.com wrote:
> > > From: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
> > >
> > > Add Mediatek EFUSE driver to access hardware data like
> > > thermal sensor calibration or HDMI impedance.
> > >
> > > Signed-off-by: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
> > 
> > Dirver looks pretty simple, below are few minor nits.
> > 
> > Please rebase this patch on top of v4.4-rc1 once its released in few 
> > weeks, so that I can queue this driver for v4.5.
> 
> We will rebase it.
> 
> > 
> > > ---
> > >   drivers/nvmem/Kconfig     | 11 ++++++
> > >   drivers/nvmem/Makefile    |  1 +
> > >   drivers/nvmem/mtk-efuse.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++
> > >   3 files changed, 101 insertions(+)
> > >   create mode 100644 drivers/nvmem/mtk-efuse.c
> > >
> > > diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
> > > index 8db2978..1bd5badc 100644
> > > --- a/drivers/nvmem/Kconfig
> > > +++ b/drivers/nvmem/Kconfig
> > > @@ -14,6 +14,17 @@ menuconfig NVMEM
> > >
> > >   if NVMEM
> > >
> > > +config MTK_EFUSE
> > > +	tristate "Mediatek SoCs EFUSE support"
> > > +	depends on ARCH_MEDIATEK || COMPILE_TEST
> > > +	select REGMAP_MMIO
> > > +	help
> > > +	  This is a driver to access hardware related data like sensor
> > > +	  calibration, HDMI impedance etc.
> > > +
> > > +	  This driver can also be built as a module. If so, the module
> > > +	  will be called efuse-mtk.
> > > +
> > >   config QCOM_QFPROM
> > >   	tristate "QCOM QFPROM Support"
> > >   	depends on ARCH_QCOM || COMPILE_TEST
> > > diff --git a/drivers/nvmem/Makefile b/drivers/nvmem/Makefile
> > > index 4328b93..916b727 100644
> > > --- a/drivers/nvmem/Makefile
> > > +++ b/drivers/nvmem/Makefile
> > > @@ -6,6 +6,7 @@ obj-$(CONFIG_NVMEM)		+= nvmem_core.o
> > >   nvmem_core-y			:= core.o
> > >
> > >   # Devices
> > > +obj-$(CONFIG_MTK_EFUSE)		+= mtk-efuse.o
> > 
> > For consistency reasons, could you do this similar to other drivers.

We will do this for the consistency.

> > 
> > >   obj-$(CONFIG_QCOM_QFPROM)	+= nvmem_qfprom.o
> > >   nvmem_qfprom-y			:= qfprom.o
> > >   obj-$(CONFIG_NVMEM_SUNXI_SID)	+= nvmem_sunxi_sid.o
> > > diff --git a/drivers/nvmem/mtk-efuse.c b/drivers/nvmem/mtk-efuse.c
> > > new file mode 100644
> > > index 0000000..9021c0b
> > > --- /dev/null
> > > +++ b/drivers/nvmem/mtk-efuse.c
> > > @@ -0,0 +1,89 @@
> > > +/*
> > > + * Copyright (c) 2015 MediaTek Inc.
> > > + * Author: Andrew-CT Chen <andrew-ct.chen@mediatek.com>
> > > + *
> > > + * This program is free software; you can redistribute it and/or modify
> > > + * it under the terms of the GNU General Public License version 2 as
> > > + * published by the Free Software Foundation.
> > > + *
> > > + * This program is distributed in the hope that it will be useful,
> > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> > > + * GNU General Public License for more details.
> > > + */
> > > +
> > > +#include <linux/device.h>
> > > +#include <linux/module.h>
> > > +#include <linux/nvmem-provider.h>
> > > +#include <linux/platform_device.h>
> > > +#include <linux/regmap.h>
> > > +
> > > +static struct regmap_config mtk_regmap_config = {
> > > +	.reg_bits = 32,
> > > +	.val_bits = 32,
> > > +	.reg_stride = 4,
> > > +};
> > > +
> > > +static int mtk_efuse_probe(struct platform_device *pdev)
> > > +{
> > > +	struct device *dev = &pdev->dev;
> > > +	struct resource *res;
> > > +	struct nvmem_device *nvmem;
> > > +	struct nvmem_config *econfig;
> > > +	struct regmap *regmap;
> > > +	void __iomem *base;
> > > +
> > > +	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> > > +	base = devm_ioremap_resource(dev, res);
> > > +	if (IS_ERR(base))
> > > +		return PTR_ERR(base);
> > > +
> > > +	econfig = devm_kzalloc(dev, sizeof(*econfig), GFP_KERNEL);
> > > +	if (!econfig)
> > > +		return -ENOMEM;
> > Why not use static econfig variable?
> > 
> > > +
> > > +	mtk_regmap_config.max_register = resource_size(res) - 1;
> > > +
> > > +	regmap = devm_regmap_init_mmio(dev, base, &mtk_regmap_config);
> > > +	if (IS_ERR(regmap)) {
> > > +		dev_err(dev, "regmap init failed\n");
> > > +		return PTR_ERR(regmap);
> > > +	}
> > > +
> > > +	econfig->dev = dev;
> > > +	econfig->owner = THIS_MODULE;
> > > +	nvmem = nvmem_register(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,mt8135-efuse",},
> > > +	{ .compatible = "mediatek,mt8173-efuse",},
> > > +	{/* sentinel */},
> > > +};
> > > +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,
> > > +	},
> > > +};
> > > +module_platform_driver(mtk_efuse_driver);
> > > +MODULE_AUTHOR("Andrew-CT Chen <andrew-ct.chen@mediatek.com>");
> > > +MODULE_DESCRIPTION("Mediatek EFUSE driver");
> > > +MODULE_LICENSE("GPL v2");
> > >
> 



^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2015-10-27  9:28 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-16  8:39 [PATCH 0/3] Mediatek EFUSE Support andrew-ct.chen
2015-10-16  8:39 ` [PATCH 1/3] dt-bindings: add document of mediatek efuse driver andrew-ct.chen
2015-10-26  9:56   ` Srinivas Kandagatla
2015-10-26 10:23     ` Sascha Hauer
2015-10-26 10:55       ` Srinivas Kandagatla
2015-10-27  5:32         ` andrew-ct chen
2015-10-27  9:27           ` andrew-ct chen
2015-10-16  8:39 ` [PATCH 2/3] nvmem: mediatek: Add Mediatek EFUSE driver andrew-ct.chen
2015-10-26  9:56   ` Srinivas Kandagatla
2015-10-26 10:28     ` Sascha Hauer
2015-10-26 10:39       ` Srinivas Kandagatla
2015-10-27  5:32     ` andrew-ct chen
2015-10-27  9:28       ` andrew-ct chen
2015-10-16  8:39 ` [PATCH 3/3] dts: arm64: Add EFUSE device node andrew-ct.chen
2015-10-19  6:49 ` [PATCH 0/3] Mediatek EFUSE Support Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).