Lines Matching refs:otp

85 static int rockchip_otp_reset(struct rockchip_otp *otp)
89 ret = reset_control_assert(otp->rst);
91 dev_err(otp->dev, "failed to assert otp phy %d\n", ret);
97 ret = reset_control_deassert(otp->rst);
99 dev_err(otp->dev, "failed to deassert otp phy %d\n", ret);
106 static int rockchip_otp_wait_status(struct rockchip_otp *otp,
112 ret = readl_poll_timeout_atomic(otp->base + reg, status,
118 writel(flag, otp->base + reg);
123 static int rockchip_otp_ecc_enable(struct rockchip_otp *otp, bool enable)
128 otp->base + OTPC_SBPI_CTRL);
130 writel(SBPI_CMD_VALID_MASK | 0x1, otp->base + OTPC_SBPI_CMD_VALID_PRE);
132 otp->base + OTPC_SBPI_CMD0_OFFSET);
134 writel(SBPI_ECC_ENABLE, otp->base + OTPC_SBPI_CMD1_OFFSET);
136 writel(SBPI_ECC_DISABLE, otp->base + OTPC_SBPI_CMD1_OFFSET);
138 writel(SBPI_ENABLE_MASK | SBPI_ENABLE, otp->base + OTPC_SBPI_CTRL);
140 ret = rockchip_otp_wait_status(otp, OTPC_INT_STATUS, OTPC_SBPI_DONE);
142 dev_err(otp->dev, "timeout during ecc_enable\n");
150 struct rockchip_otp *otp = context;
154 ret = rockchip_otp_reset(otp);
156 dev_err(otp->dev, "failed to reset otp phy\n");
160 ret = rockchip_otp_ecc_enable(otp, false);
162 dev_err(otp->dev, "rockchip_otp_ecc_enable err\n");
166 writel(OTPC_USE_USER | OTPC_USE_USER_MASK, otp->base + OTPC_USER_CTRL);
170 otp->base + OTPC_USER_ADDR);
172 otp->base + OTPC_USER_ENABLE);
173 ret = rockchip_otp_wait_status(otp, OTPC_INT_STATUS, OTPC_USER_DONE);
175 dev_err(otp->dev, "timeout during read setup\n");
178 *buf++ = readb(otp->base + OTPC_USER_Q);
182 writel(0x0 | OTPC_USE_USER_MASK, otp->base + OTPC_USER_CTRL);
190 struct rockchip_otp *otp = context;
208 otp->base + RK3588_OTPC_AUTO_CTRL);
209 writel(RK3588_AUTO_EN, otp->base + RK3588_OTPC_AUTO_EN);
211 ret = rockchip_otp_wait_status(otp, RK3588_OTPC_INT_ST,
214 dev_err(otp->dev, "timeout during read setup\n");
218 data = readl(otp->base + RK3588_OTPC_DOUT0);
236 struct rockchip_otp *otp = context;
239 if (!otp->data || !otp->data->reg_read)
242 ret = clk_bulk_prepare_enable(otp->data->num_clks, otp->clks);
244 dev_err(otp->dev, "failed to prepare/enable clks\n");
248 ret = otp->data->reg_read(context, offset, val, bytes);
250 clk_bulk_disable_unprepare(otp->data->num_clks, otp->clks);
256 .name = "rockchip-otp",
265 "otp", "apb_pclk", "phy",
276 "otp", "apb_pclk", "phy", "arb",
288 .compatible = "rockchip,px30-otp",
292 .compatible = "rockchip,rk3308-otp",
296 .compatible = "rockchip,rk3588-otp",
306 struct rockchip_otp *otp;
315 otp = devm_kzalloc(&pdev->dev, sizeof(struct rockchip_otp),
317 if (!otp)
320 otp->data = data;
321 otp->dev = dev;
322 otp->base = devm_platform_ioremap_resource(pdev, 0);
323 if (IS_ERR(otp->base))
324 return dev_err_probe(dev, PTR_ERR(otp->base),
327 otp->clks = devm_kcalloc(dev, data->num_clks, sizeof(*otp->clks),
329 if (!otp->clks)
333 otp->clks[i].id = data->clks[i];
335 ret = devm_clk_bulk_get(dev, data->num_clks, otp->clks);
339 otp->rst = devm_reset_control_array_get_exclusive(dev);
340 if (IS_ERR(otp->rst))
341 return dev_err_probe(dev, PTR_ERR(otp->rst),
345 otp_config.priv = otp;
358 .name = "rockchip-otp",