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.
Change in v2:
1. Rebase to 4.4-rc1
2. Modify the driver Makefile for more consistent with other drivers
3. Modify the compatible string to "mediatek,mt8173-efuse" and "mediatek,efuse"
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 | 2 +
drivers/nvmem/mtk-efuse.c | 89 ++++++++++++++++++++++
5 files changed, 143 insertions(+)
create mode 100644 Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
create mode 100644 drivers/nvmem/mtk-efuse.c
--
1.9.1
Add Mediatek MT8173 EFUSE Devicetree binding file
Signed-off-by: Andrew-CT Chen <[email protected]>
---
.../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..74cf529
--- /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,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
Add Mediatek EFUSE driver to access hardware data like
thermal sensor calibration or HDMI impedance.
Signed-off-by: Andrew-CT Chen <[email protected]>
---
drivers/nvmem/Kconfig | 11 ++++++
drivers/nvmem/Makefile | 2 ++
drivers/nvmem/mtk-efuse.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 102 insertions(+)
create mode 100644 drivers/nvmem/mtk-efuse.c
diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
index bc4ea58..ea7ec17 100644
--- a/drivers/nvmem/Kconfig
+++ b/drivers/nvmem/Kconfig
@@ -36,6 +36,17 @@ config NVMEM_MXS_OCOTP
This driver can also be built as a module. If so, the module
will be called nvmem-mxs-ocotp.
+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 95dde3f..a59b069 100644
--- a/drivers/nvmem/Makefile
+++ b/drivers/nvmem/Makefile
@@ -10,6 +10,8 @@ obj-$(CONFIG_NVMEM_IMX_OCOTP) += nvmem-imx-ocotp.o
nvmem-imx-ocotp-y := imx-ocotp.o
obj-$(CONFIG_NVMEM_MXS_OCOTP) += nvmem-mxs-ocotp.o
nvmem-mxs-ocotp-y := mxs-ocotp.o
+obj-$(CONFIG_MTK_EFUSE) += nvmem_mtk-efuse.o
+nvmem_mtk-efuse-y := mtk-efuse.o
obj-$(CONFIG_QCOM_QFPROM) += nvmem_qfprom.o
nvmem_qfprom-y := qfprom.o
obj-$(CONFIG_ROCKCHIP_EFUSE) += nvmem_rockchip_efuse.o
diff --git a/drivers/nvmem/mtk-efuse.c b/drivers/nvmem/mtk-efuse.c
new file mode 100644
index 0000000..7b35f5b
--- /dev/null
+++ b/drivers/nvmem/mtk-efuse.c
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2015 MediaTek Inc.
+ * Author: Andrew-CT Chen <[email protected]>
+ *
+ * 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,mt8173-efuse",},
+ { .compatible = "mediatek,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 <[email protected]>");
+MODULE_DESCRIPTION("Mediatek EFUSE driver");
+MODULE_LICENSE("GPL v2");
--
1.9.1
Add Mediatek MT8173 EFUSE device node
Signed-off-by: Andrew-CT Chen <[email protected]>
---
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 4dd5f93..d67e23b 100644
--- a/arch/arm64/boot/dts/mediatek/mt8173.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8173.dtsi
@@ -267,6 +267,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
On Thu, Nov 19, 2015 at 06:46:52PM +0800, Andrew-CT Chen wrote:
> Add Mediatek MT8173 EFUSE Devicetree binding file
>
> Signed-off-by: Andrew-CT Chen <[email protected]>
Acked-by: Rob Herring <[email protected]>
> ---
> .../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..74cf529
> --- /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,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
>
On Thu, Nov 19, 2015 at 6:46 PM, Andrew-CT Chen
<[email protected]> wrote:
> Add Mediatek EFUSE driver to access hardware data like
> thermal sensor calibration or HDMI impedance.
>
> Signed-off-by: Andrew-CT Chen <[email protected]>
> ---
> drivers/nvmem/Kconfig | 11 ++++++
> drivers/nvmem/Makefile | 2 ++
> drivers/nvmem/mtk-efuse.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 102 insertions(+)
> create mode 100644 drivers/nvmem/mtk-efuse.c
>
> diff --git a/drivers/nvmem/Kconfig b/drivers/nvmem/Kconfig
> index bc4ea58..ea7ec17 100644
> --- a/drivers/nvmem/Kconfig
> +++ b/drivers/nvmem/Kconfig
> @@ -36,6 +36,17 @@ config NVMEM_MXS_OCOTP
> This driver can also be built as a module. If so, the module
> will be called nvmem-mxs-ocotp.
>
> +config MTK_EFUSE
Nit: I think this entry should be between NVMEM_IMX_OCOTP and
NVMEM_MXS_OCOTP (looks like NVMEM_ prefix is ignored in the ordering).
> [snip]
The rest looks good.
Hi Srinivas,
On Thu, Nov 19, 2015 at 6:46 PM, Andrew-CT Chen
<[email protected]> 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.
>
> Change in v2:
> 1. Rebase to 4.4-rc1
> 2. Modify the driver Makefile for more consistent with other drivers
> 3. Modify the compatible string to "mediatek,mt8173-efuse" and "mediatek,efuse"
Do you still plan to queue this for v4.5?
>
> 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 | 2 +
> drivers/nvmem/mtk-efuse.c | 89 ++++++++++++++++++++++
> 5 files changed, 143 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
> create mode 100644 drivers/nvmem/mtk-efuse.c
>
> --
> 1.9.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
Hi Andrew,
On 14/12/15 04:27, Daniel Kurtz wrote:
> Hi Srinivas,
>
> On Thu, Nov 19, 2015 at 6:46 PM, Andrew-CT Chen
> <[email protected]> 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.
>>
>> Change in v2:
>> 1. Rebase to 4.4-rc1
>> 2. Modify the driver Makefile for more consistent with other drivers
>> 3. Modify the compatible string to "mediatek,mt8173-efuse" and "mediatek,efuse"
>
> Do you still plan to queue this for v4.5?
>
Sorry guys, for the long delay in replying your pings, got busy with
regular office stuff :-)
Yes, It should go in v4.5, I did send request with my sign-off to Greg,
he should take it via char-misc tree.
Thanks,
srini
>>
>> 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 | 2 +
>> drivers/nvmem/mtk-efuse.c | 89 ++++++++++++++++++++++
>> 5 files changed, 143 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/nvmem/mtk-efuse.txt
>> create mode 100644 drivers/nvmem/mtk-efuse.c
>>
>> --
>> 1.9.1
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at http://www.tux.org/lkml/