Lines Matching refs:rt1011

3  * rt1011.c -- rt1011 ALSA SoC amplifier component driver
30 #include "rt1011.h"
32 static int rt1011_calibrate(struct rt1011_priv *rt1011,
681 struct rt1011_priv *rt1011 = snd_soc_component_get_drvdata(component);
683 regmap_multi_reg_write(rt1011->regmap,
1039 struct rt1011_priv *rt1011 =
1042 ucontrol->value.integer.value[0] = rt1011->recv_spk_mode;
1052 struct rt1011_priv *rt1011 =
1055 if (ucontrol->value.integer.value[0] == rt1011->recv_spk_mode)
1059 rt1011->recv_spk_mode = ucontrol->value.integer.value[0];
1061 if (rt1011->recv_spk_mode) {
1115 struct rt1011_priv *rt1011 =
1137 bq_drc_info = rt1011->bq_drc_params[mode_idx];
1152 struct rt1011_priv *rt1011 =
1172 bq_drc_info = rt1011->bq_drc_params[mode_idx];
1216 struct rt1011_priv *rt1011 = snd_soc_component_get_drvdata(component);
1218 ucontrol->value.integer.value[0] = rt1011->cali_done;
1227 struct rt1011_priv *rt1011 = snd_soc_component_get_drvdata(component);
1229 rt1011->cali_done = 0;
1232 rt1011_calibrate(rt1011, 1);
1237 static int rt1011_r0_load(struct rt1011_priv *rt1011)
1239 if (!rt1011->r0_reg)
1243 regmap_write(rt1011->regmap, RT1011_INIT_RECIPROCAL_REG_24_16,
1244 ((rt1011->r0_reg>>16) & 0x1ff));
1245 regmap_write(rt1011->regmap, RT1011_INIT_RECIPROCAL_REG_15_0,
1246 (rt1011->r0_reg & 0xffff));
1247 regmap_write(rt1011->regmap, RT1011_SPK_TEMP_PROTECT_4, 0x4080);
1256 struct rt1011_priv *rt1011 = snd_soc_component_get_drvdata(component);
1258 ucontrol->value.integer.value[0] = rt1011->r0_reg;
1267 struct rt1011_priv *rt1011 = snd_soc_component_get_drvdata(component);
1271 if (ucontrol->value.integer.value[0] == rt1011->r0_reg)
1277 dev = regmap_get_device(rt1011->regmap);
1279 rt1011->r0_reg = ucontrol->value.integer.value[0];
1282 r0_integer = format / rt1011->r0_reg / 128;
1283 r0_factor = ((format / rt1011->r0_reg * 100) / 128)
1286 r0_integer, r0_factor, rt1011->r0_reg);
1288 if (rt1011->r0_reg)
1289 rt1011_r0_load(rt1011);
1324 struct rt1011_priv *rt1011 =
1327 rt1011->i2s_ref = ucontrol->value.enumerated.item[0];
1328 switch (rt1011->i2s_ref) {
1330 regmap_write(rt1011->regmap, RT1011_TDM_TOTAL_SET, 0x0240);
1331 regmap_write(rt1011->regmap, RT1011_TDM1_SET_2, 0x8);
1332 regmap_write(rt1011->regmap, RT1011_TDM1_SET_1, 0x1022);
1333 regmap_write(rt1011->regmap, RT1011_ADCDAT_OUT_SOURCE, 0x4);
1336 regmap_write(rt1011->regmap, RT1011_TDM_TOTAL_SET, 0x0240);
1337 regmap_write(rt1011->regmap, RT1011_TDM1_SET_2, 0x8);
1338 regmap_write(rt1011->regmap, RT1011_TDM1_SET_1, 0x10a2);
1339 regmap_write(rt1011->regmap, RT1011_ADCDAT_OUT_SOURCE, 0x4);
1353 struct rt1011_priv *rt1011 =
1356 ucontrol->value.enumerated.item[0] = rt1011->i2s_ref;
1409 struct rt1011_priv *rt1011 = snd_soc_component_get_drvdata(component);
1411 if (rt1011->sysclk_src == RT1011_FS_SYS_PRE_S_PLL1)
1576 struct rt1011_priv *rt1011 = snd_soc_component_get_drvdata(component);
1580 rt1011->lrck = params_rate(params);
1581 pre_div = rt1011_get_clk_info(rt1011->sysclk, rt1011->lrck);
1585 rt1011->lrck * 64, rt1011->lrck * 256);
1587 rt1011->lrck * 256, SND_SOC_CLOCK_IN);
1598 rt1011->bclk = rt1011->lrck * (32 << bclk_ms);
1604 rt1011->lrck, pre_div, dai->id);
1733 struct rt1011_priv *rt1011 = snd_soc_component_get_drvdata(component);
1736 if (freq == rt1011->sysclk && clk_id == rt1011->sysclk_src)
1764 rt1011->sysclk = freq;
1765 rt1011->sysclk_src = clk_id;
1777 struct rt1011_priv *rt1011 = snd_soc_component_get_drvdata(component);
1781 if (source == rt1011->pll_src && freq_in == rt1011->pll_in &&
1782 freq_out == rt1011->pll_out)
1788 rt1011->pll_in = 0;
1789 rt1011->pll_out = 0;
1837 rt1011->pll_in = freq_in;
1838 rt1011->pll_out = freq_out;
1839 rt1011->pll_src = source;
2053 struct rt1011_priv *rt1011 = snd_soc_component_get_drvdata(component);
2056 rt1011->component = component;
2058 schedule_work(&rt1011->cali_work);
2060 rt1011->i2s_ref = 0;
2061 rt1011->bq_drc_params = devm_kcalloc(component->dev,
2064 if (!rt1011->bq_drc_params)
2068 rt1011->bq_drc_params[i] = devm_kcalloc(component->dev,
2071 if (!rt1011->bq_drc_params[i])
2080 struct rt1011_priv *rt1011 = snd_soc_component_get_drvdata(component);
2082 cancel_work_sync(&rt1011->cali_work);
2083 rt1011_reset(rt1011->regmap);
2089 struct rt1011_priv *rt1011 = snd_soc_component_get_drvdata(component);
2091 regcache_cache_only(rt1011->regmap, true);
2092 regcache_mark_dirty(rt1011->regmap);
2099 struct rt1011_priv *rt1011 = snd_soc_component_get_drvdata(component);
2101 regcache_cache_only(rt1011->regmap, false);
2102 regcache_sync(rt1011->regmap);
2149 .name = "rt1011-aif",
2194 { .compatible = "realtek,rt1011", },
2209 { "rt1011", 0 },
2214 static int rt1011_calibrate(struct rt1011_priv *rt1011, unsigned char cali_flag)
2220 struct device *dev = regmap_get_device(rt1011->regmap);
2222 snd_soc_component_get_dapm(rt1011->component);
2226 regcache_cache_bypass(rt1011->regmap, true);
2228 regmap_write(rt1011->regmap, RT1011_RESET, 0x0000);
2229 regmap_write(rt1011->regmap, RT1011_SYSTEM_RESET_3, 0x740f);
2230 regmap_write(rt1011->regmap, RT1011_SYSTEM_RESET_3, 0x770f);
2233 regmap_write(rt1011->regmap, RT1011_CLK_2, 0x9400);
2234 regmap_write(rt1011->regmap, RT1011_PLL_1, 0x0800);
2235 regmap_write(rt1011->regmap, RT1011_PLL_2, 0x0020);
2236 regmap_write(rt1011->regmap, RT1011_CLK_DET, 0x0800);
2239 regmap_write(rt1011->regmap, RT1011_ADC_SET_5, 0x0a20);
2240 regmap_write(rt1011->regmap, RT1011_DAC_SET_2, 0xe232);
2241 regmap_write(rt1011->regmap, RT1011_ADC_SET_4, 0xc000);
2244 regmap_write(rt1011->regmap, RT1011_SPK_PRO_DC_DET_1, 0xb00c);
2245 regmap_write(rt1011->regmap, RT1011_SPK_PRO_DC_DET_2, 0xcccc);
2248 regmap_write(rt1011->regmap, RT1011_POWER_1, 0xe0e0);
2249 regmap_write(rt1011->regmap, RT1011_POWER_3, 0x5003);
2250 regmap_write(rt1011->regmap, RT1011_POWER_9, 0xa860);
2251 regmap_write(rt1011->regmap, RT1011_DAC_SET_2, 0xa032);
2254 regmap_write(rt1011->regmap, RT1011_POWER_2, 0x0007);
2255 regmap_write(rt1011->regmap, RT1011_POWER_3, 0x5ff7);
2256 regmap_write(rt1011->regmap, RT1011_A_TEMP_SEN, 0x7f44);
2257 regmap_write(rt1011->regmap, RT1011_A_TIMING_1, 0x4054);
2258 regmap_write(rt1011->regmap, RT1011_BAT_GAIN_1, 0x309c);
2261 regmap_write(rt1011->regmap, RT1011_DC_CALIB_CLASSD_3, 0xcb00);
2262 regmap_write(rt1011->regmap, RT1011_BOOST_CON_1, 0xe080);
2263 regmap_write(rt1011->regmap, RT1011_POWER_4, 0x16f2);
2264 regmap_write(rt1011->regmap, RT1011_POWER_6, 0x36ad);
2267 regmap_write(rt1011->regmap, RT1011_MIXER_1, 0x3f1d);
2270 regmap_write(rt1011->regmap, RT1011_EFUSE_CONTROL_1, 0x0d0a);
2273 regmap_read(rt1011->regmap, RT1011_EFUSE_ADC_OFFSET_18_16, &value);
2275 regmap_read(rt1011->regmap, RT1011_EFUSE_ADC_OFFSET_15_0, &value);
2278 regmap_read(rt1011->regmap, RT1011_EFUSE_DAC_OFFSET_G0_20_16, &value);
2280 regmap_read(rt1011->regmap, RT1011_EFUSE_DAC_OFFSET_G0_15_0, &value);
2283 regmap_read(rt1011->regmap, RT1011_EFUSE_DAC_OFFSET_G1_20_16, &value);
2285 regmap_read(rt1011->regmap, RT1011_EFUSE_DAC_OFFSET_G1_15_0, &value);
2291 regmap_write(rt1011->regmap, RT1011_ADC_SET_1, 0x2925);
2293 regmap_write(rt1011->regmap, RT1011_CLASS_D_POS, 0x010e);
2294 regmap_write(rt1011->regmap,
2298 regmap_write(rt1011->regmap, RT1011_SPK_TEMP_PROTECT_0, 0x8000);
2299 regmap_write(rt1011->regmap, RT1011_SPK_TEMP_PROTECT_7, 0xf000);
2300 regmap_write(rt1011->regmap, RT1011_SPK_TEMP_PROTECT_4, 0x4040);
2301 regmap_write(rt1011->regmap, RT1011_SPK_TEMP_PROTECT_0, 0xc000);
2302 regmap_write(rt1011->regmap, RT1011_SPK_TEMP_PROTECT_6, 0x07c2);
2307 regmap_read(rt1011->regmap,
2310 regmap_read(rt1011->regmap,
2330 rt1011->r0_reg = r0[0];
2331 rt1011->cali_done = 1;
2338 regmap_write(rt1011->regmap, RT1011_SPK_TEMP_PROTECT_0, 0x0000);
2340 regmap_write(rt1011->regmap, RT1011_POWER_9, 0xa840);
2341 regmap_write(rt1011->regmap, RT1011_SPK_TEMP_PROTECT_6, 0x0702);
2342 regmap_write(rt1011->regmap, RT1011_MIXER_1, 0xffdd);
2343 regmap_write(rt1011->regmap, RT1011_CLASSD_INTERNAL_SET_1, 0x0701);
2344 regmap_write(rt1011->regmap, RT1011_DAC_SET_3, 0xe004);
2345 regmap_write(rt1011->regmap, RT1011_A_TEMP_SEN, 0x7f40);
2346 regmap_write(rt1011->regmap, RT1011_POWER_1, 0x0000);
2347 regmap_write(rt1011->regmap, RT1011_POWER_2, 0x0000);
2348 regmap_write(rt1011->regmap, RT1011_POWER_3, 0x0002);
2349 regmap_write(rt1011->regmap, RT1011_POWER_4, 0x00f2);
2351 regmap_write(rt1011->regmap, RT1011_RESET, 0x0000);
2355 regmap_write(rt1011->regmap,
2358 regmap_write(rt1011->regmap,
2361 regmap_write(rt1011->regmap,
2366 regcache_cache_bypass(rt1011->regmap, false);
2367 regcache_mark_dirty(rt1011->regmap);
2368 regcache_sync(rt1011->regmap);
2376 struct rt1011_priv *rt1011 =
2378 struct snd_soc_component *component = rt1011->component;
2381 if (rt1011->r0_calib)
2382 rt1011_calibrate(rt1011, 0);
2384 rt1011_calibrate(rt1011, 1);
2391 rt1011->cali_done = 0;
2397 if (rt1011->temperature_calib <= 0xff &&
2398 rt1011->temperature_calib > 0) {
2401 (rt1011->temperature_calib << 2));
2404 if (rt1011->r0_calib) {
2405 rt1011->r0_reg = rt1011->r0_calib;
2408 r0_integer = format / rt1011->r0_reg / 128;
2409 r0_factor = ((format / rt1011->r0_reg * 100) / 128)
2412 r0_integer, r0_factor, rt1011->r0_reg);
2414 rt1011_r0_load(rt1011);
2420 static int rt1011_parse_dp(struct rt1011_priv *rt1011, struct device *dev)
2423 &rt1011->temperature_calib);
2425 &rt1011->r0_calib);
2428 __func__, rt1011->r0_calib, rt1011->temperature_calib);
2435 struct rt1011_priv *rt1011;
2439 rt1011 = devm_kzalloc(&i2c->dev, sizeof(struct rt1011_priv),
2441 if (!rt1011)
2444 i2c_set_clientdata(i2c, rt1011);
2446 rt1011_parse_dp(rt1011, &i2c->dev);
2448 rt1011->regmap = devm_regmap_init_i2c(i2c, &rt1011_regmap);
2449 if (IS_ERR(rt1011->regmap)) {
2450 ret = PTR_ERR(rt1011->regmap);
2456 regmap_read(rt1011->regmap, RT1011_DEVICE_ID, &val);
2459 "Device with ID register %x is not rt1011\n", val);
2463 INIT_WORK(&rt1011->cali_work, rt1011_calibration_work);
2473 struct rt1011_priv *rt1011 = i2c_get_clientdata(client);
2475 rt1011_reset(rt1011->regmap);
2480 .name = "rt1011",