Lines Matching refs:drvdata
44 struct si5351_driver_data *drvdata; member
83 static inline u8 si5351_reg_read(struct si5351_driver_data *drvdata, u8 reg) in si5351_reg_read() argument
88 ret = regmap_read(drvdata->regmap, reg, &val); in si5351_reg_read()
90 dev_err(&drvdata->client->dev, in si5351_reg_read()
98 static inline int si5351_bulk_read(struct si5351_driver_data *drvdata, in si5351_bulk_read() argument
101 return regmap_bulk_read(drvdata->regmap, reg, buf, count); in si5351_bulk_read()
104 static inline int si5351_reg_write(struct si5351_driver_data *drvdata, in si5351_reg_write() argument
107 return regmap_write(drvdata->regmap, reg, val); in si5351_reg_write()
110 static inline int si5351_bulk_write(struct si5351_driver_data *drvdata, in si5351_bulk_write() argument
113 return regmap_raw_write(drvdata->regmap, reg, buf, count); in si5351_bulk_write()
116 static inline int si5351_set_bits(struct si5351_driver_data *drvdata, in si5351_set_bits() argument
119 return regmap_update_bits(drvdata->regmap, reg, mask, val); in si5351_set_bits()
129 static void si5351_read_parameters(struct si5351_driver_data *drvdata, in si5351_read_parameters() argument
137 buf[0] = si5351_reg_read(drvdata, reg); in si5351_read_parameters()
143 si5351_bulk_read(drvdata, reg, SI5351_PARAMETERS_LENGTH, buf); in si5351_read_parameters()
151 static void si5351_write_parameters(struct si5351_driver_data *drvdata, in si5351_write_parameters() argument
160 si5351_reg_write(drvdata, reg, buf[0]); in si5351_write_parameters()
166 buf[2] = si5351_reg_read(drvdata, reg + 2) & ~0x03; in si5351_write_parameters()
174 si5351_bulk_write(drvdata, reg, SI5351_PARAMETERS_LENGTH, buf); in si5351_write_parameters()
220 struct si5351_driver_data *drvdata = in si5351_xtal_prepare() local
222 si5351_set_bits(drvdata, SI5351_FANOUT_ENABLE, in si5351_xtal_prepare()
229 struct si5351_driver_data *drvdata = in si5351_xtal_unprepare() local
231 si5351_set_bits(drvdata, SI5351_FANOUT_ENABLE, in si5351_xtal_unprepare()
245 struct si5351_driver_data *drvdata = in si5351_clkin_prepare() local
247 si5351_set_bits(drvdata, SI5351_FANOUT_ENABLE, in si5351_clkin_prepare()
254 struct si5351_driver_data *drvdata = in si5351_clkin_unprepare() local
256 si5351_set_bits(drvdata, SI5351_FANOUT_ENABLE, in si5351_clkin_unprepare()
268 struct si5351_driver_data *drvdata = in si5351_clkin_recalc_rate() local
287 si5351_set_bits(drvdata, SI5351_PLL_INPUT_SOURCE, in si5351_clkin_recalc_rate()
290 dev_dbg(&drvdata->client->dev, "%s - clkin div = %d, rate = %lu\n", in si5351_clkin_recalc_rate()
311 dev_warn(&hwdata->drvdata->client->dev, "VXCO currently unsupported\n"); in si5351_vxco_prepare()
365 static int _si5351_pll_reparent(struct si5351_driver_data *drvdata, in _si5351_pll_reparent() argument
376 if (drvdata->variant != SI5351_VARIANT_C && in _si5351_pll_reparent()
380 si5351_set_bits(drvdata, SI5351_PLL_INPUT_SOURCE, mask, in _si5351_pll_reparent()
392 val = si5351_reg_read(hwdata->drvdata, SI5351_PLL_INPUT_SOURCE); in si5351_pll_get_parent()
402 if (hwdata->drvdata->variant != SI5351_VARIANT_C && in si5351_pll_set_parent()
409 return _si5351_pll_reparent(hwdata->drvdata, hwdata->num, in si5351_pll_set_parent()
424 si5351_read_parameters(hwdata->drvdata, reg, &hwdata->params); in si5351_pll_recalc_rate()
436 dev_dbg(&hwdata->drvdata->client->dev, in si5351_pll_recalc_rate()
494 dev_dbg(&hwdata->drvdata->client->dev, in si5351_pll_round_rate()
511 si5351_write_parameters(hwdata->drvdata, reg, &hwdata->params); in si5351_pll_set_rate()
514 si5351_set_bits(hwdata->drvdata, SI5351_CLK6_CTRL + hwdata->num, in si5351_pll_set_rate()
519 si5351_reg_write(hwdata->drvdata, SI5351_PLL_RESET, in si5351_pll_set_rate()
523 dev_dbg(&hwdata->drvdata->client->dev, in si5351_pll_set_rate()
563 static int _si5351_msynth_reparent(struct si5351_driver_data *drvdata, in _si5351_msynth_reparent() argument
572 si5351_set_bits(drvdata, SI5351_CLK0_CTRL + num, SI5351_CLK_PLL_SELECT, in _si5351_msynth_reparent()
584 val = si5351_reg_read(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num); in si5351_msynth_get_parent()
594 return _si5351_msynth_reparent(hwdata->drvdata, hwdata->num, in si5351_msynth_set_parent()
609 si5351_read_parameters(hwdata->drvdata, reg, &hwdata->params); in si5351_msynth_recalc_rate()
620 } else if ((si5351_reg_read(hwdata->drvdata, reg + 2) & in si5351_msynth_recalc_rate()
634 dev_dbg(&hwdata->drvdata->client->dev, in si5351_msynth_recalc_rate()
747 dev_dbg(&hwdata->drvdata->client->dev, in si5351_msynth_round_rate()
764 si5351_write_parameters(hwdata->drvdata, reg, &hwdata->params); in si5351_msynth_set_rate()
771 si5351_set_bits(hwdata->drvdata, reg + 2, in si5351_msynth_set_rate()
774 si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num, in si5351_msynth_set_rate()
779 dev_dbg(&hwdata->drvdata->client->dev, in si5351_msynth_set_rate()
799 static int _si5351_clkout_reparent(struct si5351_driver_data *drvdata, in _si5351_clkout_reparent() argument
822 if (drvdata->variant != SI5351_VARIANT_C) in _si5351_clkout_reparent()
831 si5351_set_bits(drvdata, SI5351_CLK0_CTRL + num, in _si5351_clkout_reparent()
837 struct si5351_driver_data *drvdata, int num, in _si5351_clkout_set_drive_strength() argument
862 si5351_set_bits(drvdata, SI5351_CLK0_CTRL + num, in _si5351_clkout_set_drive_strength()
868 struct si5351_driver_data *drvdata, int num, in _si5351_clkout_set_disable_state() argument
897 si5351_set_bits(drvdata, reg, mask, val << shift); in _si5351_clkout_set_disable_state()
902 static void _si5351_clkout_reset_pll(struct si5351_driver_data *drvdata, int num) in _si5351_clkout_reset_pll() argument
904 u8 val = si5351_reg_read(drvdata, SI5351_CLK0_CTRL + num); in _si5351_clkout_reset_pll()
916 si5351_reg_write(drvdata, SI5351_PLL_RESET, mask); in _si5351_clkout_reset_pll()
918 err = regmap_read_poll_timeout(drvdata->regmap, SI5351_PLL_RESET, v, in _si5351_clkout_reset_pll()
921 dev_err(&drvdata->client->dev, "Reset bit didn't clear\n"); in _si5351_clkout_reset_pll()
923 dev_dbg(&drvdata->client->dev, "%s - %s: pll = %d\n", in _si5351_clkout_reset_pll()
924 __func__, clk_hw_get_name(&drvdata->clkout[num].hw), in _si5351_clkout_reset_pll()
933 hwdata->drvdata->client->dev.platform_data; in si5351_clkout_prepare()
935 si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num, in si5351_clkout_prepare()
943 _si5351_clkout_reset_pll(hwdata->drvdata, hwdata->num); in si5351_clkout_prepare()
945 si5351_set_bits(hwdata->drvdata, SI5351_OUTPUT_ENABLE_CTRL, in si5351_clkout_prepare()
955 si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num, in si5351_clkout_unprepare()
957 si5351_set_bits(hwdata->drvdata, SI5351_OUTPUT_ENABLE_CTRL, in si5351_clkout_unprepare()
968 val = si5351_reg_read(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num); in si5351_clkout_get_parent()
1008 return _si5351_clkout_reparent(hwdata->drvdata, hwdata->num, parent); in si5351_clkout_set_parent()
1024 rdiv = si5351_reg_read(hwdata->drvdata, reg); in si5351_clkout_recalc_rate()
1080 dev_dbg(&hwdata->drvdata->client->dev, in si5351_clkout_round_rate()
1112 si5351_set_bits(hwdata->drvdata, SI5351_CLK6_7_OUTPUT_DIVIDER, in si5351_clkout_set_rate()
1116 si5351_set_bits(hwdata->drvdata, SI5351_CLK6_7_OUTPUT_DIVIDER, in si5351_clkout_set_rate()
1121 si5351_set_bits(hwdata->drvdata, in si5351_clkout_set_rate()
1128 si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num, in si5351_clkout_set_rate()
1131 dev_dbg(&hwdata->drvdata->client->dev, in si5351_clkout_set_rate()
1347 struct si5351_driver_data *drvdata = data; in si53351_of_clk_get() local
1350 if (idx >= drvdata->num_clkout) { in si53351_of_clk_get()
1355 return &drvdata->clkout[idx].hw; in si53351_of_clk_get()
1375 struct si5351_driver_data *drvdata; in si5351_i2c_probe() local
1389 drvdata = devm_kzalloc(&client->dev, sizeof(*drvdata), GFP_KERNEL); in si5351_i2c_probe()
1390 if (!drvdata) in si5351_i2c_probe()
1393 i2c_set_clientdata(client, drvdata); in si5351_i2c_probe()
1394 drvdata->client = client; in si5351_i2c_probe()
1395 drvdata->variant = variant; in si5351_i2c_probe()
1396 drvdata->pxtal = devm_clk_get(&client->dev, "xtal"); in si5351_i2c_probe()
1397 drvdata->pclkin = devm_clk_get(&client->dev, "clkin"); in si5351_i2c_probe()
1399 if (PTR_ERR(drvdata->pxtal) == -EPROBE_DEFER || in si5351_i2c_probe()
1400 PTR_ERR(drvdata->pclkin) == -EPROBE_DEFER) in si5351_i2c_probe()
1407 if (IS_ERR(drvdata->pxtal) && in si5351_i2c_probe()
1408 (drvdata->variant != SI5351_VARIANT_C || IS_ERR(drvdata->pclkin))) { in si5351_i2c_probe()
1413 drvdata->regmap = devm_regmap_init_i2c(client, &si5351_regmap_config); in si5351_i2c_probe()
1414 if (IS_ERR(drvdata->regmap)) { in si5351_i2c_probe()
1416 return PTR_ERR(drvdata->regmap); in si5351_i2c_probe()
1420 si5351_reg_write(drvdata, SI5351_INTERRUPT_MASK, 0xf0); in si5351_i2c_probe()
1422 if (drvdata->variant != SI5351_VARIANT_C) in si5351_i2c_probe()
1423 si5351_set_bits(drvdata, SI5351_PLL_INPUT_SOURCE, in si5351_i2c_probe()
1428 ret = _si5351_pll_reparent(drvdata, n, pdata->pll_src[n]); in si5351_i2c_probe()
1438 ret = _si5351_msynth_reparent(drvdata, n, in si5351_i2c_probe()
1447 ret = _si5351_clkout_reparent(drvdata, n, in si5351_i2c_probe()
1456 ret = _si5351_clkout_set_drive_strength(drvdata, n, in si5351_i2c_probe()
1465 ret = _si5351_clkout_set_disable_state(drvdata, n, in si5351_i2c_probe()
1480 if (!IS_ERR(drvdata->pxtal)) { in si5351_i2c_probe()
1481 drvdata->pxtal_name = __clk_get_name(drvdata->pxtal); in si5351_i2c_probe()
1482 init.parent_names = &drvdata->pxtal_name; in si5351_i2c_probe()
1485 drvdata->xtal.init = &init; in si5351_i2c_probe()
1486 ret = devm_clk_hw_register(&client->dev, &drvdata->xtal); in si5351_i2c_probe()
1493 if (drvdata->variant == SI5351_VARIANT_C) { in si5351_i2c_probe()
1497 if (!IS_ERR(drvdata->pclkin)) { in si5351_i2c_probe()
1498 drvdata->pclkin_name = __clk_get_name(drvdata->pclkin); in si5351_i2c_probe()
1499 init.parent_names = &drvdata->pclkin_name; in si5351_i2c_probe()
1502 drvdata->clkin.init = &init; in si5351_i2c_probe()
1503 ret = devm_clk_hw_register(&client->dev, &drvdata->clkin); in si5351_i2c_probe()
1512 num_parents = (drvdata->variant == SI5351_VARIANT_C) ? 2 : 1; in si5351_i2c_probe()
1517 drvdata->pll[0].num = 0; in si5351_i2c_probe()
1518 drvdata->pll[0].drvdata = drvdata; in si5351_i2c_probe()
1519 drvdata->pll[0].hw.init = &init; in si5351_i2c_probe()
1526 ret = devm_clk_hw_register(&client->dev, &drvdata->pll[0].hw); in si5351_i2c_probe()
1533 drvdata->pll[1].num = 1; in si5351_i2c_probe()
1534 drvdata->pll[1].drvdata = drvdata; in si5351_i2c_probe()
1535 drvdata->pll[1].hw.init = &init; in si5351_i2c_probe()
1537 if (drvdata->variant == SI5351_VARIANT_B) { in si5351_i2c_probe()
1550 ret = devm_clk_hw_register(&client->dev, &drvdata->pll[1].hw); in si5351_i2c_probe()
1557 num_clocks = (drvdata->variant == SI5351_VARIANT_A3) ? 3 : 8; in si5351_i2c_probe()
1559 if (drvdata->variant == SI5351_VARIANT_B) in si5351_i2c_probe()
1564 drvdata->msynth = devm_kcalloc(&client->dev, num_clocks, in si5351_i2c_probe()
1565 sizeof(*drvdata->msynth), GFP_KERNEL); in si5351_i2c_probe()
1566 drvdata->clkout = devm_kcalloc(&client->dev, num_clocks, in si5351_i2c_probe()
1567 sizeof(*drvdata->clkout), GFP_KERNEL); in si5351_i2c_probe()
1568 drvdata->num_clkout = num_clocks; in si5351_i2c_probe()
1570 if (WARN_ON(!drvdata->msynth || !drvdata->clkout)) { in si5351_i2c_probe()
1576 drvdata->msynth[n].num = n; in si5351_i2c_probe()
1577 drvdata->msynth[n].drvdata = drvdata; in si5351_i2c_probe()
1578 drvdata->msynth[n].hw.init = &init; in si5351_i2c_probe()
1588 &drvdata->msynth[n].hw); in si5351_i2c_probe()
1596 num_parents = (drvdata->variant == SI5351_VARIANT_C) ? 4 : 3; in si5351_i2c_probe()
1604 drvdata->clkout[n].num = n; in si5351_i2c_probe()
1605 drvdata->clkout[n].drvdata = drvdata; in si5351_i2c_probe()
1606 drvdata->clkout[n].hw.init = &init; in si5351_i2c_probe()
1616 &drvdata->clkout[n].hw); in si5351_i2c_probe()
1626 ret = clk_set_rate(drvdata->clkout[n].hw.clk, in si5351_i2c_probe()
1636 drvdata); in si5351_i2c_probe()