Lines Matching refs:data
53 struct clk_si5341 *data;
62 struct clk_si5341 *data;
135 ((output)->data->reg_output_offset[(output)->index])
140 ((output)->data->reg_rdiv_offset[(output)->index])
406 struct clk_si5341 *data = to_clk_si5341(hw);
414 err = si5341_decode_44_32(data->regmap, SI5341_PLL_M_NUM,
438 data->freq_vco = res;
446 static int si5341_clk_get_selected_input(struct clk_si5341 *data)
451 err = regmap_read(data->regmap, SI5341_IN_SEL, &val);
460 struct clk_si5341 *data = to_clk_si5341(hw);
461 int res = si5341_clk_get_selected_input(data);
469 static int si5341_clk_reparent(struct clk_si5341 *data, u8 index)
478 err = regmap_update_bits(data->regmap,
485 err = regmap_update_bits(data->regmap,
491 err = regmap_update_bits(data->regmap, SI5341_INX_TO_PFD_EN,
498 err = regmap_update_bits(data->regmap, SI5341_XAXB_CFG,
508 err = regmap_write(data->regmap, SI5341_IN_PDIV(index), 1);
512 err = regmap_write(data->regmap, SI5341_IN_PSET(index), 1);
517 err = regmap_write(data->regmap, SI5341_PX_UPD, BIT(index));
522 err = regmap_update_bits(data->regmap, SI5341_IN_EN, 0x07, 0);
527 err = regmap_update_bits(data->regmap, SI5341_INX_TO_PFD_EN,
533 err = regmap_update_bits(data->regmap, SI5341_XAXB_CFG,
544 struct clk_si5341 *data = to_clk_si5341(hw);
546 return si5341_clk_reparent(data, index);
565 err = regmap_read(synth->data->regmap,
573 err = regmap_read(synth->data->regmap, SI5341_SYNTH_N_PDNB, &val);
581 err = regmap_read(synth->data->regmap, SI5341_SYNTH_N_CLK_DIS, &val);
595 regmap_update_bits(synth->data->regmap,
598 regmap_update_bits(synth->data->regmap,
601 regmap_update_bits(synth->data->regmap,
613 err = regmap_update_bits(synth->data->regmap,
619 err = regmap_update_bits(synth->data->regmap,
625 return regmap_update_bits(synth->data->regmap,
639 err = si5341_decode_44_32(synth->data->regmap,
651 f = synth->data->freq_vco;
668 f = synth->data->freq_vco;
673 f = synth->data->freq_vco;
687 err = si5341_encode_44_32(synth->data->regmap,
690 err = regmap_update_bits(synth->data->regmap,
695 return regmap_write(synth->data->regmap,
710 n_num = synth->data->freq_vco;
726 dev_dbg(&synth->data->i2c_client->dev,
749 err = regmap_read(output->data->regmap,
763 regmap_update_bits(output->data->regmap,
766 regmap_update_bits(output->data->regmap,
777 err = regmap_update_bits(output->data->regmap,
783 return regmap_update_bits(output->data->regmap,
797 err = regmap_read(output->data->regmap,
806 err = regmap_bulk_read(output->data->regmap,
880 err = regmap_update_bits(output->data->regmap,
891 return regmap_bulk_write(output->data->regmap,
897 return regmap_update_bits(output->data->regmap,
905 if (index >= output->data->num_synth)
916 regmap_read(output->data->regmap, SI5341_OUT_MUX_SEL(output), &val);
938 static int si5341_is_programmed_already(struct clk_si5341 *data)
944 err = regmap_bulk_read(data->regmap, SI5341_PLL_M_DEN,
955 struct clk_si5341 *data = _data;
961 if (idx >= data->num_outputs) {
962 dev_err(&data->i2c_client->dev,
966 return &data->clk[idx].hw;
968 if (idx >= data->num_synth) {
969 dev_err(&data->i2c_client->dev,
973 return &data->synth[idx].hw;
976 dev_err(&data->i2c_client->dev,
980 return &data->hw;
982 dev_err(&data->i2c_client->dev, "invalid group %u\n", group);
987 static int si5341_probe_chip_id(struct clk_si5341 *data)
993 err = regmap_bulk_read(data->regmap, SI5341_PN_BASE, reg,
996 dev_err(&data->i2c_client->dev, "Failed to read chip ID\n");
1002 dev_info(&data->i2c_client->dev, "Chip: %x Grade: %u Rev: %u\n",
1007 data->num_outputs = SI5340_MAX_NUM_OUTPUTS;
1008 data->num_synth = SI5340_NUM_SYNTH;
1009 data->reg_output_offset = si5340_reg_output_offset;
1010 data->reg_rdiv_offset = si5340_reg_rdiv_offset;
1013 data->num_outputs = SI5341_MAX_NUM_OUTPUTS;
1014 data->num_synth = SI5341_NUM_SYNTH;
1015 data->reg_output_offset = si5341_reg_output_offset;
1016 data->reg_rdiv_offset = si5341_reg_rdiv_offset;
1019 data->num_outputs = SI5342_MAX_NUM_OUTPUTS;
1020 data->num_synth = SI5342_NUM_SYNTH;
1021 data->reg_output_offset = si5340_reg_output_offset;
1022 data->reg_rdiv_offset = si5340_reg_rdiv_offset;
1025 data->num_outputs = SI5344_MAX_NUM_OUTPUTS;
1026 data->num_synth = SI5344_NUM_SYNTH;
1027 data->reg_output_offset = si5340_reg_output_offset;
1028 data->reg_rdiv_offset = si5340_reg_rdiv_offset;
1031 data->num_outputs = SI5345_MAX_NUM_OUTPUTS;
1032 data->num_synth = SI5345_NUM_SYNTH;
1033 data->reg_output_offset = si5341_reg_output_offset;
1034 data->reg_rdiv_offset = si5341_reg_rdiv_offset;
1037 dev_err(&data->i2c_client->dev, "Model '%x' not supported\n",
1042 data->chip_id = model;
1048 static int si5341_read_settings(struct clk_si5341 *data)
1054 err = regmap_bulk_read(data->regmap, SI5341_PLL_M_NUM, r, 10);
1058 err = regmap_bulk_read(data->regmap,
1063 err = regmap_bulk_read(data->regmap,
1068 for (i = 0; i < data->num_synth; ++i) {
1069 err = regmap_bulk_read(data->regmap,
1075 for (i = 0; i < data->num_outputs; ++i) {
1076 err = regmap_bulk_read(data->regmap,
1077 data->reg_output_offset[i], r, 4);
1081 err = regmap_bulk_read(data->regmap,
1082 data->reg_rdiv_offset[i], r, 3);
1090 static int si5341_write_multiple(struct clk_si5341 *data,
1097 res = regmap_write(data->regmap,
1100 dev_err(&data->i2c_client->dev,
1123 static int si5341_send_preamble(struct clk_si5341 *data)
1129 res = regmap_read(data->regmap, SI5341_DEVICE_REV, &revision);
1134 res = regmap_write(data->regmap, 0xB24, revision < 2 ? 0xD8 : 0xC0);
1139 if (data->chip_id > 0x5341)
1140 res = si5341_write_multiple(data,
1143 res = si5341_write_multiple(data,
1155 static int si5341_finalize_defaults(struct clk_si5341 *data)
1160 res = regmap_read(data->regmap, SI5341_DEVICE_REV, &revision);
1164 dev_dbg(&data->i2c_client->dev, "%s rev=%u\n", __func__, revision);
1166 res = regmap_write(data->regmap, SI5341_SOFT_RST, 0x01);
1171 if (data->chip_id > 0x5341) {
1172 res = regmap_write(data->regmap, 0x540, 0x0);
1178 res = regmap_write(data->regmap, 0xB24, revision < 2 ? 0xDB : 0xC3);
1181 res = regmap_write(data->regmap, 0x0B25, 0x02);
1256 static int si5341_dt_parse_dt(struct clk_si5341 *data,
1260 struct device_node *np = data->i2c_client->dev.of_node;
1269 dev_err(&data->i2c_client->dev, "missing reg property of %s\n",
1275 dev_err(&data->i2c_client->dev, "invalid clkout %d\n", num);
1294 dev_err(&data->i2c_client->dev,
1307 dev_err(&data->i2c_client->dev,
1318 dev_err(&data->i2c_client->dev,
1337 if (data->clk[num].vddo_reg) {
1338 int vdd = regulator_get_voltage(data->clk[num].vddo_reg);
1351 dev_err(&data->i2c_client->dev,
1358 dev_warn(&data->i2c_client->dev,
1380 static int si5341_initialize_pll(struct clk_si5341 *data)
1382 struct device_node *np = data->i2c_client->dev.of_node;
1388 dev_err(&data->i2c_client->dev,
1392 dev_err(&data->i2c_client->dev,
1397 dev_err(&data->i2c_client->dev,
1399 sel = si5341_clk_get_selected_input(data);
1403 m_den = clk_get_rate(data->input_clk[sel]) / 10;
1407 return si5341_encode_44_32(data->regmap,
1411 static int si5341_clk_select_active_input(struct clk_si5341 *data)
1417 res = si5341_clk_get_selected_input(data);
1422 if (!data->input_clk[res]) {
1423 dev_dbg(&data->i2c_client->dev,
1427 if (data->input_clk[i]) {
1433 dev_err(&data->i2c_client->dev,
1440 err = si5341_clk_reparent(data, res);
1444 err = clk_prepare_enable(data->input_clk[res]);
1455 struct clk_si5341 *data = dev_get_drvdata(dev);
1457 int res = regmap_read(data->regmap, SI5341_STATUS, &status);
1470 struct clk_si5341 *data = dev_get_drvdata(dev);
1472 int res = regmap_read(data->regmap, SI5341_STATUS_STICKY, &status);
1485 struct clk_si5341 *data = dev_get_drvdata(dev);
1487 int res = regmap_read(data->regmap, SI5341_STATUS, &status);
1500 struct clk_si5341 *data = dev_get_drvdata(dev);
1502 int res = regmap_read(data->regmap, SI5341_STATUS_STICKY, &status);
1515 struct clk_si5341 *data = dev_get_drvdata(dev);
1521 int res = regmap_write(data->regmap, SI5341_STATUS_STICKY, 0);
1542 struct clk_si5341 *data;
1553 data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL);
1554 if (!data)
1557 data->i2c_client = client;
1569 data->input_clk_name[i] = si5341_input_clock_names[i];
1571 data->input_clk[i] = input;
1572 data->input_clk_name[i] = __clk_get_name(input);
1580 data->clk[i].vddo_reg = devm_regulator_get_optional(
1582 if (IS_ERR(data->clk[i].vddo_reg)) {
1583 err = PTR_ERR(data->clk[i].vddo_reg);
1584 data->clk[i].vddo_reg = NULL;
1589 err = regulator_enable(data->clk[i].vddo_reg);
1594 data->clk[i].vddo_reg = NULL;
1600 err = si5341_dt_parse_dt(data, config);
1609 data->regmap = devm_regmap_init_i2c(client, &si5341_regmap_config);
1610 if (IS_ERR(data->regmap)) {
1611 err = PTR_ERR(data->regmap);
1615 i2c_set_clientdata(client, data);
1617 err = si5341_probe_chip_id(data);
1624 err = si5341_is_programmed_already(data);
1633 err = si5341_read_settings(data);
1637 err = si5341_send_preamble(data);
1646 regcache_cache_only(data->regmap, true);
1649 err = si5341_write_multiple(data, si5341_reg_defaults,
1656 err = si5341_clk_select_active_input(data);
1662 err = si5341_initialize_pll(data);
1668 init.parent_names = data->input_clk_name;
1672 data->hw.init = &init;
1674 err = devm_clk_hw_register(&client->dev, &data->hw);
1683 for (i = 0; i < data->num_synth; ++i) {
1691 data->synth[i].index = i;
1692 data->synth[i].data = data;
1693 data->synth[i].hw.init = &init;
1694 err = devm_clk_hw_register(&client->dev, &data->synth[i].hw);
1702 init.num_parents = data->num_synth;
1705 for (i = 0; i < data->num_outputs; ++i) {
1713 data->clk[i].index = i;
1714 data->clk[i].data = data;
1715 data->clk[i].hw.init = &init;
1717 regmap_write(data->regmap,
1718 SI5341_OUT_FORMAT(&data->clk[i]),
1720 regmap_write(data->regmap,
1721 SI5341_OUT_CM(&data->clk[i]),
1723 regmap_update_bits(data->regmap,
1724 SI5341_OUT_MUX_SEL(&data->clk[i]),
1728 err = devm_clk_hw_register(&client->dev, &data->clk[i].hw);
1736 clk_prepare(data->clk[i].hw.clk);
1740 data);
1748 regcache_cache_only(data->regmap, false);
1749 err = regcache_sync(data->regmap);
1753 err = si5341_finalize_defaults(data);
1759 err = regmap_read_poll_timeout(data->regmap, SI5341_STATUS, status,
1768 err = regmap_write(data->regmap, SI5341_STATUS_STICKY, 0);
1780 for (i = 0; i < data->num_synth; ++i)
1786 if (data->clk[i].vddo_reg)
1787 regulator_disable(data->clk[i].vddo_reg);
1795 struct clk_si5341 *data = i2c_get_clientdata(client);
1801 if (data->clk[i].vddo_reg)
1802 regulator_disable(data->clk[i].vddo_reg);