Lines Matching full:efuse

3  * RK628 eFuse Driver
90 struct rk628_efuse_chip *efuse = container_of(regmap, struct rk628_efuse_chip, regmap); in rk628_read() local
94 dev_err(efuse->dev, "rk628-efuse:failed to read reg 0x%x\n", reg); in rk628_read()
104 struct rk628_efuse_chip *efuse = container_of(regmap, struct rk628_efuse_chip, regmap); in rk628_write() local
108 dev_err(efuse->dev, "rk628-efuse:failed to write reg 0x%x\n", reg); in rk628_write()
113 static void rk628_efuse_timing_init(struct rk628_efuse_chip *efuse) in rk628_efuse_timing_init() argument
115 u32 base = efuse->base; in rk628_efuse_timing_init()
117 rk628_write(efuse->regmap, in rk628_efuse_timing_init()
118 rk628_read(efuse->regmap, base + RK628_MOD) & (~RK628_USER_MODE), in rk628_efuse_timing_init()
121 /* setup efuse timing */ in rk628_efuse_timing_init()
122 rk628_write(efuse->regmap, (T_CSB_P_S << 16) | T_CSB_P_L, base + T_CSB_P); in rk628_efuse_timing_init()
123 rk628_write(efuse->regmap, (T_PGENB_P_S << 16) | T_PGENB_P_L, base + T_PGENB_P); in rk628_efuse_timing_init()
124 rk628_write(efuse->regmap, (T_LOAD_P_S << 16) | T_LOAD_P_L, base + T_LOAD_P); in rk628_efuse_timing_init()
125 rk628_write(efuse->regmap, (T_ADDR_P_S << 16) | T_ADDR_P_L, base + T_ADDR_P); in rk628_efuse_timing_init()
126 rk628_write(efuse->regmap, (T_STROBE_P_S << 16) | T_STROBE_P_L, base + T_STROBE_P); in rk628_efuse_timing_init()
127 rk628_write(efuse->regmap, (T_CSB_R_S << 16) | T_CSB_R_L, base + T_CSB_R); in rk628_efuse_timing_init()
128 rk628_write(efuse->regmap, (T_PGENB_R_S << 16) | T_PGENB_R_L, base + T_PGENB_R); in rk628_efuse_timing_init()
129 rk628_write(efuse->regmap, (T_LOAD_R_S << 16) | T_LOAD_R_L, base + T_LOAD_R); in rk628_efuse_timing_init()
130 rk628_write(efuse->regmap, (T_ADDR_R_S << 16) | T_ADDR_R_L, base + T_ADDR_R); in rk628_efuse_timing_init()
131 rk628_write(efuse->regmap, (T_STROBE_R_S << 16) | T_STROBE_R_L, base + T_STROBE_R); in rk628_efuse_timing_init()
134 static void rk628_efuse_timing_deinit(struct rk628_efuse_chip *efuse) in rk628_efuse_timing_deinit() argument
136 u32 base = efuse->base; in rk628_efuse_timing_deinit()
138 rk628_write(efuse->regmap, in rk628_efuse_timing_deinit()
139 rk628_read(efuse->regmap, base + RK628_MOD) | RK628_USER_MODE, base + RK628_MOD); in rk628_efuse_timing_deinit()
141 /* clear efuse timing */ in rk628_efuse_timing_deinit()
142 rk628_write(efuse->regmap, 0, base + T_CSB_P); in rk628_efuse_timing_deinit()
143 rk628_write(efuse->regmap, 0, base + T_PGENB_P); in rk628_efuse_timing_deinit()
144 rk628_write(efuse->regmap, 0, base + T_LOAD_P); in rk628_efuse_timing_deinit()
145 rk628_write(efuse->regmap, 0, base + T_ADDR_P); in rk628_efuse_timing_deinit()
146 rk628_write(efuse->regmap, 0, base + T_STROBE_P); in rk628_efuse_timing_deinit()
147 rk628_write(efuse->regmap, 0, base + T_CSB_R); in rk628_efuse_timing_deinit()
148 rk628_write(efuse->regmap, 0, base + T_PGENB_R); in rk628_efuse_timing_deinit()
149 rk628_write(efuse->regmap, 0, base + T_LOAD_R); in rk628_efuse_timing_deinit()
150 rk628_write(efuse->regmap, 0, base + T_ADDR_R); in rk628_efuse_timing_deinit()
151 rk628_write(efuse->regmap, 0, base + T_STROBE_R); in rk628_efuse_timing_deinit()
157 struct rk628_efuse_chip *efuse = context; in rk628_efuse_read() local
163 ret = clk_prepare_enable(efuse->clk); in rk628_efuse_read()
165 dev_err(efuse->dev, "failed to prepare/enable efuse pclk\n"); in rk628_efuse_read()
180 rk628_efuse_timing_init(efuse); in rk628_efuse_read()
183 rk628_write(efuse->regmap, RK628_AUTO_RD | RK628_AUTO_ENB | in rk628_efuse_read()
185 efuse->base + RK628_AUTO_CTRL); in rk628_efuse_read()
187 status = rk628_read(efuse->regmap, efuse->base + RK628_INT_STATUS); in rk628_efuse_read()
192 out_value = rk628_read(efuse->regmap, efuse->base + RK628_DOUT); in rk628_efuse_read()
193 rk628_write(efuse->regmap, RK628_INT_FINISH, efuse->base + RK628_INT_STATUS); in rk628_efuse_read()
200 rk628_efuse_timing_deinit(efuse); in rk628_efuse_read()
203 clk_disable_unprepare(efuse->clk); in rk628_efuse_read()
209 .name = "rk628-efuse",
226 .name = "rk628-efuse",
238 .compatible = "rockchip,rk628-efuse",
247 struct rk628_efuse_chip *efuse; in rk628_efuse_probe() local
252 efuse = devm_kzalloc(&pdev->dev, sizeof(struct rk628_efuse_chip), in rk628_efuse_probe()
254 if (!efuse) in rk628_efuse_probe()
257 efuse->regmap = devm_regmap_init_i2c(rk628->client, in rk628_efuse_probe()
259 if (IS_ERR(efuse->regmap)) { in rk628_efuse_probe()
260 ret = PTR_ERR(efuse->regmap); in rk628_efuse_probe()
266 efuse->clk = devm_clk_get(&pdev->dev, "pclk"); in rk628_efuse_probe()
267 if (IS_ERR(efuse->clk)) { in rk628_efuse_probe()
268 dev_err(dev, "failed to get pclk: %ld\n", PTR_ERR(efuse->clk)); in rk628_efuse_probe()
269 return PTR_ERR(efuse->clk); in rk628_efuse_probe()
272 efuse->avdd_gpio = devm_gpiod_get_optional(dev, "efuse", GPIOD_OUT_LOW); in rk628_efuse_probe()
273 efuse->base = RK628_EFUSE_BASE; in rk628_efuse_probe()
274 efuse->dev = &pdev->dev; in rk628_efuse_probe()
277 econfig.priv = efuse; in rk628_efuse_probe()
278 econfig.dev = efuse->dev; in rk628_efuse_probe()
291 .name = "rk628-efuse",