Lines Matching +full:reset +full:- +full:assert +full:- +full:ms

1 // SPDX-License-Identifier: GPL-2.0-only
15 #include <linux/nvmem-provider.h>
17 #include <linux/reset.h>
41 /* EEPROM requires 3 ms of erase/program time between each writing */
57 writel(val, eeprom->reg_base + reg); in lpc18xx_eeprom_writel()
63 return readl(eeprom->reg_base + reg); in lpc18xx_eeprom_readl()
87 return -ETIMEDOUT; in lpc18xx_eeprom_busywait_until_prog()
101 if ((reg > eeprom->size - LPC18XX_EEPROM_PAGE_SIZE) || in lpc18xx_eeprom_gather_write()
102 (reg + bytes > eeprom->size - LPC18XX_EEPROM_PAGE_SIZE)) in lpc18xx_eeprom_gather_write()
103 return -EINVAL; in lpc18xx_eeprom_gather_write()
113 writel(*(u32 *)val, eeprom->mem_base + offset); in lpc18xx_eeprom_gather_write()
118 bytes -= eeprom->val_bytes; in lpc18xx_eeprom_gather_write()
119 val += eeprom->val_bytes; in lpc18xx_eeprom_gather_write()
120 offset += eeprom->val_bytes; in lpc18xx_eeprom_gather_write()
141 *(u32 *)val = readl(eeprom->mem_base + offset); in lpc18xx_eeprom_read()
142 bytes -= eeprom->val_bytes; in lpc18xx_eeprom_read()
143 val += eeprom->val_bytes; in lpc18xx_eeprom_read()
144 offset += eeprom->val_bytes; in lpc18xx_eeprom_read()
155 .name = "lpc18xx-eeprom",
165 struct device *dev = &pdev->dev; in lpc18xx_eeprom_probe()
173 return -ENOMEM; in lpc18xx_eeprom_probe()
176 eeprom->reg_base = devm_ioremap_resource(dev, res); in lpc18xx_eeprom_probe()
177 if (IS_ERR(eeprom->reg_base)) in lpc18xx_eeprom_probe()
178 return PTR_ERR(eeprom->reg_base); in lpc18xx_eeprom_probe()
181 eeprom->mem_base = devm_ioremap_resource(dev, res); in lpc18xx_eeprom_probe()
182 if (IS_ERR(eeprom->mem_base)) in lpc18xx_eeprom_probe()
183 return PTR_ERR(eeprom->mem_base); in lpc18xx_eeprom_probe()
185 eeprom->clk = devm_clk_get(&pdev->dev, "eeprom"); in lpc18xx_eeprom_probe()
186 if (IS_ERR(eeprom->clk)) { in lpc18xx_eeprom_probe()
187 dev_err(&pdev->dev, "failed to get eeprom clock\n"); in lpc18xx_eeprom_probe()
188 return PTR_ERR(eeprom->clk); in lpc18xx_eeprom_probe()
191 ret = clk_prepare_enable(eeprom->clk); in lpc18xx_eeprom_probe()
199 dev_err(dev, "failed to get reset: %ld\n", PTR_ERR(rst)); in lpc18xx_eeprom_probe()
206 dev_err(dev, "failed to assert reset: %d\n", ret); in lpc18xx_eeprom_probe()
210 eeprom->val_bytes = 4; in lpc18xx_eeprom_probe()
211 eeprom->reg_bytes = 4; in lpc18xx_eeprom_probe()
217 clk_rate = clk_get_rate(eeprom->clk); in lpc18xx_eeprom_probe()
218 clk_rate = DIV_ROUND_UP(clk_rate, LPC18XX_EEPROM_CLOCK_HZ) - 1; in lpc18xx_eeprom_probe()
231 eeprom->size = resource_size(res); in lpc18xx_eeprom_probe()
236 eeprom->nvmem = devm_nvmem_register(dev, &lpc18xx_nvmem_config); in lpc18xx_eeprom_probe()
237 if (IS_ERR(eeprom->nvmem)) { in lpc18xx_eeprom_probe()
238 ret = PTR_ERR(eeprom->nvmem); in lpc18xx_eeprom_probe()
247 clk_disable_unprepare(eeprom->clk); in lpc18xx_eeprom_probe()
256 clk_disable_unprepare(eeprom->clk); in lpc18xx_eeprom_remove()
262 { .compatible = "nxp,lpc1857-eeprom" },
271 .name = "lpc18xx-eeprom",