Lines Matching refs:drvdata
48 struct si5351_driver_data *drvdata; member
87 static inline u8 si5351_reg_read(struct si5351_driver_data *drvdata, u8 reg) in si5351_reg_read() argument
92 ret = regmap_read(drvdata->regmap, reg, &val); in si5351_reg_read()
94 dev_err(&drvdata->client->dev, in si5351_reg_read()
102 static inline int si5351_bulk_read(struct si5351_driver_data *drvdata, in si5351_bulk_read() argument
105 return regmap_bulk_read(drvdata->regmap, reg, buf, count); in si5351_bulk_read()
108 static inline int si5351_reg_write(struct si5351_driver_data *drvdata, in si5351_reg_write() argument
111 return regmap_write(drvdata->regmap, reg, val); in si5351_reg_write()
114 static inline int si5351_bulk_write(struct si5351_driver_data *drvdata, in si5351_bulk_write() argument
117 return regmap_raw_write(drvdata->regmap, reg, buf, count); in si5351_bulk_write()
120 static inline int si5351_set_bits(struct si5351_driver_data *drvdata, in si5351_set_bits() argument
123 return regmap_update_bits(drvdata->regmap, reg, mask, val); in si5351_set_bits()
133 static void si5351_read_parameters(struct si5351_driver_data *drvdata, in si5351_read_parameters() argument
141 buf[0] = si5351_reg_read(drvdata, reg); in si5351_read_parameters()
147 si5351_bulk_read(drvdata, reg, SI5351_PARAMETERS_LENGTH, buf); in si5351_read_parameters()
155 static void si5351_write_parameters(struct si5351_driver_data *drvdata, in si5351_write_parameters() argument
164 si5351_reg_write(drvdata, reg, buf[0]); in si5351_write_parameters()
170 buf[2] = si5351_reg_read(drvdata, reg + 2) & ~0x03; in si5351_write_parameters()
178 si5351_bulk_write(drvdata, reg, SI5351_PARAMETERS_LENGTH, buf); in si5351_write_parameters()
224 struct si5351_driver_data *drvdata = in si5351_xtal_prepare() local
226 si5351_set_bits(drvdata, SI5351_FANOUT_ENABLE, in si5351_xtal_prepare()
233 struct si5351_driver_data *drvdata = in si5351_xtal_unprepare() local
235 si5351_set_bits(drvdata, SI5351_FANOUT_ENABLE, in si5351_xtal_unprepare()
249 struct si5351_driver_data *drvdata = in si5351_clkin_prepare() local
251 si5351_set_bits(drvdata, SI5351_FANOUT_ENABLE, in si5351_clkin_prepare()
258 struct si5351_driver_data *drvdata = in si5351_clkin_unprepare() local
260 si5351_set_bits(drvdata, SI5351_FANOUT_ENABLE, in si5351_clkin_unprepare()
272 struct si5351_driver_data *drvdata = in si5351_clkin_recalc_rate() local
291 si5351_set_bits(drvdata, SI5351_PLL_INPUT_SOURCE, in si5351_clkin_recalc_rate()
294 dev_dbg(&drvdata->client->dev, "%s - clkin div = %d, rate = %lu\n", in si5351_clkin_recalc_rate()
315 dev_warn(&hwdata->drvdata->client->dev, "VXCO currently unsupported\n"); in si5351_vxco_prepare()
369 static int _si5351_pll_reparent(struct si5351_driver_data *drvdata, in _si5351_pll_reparent() argument
380 if (drvdata->variant != SI5351_VARIANT_C && in _si5351_pll_reparent()
384 si5351_set_bits(drvdata, SI5351_PLL_INPUT_SOURCE, mask, in _si5351_pll_reparent()
396 val = si5351_reg_read(hwdata->drvdata, SI5351_PLL_INPUT_SOURCE); in si5351_pll_get_parent()
406 if (hwdata->drvdata->variant != SI5351_VARIANT_C && in si5351_pll_set_parent()
413 return _si5351_pll_reparent(hwdata->drvdata, hwdata->num, in si5351_pll_set_parent()
428 si5351_read_parameters(hwdata->drvdata, reg, &hwdata->params); in si5351_pll_recalc_rate()
440 dev_dbg(&hwdata->drvdata->client->dev, in si5351_pll_recalc_rate()
498 dev_dbg(&hwdata->drvdata->client->dev, in si5351_pll_round_rate()
515 si5351_write_parameters(hwdata->drvdata, reg, &hwdata->params); in si5351_pll_set_rate()
518 si5351_set_bits(hwdata->drvdata, SI5351_CLK6_CTRL + hwdata->num, in si5351_pll_set_rate()
522 dev_dbg(&hwdata->drvdata->client->dev, in si5351_pll_set_rate()
562 static int _si5351_msynth_reparent(struct si5351_driver_data *drvdata, in _si5351_msynth_reparent() argument
571 si5351_set_bits(drvdata, SI5351_CLK0_CTRL + num, SI5351_CLK_PLL_SELECT, in _si5351_msynth_reparent()
583 val = si5351_reg_read(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num); in si5351_msynth_get_parent()
593 return _si5351_msynth_reparent(hwdata->drvdata, hwdata->num, in si5351_msynth_set_parent()
608 si5351_read_parameters(hwdata->drvdata, reg, &hwdata->params); in si5351_msynth_recalc_rate()
619 } else if ((si5351_reg_read(hwdata->drvdata, reg + 2) & in si5351_msynth_recalc_rate()
633 dev_dbg(&hwdata->drvdata->client->dev, in si5351_msynth_recalc_rate()
746 dev_dbg(&hwdata->drvdata->client->dev, in si5351_msynth_round_rate()
763 si5351_write_parameters(hwdata->drvdata, reg, &hwdata->params); in si5351_msynth_set_rate()
770 si5351_set_bits(hwdata->drvdata, reg + 2, in si5351_msynth_set_rate()
773 si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num, in si5351_msynth_set_rate()
778 dev_dbg(&hwdata->drvdata->client->dev, in si5351_msynth_set_rate()
798 static int _si5351_clkout_reparent(struct si5351_driver_data *drvdata, in _si5351_clkout_reparent() argument
821 if (drvdata->variant != SI5351_VARIANT_C) in _si5351_clkout_reparent()
830 si5351_set_bits(drvdata, SI5351_CLK0_CTRL + num, in _si5351_clkout_reparent()
836 struct si5351_driver_data *drvdata, int num, in _si5351_clkout_set_drive_strength() argument
861 si5351_set_bits(drvdata, SI5351_CLK0_CTRL + num, in _si5351_clkout_set_drive_strength()
867 struct si5351_driver_data *drvdata, int num, in _si5351_clkout_set_disable_state() argument
896 si5351_set_bits(drvdata, reg, mask, val << shift); in _si5351_clkout_set_disable_state()
906 si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num, in si5351_clkout_prepare()
908 si5351_set_bits(hwdata->drvdata, SI5351_OUTPUT_ENABLE_CTRL, in si5351_clkout_prepare()
918 si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num, in si5351_clkout_unprepare()
920 si5351_set_bits(hwdata->drvdata, SI5351_OUTPUT_ENABLE_CTRL, in si5351_clkout_unprepare()
931 val = si5351_reg_read(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num); in si5351_clkout_get_parent()
971 return _si5351_clkout_reparent(hwdata->drvdata, hwdata->num, parent); in si5351_clkout_set_parent()
987 rdiv = si5351_reg_read(hwdata->drvdata, reg); in si5351_clkout_recalc_rate()
1043 dev_dbg(&hwdata->drvdata->client->dev, in si5351_clkout_round_rate()
1075 si5351_set_bits(hwdata->drvdata, SI5351_CLK6_7_OUTPUT_DIVIDER, in si5351_clkout_set_rate()
1079 si5351_set_bits(hwdata->drvdata, SI5351_CLK6_7_OUTPUT_DIVIDER, in si5351_clkout_set_rate()
1084 si5351_set_bits(hwdata->drvdata, in si5351_clkout_set_rate()
1091 si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num, in si5351_clkout_set_rate()
1094 dev_dbg(&hwdata->drvdata->client->dev, in si5351_clkout_set_rate()
1315 struct si5351_driver_data *drvdata; in si5351_i2c_probe() local
1330 drvdata = devm_kzalloc(&client->dev, sizeof(*drvdata), GFP_KERNEL); in si5351_i2c_probe()
1331 if (drvdata == NULL) { in si5351_i2c_probe()
1336 i2c_set_clientdata(client, drvdata); in si5351_i2c_probe()
1337 drvdata->client = client; in si5351_i2c_probe()
1338 drvdata->variant = variant; in si5351_i2c_probe()
1339 drvdata->pxtal = devm_clk_get(&client->dev, "xtal"); in si5351_i2c_probe()
1340 drvdata->pclkin = devm_clk_get(&client->dev, "clkin"); in si5351_i2c_probe()
1342 if (PTR_ERR(drvdata->pxtal) == -EPROBE_DEFER || in si5351_i2c_probe()
1343 PTR_ERR(drvdata->pclkin) == -EPROBE_DEFER) in si5351_i2c_probe()
1350 if (IS_ERR(drvdata->pxtal) && in si5351_i2c_probe()
1351 (drvdata->variant != SI5351_VARIANT_C || IS_ERR(drvdata->pclkin))) { in si5351_i2c_probe()
1356 drvdata->regmap = devm_regmap_init_i2c(client, &si5351_regmap_config); in si5351_i2c_probe()
1357 if (IS_ERR(drvdata->regmap)) { in si5351_i2c_probe()
1359 return PTR_ERR(drvdata->regmap); in si5351_i2c_probe()
1363 si5351_reg_write(drvdata, SI5351_INTERRUPT_MASK, 0xf0); in si5351_i2c_probe()
1365 if (drvdata->variant != SI5351_VARIANT_C) in si5351_i2c_probe()
1366 si5351_set_bits(drvdata, SI5351_PLL_INPUT_SOURCE, in si5351_i2c_probe()
1371 ret = _si5351_pll_reparent(drvdata, n, pdata->pll_src[n]); in si5351_i2c_probe()
1381 ret = _si5351_msynth_reparent(drvdata, n, in si5351_i2c_probe()
1390 ret = _si5351_clkout_reparent(drvdata, n, in si5351_i2c_probe()
1399 ret = _si5351_clkout_set_drive_strength(drvdata, n, in si5351_i2c_probe()
1408 ret = _si5351_clkout_set_disable_state(drvdata, n, in si5351_i2c_probe()
1418 if (!IS_ERR(drvdata->pxtal)) in si5351_i2c_probe()
1419 clk_prepare_enable(drvdata->pxtal); in si5351_i2c_probe()
1420 if (!IS_ERR(drvdata->pclkin)) in si5351_i2c_probe()
1421 clk_prepare_enable(drvdata->pclkin); in si5351_i2c_probe()
1428 if (!IS_ERR(drvdata->pxtal)) { in si5351_i2c_probe()
1429 drvdata->pxtal_name = __clk_get_name(drvdata->pxtal); in si5351_i2c_probe()
1430 init.parent_names = &drvdata->pxtal_name; in si5351_i2c_probe()
1433 drvdata->xtal.init = &init; in si5351_i2c_probe()
1434 clk = devm_clk_register(&client->dev, &drvdata->xtal); in si5351_i2c_probe()
1442 if (drvdata->variant == SI5351_VARIANT_C) { in si5351_i2c_probe()
1446 if (!IS_ERR(drvdata->pclkin)) { in si5351_i2c_probe()
1447 drvdata->pclkin_name = __clk_get_name(drvdata->pclkin); in si5351_i2c_probe()
1448 init.parent_names = &drvdata->pclkin_name; in si5351_i2c_probe()
1451 drvdata->clkin.init = &init; in si5351_i2c_probe()
1452 clk = devm_clk_register(&client->dev, &drvdata->clkin); in si5351_i2c_probe()
1462 num_parents = (drvdata->variant == SI5351_VARIANT_C) ? 2 : 1; in si5351_i2c_probe()
1467 drvdata->pll[0].num = 0; in si5351_i2c_probe()
1468 drvdata->pll[0].drvdata = drvdata; in si5351_i2c_probe()
1469 drvdata->pll[0].hw.init = &init; in si5351_i2c_probe()
1476 clk = devm_clk_register(&client->dev, &drvdata->pll[0].hw); in si5351_i2c_probe()
1484 drvdata->pll[1].num = 1; in si5351_i2c_probe()
1485 drvdata->pll[1].drvdata = drvdata; in si5351_i2c_probe()
1486 drvdata->pll[1].hw.init = &init; in si5351_i2c_probe()
1488 if (drvdata->variant == SI5351_VARIANT_B) { in si5351_i2c_probe()
1501 clk = devm_clk_register(&client->dev, &drvdata->pll[1].hw); in si5351_i2c_probe()
1509 num_clocks = (drvdata->variant == SI5351_VARIANT_A3) ? 3 : 8; in si5351_i2c_probe()
1511 if (drvdata->variant == SI5351_VARIANT_B) in si5351_i2c_probe()
1516 drvdata->msynth = devm_kzalloc(&client->dev, num_clocks * in si5351_i2c_probe()
1517 sizeof(*drvdata->msynth), GFP_KERNEL); in si5351_i2c_probe()
1518 drvdata->clkout = devm_kzalloc(&client->dev, num_clocks * in si5351_i2c_probe()
1519 sizeof(*drvdata->clkout), GFP_KERNEL); in si5351_i2c_probe()
1521 drvdata->onecell.clk_num = num_clocks; in si5351_i2c_probe()
1522 drvdata->onecell.clks = devm_kzalloc(&client->dev, in si5351_i2c_probe()
1523 num_clocks * sizeof(*drvdata->onecell.clks), GFP_KERNEL); in si5351_i2c_probe()
1525 if (WARN_ON(!drvdata->msynth || !drvdata->clkout || in si5351_i2c_probe()
1526 !drvdata->onecell.clks)) { in si5351_i2c_probe()
1532 drvdata->msynth[n].num = n; in si5351_i2c_probe()
1533 drvdata->msynth[n].drvdata = drvdata; in si5351_i2c_probe()
1534 drvdata->msynth[n].hw.init = &init; in si5351_i2c_probe()
1543 clk = devm_clk_register(&client->dev, &drvdata->msynth[n].hw); in si5351_i2c_probe()
1552 num_parents = (drvdata->variant == SI5351_VARIANT_C) ? 4 : 3; in si5351_i2c_probe()
1560 drvdata->clkout[n].num = n; in si5351_i2c_probe()
1561 drvdata->clkout[n].drvdata = drvdata; in si5351_i2c_probe()
1562 drvdata->clkout[n].hw.init = &init; in si5351_i2c_probe()
1571 clk = devm_clk_register(&client->dev, &drvdata->clkout[n].hw); in si5351_i2c_probe()
1578 drvdata->onecell.clks[n] = clk; in si5351_i2c_probe()
1592 &drvdata->onecell); in si5351_i2c_probe()
1601 if (!IS_ERR(drvdata->pxtal)) in si5351_i2c_probe()
1602 clk_disable_unprepare(drvdata->pxtal); in si5351_i2c_probe()
1603 if (!IS_ERR(drvdata->pclkin)) in si5351_i2c_probe()
1604 clk_disable_unprepare(drvdata->pclkin); in si5351_i2c_probe()