2 * UniPhier eFuse driver
4 * Copyright (C) 2017 Socionext Inc.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
16 #include <linux/device.h>
18 #include <linux/module.h>
19 #include <linux/mod_devicetable.h>
20 #include <linux/nvmem-provider.h>
21 #include <linux/platform_device.h>
23 struct uniphier_efuse_priv
{
27 static int uniphier_reg_read(void *context
,
28 unsigned int reg
, void *_val
, size_t bytes
)
30 struct uniphier_efuse_priv
*priv
= context
;
34 for (offs
= 0; offs
< bytes
; offs
+= sizeof(u8
))
35 *val
++ = readb(priv
->base
+ reg
+ offs
);
40 static int uniphier_efuse_probe(struct platform_device
*pdev
)
42 struct device
*dev
= &pdev
->dev
;
44 struct nvmem_device
*nvmem
;
45 struct nvmem_config econfig
= {};
46 struct uniphier_efuse_priv
*priv
;
48 priv
= devm_kzalloc(dev
, sizeof(*priv
), GFP_KERNEL
);
52 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
53 priv
->base
= devm_ioremap_resource(dev
, res
);
54 if (IS_ERR(priv
->base
))
55 return PTR_ERR(priv
->base
);
58 econfig
.word_size
= 1;
59 econfig
.read_only
= true;
60 econfig
.reg_read
= uniphier_reg_read
;
61 econfig
.size
= resource_size(res
);
64 nvmem
= devm_nvmem_register(dev
, &econfig
);
66 return PTR_ERR_OR_ZERO(nvmem
);
69 static const struct of_device_id uniphier_efuse_of_match
[] = {
70 { .compatible
= "socionext,uniphier-efuse",},
73 MODULE_DEVICE_TABLE(of
, uniphier_efuse_of_match
);
75 static struct platform_driver uniphier_efuse_driver
= {
76 .probe
= uniphier_efuse_probe
,
78 .name
= "uniphier-efuse",
79 .of_match_table
= uniphier_efuse_of_match
,
82 module_platform_driver(uniphier_efuse_driver
);
84 MODULE_AUTHOR("Keiji Hayashibara <hayashibara.keiji@socionext.com>");
85 MODULE_DESCRIPTION("UniPhier eFuse driver");
86 MODULE_LICENSE("GPL v2");