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()
561 static int _si5351_msynth_reparent(struct si5351_driver_data *drvdata, in _si5351_msynth_reparent() argument
570 si5351_set_bits(drvdata, SI5351_CLK0_CTRL + num, SI5351_CLK_PLL_SELECT, in _si5351_msynth_reparent()
582 val = si5351_reg_read(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num); in si5351_msynth_get_parent()
592 return _si5351_msynth_reparent(hwdata->drvdata, hwdata->num, in si5351_msynth_set_parent()
607 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()
734 dev_dbg(&hwdata->drvdata->client->dev, in si5351_msynth_round_rate()
751 si5351_write_parameters(hwdata->drvdata, reg, &hwdata->params); in si5351_msynth_set_rate()
758 si5351_set_bits(hwdata->drvdata, reg + 2, in si5351_msynth_set_rate()
761 si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num, in si5351_msynth_set_rate()
766 dev_dbg(&hwdata->drvdata->client->dev, in si5351_msynth_set_rate()
786 static int _si5351_clkout_reparent(struct si5351_driver_data *drvdata, in _si5351_clkout_reparent() argument
809 if (drvdata->variant != SI5351_VARIANT_C) in _si5351_clkout_reparent()
818 si5351_set_bits(drvdata, SI5351_CLK0_CTRL + num, in _si5351_clkout_reparent()
824 struct si5351_driver_data *drvdata, int num, in _si5351_clkout_set_drive_strength() argument
849 si5351_set_bits(drvdata, SI5351_CLK0_CTRL + num, in _si5351_clkout_set_drive_strength()
855 struct si5351_driver_data *drvdata, int num, in _si5351_clkout_set_disable_state() argument
884 si5351_set_bits(drvdata, reg, mask, val << shift); in _si5351_clkout_set_disable_state()
894 si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num, in si5351_clkout_prepare()
896 si5351_set_bits(hwdata->drvdata, SI5351_OUTPUT_ENABLE_CTRL, in si5351_clkout_prepare()
906 si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num, in si5351_clkout_unprepare()
908 si5351_set_bits(hwdata->drvdata, SI5351_OUTPUT_ENABLE_CTRL, in si5351_clkout_unprepare()
919 val = si5351_reg_read(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num); in si5351_clkout_get_parent()
959 return _si5351_clkout_reparent(hwdata->drvdata, hwdata->num, parent); in si5351_clkout_set_parent()
975 rdiv = si5351_reg_read(hwdata->drvdata, reg); in si5351_clkout_recalc_rate()
1031 dev_dbg(&hwdata->drvdata->client->dev, in si5351_clkout_round_rate()
1063 si5351_set_bits(hwdata->drvdata, SI5351_CLK6_7_OUTPUT_DIVIDER, in si5351_clkout_set_rate()
1067 si5351_set_bits(hwdata->drvdata, SI5351_CLK6_7_OUTPUT_DIVIDER, in si5351_clkout_set_rate()
1072 si5351_set_bits(hwdata->drvdata, in si5351_clkout_set_rate()
1079 si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num, in si5351_clkout_set_rate()
1082 dev_dbg(&hwdata->drvdata->client->dev, in si5351_clkout_set_rate()
1300 struct si5351_driver_data *drvdata; in si5351_i2c_probe() local
1315 drvdata = devm_kzalloc(&client->dev, sizeof(*drvdata), GFP_KERNEL); in si5351_i2c_probe()
1316 if (drvdata == NULL) { in si5351_i2c_probe()
1321 i2c_set_clientdata(client, drvdata); in si5351_i2c_probe()
1322 drvdata->client = client; in si5351_i2c_probe()
1323 drvdata->variant = variant; in si5351_i2c_probe()
1324 drvdata->pxtal = devm_clk_get(&client->dev, "xtal"); in si5351_i2c_probe()
1325 drvdata->pclkin = devm_clk_get(&client->dev, "clkin"); in si5351_i2c_probe()
1327 if (PTR_ERR(drvdata->pxtal) == -EPROBE_DEFER || in si5351_i2c_probe()
1328 PTR_ERR(drvdata->pclkin) == -EPROBE_DEFER) in si5351_i2c_probe()
1335 if (IS_ERR(drvdata->pxtal) && in si5351_i2c_probe()
1336 (drvdata->variant != SI5351_VARIANT_C || IS_ERR(drvdata->pclkin))) { in si5351_i2c_probe()
1341 drvdata->regmap = devm_regmap_init_i2c(client, &si5351_regmap_config); in si5351_i2c_probe()
1342 if (IS_ERR(drvdata->regmap)) { in si5351_i2c_probe()
1344 return PTR_ERR(drvdata->regmap); in si5351_i2c_probe()
1348 si5351_reg_write(drvdata, SI5351_INTERRUPT_MASK, 0xf0); in si5351_i2c_probe()
1350 if (drvdata->variant != SI5351_VARIANT_C) in si5351_i2c_probe()
1351 si5351_set_bits(drvdata, SI5351_PLL_INPUT_SOURCE, in si5351_i2c_probe()
1356 ret = _si5351_pll_reparent(drvdata, n, pdata->pll_src[n]); in si5351_i2c_probe()
1366 ret = _si5351_msynth_reparent(drvdata, n, in si5351_i2c_probe()
1375 ret = _si5351_clkout_reparent(drvdata, n, in si5351_i2c_probe()
1384 ret = _si5351_clkout_set_drive_strength(drvdata, n, in si5351_i2c_probe()
1393 ret = _si5351_clkout_set_disable_state(drvdata, n, in si5351_i2c_probe()
1403 if (!IS_ERR(drvdata->pxtal)) in si5351_i2c_probe()
1404 clk_prepare_enable(drvdata->pxtal); in si5351_i2c_probe()
1405 if (!IS_ERR(drvdata->pclkin)) in si5351_i2c_probe()
1406 clk_prepare_enable(drvdata->pclkin); in si5351_i2c_probe()
1413 if (!IS_ERR(drvdata->pxtal)) { in si5351_i2c_probe()
1414 drvdata->pxtal_name = __clk_get_name(drvdata->pxtal); in si5351_i2c_probe()
1415 init.parent_names = &drvdata->pxtal_name; in si5351_i2c_probe()
1418 drvdata->xtal.init = &init; in si5351_i2c_probe()
1419 clk = devm_clk_register(&client->dev, &drvdata->xtal); in si5351_i2c_probe()
1427 if (drvdata->variant == SI5351_VARIANT_C) { in si5351_i2c_probe()
1431 if (!IS_ERR(drvdata->pclkin)) { in si5351_i2c_probe()
1432 drvdata->pclkin_name = __clk_get_name(drvdata->pclkin); in si5351_i2c_probe()
1433 init.parent_names = &drvdata->pclkin_name; in si5351_i2c_probe()
1436 drvdata->clkin.init = &init; in si5351_i2c_probe()
1437 clk = devm_clk_register(&client->dev, &drvdata->clkin); in si5351_i2c_probe()
1447 num_parents = (drvdata->variant == SI5351_VARIANT_C) ? 2 : 1; in si5351_i2c_probe()
1452 drvdata->pll[0].num = 0; in si5351_i2c_probe()
1453 drvdata->pll[0].drvdata = drvdata; in si5351_i2c_probe()
1454 drvdata->pll[0].hw.init = &init; in si5351_i2c_probe()
1461 clk = devm_clk_register(&client->dev, &drvdata->pll[0].hw); in si5351_i2c_probe()
1469 drvdata->pll[1].num = 1; in si5351_i2c_probe()
1470 drvdata->pll[1].drvdata = drvdata; in si5351_i2c_probe()
1471 drvdata->pll[1].hw.init = &init; in si5351_i2c_probe()
1473 if (drvdata->variant == SI5351_VARIANT_B) { in si5351_i2c_probe()
1486 clk = devm_clk_register(&client->dev, &drvdata->pll[1].hw); in si5351_i2c_probe()
1494 num_clocks = (drvdata->variant == SI5351_VARIANT_A3) ? 3 : 8; in si5351_i2c_probe()
1496 if (drvdata->variant == SI5351_VARIANT_B) in si5351_i2c_probe()
1501 drvdata->msynth = devm_kzalloc(&client->dev, num_clocks * in si5351_i2c_probe()
1502 sizeof(*drvdata->msynth), GFP_KERNEL); in si5351_i2c_probe()
1503 drvdata->clkout = devm_kzalloc(&client->dev, num_clocks * in si5351_i2c_probe()
1504 sizeof(*drvdata->clkout), GFP_KERNEL); in si5351_i2c_probe()
1506 drvdata->onecell.clk_num = num_clocks; in si5351_i2c_probe()
1507 drvdata->onecell.clks = devm_kzalloc(&client->dev, in si5351_i2c_probe()
1508 num_clocks * sizeof(*drvdata->onecell.clks), GFP_KERNEL); in si5351_i2c_probe()
1510 if (WARN_ON(!drvdata->msynth || !drvdata->clkout || in si5351_i2c_probe()
1511 !drvdata->onecell.clks)) { in si5351_i2c_probe()
1517 drvdata->msynth[n].num = n; in si5351_i2c_probe()
1518 drvdata->msynth[n].drvdata = drvdata; in si5351_i2c_probe()
1519 drvdata->msynth[n].hw.init = &init; in si5351_i2c_probe()
1528 clk = devm_clk_register(&client->dev, &drvdata->msynth[n].hw); in si5351_i2c_probe()
1537 num_parents = (drvdata->variant == SI5351_VARIANT_C) ? 4 : 3; in si5351_i2c_probe()
1545 drvdata->clkout[n].num = n; in si5351_i2c_probe()
1546 drvdata->clkout[n].drvdata = drvdata; in si5351_i2c_probe()
1547 drvdata->clkout[n].hw.init = &init; in si5351_i2c_probe()
1556 clk = devm_clk_register(&client->dev, &drvdata->clkout[n].hw); in si5351_i2c_probe()
1563 drvdata->onecell.clks[n] = clk; in si5351_i2c_probe()
1577 &drvdata->onecell); in si5351_i2c_probe()
1586 if (!IS_ERR(drvdata->pxtal)) in si5351_i2c_probe()
1587 clk_disable_unprepare(drvdata->pxtal); in si5351_i2c_probe()
1588 if (!IS_ERR(drvdata->pclkin)) in si5351_i2c_probe()
1589 clk_disable_unprepare(drvdata->pclkin); in si5351_i2c_probe()