Lines Matching defs:fuse

24 #include <soc/tegra/fuse.h>
26 #include "fuse.h"
63 static struct tegra_fuse *fuse = &(struct tegra_fuse) {
103 struct tegra_fuse *fuse = priv;
107 buffer[i] = fuse->read(fuse, offset + i * 4);
114 fuse->base = (void __iomem *)base;
115 fuse->clk = NULL;
128 static int tegra_fuse_add_lookups(struct tegra_fuse *fuse)
130 fuse->lookups = kmemdup_array(fuse->soc->lookups, sizeof(*fuse->lookups),
131 fuse->soc->num_lookups, GFP_KERNEL);
132 if (!fuse->lookups)
135 nvmem_add_cell_lookups(fuse->lookups, fuse->soc->num_lookups);
142 void __iomem *base = fuse->base;
152 fuse->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
153 if (IS_ERR(fuse->base))
154 return PTR_ERR(fuse->base);
155 fuse->phys = res->start;
158 if (is_acpi_node(dev_fwnode(&pdev->dev)) && !fuse->soc) {
167 fuse->soc = &tegra194_fuse_soc;
172 fuse->soc = &tegra234_fuse_soc;
177 fuse->soc = &tegra241_fuse_soc;
184 fuse->soc->init(fuse);
188 err = tegra_fuse_add_lookups(fuse);
193 fuse->clk = devm_clk_get_optional(&pdev->dev, "fuse");
194 if (IS_ERR(fuse->clk))
195 return dev_err_probe(&pdev->dev, PTR_ERR(fuse->clk), "failed to get FUSE clock\n");
197 platform_set_drvdata(pdev, fuse);
198 fuse->dev = &pdev->dev;
204 if (fuse->soc->probe) {
205 err = fuse->soc->probe(fuse);
212 nvmem.name = "fuse";
215 nvmem.cells = fuse->soc->cells;
216 nvmem.ncells = fuse->soc->num_cells;
217 nvmem.keepout = fuse->soc->keepouts;
218 nvmem.nkeepout = fuse->soc->num_keepouts;
223 nvmem.size = fuse->soc->info->size;
226 nvmem.priv = fuse;
228 fuse->nvmem = devm_nvmem_register(&pdev->dev, &nvmem);
229 if (IS_ERR(fuse->nvmem)) {
230 err = PTR_ERR(fuse->nvmem);
236 fuse->rst = devm_reset_control_get_optional(&pdev->dev, "fuse");
237 if (IS_ERR(fuse->rst))
238 return dev_err_probe(&pdev->dev, PTR_ERR(fuse->rst), "failed to get FUSE reset\n");
248 err = reset_control_reset(fuse->rst);
266 err = clk_prepare_enable(fuse->clk);
277 clk_disable_unprepare(fuse->clk);
290 if (fuse->soc->clk_suspend_on)
302 if (fuse->soc->clk_suspend_on)
324 .name = "tegra-fuse",
336 unsigned int offset = fuse->soc->info->spare + spare * 4;
338 return fuse->read_early(fuse, offset) & 1;
343 return fuse->read_early(fuse, offset);
348 if (!fuse->dev)
352 * Wait for fuse->clk to be initialized if device-tree boot is used.
354 if (is_of_node(dev_fwnode(fuse->dev)) && !fuse->clk)
357 if (!fuse->read)
360 if (IS_ERR(fuse->clk))
361 return PTR_ERR(fuse->clk);
363 *value = fuse->read(fuse, offset);
459 attr->custom_attr_group = fuse->soc->soc_attr_group;
502 fuse->soc = &tegra20_fuse_soc;
508 fuse->soc = &tegra30_fuse_soc;
514 fuse->soc = &tegra114_fuse_soc;
520 fuse->soc = &tegra124_fuse_soc;
545 fuse->soc = match->data;
561 fuse->base = ioremap(regs.start, resource_size(&regs));
562 if (!fuse->base) {
567 fuse->soc->init(fuse);
571 err = tegra_fuse_add_lookups(fuse);