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,
1321 struct cs35l36_private *cs35l36 = data;
1327 regmap_bulk_read(cs35l36->regmap, CS35L36_INT1_STATUS, status,
1330 regmap_bulk_read(cs35l36->regmap, CS35L36_INT1_MASK, masks,
1345 dev_crit(cs35l36->dev, "Amp short error\n");
1346 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1348 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1351 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1353 regmap_update_bits(cs35l36->regmap, CS35L36_INT3_STATUS,
1360 dev_crit(cs35l36->dev, "Over temperature warning\n");
1361 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1363 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1366 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1368 regmap_update_bits(cs35l36->regmap, CS35L36_INT1_STATUS,
1374 dev_crit(cs35l36->dev, "Over temperature error\n");
1375 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1377 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1379 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1381 regmap_update_bits(cs35l36->regmap, CS35L36_INT1_STATUS,
1387 dev_crit(cs35l36->dev, "VBST Over Voltage error\n");
1388 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1390 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1392 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1394 regmap_update_bits(cs35l36->regmap, CS35L36_INT1_STATUS,
1400 dev_crit(cs35l36->dev, "DCM VBST Under Voltage Error\n");
1401 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1403 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1406 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1408 regmap_update_bits(cs35l36->regmap, CS35L36_INT1_STATUS,
1415 dev_crit(cs35l36->dev, "LBST SHORT error!\n");
1416 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1418 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1421 regmap_update_bits(cs35l36->regmap, CS35L36_PROTECT_REL_ERR,
1423 regmap_update_bits(cs35l36->regmap, CS35L36_INT1_STATUS,
1542 static int cs35l36_pac(struct cs35l36_private *cs35l36)
1547 if (cs35l36->rev_id != CS35L36_REV_B0)
1553 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1555 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1560 regmap_write(cs35l36->regmap, CS35L36_PAC_CTL1,
1562 regmap_write(cs35l36->regmap, CS35L36_PAC_CTL3,
1564 regmap_write(cs35l36->regmap, CS35L36_PAC_PMEM_WORD0,
1567 regmap_write(cs35l36->regmap, CS35L36_PAC_CTL3,
1569 regmap_write(cs35l36->regmap, CS35L36_PAC_CTL1,
1574 ret = regmap_read(cs35l36->regmap, CS35L36_INT4_STATUS, &val);
1576 dev_err(cs35l36->dev, "Failed to read int4_status %d\n", ret);
1585 ret = regmap_read(cs35l36->regmap, CS35L36_INT4_STATUS,
1588 dev_err(cs35l36->dev, "Failed to read int4_status %d\n",
1597 regmap_write(cs35l36->regmap, CS35L36_INT4_STATUS,
1599 regmap_update_bits(cs35l36->regmap, CS35L36_PAC_CTL1,
1602 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1604 regmap_write(cs35l36->regmap, CS35L36_TESTKEY_CTRL,
1610 static void cs35l36_apply_vpbr_config(struct cs35l36_private *cs35l36)
1612 struct cs35l36_platform_data *pdata = &cs35l36->pdata;
1615 regmap_update_bits(cs35l36->regmap, CS35L36_PWR_CTRL3,
1619 regmap_update_bits(cs35l36->regmap, CS35L36_VPBR_CFG,
1623 regmap_update_bits(cs35l36->regmap, CS35L36_VPBR_CFG,
1627 regmap_update_bits(cs35l36->regmap, CS35L36_VPBR_CFG,
1631 regmap_update_bits(cs35l36->regmap, CS35L36_VPBR_CFG,
1635 regmap_update_bits(cs35l36->regmap, CS35L36_VPBR_CFG,
1639 regmap_update_bits(cs35l36->regmap, CS35L36_VPBR_CFG,
1643 regmap_update_bits(cs35l36->regmap, CS35L36_VPBR_CFG,
1707 struct cs35l36_private *cs35l36;
1714 cs35l36 = devm_kzalloc(dev, sizeof(struct cs35l36_private), GFP_KERNEL);
1715 if (!cs35l36)
1718 cs35l36->dev = dev;
1720 i2c_set_clientdata(i2c_client, cs35l36);
1721 cs35l36->regmap = devm_regmap_init_i2c(i2c_client, &cs35l36_regmap);
1722 if (IS_ERR(cs35l36->regmap)) {
1723 ret = PTR_ERR(cs35l36->regmap);
1728 cs35l36->num_supplies = ARRAY_SIZE(cs35l36_supplies);
1730 cs35l36->supplies[i].supply = cs35l36_supplies[i];
1732 ret = devm_regulator_bulk_get(dev, cs35l36->num_supplies,
1733 cs35l36->supplies);
1740 cs35l36->pdata = *pdata;
1754 cs35l36->pdata = *pdata;
1757 ret = regulator_bulk_enable(cs35l36->num_supplies, cs35l36->supplies);
1764 cs35l36->reset_gpio = devm_gpiod_get_optional(dev, "reset",
1766 if (IS_ERR(cs35l36->reset_gpio)) {
1767 ret = PTR_ERR(cs35l36->reset_gpio);
1768 cs35l36->reset_gpio = NULL;
1777 if (cs35l36->reset_gpio)
1778 gpiod_set_value_cansleep(cs35l36->reset_gpio, 1);
1783 ret = regmap_read(cs35l36->regmap, CS35L36_SW_RESET, ®_id);
1796 ret = regmap_read(cs35l36->regmap, CS35L36_REV_ID, ®_revid);
1802 cs35l36->rev_id = reg_revid >> 8;
1804 ret = regmap_read(cs35l36->regmap, CS35L36_OTP_MEM30, &l37_id_reg);
1812 cs35l36->chip_version = CS35L36_12V_L37;
1814 cs35l36->chip_version = CS35L36_10V_L36;
1816 switch (cs35l36->rev_id) {
1818 ret = regmap_register_patch(cs35l36->regmap,
1828 ret = cs35l36_pac(cs35l36);
1834 ret = regmap_register_patch(cs35l36->regmap,
1846 cs35l36_apply_vpbr_config(cs35l36);
1867 dev_err(cs35l36->dev, "Invalid IRQ polarity: %d\n", irq_pol);
1872 regmap_update_bits(cs35l36->regmap, CS35L36_PAD_INTERFACE,
1877 IRQF_ONESHOT | irq_pol, "cs35l36",
1878 cs35l36);
1884 regmap_update_bits(cs35l36->regmap, CS35L36_PAD_INTERFACE,
1888 regmap_write(cs35l36->regmap, CS35L36_INT1_MASK,
1890 regmap_write(cs35l36->regmap, CS35L36_INT3_MASK,
1894 cs35l36->chip_version, reg_revid >> 8);
1908 gpiod_set_value_cansleep(cs35l36->reset_gpio, 0);
1911 regulator_bulk_disable(cs35l36->num_supplies, cs35l36->supplies);
1917 struct cs35l36_private *cs35l36 = i2c_get_clientdata(client);
1920 regmap_write(cs35l36->regmap, CS35L36_INT1_MASK,
1922 regmap_write(cs35l36->regmap, CS35L36_INT3_MASK,
1925 if (cs35l36->reset_gpio)
1926 gpiod_set_value_cansleep(cs35l36->reset_gpio, 0);
1928 regulator_bulk_disable(cs35l36->num_supplies, cs35l36->supplies);
1933 {.compatible = "cirrus,cs35l36"},
1939 {"cs35l36", 0},
1947 .name = "cs35l36",