Lines Matching +full:clock +full:- +full:measure
1 // SPDX-License-Identifier: GPL-2.0+
493 struct meson_msr *priv = clk_msr_id->priv; in meson_measure_id()
501 regmap_write(priv->regmap, MSR_CLK_REG0, 0); in meson_measure_id()
504 regmap_update_bits(priv->regmap, MSR_CLK_REG0, MSR_DURATION, in meson_measure_id()
505 FIELD_PREP(MSR_DURATION, duration - 1)); in meson_measure_id()
508 regmap_update_bits(priv->regmap, MSR_CLK_REG0, MSR_CLK_SRC, in meson_measure_id()
509 FIELD_PREP(MSR_CLK_SRC, clk_msr_id->id)); in meson_measure_id()
512 regmap_update_bits(priv->regmap, MSR_CLK_REG0, in meson_measure_id()
516 ret = regmap_read_poll_timeout(priv->regmap, MSR_CLK_REG0, in meson_measure_id()
524 regmap_update_bits(priv->regmap, MSR_CLK_REG0, MSR_ENABLE, 0); in meson_measure_id()
527 regmap_read(priv->regmap, MSR_CLK_REG2, &val); in meson_measure_id()
532 return -EINVAL; in meson_measure_id()
550 duration -= DIV_STEP; in meson_measure_best_id()
551 } while (duration >= DIV_MIN && ret == -EINVAL); in meson_measure_best_id()
558 struct meson_msr_id *clk_msr_id = s->private; in clk_msr_show()
566 seq_printf(s, "%d\t+/-%dHz\n", val, precision); in clk_msr_show()
574 struct meson_msr_id *msr_table = s->private; in clk_msr_summary_show()
578 seq_puts(s, " clock rate precision\n"); in clk_msr_summary_show()
579 seq_puts(s, "---------------------------------------------\n"); in clk_msr_summary_show()
589 seq_printf(s, " %-20s %10d +/-%dHz\n", in clk_msr_summary_show()
613 priv = devm_kzalloc(&pdev->dev, sizeof(struct meson_msr), in meson_msr_probe()
616 return -ENOMEM; in meson_msr_probe()
618 match_data = device_get_match_data(&pdev->dev); in meson_msr_probe()
620 dev_err(&pdev->dev, "failed to get match data\n"); in meson_msr_probe()
621 return -ENODEV; in meson_msr_probe()
624 memcpy(priv->msr_table, match_data, sizeof(priv->msr_table)); in meson_msr_probe()
627 base = devm_ioremap_resource(&pdev->dev, res); in meson_msr_probe()
629 dev_err(&pdev->dev, "io resource mapping failed\n"); in meson_msr_probe()
633 priv->regmap = devm_regmap_init_mmio(&pdev->dev, base, in meson_msr_probe()
635 if (IS_ERR(priv->regmap)) in meson_msr_probe()
636 return PTR_ERR(priv->regmap); in meson_msr_probe()
638 root = debugfs_create_dir("meson-clk-msr", NULL); in meson_msr_probe()
642 priv->msr_table, &clk_msr_summary_fops); in meson_msr_probe()
645 if (!priv->msr_table[i].name) in meson_msr_probe()
648 priv->msr_table[i].priv = priv; in meson_msr_probe()
650 debugfs_create_file(priv->msr_table[i].name, 0444, clks, in meson_msr_probe()
651 &priv->msr_table[i], &clk_msr_fops); in meson_msr_probe()
659 .compatible = "amlogic,meson-gx-clk-measure",
663 .compatible = "amlogic,meson8-clk-measure",
667 .compatible = "amlogic,meson8b-clk-measure",
671 .compatible = "amlogic,meson-axg-clk-measure",
675 .compatible = "amlogic,meson-g12a-clk-measure",
679 .compatible = "amlogic,meson-sm1-clk-measure",