Lines Matching defs:cs35l35

3  * cs35l35.c -- CS35L35 ALSA SoC audio driver
29 #include <sound/cs35l35.h>
32 #include "cs35l35.h"
158 static void cs35l35_reset(struct cs35l35_private *cs35l35)
160 gpiod_set_value_cansleep(cs35l35->reset_gpio, 0);
162 gpiod_set_value_cansleep(cs35l35->reset_gpio, 1);
166 static int cs35l35_wait_for_pdn(struct cs35l35_private *cs35l35)
170 if (cs35l35->pdata.ext_bst) {
175 reinit_completion(&cs35l35->pdn_done);
177 ret = wait_for_completion_timeout(&cs35l35->pdn_done,
180 dev_err(cs35l35->dev, "PDN_DONE did not complete\n");
191 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
196 regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1,
199 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1,
202 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1,
206 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1,
209 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1,
213 regmap_update_bits(cs35l35->regmap, CS35L35_AMP_DIG_VOL_CTL,
216 ret = cs35l35_wait_for_pdn(cs35l35);
218 regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1,
222 regmap_update_bits(cs35l35->regmap, CS35L35_AMP_DIG_VOL_CTL,
237 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
243 if (cs35l35->pdata.bst_pdn_fet_on)
244 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
248 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
255 if (cs35l35->pdm_mode)
256 regmap_update_bits(cs35l35->regmap,
261 regmap_update_bits(cs35l35->regmap, CS35L35_PROTECT_CTL,
265 regmap_bulk_read(cs35l35->regmap, CS35L35_INT_STATUS_1,
270 regmap_update_bits(cs35l35->regmap, CS35L35_PROTECT_CTL,
273 if (cs35l35->pdata.bst_pdn_fet_on)
274 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
278 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
288 if (cs35l35->pdm_mode)
289 regmap_update_bits(cs35l35->regmap,
292 cs35l35->pdata.bst_vctl
366 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
370 regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1,
372 cs35l35->clock_consumer = false;
375 regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1,
377 cs35l35->clock_consumer = true;
385 cs35l35->i2s_mode = true;
386 cs35l35->pdm_mode = false;
389 cs35l35->pdm_mode = true;
390 cs35l35->i2s_mode = false;
467 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
468 struct classh_cfg *classh = &cs35l35->pdata.classh_algo;
475 int clk_ctl = cs35l35_get_clk_config(cs35l35->sysclk, srate);
479 cs35l35->sysclk, srate);
483 ret = regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL2,
500 ret = regmap_update_bits(cs35l35->regmap,
531 regmap_update_bits(cs35l35->regmap,
536 if (cs35l35->pdata.stereo) {
537 regmap_update_bits(cs35l35->regmap,
545 if (cs35l35->i2s_mode) {
549 if ((cs35l35->sclk / srate) % 4) {
551 cs35l35->sclk, srate);
554 sp_sclks = ((cs35l35->sclk / srate) / 4) - 1;
557 if (cs35l35->clock_consumer) {
578 ret = regmap_update_bits(cs35l35->regmap,
604 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
612 regmap_update_bits(cs35l35->regmap, CS35L35_AMP_INP_DRV_CTL,
632 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
641 regmap_update_bits(cs35l35->regmap, CS35L35_AMP_INP_DRV_CTL,
652 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
655 cs35l35->sclk = freq;
675 .name = "cs35l35-pcm",
695 .name = "cs35l35-pdm",
712 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
742 cs35l35->sysclk = freq;
749 ret = regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1,
760 static int cs35l35_boost_inductor(struct cs35l35_private *cs35l35,
763 struct regmap *regmap = cs35l35->regmap;
823 dev_err(cs35l35->dev, "Invalid Inductor Value %d uH\n",
832 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
833 struct classh_cfg *classh = &cs35l35->pdata.classh_algo;
834 struct monitor_cfg *monitor_config = &cs35l35->pdata.mon_cfg;
838 if (cs35l35->pdata.bst_vctl)
839 regmap_update_bits(cs35l35->regmap, CS35L35_BST_CVTR_V_CTL,
841 cs35l35->pdata.bst_vctl);
843 if (cs35l35->pdata.bst_ipk)
844 regmap_update_bits(cs35l35->regmap, CS35L35_BST_PEAK_I,
846 cs35l35->pdata.bst_ipk <<
849 ret = cs35l35_boost_inductor(cs35l35, cs35l35->pdata.boost_ind);
853 if (cs35l35->pdata.gain_zc)
854 regmap_update_bits(cs35l35->regmap, CS35L35_PROTECT_CTL,
856 cs35l35->pdata.gain_zc <<
859 if (cs35l35->pdata.aud_channel)
860 regmap_update_bits(cs35l35->regmap,
863 cs35l35->pdata.aud_channel <<
866 if (cs35l35->pdata.stereo) {
867 regmap_update_bits(cs35l35->regmap,
870 cs35l35->pdata.adv_channel <<
872 if (cs35l35->pdata.shared_bst)
873 regmap_update_bits(cs35l35->regmap, CS35L35_CLASS_H_CTL,
882 if (cs35l35->pdata.sp_drv_str)
883 regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1,
885 cs35l35->pdata.sp_drv_str <<
887 if (cs35l35->pdata.sp_drv_unused)
888 regmap_update_bits(cs35l35->regmap, CS35L35_SP_FMT_CTL3,
890 cs35l35->pdata.sp_drv_unused <<
895 regmap_update_bits(cs35l35->regmap,
901 regmap_update_bits(cs35l35->regmap,
907 regmap_update_bits(cs35l35->regmap,
913 regmap_update_bits(cs35l35->regmap,
919 regmap_update_bits(cs35l35->regmap,
925 regmap_update_bits(cs35l35->regmap,
931 regmap_update_bits(cs35l35->regmap,
937 regmap_update_bits(cs35l35->regmap,
943 regmap_update_bits(cs35l35->regmap,
949 regmap_update_bits(cs35l35->regmap,
955 regmap_update_bits(cs35l35->regmap,
964 regmap_update_bits(cs35l35->regmap,
969 regmap_update_bits(cs35l35->regmap,
974 regmap_update_bits(cs35l35->regmap,
981 regmap_update_bits(cs35l35->regmap,
986 regmap_update_bits(cs35l35->regmap,
991 regmap_update_bits(cs35l35->regmap,
996 regmap_update_bits(cs35l35->regmap,
1003 regmap_update_bits(cs35l35->regmap,
1008 regmap_update_bits(cs35l35->regmap,
1013 regmap_update_bits(cs35l35->regmap,
1020 regmap_update_bits(cs35l35->regmap,
1025 regmap_update_bits(cs35l35->regmap,
1030 regmap_update_bits(cs35l35->regmap,
1037 regmap_update_bits(cs35l35->regmap,
1042 regmap_update_bits(cs35l35->regmap,
1047 regmap_update_bits(cs35l35->regmap,
1054 regmap_update_bits(cs35l35->regmap,
1059 regmap_update_bits(cs35l35->regmap,
1064 regmap_update_bits(cs35l35->regmap,
1106 struct cs35l35_private *cs35l35 = data;
1111 regmap_read(cs35l35->regmap, CS35L35_INT_STATUS_4, &sticky4);
1112 regmap_read(cs35l35->regmap, CS35L35_INT_STATUS_3, &sticky3);
1113 regmap_read(cs35l35->regmap, CS35L35_INT_STATUS_2, &sticky2);
1114 regmap_read(cs35l35->regmap, CS35L35_INT_STATUS_1, &sticky1);
1116 regmap_read(cs35l35->regmap, CS35L35_INT_MASK_4, &mask4);
1117 regmap_read(cs35l35->regmap, CS35L35_INT_MASK_3, &mask3);
1118 regmap_read(cs35l35->regmap, CS35L35_INT_MASK_2, &mask2);
1119 regmap_read(cs35l35->regmap, CS35L35_INT_MASK_1, &mask1);
1127 complete(&cs35l35->pdn_done);
1130 regmap_read(cs35l35->regmap, CS35L35_INT_STATUS_1, &current1);
1134 dev_crit(cs35l35->dev, "Calibration Error\n");
1139 regmap_update_bits(cs35l35->regmap,
1142 regmap_update_bits(cs35l35->regmap,
1146 regmap_update_bits(cs35l35->regmap,
1153 dev_crit(cs35l35->dev, "AMP Short Error\n");
1156 dev_dbg(cs35l35->dev, "Amp short error release\n");
1157 regmap_update_bits(cs35l35->regmap,
1160 regmap_update_bits(cs35l35->regmap,
1164 regmap_update_bits(cs35l35->regmap,
1171 dev_warn(cs35l35->dev, "Over temperature warning\n");
1175 dev_dbg(cs35l35->dev, "Over temperature warn release\n");
1176 regmap_update_bits(cs35l35->regmap,
1179 regmap_update_bits(cs35l35->regmap,
1183 regmap_update_bits(cs35l35->regmap,
1190 dev_crit(cs35l35->dev, "Over temperature error\n");
1193 dev_dbg(cs35l35->dev, "Over temperature error release\n");
1194 regmap_update_bits(cs35l35->regmap,
1197 regmap_update_bits(cs35l35->regmap,
1201 regmap_update_bits(cs35l35->regmap,
1208 dev_crit(cs35l35->dev, "VBST error: powering off!\n");
1209 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
1211 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1,
1216 dev_crit(cs35l35->dev, "LBST error: powering off!\n");
1217 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
1219 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1,
1224 dev_dbg(cs35l35->dev, "Error: Reactive Brownout\n");
1227 dev_dbg(cs35l35->dev, "Error: VMON overflow\n");
1230 dev_dbg(cs35l35->dev, "Error: IMON overflow\n");
1467 struct cs35l35_private *cs35l35;
1474 cs35l35 = devm_kzalloc(dev, sizeof(struct cs35l35_private), GFP_KERNEL);
1475 if (!cs35l35)
1478 cs35l35->dev = dev;
1480 i2c_set_clientdata(i2c_client, cs35l35);
1481 cs35l35->regmap = devm_regmap_init_i2c(i2c_client, &cs35l35_regmap);
1482 if (IS_ERR(cs35l35->regmap)) {
1483 ret = PTR_ERR(cs35l35->regmap);
1489 cs35l35->supplies[i].supply = cs35l35_supplies[i];
1491 cs35l35->num_supplies = ARRAY_SIZE(cs35l35_supplies);
1493 ret = devm_regulator_bulk_get(dev, cs35l35->num_supplies,
1494 cs35l35->supplies);
1501 cs35l35->pdata = *pdata;
1513 cs35l35->pdata = *pdata;
1516 ret = regulator_bulk_enable(cs35l35->num_supplies,
1517 cs35l35->supplies);
1524 cs35l35->reset_gpio = devm_gpiod_get_optional(dev, "reset",
1526 if (IS_ERR(cs35l35->reset_gpio)) {
1527 ret = PTR_ERR(cs35l35->reset_gpio);
1528 cs35l35->reset_gpio = NULL;
1538 cs35l35_reset(cs35l35);
1540 init_completion(&cs35l35->pdn_done);
1544 IRQF_SHARED, "cs35l35", cs35l35);
1550 devid = cirrus_read_device_id(cs35l35->regmap, CS35L35_DEVID_AB);
1564 ret = regmap_read(cs35l35->regmap, CS35L35_REV_ID, &reg);
1570 ret = regmap_register_patch(cs35l35->regmap, cs35l35_errata_patch,
1581 regmap_write(cs35l35->regmap, CS35L35_INT_MASK_1,
1583 regmap_write(cs35l35->regmap, CS35L35_INT_MASK_2,
1585 regmap_write(cs35l35->regmap, CS35L35_INT_MASK_3,
1587 regmap_write(cs35l35->regmap, CS35L35_INT_MASK_4,
1590 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
1594 if (cs35l35->pdata.bst_pdn_fet_on)
1595 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
1599 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
1603 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL3,
1607 regmap_update_bits(cs35l35->regmap, CS35L35_PROTECT_CTL,
1620 regulator_bulk_disable(cs35l35->num_supplies,
1621 cs35l35->supplies);
1622 gpiod_set_value_cansleep(cs35l35->reset_gpio, 0);
1629 struct cs35l35_private *cs35l35 = i2c_get_clientdata(i2c_client);
1631 regulator_bulk_disable(cs35l35->num_supplies, cs35l35->supplies);
1632 gpiod_set_value_cansleep(cs35l35->reset_gpio, 0);
1636 {.compatible = "cirrus,cs35l35"},
1642 {"cs35l35"},
1650 .name = "cs35l35",