Lines Matching defs:cs35l35
3 * cs35l35.c -- CS35L35 ALSA SoC audio driver
32 #include <sound/cs35l35.h>
36 #include "cs35l35.h"
161 static void cs35l35_reset(struct cs35l35_private *cs35l35)
163 gpiod_set_value_cansleep(cs35l35->reset_gpio, 0);
165 gpiod_set_value_cansleep(cs35l35->reset_gpio, 1);
169 static int cs35l35_wait_for_pdn(struct cs35l35_private *cs35l35)
173 if (cs35l35->pdata.ext_bst) {
178 reinit_completion(&cs35l35->pdn_done);
180 ret = wait_for_completion_timeout(&cs35l35->pdn_done,
183 dev_err(cs35l35->dev, "PDN_DONE did not complete\n");
194 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
199 regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1,
202 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1,
205 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1,
209 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1,
212 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1,
216 regmap_update_bits(cs35l35->regmap, CS35L35_AMP_DIG_VOL_CTL,
219 ret = cs35l35_wait_for_pdn(cs35l35);
221 regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1,
225 regmap_update_bits(cs35l35->regmap, CS35L35_AMP_DIG_VOL_CTL,
240 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
246 if (cs35l35->pdata.bst_pdn_fet_on)
247 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
251 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
258 if (cs35l35->pdm_mode)
259 regmap_update_bits(cs35l35->regmap,
264 regmap_update_bits(cs35l35->regmap, CS35L35_PROTECT_CTL,
268 regmap_bulk_read(cs35l35->regmap, CS35L35_INT_STATUS_1,
273 regmap_update_bits(cs35l35->regmap, CS35L35_PROTECT_CTL,
276 if (cs35l35->pdata.bst_pdn_fet_on)
277 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
281 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
291 if (cs35l35->pdm_mode)
292 regmap_update_bits(cs35l35->regmap,
295 cs35l35->pdata.bst_vctl
369 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
373 regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1,
375 cs35l35->slave_mode = false;
378 regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1,
380 cs35l35->slave_mode = true;
388 cs35l35->i2s_mode = true;
389 cs35l35->pdm_mode = false;
392 cs35l35->pdm_mode = true;
393 cs35l35->i2s_mode = false;
470 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
471 struct classh_cfg *classh = &cs35l35->pdata.classh_algo;
478 int clk_ctl = cs35l35_get_clk_config(cs35l35->sysclk, srate);
482 cs35l35->sysclk, srate);
486 ret = regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL2,
503 ret = regmap_update_bits(cs35l35->regmap,
534 regmap_update_bits(cs35l35->regmap,
539 if (cs35l35->pdata.stereo) {
540 regmap_update_bits(cs35l35->regmap,
548 if (cs35l35->i2s_mode) {
552 if ((cs35l35->sclk / srate) % 4) {
554 cs35l35->sclk, srate);
557 sp_sclks = ((cs35l35->sclk / srate) / 4) - 1;
560 if (cs35l35->slave_mode) {
581 ret = regmap_update_bits(cs35l35->regmap,
607 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
615 regmap_update_bits(cs35l35->regmap, CS35L35_AMP_INP_DRV_CTL,
635 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
644 regmap_update_bits(cs35l35->regmap, CS35L35_AMP_INP_DRV_CTL,
655 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
658 cs35l35->sclk = freq;
678 .name = "cs35l35-pcm",
698 .name = "cs35l35-pdm",
715 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
745 cs35l35->sysclk = freq;
752 ret = regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1,
763 static int cs35l35_boost_inductor(struct cs35l35_private *cs35l35,
766 struct regmap *regmap = cs35l35->regmap;
826 dev_err(cs35l35->dev, "Invalid Inductor Value %d uH\n",
835 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component);
836 struct classh_cfg *classh = &cs35l35->pdata.classh_algo;
837 struct monitor_cfg *monitor_config = &cs35l35->pdata.mon_cfg;
841 if (cs35l35->pdata.bst_vctl)
842 regmap_update_bits(cs35l35->regmap, CS35L35_BST_CVTR_V_CTL,
844 cs35l35->pdata.bst_vctl);
846 if (cs35l35->pdata.bst_ipk)
847 regmap_update_bits(cs35l35->regmap, CS35L35_BST_PEAK_I,
849 cs35l35->pdata.bst_ipk <<
852 ret = cs35l35_boost_inductor(cs35l35, cs35l35->pdata.boost_ind);
856 if (cs35l35->pdata.gain_zc)
857 regmap_update_bits(cs35l35->regmap, CS35L35_PROTECT_CTL,
859 cs35l35->pdata.gain_zc <<
862 if (cs35l35->pdata.aud_channel)
863 regmap_update_bits(cs35l35->regmap,
866 cs35l35->pdata.aud_channel <<
869 if (cs35l35->pdata.stereo) {
870 regmap_update_bits(cs35l35->regmap,
873 cs35l35->pdata.adv_channel <<
875 if (cs35l35->pdata.shared_bst)
876 regmap_update_bits(cs35l35->regmap, CS35L35_CLASS_H_CTL,
885 if (cs35l35->pdata.sp_drv_str)
886 regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1,
888 cs35l35->pdata.sp_drv_str <<
890 if (cs35l35->pdata.sp_drv_unused)
891 regmap_update_bits(cs35l35->regmap, CS35L35_SP_FMT_CTL3,
893 cs35l35->pdata.sp_drv_unused <<
898 regmap_update_bits(cs35l35->regmap,
904 regmap_update_bits(cs35l35->regmap,
910 regmap_update_bits(cs35l35->regmap,
916 regmap_update_bits(cs35l35->regmap,
922 regmap_update_bits(cs35l35->regmap,
928 regmap_update_bits(cs35l35->regmap,
934 regmap_update_bits(cs35l35->regmap,
940 regmap_update_bits(cs35l35->regmap,
946 regmap_update_bits(cs35l35->regmap,
952 regmap_update_bits(cs35l35->regmap,
958 regmap_update_bits(cs35l35->regmap,
967 regmap_update_bits(cs35l35->regmap,
972 regmap_update_bits(cs35l35->regmap,
977 regmap_update_bits(cs35l35->regmap,
984 regmap_update_bits(cs35l35->regmap,
989 regmap_update_bits(cs35l35->regmap,
994 regmap_update_bits(cs35l35->regmap,
999 regmap_update_bits(cs35l35->regmap,
1006 regmap_update_bits(cs35l35->regmap,
1011 regmap_update_bits(cs35l35->regmap,
1016 regmap_update_bits(cs35l35->regmap,
1023 regmap_update_bits(cs35l35->regmap,
1028 regmap_update_bits(cs35l35->regmap,
1033 regmap_update_bits(cs35l35->regmap,
1040 regmap_update_bits(cs35l35->regmap,
1045 regmap_update_bits(cs35l35->regmap,
1050 regmap_update_bits(cs35l35->regmap,
1057 regmap_update_bits(cs35l35->regmap,
1062 regmap_update_bits(cs35l35->regmap,
1067 regmap_update_bits(cs35l35->regmap,
1110 struct cs35l35_private *cs35l35 = data;
1115 regmap_read(cs35l35->regmap, CS35L35_INT_STATUS_4, &sticky4);
1116 regmap_read(cs35l35->regmap, CS35L35_INT_STATUS_3, &sticky3);
1117 regmap_read(cs35l35->regmap, CS35L35_INT_STATUS_2, &sticky2);
1118 regmap_read(cs35l35->regmap, CS35L35_INT_STATUS_1, &sticky1);
1120 regmap_read(cs35l35->regmap, CS35L35_INT_MASK_4, &mask4);
1121 regmap_read(cs35l35->regmap, CS35L35_INT_MASK_3, &mask3);
1122 regmap_read(cs35l35->regmap, CS35L35_INT_MASK_2, &mask2);
1123 regmap_read(cs35l35->regmap, CS35L35_INT_MASK_1, &mask1);
1131 complete(&cs35l35->pdn_done);
1134 regmap_read(cs35l35->regmap, CS35L35_INT_STATUS_1, ¤t1);
1138 dev_crit(cs35l35->dev, "Calibration Error\n");
1143 regmap_update_bits(cs35l35->regmap,
1146 regmap_update_bits(cs35l35->regmap,
1150 regmap_update_bits(cs35l35->regmap,
1157 dev_crit(cs35l35->dev, "AMP Short Error\n");
1160 dev_dbg(cs35l35->dev, "Amp short error release\n");
1161 regmap_update_bits(cs35l35->regmap,
1164 regmap_update_bits(cs35l35->regmap,
1168 regmap_update_bits(cs35l35->regmap,
1175 dev_warn(cs35l35->dev, "Over temperature warning\n");
1179 dev_dbg(cs35l35->dev, "Over temperature warn release\n");
1180 regmap_update_bits(cs35l35->regmap,
1183 regmap_update_bits(cs35l35->regmap,
1187 regmap_update_bits(cs35l35->regmap,
1194 dev_crit(cs35l35->dev, "Over temperature error\n");
1197 dev_dbg(cs35l35->dev, "Over temperature error release\n");
1198 regmap_update_bits(cs35l35->regmap,
1201 regmap_update_bits(cs35l35->regmap,
1205 regmap_update_bits(cs35l35->regmap,
1212 dev_crit(cs35l35->dev, "VBST error: powering off!\n");
1213 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
1215 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1,
1220 dev_crit(cs35l35->dev, "LBST error: powering off!\n");
1221 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
1223 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1,
1228 dev_dbg(cs35l35->dev, "Error: Reactive Brownout\n");
1231 dev_dbg(cs35l35->dev, "Error: VMON overflow\n");
1234 dev_dbg(cs35l35->dev, "Error: IMON overflow\n");
1472 struct cs35l35_private *cs35l35;
1480 cs35l35 = devm_kzalloc(dev, sizeof(struct cs35l35_private), GFP_KERNEL);
1481 if (!cs35l35)
1484 cs35l35->dev = dev;
1486 i2c_set_clientdata(i2c_client, cs35l35);
1487 cs35l35->regmap = devm_regmap_init_i2c(i2c_client, &cs35l35_regmap);
1488 if (IS_ERR(cs35l35->regmap)) {
1489 ret = PTR_ERR(cs35l35->regmap);
1495 cs35l35->supplies[i].supply = cs35l35_supplies[i];
1497 cs35l35->num_supplies = ARRAY_SIZE(cs35l35_supplies);
1499 ret = devm_regulator_bulk_get(dev, cs35l35->num_supplies,
1500 cs35l35->supplies);
1507 cs35l35->pdata = *pdata;
1519 cs35l35->pdata = *pdata;
1522 ret = regulator_bulk_enable(cs35l35->num_supplies,
1523 cs35l35->supplies);
1530 cs35l35->reset_gpio = devm_gpiod_get_optional(dev, "reset",
1532 if (IS_ERR(cs35l35->reset_gpio)) {
1533 ret = PTR_ERR(cs35l35->reset_gpio);
1534 cs35l35->reset_gpio = NULL;
1544 cs35l35_reset(cs35l35);
1546 init_completion(&cs35l35->pdn_done);
1550 IRQF_SHARED, "cs35l35", cs35l35);
1556 ret = regmap_read(cs35l35->regmap, CS35L35_DEVID_AB, ®);
1559 ret = regmap_read(cs35l35->regmap, CS35L35_DEVID_CD, ®);
1561 ret = regmap_read(cs35l35->regmap, CS35L35_DEVID_E, ®);
1571 ret = regmap_read(cs35l35->regmap, CS35L35_REV_ID, ®);
1577 ret = regmap_register_patch(cs35l35->regmap, cs35l35_errata_patch,
1588 regmap_write(cs35l35->regmap, CS35L35_INT_MASK_1,
1590 regmap_write(cs35l35->regmap, CS35L35_INT_MASK_2,
1592 regmap_write(cs35l35->regmap, CS35L35_INT_MASK_3,
1594 regmap_write(cs35l35->regmap, CS35L35_INT_MASK_4,
1597 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
1601 if (cs35l35->pdata.bst_pdn_fet_on)
1602 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
1606 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2,
1610 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL3,
1614 regmap_update_bits(cs35l35->regmap, CS35L35_PROTECT_CTL,
1627 regulator_bulk_disable(cs35l35->num_supplies,
1628 cs35l35->supplies);
1629 gpiod_set_value_cansleep(cs35l35->reset_gpio, 0);
1636 struct cs35l35_private *cs35l35 = i2c_get_clientdata(i2c_client);
1638 regulator_bulk_disable(cs35l35->num_supplies, cs35l35->supplies);
1639 gpiod_set_value_cansleep(cs35l35->reset_gpio, 0);
1645 {.compatible = "cirrus,cs35l35"},
1651 {"cs35l35", 0},
1659 .name = "cs35l35",