in rockchip-otp.c [209:256]
static int rockchip_otp_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct rockchip_otp *otp;
const struct rockchip_data *data;
struct nvmem_device *nvmem;
int ret, i;
data = of_device_get_match_data(dev);
if (!data) {
dev_err(dev, "failed to get match data\n");
return -EINVAL;
}
otp = devm_kzalloc(&pdev->dev, sizeof(struct rockchip_otp),
GFP_KERNEL);
if (!otp)
return -ENOMEM;
otp->dev = dev;
otp->base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(otp->base))
return PTR_ERR(otp->base);
otp->num_clks = ARRAY_SIZE(rockchip_otp_clocks);
otp->clks = devm_kcalloc(dev, otp->num_clks,
sizeof(*otp->clks), GFP_KERNEL);
if (!otp->clks)
return -ENOMEM;
for (i = 0; i < otp->num_clks; ++i)
otp->clks[i].id = rockchip_otp_clocks[i];
ret = devm_clk_bulk_get(dev, otp->num_clks, otp->clks);
if (ret)
return ret;
otp->rst = devm_reset_control_get(dev, "phy");
if (IS_ERR(otp->rst))
return PTR_ERR(otp->rst);
otp_config.size = data->size;
otp_config.priv = otp;
otp_config.dev = dev;
nvmem = devm_nvmem_register(dev, &otp_config);
return PTR_ERR_OR_ZERO(nvmem);
}