Lines Matching defs:drvdata

44 	struct si5351_driver_data	*drvdata;
83 static inline u8 si5351_reg_read(struct si5351_driver_data *drvdata, u8 reg)
88 ret = regmap_read(drvdata->regmap, reg, &val);
90 dev_err(&drvdata->client->dev,
98 static inline int si5351_bulk_read(struct si5351_driver_data *drvdata,
101 return regmap_bulk_read(drvdata->regmap, reg, buf, count);
104 static inline int si5351_reg_write(struct si5351_driver_data *drvdata,
107 return regmap_write(drvdata->regmap, reg, val);
110 static inline int si5351_bulk_write(struct si5351_driver_data *drvdata,
113 return regmap_raw_write(drvdata->regmap, reg, buf, count);
116 static inline int si5351_set_bits(struct si5351_driver_data *drvdata,
119 return regmap_update_bits(drvdata->regmap, reg, mask, val);
129 static void si5351_read_parameters(struct si5351_driver_data *drvdata,
137 buf[0] = si5351_reg_read(drvdata, reg);
143 si5351_bulk_read(drvdata, reg, SI5351_PARAMETERS_LENGTH, buf);
151 static void si5351_write_parameters(struct si5351_driver_data *drvdata,
160 si5351_reg_write(drvdata, reg, buf[0]);
166 buf[2] = si5351_reg_read(drvdata, reg + 2) & ~0x03;
174 si5351_bulk_write(drvdata, reg, SI5351_PARAMETERS_LENGTH, buf);
220 struct si5351_driver_data *drvdata =
222 si5351_set_bits(drvdata, SI5351_FANOUT_ENABLE,
229 struct si5351_driver_data *drvdata =
231 si5351_set_bits(drvdata, SI5351_FANOUT_ENABLE,
245 struct si5351_driver_data *drvdata =
247 si5351_set_bits(drvdata, SI5351_FANOUT_ENABLE,
254 struct si5351_driver_data *drvdata =
256 si5351_set_bits(drvdata, SI5351_FANOUT_ENABLE,
268 struct si5351_driver_data *drvdata =
287 si5351_set_bits(drvdata, SI5351_PLL_INPUT_SOURCE,
290 dev_dbg(&drvdata->client->dev, "%s - clkin div = %d, rate = %lu\n",
311 dev_warn(&hwdata->drvdata->client->dev, "VXCO currently unsupported\n");
365 static int _si5351_pll_reparent(struct si5351_driver_data *drvdata,
376 if (drvdata->variant != SI5351_VARIANT_C &&
380 si5351_set_bits(drvdata, SI5351_PLL_INPUT_SOURCE, mask,
392 val = si5351_reg_read(hwdata->drvdata, SI5351_PLL_INPUT_SOURCE);
402 if (hwdata->drvdata->variant != SI5351_VARIANT_C &&
409 return _si5351_pll_reparent(hwdata->drvdata, hwdata->num,
424 si5351_read_parameters(hwdata->drvdata, reg, &hwdata->params);
436 dev_dbg(&hwdata->drvdata->client->dev,
495 dev_dbg(&hwdata->drvdata->client->dev,
510 hwdata->drvdata->client->dev.platform_data;
515 si5351_write_parameters(hwdata->drvdata, reg, &hwdata->params);
518 si5351_set_bits(hwdata->drvdata, SI5351_CLK6_CTRL + hwdata->num,
524 si5351_reg_write(hwdata->drvdata, SI5351_PLL_RESET,
528 dev_dbg(&hwdata->drvdata->client->dev,
568 static int _si5351_msynth_reparent(struct si5351_driver_data *drvdata,
577 si5351_set_bits(drvdata, SI5351_CLK0_CTRL + num, SI5351_CLK_PLL_SELECT,
589 val = si5351_reg_read(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num);
599 return _si5351_msynth_reparent(hwdata->drvdata, hwdata->num,
614 si5351_read_parameters(hwdata->drvdata, reg, &hwdata->params);
625 } else if ((si5351_reg_read(hwdata->drvdata, reg + 2) &
639 dev_dbg(&hwdata->drvdata->client->dev,
753 dev_dbg(&hwdata->drvdata->client->dev,
772 si5351_write_parameters(hwdata->drvdata, reg, &hwdata->params);
779 si5351_set_bits(hwdata->drvdata, reg + 2,
782 si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num,
787 dev_dbg(&hwdata->drvdata->client->dev,
807 static int _si5351_clkout_reparent(struct si5351_driver_data *drvdata,
830 if (drvdata->variant != SI5351_VARIANT_C)
839 si5351_set_bits(drvdata, SI5351_CLK0_CTRL + num,
845 struct si5351_driver_data *drvdata, int num,
870 si5351_set_bits(drvdata, SI5351_CLK0_CTRL + num,
876 struct si5351_driver_data *drvdata, int num,
905 si5351_set_bits(drvdata, reg, mask, val << shift);
910 static void _si5351_clkout_reset_pll(struct si5351_driver_data *drvdata, int num)
912 u8 val = si5351_reg_read(drvdata, SI5351_CLK0_CTRL + num);
924 si5351_reg_write(drvdata, SI5351_PLL_RESET, mask);
926 err = regmap_read_poll_timeout(drvdata->regmap, SI5351_PLL_RESET, v,
929 dev_err(&drvdata->client->dev, "Reset bit didn't clear\n");
931 dev_dbg(&drvdata->client->dev, "%s - %s: pll = %d\n",
932 __func__, clk_hw_get_name(&drvdata->clkout[num].hw),
941 hwdata->drvdata->client->dev.platform_data;
943 si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num,
951 _si5351_clkout_reset_pll(hwdata->drvdata, hwdata->num);
953 si5351_set_bits(hwdata->drvdata, SI5351_OUTPUT_ENABLE_CTRL,
963 si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num,
965 si5351_set_bits(hwdata->drvdata, SI5351_OUTPUT_ENABLE_CTRL,
976 val = si5351_reg_read(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num);
1016 return _si5351_clkout_reparent(hwdata->drvdata, hwdata->num, parent);
1032 rdiv = si5351_reg_read(hwdata->drvdata, reg);
1089 dev_dbg(&hwdata->drvdata->client->dev,
1122 si5351_set_bits(hwdata->drvdata, SI5351_CLK6_7_OUTPUT_DIVIDER,
1126 si5351_set_bits(hwdata->drvdata, SI5351_CLK6_7_OUTPUT_DIVIDER,
1131 si5351_set_bits(hwdata->drvdata,
1138 si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num,
1141 dev_dbg(&hwdata->drvdata->client->dev,
1395 struct si5351_driver_data *drvdata = data;
1398 if (idx >= drvdata->num_clkout) {
1403 return &drvdata->clkout[idx].hw;
1431 struct si5351_driver_data *drvdata;
1446 drvdata = devm_kzalloc(&client->dev, sizeof(*drvdata), GFP_KERNEL);
1447 if (!drvdata)
1450 i2c_set_clientdata(client, drvdata);
1451 drvdata->client = client;
1452 drvdata->variant = variant;
1453 drvdata->pxtal = devm_clk_get(&client->dev, "xtal");
1454 drvdata->pclkin = devm_clk_get(&client->dev, "clkin");
1456 if (PTR_ERR(drvdata->pxtal) == -EPROBE_DEFER ||
1457 PTR_ERR(drvdata->pclkin) == -EPROBE_DEFER)
1464 if (IS_ERR(drvdata->pxtal) &&
1465 (drvdata->variant != SI5351_VARIANT_C || IS_ERR(drvdata->pclkin))) {
1470 drvdata->regmap = devm_regmap_init_i2c(client, &si5351_regmap_config);
1471 if (IS_ERR(drvdata->regmap)) {
1473 return PTR_ERR(drvdata->regmap);
1477 si5351_reg_write(drvdata, SI5351_INTERRUPT_MASK, 0xf0);
1479 if (drvdata->variant != SI5351_VARIANT_C)
1480 si5351_set_bits(drvdata, SI5351_PLL_INPUT_SOURCE,
1485 ret = _si5351_pll_reparent(drvdata, n, pdata->pll_src[n]);
1495 ret = _si5351_msynth_reparent(drvdata, n,
1504 ret = _si5351_clkout_reparent(drvdata, n,
1513 ret = _si5351_clkout_set_drive_strength(drvdata, n,
1522 ret = _si5351_clkout_set_disable_state(drvdata, n,
1537 if (!IS_ERR(drvdata->pxtal)) {
1538 drvdata->pxtal_name = __clk_get_name(drvdata->pxtal);
1539 init.parent_names = &drvdata->pxtal_name;
1542 drvdata->xtal.init = &init;
1543 ret = devm_clk_hw_register(&client->dev, &drvdata->xtal);
1550 if (drvdata->variant == SI5351_VARIANT_C) {
1554 if (!IS_ERR(drvdata->pclkin)) {
1555 drvdata->pclkin_name = __clk_get_name(drvdata->pclkin);
1556 init.parent_names = &drvdata->pclkin_name;
1559 drvdata->clkin.init = &init;
1560 ret = devm_clk_hw_register(&client->dev, &drvdata->clkin);
1569 num_parents = (drvdata->variant == SI5351_VARIANT_C) ? 2 : 1;
1574 drvdata->pll[0].num = 0;
1575 drvdata->pll[0].drvdata = drvdata;
1576 drvdata->pll[0].hw.init = &init;
1583 ret = devm_clk_hw_register(&client->dev, &drvdata->pll[0].hw);
1590 drvdata->pll[1].num = 1;
1591 drvdata->pll[1].drvdata = drvdata;
1592 drvdata->pll[1].hw.init = &init;
1594 if (drvdata->variant == SI5351_VARIANT_B) {
1607 ret = devm_clk_hw_register(&client->dev, &drvdata->pll[1].hw);
1614 num_clocks = (drvdata->variant == SI5351_VARIANT_A3) ? 3 : 8;
1616 if (drvdata->variant == SI5351_VARIANT_B)
1621 drvdata->msynth = devm_kcalloc(&client->dev, num_clocks,
1622 sizeof(*drvdata->msynth), GFP_KERNEL);
1623 drvdata->clkout = devm_kcalloc(&client->dev, num_clocks,
1624 sizeof(*drvdata->clkout), GFP_KERNEL);
1625 drvdata->num_clkout = num_clocks;
1627 if (WARN_ON(!drvdata->msynth || !drvdata->clkout)) {
1633 drvdata->msynth[n].num = n;
1634 drvdata->msynth[n].drvdata = drvdata;
1635 drvdata->msynth[n].hw.init = &init;
1645 &drvdata->msynth[n].hw);
1653 num_parents = (drvdata->variant == SI5351_VARIANT_C) ? 4 : 3;
1661 drvdata->clkout[n].num = n;
1662 drvdata->clkout[n].drvdata = drvdata;
1663 drvdata->clkout[n].hw.init = &init;
1673 &drvdata->clkout[n].hw);
1683 ret = clk_set_rate(drvdata->clkout[n].hw.clk,
1693 drvdata);