Lines Matching refs:data

53 	struct clk_si5341 *data;
62 struct clk_si5341 *data;
138 ((output)->data->reg_output_offset[(output)->index])
143 ((output)->data->reg_rdiv_offset[(output)->index])
408 struct clk_si5341 *data = to_clk_si5341(hw);
416 err = si5341_decode_44_32(data->regmap, SI5341_PLL_M_NUM,
440 data->freq_vco = res;
448 static int si5341_clk_get_selected_input(struct clk_si5341 *data)
453 err = regmap_read(data->regmap, SI5341_IN_SEL, &val);
462 struct clk_si5341 *data = to_clk_si5341(hw);
463 int res = si5341_clk_get_selected_input(data);
471 static int si5341_clk_reparent(struct clk_si5341 *data, u8 index)
480 err = regmap_update_bits(data->regmap,
487 err = regmap_update_bits(data->regmap,
493 err = regmap_update_bits(data->regmap, SI5341_INX_TO_PFD_EN,
500 err = regmap_update_bits(data->regmap, SI5341_XAXB_CFG,
510 err = regmap_write(data->regmap, SI5341_IN_PDIV(index), 1);
514 err = regmap_write(data->regmap, SI5341_IN_PSET(index), 1);
519 err = regmap_write(data->regmap, SI5341_PX_UPD, BIT(index));
524 err = regmap_update_bits(data->regmap, SI5341_IN_EN, 0x07, 0);
529 err = regmap_update_bits(data->regmap, SI5341_INX_TO_PFD_EN,
535 err = regmap_update_bits(data->regmap, SI5341_XAXB_CFG,
537 SI5341_XAXB_CFG_PDNB | (data->xaxb_ext_clk ?
548 struct clk_si5341 *data = to_clk_si5341(hw);
550 return si5341_clk_reparent(data, index);
570 err = regmap_read(synth->data->regmap,
578 err = regmap_read(synth->data->regmap, SI5341_SYNTH_N_PDNB, &val);
586 err = regmap_read(synth->data->regmap, SI5341_SYNTH_N_CLK_DIS, &val);
600 regmap_update_bits(synth->data->regmap,
603 regmap_update_bits(synth->data->regmap,
606 regmap_update_bits(synth->data->regmap,
618 err = regmap_update_bits(synth->data->regmap,
624 err = regmap_update_bits(synth->data->regmap,
630 return regmap_update_bits(synth->data->regmap,
644 err = si5341_decode_44_32(synth->data->regmap,
656 f = synth->data->freq_vco;
673 f = synth->data->freq_vco;
678 f = synth->data->freq_vco;
692 err = si5341_encode_44_32(synth->data->regmap,
695 err = regmap_update_bits(synth->data->regmap,
700 return regmap_write(synth->data->regmap,
715 n_num = synth->data->freq_vco;
731 dev_dbg(&synth->data->i2c_client->dev,
754 err = regmap_read(output->data->regmap,
768 regmap_update_bits(output->data->regmap,
771 regmap_update_bits(output->data->regmap,
782 err = regmap_update_bits(output->data->regmap,
788 return regmap_update_bits(output->data->regmap,
802 err = regmap_read(output->data->regmap,
811 err = regmap_bulk_read(output->data->regmap,
887 err = regmap_update_bits(output->data->regmap,
898 return regmap_bulk_write(output->data->regmap,
904 return regmap_update_bits(output->data->regmap,
912 if (index >= output->data->num_synth)
923 regmap_read(output->data->regmap, SI5341_OUT_MUX_SEL(output), &val);
945 static int si5341_is_programmed_already(struct clk_si5341 *data)
951 err = regmap_bulk_read(data->regmap, SI5341_PLL_M_DEN,
962 struct clk_si5341 *data = _data;
968 if (idx >= data->num_outputs) {
969 dev_err(&data->i2c_client->dev,
973 return &data->clk[idx].hw;
975 if (idx >= data->num_synth) {
976 dev_err(&data->i2c_client->dev,
980 return &data->synth[idx].hw;
983 dev_err(&data->i2c_client->dev,
987 return &data->hw;
989 dev_err(&data->i2c_client->dev, "invalid group %u\n", group);
994 static int si5341_probe_chip_id(struct clk_si5341 *data)
1000 err = regmap_bulk_read(data->regmap, SI5341_PN_BASE, reg,
1003 dev_err(&data->i2c_client->dev, "Failed to read chip ID\n");
1009 dev_info(&data->i2c_client->dev, "Chip: %x Grade: %u Rev: %u\n",
1014 data->num_outputs = SI5340_MAX_NUM_OUTPUTS;
1015 data->num_synth = SI5340_NUM_SYNTH;
1016 data->reg_output_offset = si5340_reg_output_offset;
1017 data->reg_rdiv_offset = si5340_reg_rdiv_offset;
1020 data->num_outputs = SI5341_MAX_NUM_OUTPUTS;
1021 data->num_synth = SI5341_NUM_SYNTH;
1022 data->reg_output_offset = si5341_reg_output_offset;
1023 data->reg_rdiv_offset = si5341_reg_rdiv_offset;
1026 data->num_outputs = SI5342_MAX_NUM_OUTPUTS;
1027 data->num_synth = SI5342_NUM_SYNTH;
1028 data->reg_output_offset = si5340_reg_output_offset;
1029 data->reg_rdiv_offset = si5340_reg_rdiv_offset;
1032 data->num_outputs = SI5344_MAX_NUM_OUTPUTS;
1033 data->num_synth = SI5344_NUM_SYNTH;
1034 data->reg_output_offset = si5340_reg_output_offset;
1035 data->reg_rdiv_offset = si5340_reg_rdiv_offset;
1038 data->num_outputs = SI5345_MAX_NUM_OUTPUTS;
1039 data->num_synth = SI5345_NUM_SYNTH;
1040 data->reg_output_offset = si5341_reg_output_offset;
1041 data->reg_rdiv_offset = si5341_reg_rdiv_offset;
1044 dev_err(&data->i2c_client->dev, "Model '%x' not supported\n",
1049 data->chip_id = model;
1055 static int si5341_read_settings(struct clk_si5341 *data)
1061 err = regmap_bulk_read(data->regmap, SI5341_PLL_M_NUM, r, 10);
1065 err = regmap_bulk_read(data->regmap,
1070 err = regmap_bulk_read(data->regmap,
1075 for (i = 0; i < data->num_synth; ++i) {
1076 err = regmap_bulk_read(data->regmap,
1082 for (i = 0; i < data->num_outputs; ++i) {
1083 err = regmap_bulk_read(data->regmap,
1084 data->reg_output_offset[i], r, 4);
1088 err = regmap_bulk_read(data->regmap,
1089 data->reg_rdiv_offset[i], r, 3);
1097 static int si5341_write_multiple(struct clk_si5341 *data,
1104 res = regmap_write(data->regmap,
1107 dev_err(&data->i2c_client->dev,
1130 static int si5341_send_preamble(struct clk_si5341 *data)
1136 res = regmap_read(data->regmap, SI5341_DEVICE_REV, &revision);
1141 res = regmap_write(data->regmap, 0xB24, revision < 2 ? 0xD8 : 0xC0);
1146 if (data->chip_id > 0x5341)
1147 res = si5341_write_multiple(data,
1150 res = si5341_write_multiple(data,
1162 static int si5341_finalize_defaults(struct clk_si5341 *data)
1167 res = regmap_write(data->regmap, SI5341_IO_VDD_SEL,
1168 data->iovdd_33 ? 1 : 0);
1172 res = regmap_read(data->regmap, SI5341_DEVICE_REV, &revision);
1176 dev_dbg(&data->i2c_client->dev, "%s rev=%u\n", __func__, revision);
1178 res = regmap_write(data->regmap, SI5341_SOFT_RST, 0x01);
1183 if (data->chip_id > 0x5341) {
1184 res = regmap_write(data->regmap, 0x540, 0x0);
1190 res = regmap_write(data->regmap, 0xB24, revision < 2 ? 0xDB : 0xC3);
1193 res = regmap_write(data->regmap, 0x0B25, 0x02);
1268 static int si5341_dt_parse_dt(struct clk_si5341 *data,
1272 struct device_node *np = data->i2c_client->dev.of_node;
1281 dev_err(&data->i2c_client->dev, "missing reg property of %s\n",
1287 dev_err(&data->i2c_client->dev, "invalid clkout %d\n", num);
1306 dev_err(&data->i2c_client->dev,
1319 dev_err(&data->i2c_client->dev,
1330 dev_err(&data->i2c_client->dev,
1349 if (data->clk[num].vddo_reg) {
1350 int vdd = regulator_get_voltage(data->clk[num].vddo_reg);
1363 dev_err(&data->i2c_client->dev,
1370 dev_warn(&data->i2c_client->dev,
1392 static int si5341_initialize_pll(struct clk_si5341 *data)
1394 struct device_node *np = data->i2c_client->dev.of_node;
1400 dev_err(&data->i2c_client->dev,
1404 dev_err(&data->i2c_client->dev,
1409 dev_err(&data->i2c_client->dev,
1411 sel = si5341_clk_get_selected_input(data);
1415 m_den = clk_get_rate(data->input_clk[sel]) / 10;
1419 return si5341_encode_44_32(data->regmap,
1423 static int si5341_clk_select_active_input(struct clk_si5341 *data)
1429 res = si5341_clk_get_selected_input(data);
1434 if (!data->input_clk[res]) {
1435 dev_dbg(&data->i2c_client->dev,
1439 if (data->input_clk[i]) {
1445 dev_err(&data->i2c_client->dev,
1452 err = si5341_clk_reparent(data, res);
1456 err = clk_prepare_enable(data->input_clk[res]);
1467 struct clk_si5341 *data = dev_get_drvdata(dev);
1469 int res = regmap_read(data->regmap, SI5341_STATUS, &status);
1482 struct clk_si5341 *data = dev_get_drvdata(dev);
1484 int res = regmap_read(data->regmap, SI5341_STATUS_STICKY, &status);
1497 struct clk_si5341 *data = dev_get_drvdata(dev);
1499 int res = regmap_read(data->regmap, SI5341_STATUS, &status);
1512 struct clk_si5341 *data = dev_get_drvdata(dev);
1514 int res = regmap_read(data->regmap, SI5341_STATUS_STICKY, &status);
1527 struct clk_si5341 *data = dev_get_drvdata(dev);
1533 int res = regmap_write(data->regmap, SI5341_STATUS_STICKY, 0);
1553 struct clk_si5341 *data;
1564 data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL);
1565 if (!data)
1568 data->i2c_client = client;
1580 data->input_clk_name[i] = si5341_input_clock_names[i];
1582 data->input_clk[i] = input;
1583 data->input_clk_name[i] = __clk_get_name(input);
1591 data->clk[i].vddo_reg = devm_regulator_get_optional(
1593 if (IS_ERR(data->clk[i].vddo_reg)) {
1594 err = PTR_ERR(data->clk[i].vddo_reg);
1595 data->clk[i].vddo_reg = NULL;
1600 err = regulator_enable(data->clk[i].vddo_reg);
1605 data->clk[i].vddo_reg = NULL;
1611 err = si5341_dt_parse_dt(data, config);
1620 data->regmap = devm_regmap_init_i2c(client, &si5341_regmap_config);
1621 if (IS_ERR(data->regmap)) {
1622 err = PTR_ERR(data->regmap);
1626 i2c_set_clientdata(client, data);
1628 err = si5341_probe_chip_id(data);
1635 err = si5341_is_programmed_already(data);
1641 data->xaxb_ext_clk = of_property_read_bool(client->dev.of_node,
1643 data->iovdd_33 = of_property_read_bool(client->dev.of_node,
1648 err = si5341_read_settings(data);
1652 err = si5341_send_preamble(data);
1661 regcache_cache_only(data->regmap, true);
1664 err = si5341_write_multiple(data, si5341_reg_defaults,
1671 err = si5341_clk_select_active_input(data);
1677 err = si5341_initialize_pll(data);
1683 init.parent_names = data->input_clk_name;
1687 data->hw.init = &init;
1689 err = devm_clk_hw_register(&client->dev, &data->hw);
1698 for (i = 0; i < data->num_synth; ++i) {
1706 data->synth[i].index = i;
1707 data->synth[i].data = data;
1708 data->synth[i].hw.init = &init;
1709 err = devm_clk_hw_register(&client->dev, &data->synth[i].hw);
1717 init.num_parents = data->num_synth;
1720 for (i = 0; i < data->num_outputs; ++i) {
1728 data->clk[i].index = i;
1729 data->clk[i].data = data;
1730 data->clk[i].hw.init = &init;
1732 regmap_write(data->regmap,
1733 SI5341_OUT_FORMAT(&data->clk[i]),
1735 regmap_write(data->regmap,
1736 SI5341_OUT_CM(&data->clk[i]),
1738 regmap_update_bits(data->regmap,
1739 SI5341_OUT_MUX_SEL(&data->clk[i]),
1743 err = devm_clk_hw_register(&client->dev, &data->clk[i].hw);
1751 clk_prepare(data->clk[i].hw.clk);
1755 data);
1763 regcache_cache_only(data->regmap, false);
1764 err = regcache_sync(data->regmap);
1768 err = si5341_finalize_defaults(data);
1774 err = regmap_read_poll_timeout(data->regmap, SI5341_STATUS, status,
1783 err = regmap_write(data->regmap, SI5341_STATUS_STICKY, 0);
1795 for (i = 0; i < data->num_synth; ++i)
1801 if (data->clk[i].vddo_reg)
1802 regulator_disable(data->clk[i].vddo_reg);
1810 struct clk_si5341 *data = i2c_get_clientdata(client);
1816 if (data->clk[i].vddo_reg)
1817 regulator_disable(data->clk[i].vddo_reg);