Lines Matching refs:cdce

299 	struct cdce706_dev_data *cdce = hwd->dev_data;  in cdce706_divider_round_rate()  local
315 struct clk *gp_clk = cdce->clkin_clk[cdce->clkin[0].parent]; in cdce706_divider_round_rate()
451 static int cdce706_register_hw(struct cdce706_dev_data *cdce, in cdce706_register_hw() argument
460 hw->dev_data = cdce; in cdce706_register_hw()
463 hw->clk = devm_clk_register(&cdce->client->dev, in cdce706_register_hw()
466 dev_err(&cdce->client->dev, "Failed to register %s\n", in cdce706_register_hw()
474 static int cdce706_register_clkin(struct cdce706_dev_data *cdce) in cdce706_register_clkin() argument
478 .parent_names = cdce->clkin_name, in cdce706_register_clkin()
479 .num_parents = ARRAY_SIZE(cdce->clkin_name), in cdce706_register_clkin()
485 for (i = 0; i < ARRAY_SIZE(cdce->clkin_name); ++i) { in cdce706_register_clkin()
486 struct clk *parent = devm_clk_get(&cdce->client->dev, in cdce706_register_clkin()
490 cdce->clkin_name[i] = cdce706_source_name[i]; in cdce706_register_clkin()
492 cdce->clkin_name[i] = __clk_get_name(parent); in cdce706_register_clkin()
493 cdce->clkin_clk[i] = parent; in cdce706_register_clkin()
497 ret = cdce706_reg_read(cdce, CDCE706_CLKIN_SOURCE, &source); in cdce706_register_clkin()
502 ret = cdce706_reg_read(cdce, CDCE706_CLKIN_CLOCK, &clock); in cdce706_register_clkin()
505 cdce->clkin[0].parent = !!(clock & CDCE706_CLKIN_CLOCK_MASK); in cdce706_register_clkin()
508 ret = cdce706_register_hw(cdce, cdce->clkin, in cdce706_register_clkin()
509 ARRAY_SIZE(cdce->clkin), in cdce706_register_clkin()
514 static int cdce706_register_plls(struct cdce706_dev_data *cdce) in cdce706_register_plls() argument
525 ret = cdce706_reg_read(cdce, CDCE706_PLL_MUX, &mux); in cdce706_register_plls()
529 for (i = 0; i < ARRAY_SIZE(cdce->pll); ++i) { in cdce706_register_plls()
532 ret = cdce706_reg_read(cdce, CDCE706_PLL_M_LOW(i), &m); in cdce706_register_plls()
535 ret = cdce706_reg_read(cdce, CDCE706_PLL_N_LOW(i), &n); in cdce706_register_plls()
538 ret = cdce706_reg_read(cdce, CDCE706_PLL_HI(i), &v); in cdce706_register_plls()
541 cdce->pll[i].div = m | ((v & CDCE706_PLL_HI_M_MASK) << 8); in cdce706_register_plls()
542 cdce->pll[i].mul = n | ((v & CDCE706_PLL_HI_N_MASK) << in cdce706_register_plls()
544 cdce->pll[i].mux = mux & CDCE706_PLL_MUX_MASK(i); in cdce706_register_plls()
545 dev_dbg(&cdce->client->dev, in cdce706_register_plls()
547 cdce->pll[i].div, cdce->pll[i].mul, cdce->pll[i].mux); in cdce706_register_plls()
550 ret = cdce706_register_hw(cdce, cdce->pll, in cdce706_register_plls()
551 ARRAY_SIZE(cdce->pll), in cdce706_register_plls()
556 static int cdce706_register_dividers(struct cdce706_dev_data *cdce) in cdce706_register_dividers() argument
567 for (i = 0; i < ARRAY_SIZE(cdce->divider); ++i) { in cdce706_register_dividers()
570 ret = cdce706_reg_read(cdce, CDCE706_DIVIDER_PLL(i), &val); in cdce706_register_dividers()
573 cdce->divider[i].parent = in cdce706_register_dividers()
577 ret = cdce706_reg_read(cdce, CDCE706_DIVIDER(i), &val); in cdce706_register_dividers()
580 cdce->divider[i].div = val & CDCE706_DIVIDER_DIVIDER_MASK; in cdce706_register_dividers()
581 dev_dbg(&cdce->client->dev, in cdce706_register_dividers()
583 cdce->divider[i].parent, cdce->divider[i].div); in cdce706_register_dividers()
586 ret = cdce706_register_hw(cdce, cdce->divider, in cdce706_register_dividers()
587 ARRAY_SIZE(cdce->divider), in cdce706_register_dividers()
592 static int cdce706_register_clkouts(struct cdce706_dev_data *cdce) in cdce706_register_clkouts() argument
603 for (i = 0; i < ARRAY_SIZE(cdce->clkout); ++i) { in cdce706_register_clkouts()
606 ret = cdce706_reg_read(cdce, CDCE706_CLKOUT(i), &val); in cdce706_register_clkouts()
609 cdce->clkout[i].parent = val & CDCE706_CLKOUT_DIVIDER_MASK; in cdce706_register_clkouts()
610 dev_dbg(&cdce->client->dev, in cdce706_register_clkouts()
612 cdce->clkout[i].parent); in cdce706_register_clkouts()
615 ret = cdce706_register_hw(cdce, cdce->clkout, in cdce706_register_clkouts()
616 ARRAY_SIZE(cdce->clkout), in cdce706_register_clkouts()
618 for (i = 0; i < ARRAY_SIZE(cdce->clkout); ++i) in cdce706_register_clkouts()
619 cdce->clks[i] = cdce->clkout[i].clk; in cdce706_register_clkouts()
628 struct cdce706_dev_data *cdce; in cdce706_probe() local
634 cdce = devm_kzalloc(&client->dev, sizeof(*cdce), GFP_KERNEL); in cdce706_probe()
635 if (!cdce) in cdce706_probe()
638 cdce->client = client; in cdce706_probe()
639 cdce->regmap = devm_regmap_init_i2c(client, &cdce706_regmap_config); in cdce706_probe()
640 if (IS_ERR(cdce->regmap)) { in cdce706_probe()
645 i2c_set_clientdata(client, cdce); in cdce706_probe()
647 ret = cdce706_register_clkin(cdce); in cdce706_probe()
650 ret = cdce706_register_plls(cdce); in cdce706_probe()
653 ret = cdce706_register_dividers(cdce); in cdce706_probe()
656 ret = cdce706_register_clkouts(cdce); in cdce706_probe()
659 cdce->onecell.clks = cdce->clks; in cdce706_probe()
660 cdce->onecell.clk_num = ARRAY_SIZE(cdce->clks); in cdce706_probe()
662 &cdce->onecell); in cdce706_probe()