Lines Matching refs:cs35l36
3 // cs35l36.c -- CS35L36 ALSA SoC audio driver
31 #include <sound/cs35l36.h>
35 #include "cs35l36.h"
462 struct cs35l36_private *cs35l36 =
465 ucontrol->value.integer.value[0] = cs35l36->ldm_mode_sel;
475 struct cs35l36_private *cs35l36 =
480 cs35l36->ldm_mode_sel = val;
482 regmap_update_bits(cs35l36->regmap, CS35L36_NG_CFG,
509 struct cs35l36_private *cs35l36 =
515 regmap_update_bits(cs35l36->regmap, CS35L36_PWR_CTRL1,
521 regmap_read(cs35l36->regmap, CS35L36_INT4_RAW_STATUS, ®);
524 dev_crit(cs35l36->dev, "PLL Unlocked\n");
526 regmap_update_bits(cs35l36->regmap, CS35L36_ASP_RX1_SEL,
529 regmap_update_bits(cs35l36->regmap, CS35L36_AMP_OUT_MUTE,
534 regmap_update_bits(cs35l36->regmap, CS35L36_ASP_RX1_SEL,
537 regmap_update_bits(cs35l36->regmap, CS35L36_AMP_OUT_MUTE,
542 regmap_update_bits(cs35l36->regmap, CS35L36_PWR_CTRL1,
561 struct cs35l36_private *cs35l36 =
566 if (!cs35l36->pdata.extern_boost)
567 regmap_update_bits(cs35l36->regmap, CS35L36_PWR_CTRL2,
573 if (!cs35l36->pdata.extern_boost)
574 regmap_update_bits(cs35l36->regmap, CS35L36_PWR_CTRL2,
758 struct cs35l36_private *cs35l36 =
773 regmap_update_bits(cs35l36->regmap, CS35L36_ASP_TX_PIN_CTRL,
776 regmap_update_bits(cs35l36->regmap, CS35L36_ASP_RATE_CTRL,
791 regmap_update_bits(cs35l36->regmap, CS35L36_ASP_TX_PIN_CTRL,
794 regmap_update_bits(cs35l36->regmap, CS35L36_ASP_RATE_CTRL,
830 regmap_update_bits(cs35l36->regmap, CS35L36_ASP_RATE_CTRL,
833 regmap_update_bits(cs35l36->regmap, CS35L36_ASP_TX_PIN_CTRL,
836 regmap_update_bits(cs35l36->regmap, CS35L36_ASP_FORMAT,
868 struct cs35l36_private *cs35l36 =
875 regmap_update_bits(cs35l36->regmap,
897 regmap_update_bits(cs35l36->regmap, CS35L36_ASP_FRAME_CTRL,
901 regmap_update_bits(cs35l36->regmap, CS35L36_ASP_FRAME_CTRL,
913 struct cs35l36_private *cs35l36 =
925 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
927 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
930 regmap_update_bits(cs35l36->regmap, CS35L36_TST_FS_MON0,
934 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
936 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
942 struct cs35l36_private *cs35l36, int freq)
982 .name = "cs35l36-pcm",
1007 struct cs35l36_private *cs35l36 =
1013 prev_clksrc = cs35l36->clksrc;
1017 cs35l36->clksrc = CS35L36_PLLSRC_SCLK;
1020 cs35l36->clksrc = CS35L36_PLLSRC_LRCLK;
1023 cs35l36->clksrc = CS35L36_PLLSRC_PDMCLK;
1026 cs35l36->clksrc = CS35L36_PLLSRC_SELF;
1029 cs35l36->clksrc = CS35L36_PLLSRC_MCLK;
1035 clk_cfg = cs35l36_get_clk_config(cs35l36, freq);
1041 regmap_update_bits(cs35l36->regmap, CS35L36_PLL_CLK_CTRL,
1044 regmap_update_bits(cs35l36->regmap, CS35L36_PLL_CLK_CTRL,
1047 regmap_update_bits(cs35l36->regmap, CS35L36_PLL_CLK_CTRL,
1050 regmap_update_bits(cs35l36->regmap, CS35L36_PLL_CLK_CTRL,
1052 cs35l36->clksrc);
1053 regmap_update_bits(cs35l36->regmap, CS35L36_PLL_CLK_CTRL,
1056 regmap_update_bits(cs35l36->regmap, CS35L36_PLL_CLK_CTRL,
1060 if (cs35l36->rev_id == CS35L36_REV_A0) {
1061 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1063 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1066 regmap_write(cs35l36->regmap, CS35L36_DCO_CTRL, 0x00036DA8);
1067 regmap_write(cs35l36->regmap, CS35L36_MISC_CTRL, 0x0100EE0E);
1069 regmap_update_bits(cs35l36->regmap, CS35L36_PLL_LOOP_PARAMS,
1073 regmap_update_bits(cs35l36->regmap, CS35L36_PLL_LOOP_PARAMS,
1077 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1079 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1083 if (cs35l36->clksrc == CS35L36_PLLSRC_PDMCLK) {
1084 pdm_switch = cs35l36->ldm_mode_sel &&
1088 regmap_update_bits(cs35l36->regmap, CS35L36_NG_CFG,
1092 regmap_update_bits(cs35l36->regmap, CS35L36_DAC_MSM_CFG,
1097 regmap_update_bits(cs35l36->regmap, CS35L36_NG_CFG,
1101 pdm_switch = cs35l36->ldm_mode_sel &&
1105 regmap_update_bits(cs35l36->regmap, CS35L36_NG_CFG,
1109 regmap_update_bits(cs35l36->regmap, CS35L36_DAC_MSM_CFG,
1114 regmap_update_bits(cs35l36->regmap, CS35L36_NG_CFG,
1122 static int cs35l36_boost_inductor(struct cs35l36_private *cs35l36, int inductor)
1124 regmap_update_bits(cs35l36->regmap, CS35L36_BSTCVRT_COEFF,
1126 regmap_update_bits(cs35l36->regmap, CS35L36_BSTCVRT_COEFF,
1129 regmap_update_bits(cs35l36->regmap, CS35L36_BSTCVRT_SW_FREQ,
1134 regmap_update_bits(cs35l36->regmap, CS35L36_BSTCVRT_SLOPE_LBST,
1137 regmap_update_bits(cs35l36->regmap, CS35L36_BSTCVRT_SLOPE_LBST,
1141 regmap_update_bits(cs35l36->regmap, CS35L36_BSTCVRT_SLOPE_LBST,
1144 regmap_update_bits(cs35l36->regmap, CS35L36_BSTCVRT_SLOPE_LBST,
1148 dev_err(cs35l36->dev, "%s Invalid Inductor Value %d uH\n",
1158 struct cs35l36_private *cs35l36 =
1162 if ((cs35l36->rev_id == CS35L36_REV_A0) && cs35l36->pdata.dcm_mode) {
1163 regmap_update_bits(cs35l36->regmap, CS35L36_BSTCVRT_DCM_CTRL,
1167 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1169 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1172 regmap_update_bits(cs35l36->regmap, CS35L36_BST_TST_MANUAL,
1175 regmap_update_bits(cs35l36->regmap, CS35L36_BST_TST_MANUAL,
1179 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1181 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1185 if (cs35l36->pdata.amp_pcm_inv)
1186 regmap_update_bits(cs35l36->regmap, CS35L36_AMP_DIG_VOL_CTRL,
1190 if (cs35l36->pdata.multi_amp_mode)
1191 regmap_update_bits(cs35l36->regmap, CS35L36_ASP_TX_PIN_CTRL,
1195 if (cs35l36->pdata.imon_pol_inv)
1196 regmap_update_bits(cs35l36->regmap, CS35L36_VI_SPKMON_FILT,
1199 if (cs35l36->pdata.vmon_pol_inv)
1200 regmap_update_bits(cs35l36->regmap, CS35L36_VI_SPKMON_FILT,
1203 if (cs35l36->pdata.bst_vctl)
1204 regmap_update_bits(cs35l36->regmap, CS35L36_BSTCVRT_VCTRL1,
1206 cs35l36->pdata.bst_vctl);
1208 if (cs35l36->pdata.bst_vctl_sel)
1209 regmap_update_bits(cs35l36->regmap, CS35L36_BSTCVRT_VCTRL2,
1211 cs35l36->pdata.bst_vctl_sel);
1213 if (cs35l36->pdata.bst_ipk)
1214 regmap_update_bits(cs35l36->regmap, CS35L36_BSTCVRT_PEAK_CUR,
1216 cs35l36->pdata.bst_ipk);
1218 if (cs35l36->pdata.boost_ind) {
1219 ret = cs35l36_boost_inductor(cs35l36, cs35l36->pdata.boost_ind);
1221 dev_err(cs35l36->dev,
1227 if (cs35l36->pdata.temp_warn_thld)
1228 regmap_update_bits(cs35l36->regmap, CS35L36_DTEMP_WARN_THLD,
1230 cs35l36->pdata.temp_warn_thld);
1232 if (cs35l36->pdata.irq_drv_sel)
1233 regmap_update_bits(cs35l36->regmap, CS35L36_PAD_INTERFACE,
1235 cs35l36->pdata.irq_drv_sel <<
1238 if (cs35l36->pdata.irq_gpio_sel)
1239 regmap_update_bits(cs35l36->regmap, CS35L36_PAD_INTERFACE,
1241 cs35l36->pdata.irq_gpio_sel <<
1252 if (cs35l36->chip_version == CS35L36_10V_L36) {
1253 regmap_update_bits(cs35l36->regmap,
1258 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1260 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1263 regmap_update_bits(cs35l36->regmap, CS35L36_BST_ANA2_TEST,
1267 regmap_update_bits(cs35l36->regmap, CS35L36_BSTCVRT_VCTRL2,
1270 regmap_update_bits(cs35l36->regmap, CS35L36_BSTCVRT_VCTRL1,
1273 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1275 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1284 regmap_update_bits(cs35l36->regmap, CS35L36_CTRL_OVRRIDE,
1320 struct cs35l36_private *cs35l36 = data;
1326 regmap_bulk_read(cs35l36->regmap, CS35L36_INT1_STATUS, status,
1329 regmap_bulk_read(cs35l36->regmap, CS35L36_INT1_MASK, masks,
1344 dev_crit(cs35l36->dev, "Amp short error\n");
1345 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1347 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1350 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1352 regmap_update_bits(cs35l36->regmap, CS35L36_INT3_STATUS,
1359 dev_crit(cs35l36->dev, "Over temperature warning\n");
1360 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1362 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1365 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1367 regmap_update_bits(cs35l36->regmap, CS35L36_INT1_STATUS,
1373 dev_crit(cs35l36->dev, "Over temperature error\n");
1374 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1376 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1378 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1380 regmap_update_bits(cs35l36->regmap, CS35L36_INT1_STATUS,
1386 dev_crit(cs35l36->dev, "VBST Over Voltage error\n");
1387 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1389 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1391 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1393 regmap_update_bits(cs35l36->regmap, CS35L36_INT1_STATUS,
1399 dev_crit(cs35l36->dev, "DCM VBST Under Voltage Error\n");
1400 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1402 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1405 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1407 regmap_update_bits(cs35l36->regmap, CS35L36_INT1_STATUS,
1414 dev_crit(cs35l36->dev, "LBST SHORT error!\n");
1415 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1417 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1420 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1422 regmap_update_bits(cs35l36->regmap, CS35L36_INT1_STATUS,
1541 static int cs35l36_pac(struct cs35l36_private *cs35l36)
1546 if (cs35l36->rev_id != CS35L36_REV_B0)
1552 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1554 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1559 regmap_write(cs35l36->regmap, CS35L36_PAC_CTL1,
1561 regmap_write(cs35l36->regmap, CS35L36_PAC_CTL3,
1563 regmap_write(cs35l36->regmap, CS35L36_PAC_PMEM_WORD0,
1566 regmap_write(cs35l36->regmap, CS35L36_PAC_CTL3,
1568 regmap_write(cs35l36->regmap, CS35L36_PAC_CTL1,
1573 ret = regmap_read(cs35l36->regmap, CS35L36_INT4_STATUS, &val);
1575 dev_err(cs35l36->dev, "Failed to read int4_status %d\n", ret);
1584 ret = regmap_read(cs35l36->regmap, CS35L36_INT4_STATUS,
1587 dev_err(cs35l36->dev, "Failed to read int4_status %d\n",
1596 regmap_write(cs35l36->regmap, CS35L36_INT4_STATUS,
1598 regmap_update_bits(cs35l36->regmap, CS35L36_PAC_CTL1,
1601 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1603 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1609 static void cs35l36_apply_vpbr_config(struct cs35l36_private *cs35l36)
1611 struct cs35l36_platform_data *pdata = &cs35l36->pdata;
1614 regmap_update_bits(cs35l36->regmap, CS35L36_PWR_CTRL3,
1618 regmap_update_bits(cs35l36->regmap, CS35L36_VPBR_CFG,
1622 regmap_update_bits(cs35l36->regmap, CS35L36_VPBR_CFG,
1626 regmap_update_bits(cs35l36->regmap, CS35L36_VPBR_CFG,
1630 regmap_update_bits(cs35l36->regmap, CS35L36_VPBR_CFG,
1634 regmap_update_bits(cs35l36->regmap, CS35L36_VPBR_CFG,
1638 regmap_update_bits(cs35l36->regmap, CS35L36_VPBR_CFG,
1642 regmap_update_bits(cs35l36->regmap, CS35L36_VPBR_CFG,
1705 struct cs35l36_private *cs35l36;
1712 cs35l36 = devm_kzalloc(dev, sizeof(struct cs35l36_private), GFP_KERNEL);
1713 if (!cs35l36)
1716 cs35l36->dev = dev;
1718 i2c_set_clientdata(i2c_client, cs35l36);
1719 cs35l36->regmap = devm_regmap_init_i2c(i2c_client, &cs35l36_regmap);
1720 if (IS_ERR(cs35l36->regmap)) {
1721 ret = PTR_ERR(cs35l36->regmap);
1726 cs35l36->num_supplies = ARRAY_SIZE(cs35l36_supplies);
1728 cs35l36->supplies[i].supply = cs35l36_supplies[i];
1730 ret = devm_regulator_bulk_get(dev, cs35l36->num_supplies,
1731 cs35l36->supplies);
1738 cs35l36->pdata = *pdata;
1752 cs35l36->pdata = *pdata;
1755 ret = regulator_bulk_enable(cs35l36->num_supplies, cs35l36->supplies);
1762 cs35l36->reset_gpio = devm_gpiod_get_optional(dev, "reset",
1764 if (IS_ERR(cs35l36->reset_gpio)) {
1765 ret = PTR_ERR(cs35l36->reset_gpio);
1766 cs35l36->reset_gpio = NULL;
1775 if (cs35l36->reset_gpio)
1776 gpiod_set_value_cansleep(cs35l36->reset_gpio, 1);
1781 ret = regmap_read(cs35l36->regmap, CS35L36_SW_RESET, ®_id);
1794 ret = regmap_read(cs35l36->regmap, CS35L36_REV_ID, ®_revid);
1800 cs35l36->rev_id = reg_revid >> 8;
1802 ret = regmap_read(cs35l36->regmap, CS35L36_OTP_MEM30, &l37_id_reg);
1810 cs35l36->chip_version = CS35L36_12V_L37;
1812 cs35l36->chip_version = CS35L36_10V_L36;
1814 switch (cs35l36->rev_id) {
1816 ret = regmap_register_patch(cs35l36->regmap,
1826 ret = cs35l36_pac(cs35l36);
1832 ret = regmap_register_patch(cs35l36->regmap,
1844 cs35l36_apply_vpbr_config(cs35l36);
1865 dev_err(cs35l36->dev, "Invalid IRQ polarity: %d\n", irq_pol);
1870 regmap_update_bits(cs35l36->regmap, CS35L36_PAD_INTERFACE,
1875 IRQF_ONESHOT | irq_pol, "cs35l36",
1876 cs35l36);
1882 regmap_update_bits(cs35l36->regmap, CS35L36_PAD_INTERFACE,
1886 regmap_write(cs35l36->regmap, CS35L36_INT1_MASK,
1888 regmap_write(cs35l36->regmap, CS35L36_INT3_MASK,
1892 cs35l36->chip_version, reg_revid >> 8);
1906 gpiod_set_value_cansleep(cs35l36->reset_gpio, 0);
1909 regulator_bulk_disable(cs35l36->num_supplies, cs35l36->supplies);
1915 struct cs35l36_private *cs35l36 = i2c_get_clientdata(client);
1918 regmap_write(cs35l36->regmap, CS35L36_INT1_MASK,
1920 regmap_write(cs35l36->regmap, CS35L36_INT3_MASK,
1923 if (cs35l36->reset_gpio)
1924 gpiod_set_value_cansleep(cs35l36->reset_gpio, 0);
1926 regulator_bulk_disable(cs35l36->num_supplies, cs35l36->supplies);
1929 {.compatible = "cirrus,cs35l36"},
1935 {"cs35l36", 0},
1943 .name = "cs35l36",