Lines Matching full:fuse
20 #include <soc/tegra/fuse.h>
22 #include "fuse.h"
46 static struct tegra_fuse *fuse = &(struct tegra_fuse) { variable
86 struct tegra_fuse *fuse = priv; in tegra_fuse_read() local
90 buffer[i] = fuse->read(fuse, offset + i * 4); in tegra_fuse_read()
185 void __iomem *base = fuse->base; in tegra_fuse_probe()
192 fuse->phys = res->start; in tegra_fuse_probe()
193 fuse->base = devm_ioremap_resource(&pdev->dev, res); in tegra_fuse_probe()
194 if (IS_ERR(fuse->base)) { in tegra_fuse_probe()
195 err = PTR_ERR(fuse->base); in tegra_fuse_probe()
196 fuse->base = base; in tegra_fuse_probe()
200 fuse->clk = devm_clk_get(&pdev->dev, "fuse"); in tegra_fuse_probe()
201 if (IS_ERR(fuse->clk)) { in tegra_fuse_probe()
202 if (PTR_ERR(fuse->clk) != -EPROBE_DEFER) in tegra_fuse_probe()
203 dev_err(&pdev->dev, "failed to get FUSE clock: %ld", in tegra_fuse_probe()
204 PTR_ERR(fuse->clk)); in tegra_fuse_probe()
206 fuse->base = base; in tegra_fuse_probe()
207 return PTR_ERR(fuse->clk); in tegra_fuse_probe()
210 platform_set_drvdata(pdev, fuse); in tegra_fuse_probe()
211 fuse->dev = &pdev->dev; in tegra_fuse_probe()
213 if (fuse->soc->probe) { in tegra_fuse_probe()
214 err = fuse->soc->probe(fuse); in tegra_fuse_probe()
221 nvmem.name = "fuse"; in tegra_fuse_probe()
230 nvmem.size = fuse->soc->info->size; in tegra_fuse_probe()
233 nvmem.priv = fuse; in tegra_fuse_probe()
235 fuse->nvmem = devm_nvmem_register(&pdev->dev, &nvmem); in tegra_fuse_probe()
236 if (IS_ERR(fuse->nvmem)) { in tegra_fuse_probe()
237 err = PTR_ERR(fuse->nvmem); in tegra_fuse_probe()
249 fuse->base = base; in tegra_fuse_probe()
255 .name = "tegra-fuse",
265 unsigned int offset = fuse->soc->info->spare + spare * 4; in tegra_fuse_read_spare()
267 return fuse->read_early(fuse, offset) & 1; in tegra_fuse_read_spare()
272 return fuse->read_early(fuse, offset); in tegra_fuse_read_early()
277 if (!fuse->read || !fuse->clk) in tegra_fuse_readl()
280 if (IS_ERR(fuse->clk)) in tegra_fuse_readl()
281 return PTR_ERR(fuse->clk); in tegra_fuse_readl()
283 *value = fuse->read(fuse, offset); in tegra_fuse_readl()
298 * Enable FUSE clock. This needs to be hardcoded because the clock in tegra_enable_fuse_clk()
373 attr->custom_attr_group = fuse->soc->soc_attr_group; in tegra_soc_device_register()
400 * a FUSE node. in tegra_init_fuse()
403 * that didn't contain a FUSE node. in tegra_init_fuse()
415 fuse->soc = &tegra20_fuse_soc; in tegra_init_fuse()
421 fuse->soc = &tegra30_fuse_soc; in tegra_init_fuse()
427 fuse->soc = &tegra114_fuse_soc; in tegra_init_fuse()
433 fuse->soc = &tegra124_fuse_soc; in tegra_init_fuse()
454 pr_err("failed to get FUSE register\n"); in tegra_init_fuse()
458 fuse->soc = match->data; in tegra_init_fuse()
473 fuse->base = ioremap(regs.start, resource_size(®s)); in tegra_init_fuse()
474 if (!fuse->base) { in tegra_init_fuse()
475 pr_err("failed to map FUSE registers\n"); in tegra_init_fuse()
479 fuse->soc->init(fuse); in tegra_init_fuse()
488 if (fuse->soc->lookups) { in tegra_init_fuse()
489 size_t size = sizeof(*fuse->lookups) * fuse->soc->num_lookups; in tegra_init_fuse()
491 fuse->lookups = kmemdup(fuse->soc->lookups, size, GFP_KERNEL); in tegra_init_fuse()
492 if (!fuse->lookups) in tegra_init_fuse()
495 nvmem_add_cell_lookups(fuse->lookups, fuse->soc->num_lookups); in tegra_init_fuse()