Lines Matching refs:cs35l35

161 static void cs35l35_reset(struct cs35l35_private *cs35l35)  in cs35l35_reset()  argument
163 gpiod_set_value_cansleep(cs35l35->reset_gpio, 0); in cs35l35_reset()
165 gpiod_set_value_cansleep(cs35l35->reset_gpio, 1); in cs35l35_reset()
169 static int cs35l35_wait_for_pdn(struct cs35l35_private *cs35l35) in cs35l35_wait_for_pdn() argument
173 if (cs35l35->pdata.ext_bst) { in cs35l35_wait_for_pdn()
178 reinit_completion(&cs35l35->pdn_done); in cs35l35_wait_for_pdn()
180 ret = wait_for_completion_timeout(&cs35l35->pdn_done, in cs35l35_wait_for_pdn()
183 dev_err(cs35l35->dev, "PDN_DONE did not complete\n"); in cs35l35_wait_for_pdn()
194 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component); in cs35l35_sdin_event() local
199 regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1, in cs35l35_sdin_event()
202 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1, in cs35l35_sdin_event()
205 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1, in cs35l35_sdin_event()
209 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1, in cs35l35_sdin_event()
212 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1, in cs35l35_sdin_event()
216 regmap_update_bits(cs35l35->regmap, CS35L35_AMP_DIG_VOL_CTL, in cs35l35_sdin_event()
219 ret = cs35l35_wait_for_pdn(cs35l35); in cs35l35_sdin_event()
221 regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1, in cs35l35_sdin_event()
225 regmap_update_bits(cs35l35->regmap, CS35L35_AMP_DIG_VOL_CTL, in cs35l35_sdin_event()
240 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component); in cs35l35_main_amp_event() local
246 if (cs35l35->pdata.bst_pdn_fet_on) in cs35l35_main_amp_event()
247 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2, in cs35l35_main_amp_event()
251 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2, in cs35l35_main_amp_event()
258 if (cs35l35->pdm_mode) in cs35l35_main_amp_event()
259 regmap_update_bits(cs35l35->regmap, in cs35l35_main_amp_event()
264 regmap_update_bits(cs35l35->regmap, CS35L35_PROTECT_CTL, in cs35l35_main_amp_event()
268 regmap_bulk_read(cs35l35->regmap, CS35L35_INT_STATUS_1, in cs35l35_main_amp_event()
273 regmap_update_bits(cs35l35->regmap, CS35L35_PROTECT_CTL, in cs35l35_main_amp_event()
276 if (cs35l35->pdata.bst_pdn_fet_on) in cs35l35_main_amp_event()
277 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2, in cs35l35_main_amp_event()
281 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2, in cs35l35_main_amp_event()
291 if (cs35l35->pdm_mode) in cs35l35_main_amp_event()
292 regmap_update_bits(cs35l35->regmap, in cs35l35_main_amp_event()
295 cs35l35->pdata.bst_vctl in cs35l35_main_amp_event()
369 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component); in cs35l35_set_dai_fmt() local
373 regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1, in cs35l35_set_dai_fmt()
375 cs35l35->clock_consumer = false; in cs35l35_set_dai_fmt()
378 regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1, in cs35l35_set_dai_fmt()
380 cs35l35->clock_consumer = true; in cs35l35_set_dai_fmt()
388 cs35l35->i2s_mode = true; in cs35l35_set_dai_fmt()
389 cs35l35->pdm_mode = false; in cs35l35_set_dai_fmt()
392 cs35l35->pdm_mode = true; in cs35l35_set_dai_fmt()
393 cs35l35->i2s_mode = false; in cs35l35_set_dai_fmt()
470 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component); in cs35l35_hw_params() local
471 struct classh_cfg *classh = &cs35l35->pdata.classh_algo; in cs35l35_hw_params()
478 int clk_ctl = cs35l35_get_clk_config(cs35l35->sysclk, srate); in cs35l35_hw_params()
482 cs35l35->sysclk, srate); in cs35l35_hw_params()
486 ret = regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL2, in cs35l35_hw_params()
503 ret = regmap_update_bits(cs35l35->regmap, in cs35l35_hw_params()
534 regmap_update_bits(cs35l35->regmap, in cs35l35_hw_params()
539 if (cs35l35->pdata.stereo) { in cs35l35_hw_params()
540 regmap_update_bits(cs35l35->regmap, in cs35l35_hw_params()
548 if (cs35l35->i2s_mode) { in cs35l35_hw_params()
552 if ((cs35l35->sclk / srate) % 4) { in cs35l35_hw_params()
554 cs35l35->sclk, srate); in cs35l35_hw_params()
557 sp_sclks = ((cs35l35->sclk / srate) / 4) - 1; in cs35l35_hw_params()
560 if (cs35l35->clock_consumer) { in cs35l35_hw_params()
581 ret = regmap_update_bits(cs35l35->regmap, in cs35l35_hw_params()
607 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component); in cs35l35_pcm_startup() local
615 regmap_update_bits(cs35l35->regmap, CS35L35_AMP_INP_DRV_CTL, in cs35l35_pcm_startup()
635 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component); in cs35l35_pdm_startup() local
644 regmap_update_bits(cs35l35->regmap, CS35L35_AMP_INP_DRV_CTL, in cs35l35_pdm_startup()
655 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component); in cs35l35_dai_set_sysclk() local
658 cs35l35->sclk = freq; in cs35l35_dai_set_sysclk()
715 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component); in cs35l35_component_set_sysclk() local
745 cs35l35->sysclk = freq; in cs35l35_component_set_sysclk()
752 ret = regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1, in cs35l35_component_set_sysclk()
763 static int cs35l35_boost_inductor(struct cs35l35_private *cs35l35, in cs35l35_boost_inductor() argument
766 struct regmap *regmap = cs35l35->regmap; in cs35l35_boost_inductor()
826 dev_err(cs35l35->dev, "Invalid Inductor Value %d uH\n", in cs35l35_boost_inductor()
835 struct cs35l35_private *cs35l35 = snd_soc_component_get_drvdata(component); in cs35l35_component_probe() local
836 struct classh_cfg *classh = &cs35l35->pdata.classh_algo; in cs35l35_component_probe()
837 struct monitor_cfg *monitor_config = &cs35l35->pdata.mon_cfg; in cs35l35_component_probe()
841 if (cs35l35->pdata.bst_vctl) in cs35l35_component_probe()
842 regmap_update_bits(cs35l35->regmap, CS35L35_BST_CVTR_V_CTL, in cs35l35_component_probe()
844 cs35l35->pdata.bst_vctl); in cs35l35_component_probe()
846 if (cs35l35->pdata.bst_ipk) in cs35l35_component_probe()
847 regmap_update_bits(cs35l35->regmap, CS35L35_BST_PEAK_I, in cs35l35_component_probe()
849 cs35l35->pdata.bst_ipk << in cs35l35_component_probe()
852 ret = cs35l35_boost_inductor(cs35l35, cs35l35->pdata.boost_ind); in cs35l35_component_probe()
856 if (cs35l35->pdata.gain_zc) in cs35l35_component_probe()
857 regmap_update_bits(cs35l35->regmap, CS35L35_PROTECT_CTL, in cs35l35_component_probe()
859 cs35l35->pdata.gain_zc << in cs35l35_component_probe()
862 if (cs35l35->pdata.aud_channel) in cs35l35_component_probe()
863 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
866 cs35l35->pdata.aud_channel << in cs35l35_component_probe()
869 if (cs35l35->pdata.stereo) { in cs35l35_component_probe()
870 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
873 cs35l35->pdata.adv_channel << in cs35l35_component_probe()
875 if (cs35l35->pdata.shared_bst) in cs35l35_component_probe()
876 regmap_update_bits(cs35l35->regmap, CS35L35_CLASS_H_CTL, in cs35l35_component_probe()
885 if (cs35l35->pdata.sp_drv_str) in cs35l35_component_probe()
886 regmap_update_bits(cs35l35->regmap, CS35L35_CLK_CTL1, in cs35l35_component_probe()
888 cs35l35->pdata.sp_drv_str << in cs35l35_component_probe()
890 if (cs35l35->pdata.sp_drv_unused) in cs35l35_component_probe()
891 regmap_update_bits(cs35l35->regmap, CS35L35_SP_FMT_CTL3, in cs35l35_component_probe()
893 cs35l35->pdata.sp_drv_unused << in cs35l35_component_probe()
898 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
904 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
910 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
916 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
922 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
928 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
934 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
940 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
946 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
952 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
958 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
967 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
972 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
977 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
984 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
989 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
994 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
999 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
1006 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
1011 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
1016 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
1023 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
1028 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
1033 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
1040 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
1045 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
1050 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
1057 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
1062 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
1067 regmap_update_bits(cs35l35->regmap, in cs35l35_component_probe()
1109 struct cs35l35_private *cs35l35 = data; in cs35l35_irq() local
1114 regmap_read(cs35l35->regmap, CS35L35_INT_STATUS_4, &sticky4); in cs35l35_irq()
1115 regmap_read(cs35l35->regmap, CS35L35_INT_STATUS_3, &sticky3); in cs35l35_irq()
1116 regmap_read(cs35l35->regmap, CS35L35_INT_STATUS_2, &sticky2); in cs35l35_irq()
1117 regmap_read(cs35l35->regmap, CS35L35_INT_STATUS_1, &sticky1); in cs35l35_irq()
1119 regmap_read(cs35l35->regmap, CS35L35_INT_MASK_4, &mask4); in cs35l35_irq()
1120 regmap_read(cs35l35->regmap, CS35L35_INT_MASK_3, &mask3); in cs35l35_irq()
1121 regmap_read(cs35l35->regmap, CS35L35_INT_MASK_2, &mask2); in cs35l35_irq()
1122 regmap_read(cs35l35->regmap, CS35L35_INT_MASK_1, &mask1); in cs35l35_irq()
1130 complete(&cs35l35->pdn_done); in cs35l35_irq()
1133 regmap_read(cs35l35->regmap, CS35L35_INT_STATUS_1, &current1); in cs35l35_irq()
1137 dev_crit(cs35l35->dev, "Calibration Error\n"); in cs35l35_irq()
1142 regmap_update_bits(cs35l35->regmap, in cs35l35_irq()
1145 regmap_update_bits(cs35l35->regmap, in cs35l35_irq()
1149 regmap_update_bits(cs35l35->regmap, in cs35l35_irq()
1156 dev_crit(cs35l35->dev, "AMP Short Error\n"); in cs35l35_irq()
1159 dev_dbg(cs35l35->dev, "Amp short error release\n"); in cs35l35_irq()
1160 regmap_update_bits(cs35l35->regmap, in cs35l35_irq()
1163 regmap_update_bits(cs35l35->regmap, in cs35l35_irq()
1167 regmap_update_bits(cs35l35->regmap, in cs35l35_irq()
1174 dev_warn(cs35l35->dev, "Over temperature warning\n"); in cs35l35_irq()
1178 dev_dbg(cs35l35->dev, "Over temperature warn release\n"); in cs35l35_irq()
1179 regmap_update_bits(cs35l35->regmap, in cs35l35_irq()
1182 regmap_update_bits(cs35l35->regmap, in cs35l35_irq()
1186 regmap_update_bits(cs35l35->regmap, in cs35l35_irq()
1193 dev_crit(cs35l35->dev, "Over temperature error\n"); in cs35l35_irq()
1196 dev_dbg(cs35l35->dev, "Over temperature error release\n"); in cs35l35_irq()
1197 regmap_update_bits(cs35l35->regmap, in cs35l35_irq()
1200 regmap_update_bits(cs35l35->regmap, in cs35l35_irq()
1204 regmap_update_bits(cs35l35->regmap, in cs35l35_irq()
1211 dev_crit(cs35l35->dev, "VBST error: powering off!\n"); in cs35l35_irq()
1212 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2, in cs35l35_irq()
1214 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1, in cs35l35_irq()
1219 dev_crit(cs35l35->dev, "LBST error: powering off!\n"); in cs35l35_irq()
1220 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2, in cs35l35_irq()
1222 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL1, in cs35l35_irq()
1227 dev_dbg(cs35l35->dev, "Error: Reactive Brownout\n"); in cs35l35_irq()
1230 dev_dbg(cs35l35->dev, "Error: VMON overflow\n"); in cs35l35_irq()
1233 dev_dbg(cs35l35->dev, "Error: IMON overflow\n"); in cs35l35_irq()
1470 struct cs35l35_private *cs35l35; in cs35l35_i2c_probe() local
1477 cs35l35 = devm_kzalloc(dev, sizeof(struct cs35l35_private), GFP_KERNEL); in cs35l35_i2c_probe()
1478 if (!cs35l35) in cs35l35_i2c_probe()
1481 cs35l35->dev = dev; in cs35l35_i2c_probe()
1483 i2c_set_clientdata(i2c_client, cs35l35); in cs35l35_i2c_probe()
1484 cs35l35->regmap = devm_regmap_init_i2c(i2c_client, &cs35l35_regmap); in cs35l35_i2c_probe()
1485 if (IS_ERR(cs35l35->regmap)) { in cs35l35_i2c_probe()
1486 ret = PTR_ERR(cs35l35->regmap); in cs35l35_i2c_probe()
1492 cs35l35->supplies[i].supply = cs35l35_supplies[i]; in cs35l35_i2c_probe()
1494 cs35l35->num_supplies = ARRAY_SIZE(cs35l35_supplies); in cs35l35_i2c_probe()
1496 ret = devm_regulator_bulk_get(dev, cs35l35->num_supplies, in cs35l35_i2c_probe()
1497 cs35l35->supplies); in cs35l35_i2c_probe()
1504 cs35l35->pdata = *pdata; in cs35l35_i2c_probe()
1516 cs35l35->pdata = *pdata; in cs35l35_i2c_probe()
1519 ret = regulator_bulk_enable(cs35l35->num_supplies, in cs35l35_i2c_probe()
1520 cs35l35->supplies); in cs35l35_i2c_probe()
1527 cs35l35->reset_gpio = devm_gpiod_get_optional(dev, "reset", in cs35l35_i2c_probe()
1529 if (IS_ERR(cs35l35->reset_gpio)) { in cs35l35_i2c_probe()
1530 ret = PTR_ERR(cs35l35->reset_gpio); in cs35l35_i2c_probe()
1531 cs35l35->reset_gpio = NULL; in cs35l35_i2c_probe()
1541 cs35l35_reset(cs35l35); in cs35l35_i2c_probe()
1543 init_completion(&cs35l35->pdn_done); in cs35l35_i2c_probe()
1547 IRQF_SHARED, "cs35l35", cs35l35); in cs35l35_i2c_probe()
1553 devid = cirrus_read_device_id(cs35l35->regmap, CS35L35_DEVID_AB); in cs35l35_i2c_probe()
1567 ret = regmap_read(cs35l35->regmap, CS35L35_REV_ID, &reg); in cs35l35_i2c_probe()
1573 ret = regmap_register_patch(cs35l35->regmap, cs35l35_errata_patch, in cs35l35_i2c_probe()
1584 regmap_write(cs35l35->regmap, CS35L35_INT_MASK_1, in cs35l35_i2c_probe()
1586 regmap_write(cs35l35->regmap, CS35L35_INT_MASK_2, in cs35l35_i2c_probe()
1588 regmap_write(cs35l35->regmap, CS35L35_INT_MASK_3, in cs35l35_i2c_probe()
1590 regmap_write(cs35l35->regmap, CS35L35_INT_MASK_4, in cs35l35_i2c_probe()
1593 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2, in cs35l35_i2c_probe()
1597 if (cs35l35->pdata.bst_pdn_fet_on) in cs35l35_i2c_probe()
1598 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2, in cs35l35_i2c_probe()
1602 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL2, in cs35l35_i2c_probe()
1606 regmap_update_bits(cs35l35->regmap, CS35L35_PWRCTL3, in cs35l35_i2c_probe()
1610 regmap_update_bits(cs35l35->regmap, CS35L35_PROTECT_CTL, in cs35l35_i2c_probe()
1623 regulator_bulk_disable(cs35l35->num_supplies, in cs35l35_i2c_probe()
1624 cs35l35->supplies); in cs35l35_i2c_probe()
1625 gpiod_set_value_cansleep(cs35l35->reset_gpio, 0); in cs35l35_i2c_probe()
1632 struct cs35l35_private *cs35l35 = i2c_get_clientdata(i2c_client); in cs35l35_i2c_remove() local
1634 regulator_bulk_disable(cs35l35->num_supplies, cs35l35->supplies); in cs35l35_i2c_remove()
1635 gpiod_set_value_cansleep(cs35l35->reset_gpio, 0); in cs35l35_i2c_remove()