Lines Matching refs:vc5
170 struct vc5_driver_data *vc5;
178 struct vc5_driver_data *vc5;
229 struct vc5_driver_data *vc5 =
234 regmap_read(vc5->regmap, VC5_PRIM_SRC_SHDN, &src);
243 dev_warn(&vc5->client->dev,
250 struct vc5_driver_data *vc5 =
255 if ((index > 1) || !vc5->clk_mux_ins)
258 if (vc5->clk_mux_ins == (VC5_MUX_IN_CLKIN | VC5_MUX_IN_XIN)) {
267 if (vc5->clk_mux_ins == VC5_MUX_IN_XIN)
269 else if (vc5->clk_mux_ins == VC5_MUX_IN_CLKIN)
275 return regmap_update_bits(vc5->regmap, VC5_PRIM_SRC_SHDN, mask, src);
286 struct vc5_driver_data *vc5 =
290 regmap_read(vc5->regmap, VC5_PRIM_SRC_SHDN, &premul);
309 struct vc5_driver_data *vc5 =
318 regmap_update_bits(vc5->regmap, VC5_PRIM_SRC_SHDN,
334 struct vc5_driver_data *vc5 =
338 regmap_read(vc5->regmap, VC5_VCO_CTRL_AND_PREDIV, &prediv);
344 regmap_read(vc5->regmap, VC5_REF_DIVIDER, &div);
376 struct vc5_driver_data *vc5 =
383 regmap_update_bits(vc5->regmap, VC5_VCO_CTRL_AND_PREDIV,
386 regmap_update_bits(vc5->regmap, VC5_REF_DIVIDER, 0xff, 0x00);
398 regmap_update_bits(vc5->regmap, VC5_REF_DIVIDER, 0xff, div);
399 regmap_update_bits(vc5->regmap, VC5_VCO_CTRL_AND_PREDIV,
418 struct vc5_driver_data *vc5 = hwdata->vc5;
422 regmap_bulk_read(vc5->regmap, VC5_FEEDBACK_INT_DIV, fb, 5);
463 struct vc5_driver_data *vc5 = hwdata->vc5;
472 return regmap_bulk_write(vc5->regmap, VC5_FEEDBACK_INT_DIV, fb, 5);
485 struct vc5_driver_data *vc5 = hwdata->vc5;
492 regmap_bulk_read(vc5->regmap, VC5_OUT_DIV_INT(hwdata->num, 0),
494 regmap_bulk_read(vc5->regmap, VC5_OUT_DIV_FRAC(hwdata->num, 0),
545 struct vc5_driver_data *vc5 = hwdata->vc5;
555 regmap_bulk_write(vc5->regmap, VC5_OUT_DIV_FRAC(hwdata->num, 0),
564 regmap_update_bits(vc5->regmap, VC5_GLOBAL_REGISTER,
566 regmap_update_bits(vc5->regmap, VC5_GLOBAL_REGISTER,
581 struct vc5_driver_data *vc5 = hwdata->vc5;
596 if (vc5->chip_info->flags & VC5_HAS_BYPASS_SYNC_BIT) {
597 ret = regmap_update_bits(vc5->regmap,
609 regmap_read(vc5->regmap, VC5_OUT_DIV_CONTROL(hwdata->num), &src);
612 ret = regmap_update_bits(vc5->regmap,
620 regmap_update_bits(vc5->regmap, VC5_CLK_OUTPUT_CFG(hwdata->num, 1),
624 dev_dbg(&vc5->client->dev, "Update output %d mask 0x%0X val 0x%0X\n",
628 regmap_update_bits(vc5->regmap,
640 struct vc5_driver_data *vc5 = hwdata->vc5;
643 regmap_update_bits(vc5->regmap, VC5_CLK_OUTPUT_CFG(hwdata->num, 1),
650 struct vc5_driver_data *vc5 = hwdata->vc5;
660 regmap_read(vc5->regmap, VC5_OUT_DIV_CONTROL(hwdata->num), &src);
672 dev_warn(&vc5->client->dev,
680 struct vc5_driver_data *vc5 = hwdata->vc5;
694 return regmap_update_bits(vc5->regmap, VC5_OUT_DIV_CONTROL(hwdata->num),
708 struct vc5_driver_data *vc5 = data;
711 if (idx >= vc5->chip_info->clk_out_cnt)
714 return &vc5->clk_out[idx].hw;
853 struct vc5_driver_data *vc5;
859 vc5 = devm_kzalloc(&client->dev, sizeof(*vc5), GFP_KERNEL);
860 if (!vc5)
863 i2c_set_clientdata(client, vc5);
864 vc5->client = client;
865 vc5->chip_info = of_device_get_match_data(&client->dev);
867 vc5->pin_xin = devm_clk_get(&client->dev, "xin");
868 if (PTR_ERR(vc5->pin_xin) == -EPROBE_DEFER)
871 vc5->pin_clkin = devm_clk_get(&client->dev, "clkin");
872 if (PTR_ERR(vc5->pin_clkin) == -EPROBE_DEFER)
875 vc5->regmap = devm_regmap_init_i2c(client, &vc5_regmap_config);
876 if (IS_ERR(vc5->regmap)) {
878 return PTR_ERR(vc5->regmap);
884 if (!IS_ERR(vc5->pin_xin)) {
885 vc5->clk_mux_ins |= VC5_MUX_IN_XIN;
886 parent_names[init.num_parents++] = __clk_get_name(vc5->pin_xin);
887 } else if (vc5->chip_info->flags & VC5_HAS_INTERNAL_XTAL) {
888 vc5->pin_xin = clk_register_fixed_rate(&client->dev,
891 if (IS_ERR(vc5->pin_xin))
892 return PTR_ERR(vc5->pin_xin);
893 vc5->clk_mux_ins |= VC5_MUX_IN_XIN;
894 parent_names[init.num_parents++] = __clk_get_name(vc5->pin_xin);
897 if (!IS_ERR(vc5->pin_clkin)) {
898 vc5->clk_mux_ins |= VC5_MUX_IN_CLKIN;
900 __clk_get_name(vc5->pin_clkin);
917 vc5->clk_mux.init = &init;
918 ret = devm_clk_hw_register(&client->dev, &vc5->clk_mux);
923 if (vc5->chip_info->flags & VC5_HAS_PFD_FREQ_DBL) {
935 parent_names[0] = clk_hw_get_name(&vc5->clk_mux);
937 vc5->clk_mul.init = &init;
938 ret = devm_clk_hw_register(&client->dev, &vc5->clk_mul);
954 if (vc5->chip_info->flags & VC5_HAS_PFD_FREQ_DBL)
955 parent_names[0] = clk_hw_get_name(&vc5->clk_mul);
957 parent_names[0] = clk_hw_get_name(&vc5->clk_mux);
959 vc5->clk_pfd.init = &init;
960 ret = devm_clk_hw_register(&client->dev, &vc5->clk_pfd);
975 parent_names[0] = clk_hw_get_name(&vc5->clk_pfd);
977 vc5->clk_pll.num = 0;
978 vc5->clk_pll.vc5 = vc5;
979 vc5->clk_pll.hw.init = &init;
980 ret = devm_clk_hw_register(&client->dev, &vc5->clk_pll.hw);
986 for (n = 0; n < vc5->chip_info->clk_fod_cnt; n++) {
987 idx = vc5_map_index_to_output(vc5->chip_info->model, n);
998 parent_names[0] = clk_hw_get_name(&vc5->clk_pll.hw);
1000 vc5->clk_fod[n].num = idx;
1001 vc5->clk_fod[n].vc5 = vc5;
1002 vc5->clk_fod[n].hw.init = &init;
1003 ret = devm_clk_hw_register(&client->dev, &vc5->clk_fod[n].hw);
1020 parent_names[0] = clk_hw_get_name(&vc5->clk_mux);
1022 vc5->clk_out[0].num = idx;
1023 vc5->clk_out[0].vc5 = vc5;
1024 vc5->clk_out[0].hw.init = &init;
1025 ret = devm_clk_hw_register(&client->dev, &vc5->clk_out[0].hw);
1031 for (n = 1; n < vc5->chip_info->clk_out_cnt; n++) {
1032 idx = vc5_map_index_to_output(vc5->chip_info->model, n - 1);
1033 parent_names[0] = clk_hw_get_name(&vc5->clk_fod[idx].hw);
1035 parent_names[1] = clk_hw_get_name(&vc5->clk_mux);
1038 clk_hw_get_name(&vc5->clk_out[n - 1].hw);
1051 vc5->clk_out[n].num = idx;
1052 vc5->clk_out[n].vc5 = vc5;
1053 vc5->clk_out[n].hw.init = &init;
1054 ret = devm_clk_hw_register(&client->dev, &vc5->clk_out[n].hw);
1060 ret = vc5_get_output_config(client, &vc5->clk_out[n]);
1065 ret = of_clk_add_hw_provider(client->dev.of_node, vc5_of_clk_get, vc5);
1077 if (vc5->chip_info->flags & VC5_HAS_INTERNAL_XTAL)
1078 clk_unregister_fixed_rate(vc5->pin_xin);
1084 struct vc5_driver_data *vc5 = i2c_get_clientdata(client);
1088 if (vc5->chip_info->flags & VC5_HAS_INTERNAL_XTAL)
1089 clk_unregister_fixed_rate(vc5->pin_xin);
1096 struct vc5_driver_data *vc5 = dev_get_drvdata(dev);
1098 regcache_cache_only(vc5->regmap, true);
1099 regcache_mark_dirty(vc5->regmap);
1106 struct vc5_driver_data *vc5 = dev_get_drvdata(dev);
1109 regcache_cache_only(vc5->regmap, false);
1110 ret = regcache_sync(vc5->regmap);
1184 .name = "vc5",