Lines Matching refs:rt298
3 * rt298.c -- RT298 ALSA SoC audio codec driver
28 #include <sound/rt298.h>
31 #include "rt298.h"
196 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
200 snd_soc_component_write(component, rt298->index_cache[i].reg,
201 rt298->index_cache[i].def);
219 static int rt298_jack_detect(struct rt298_priv *rt298, bool *hp, bool *mic)
227 if (!rt298->component)
230 dapm = snd_soc_component_get_dapm(rt298->component);
232 if (rt298->pdata.cbj_en) {
233 regmap_read(rt298->regmap, RT298_GET_HP_SENSE, &buf);
235 if (*hp == rt298->is_hp_in)
237 rt298->is_hp_in = *hp;
240 regmap_update_bits(rt298->regmap,
249 regmap_update_bits(rt298->regmap,
251 regmap_update_bits(rt298->regmap,
254 regmap_write(rt298->regmap, RT298_SET_MIC1, 0x24);
257 regmap_update_bits(rt298->regmap,
260 regmap_read(rt298->regmap, RT298_CBJ_CTRL2, &val);
265 regmap_update_bits(rt298->regmap,
268 regmap_read(rt298->regmap,
275 regmap_update_bits(rt298->regmap,
280 regmap_write(rt298->regmap, RT298_SET_MIC1, 0x20);
281 regmap_update_bits(rt298->regmap,
285 regmap_read(rt298->regmap, RT298_GET_HP_SENSE, &buf);
287 regmap_read(rt298->regmap, RT298_GET_MIC1_SENSE, &buf);
305 struct rt298_priv *rt298 =
311 if (rt298_jack_detect(rt298, &hp, &mic) < 0)
320 snd_soc_jack_report(rt298->jack, status,
326 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
334 regmap_update_bits(rt298->regmap, RT298_IRQ_CTRL, 0x2, 0x0);
341 rt298->jack = jack;
342 regmap_update_bits(rt298->regmap, RT298_IRQ_CTRL, 0x2, 0x2);
344 rt298_jack_detect(rt298, &hp, &mic);
351 snd_soc_jack_report(rt298->jack, status,
362 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
364 if (rt298->clk_id == RT298_SCLK_S_MCLK)
747 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
761 switch (rt298->sys_clk) {
766 params_rate(params), rt298->sys_clk);
774 params_rate(params), rt298->sys_clk);
873 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
925 rt298->sys_clk = freq;
926 rt298->clk_id = clk_id;
978 struct rt298_priv *rt298 = data;
983 ret = rt298_jack_detect(rt298, &hp, &mic);
986 regmap_update_bits(rt298->regmap, RT298_IRQ_CTRL, 0x1, 0x1);
995 snd_soc_jack_report(rt298->jack, status,
998 pm_wakeup_event(&rt298->i2c->dev, 300);
1006 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
1008 rt298->component = component;
1010 if (rt298->i2c->irq) {
1011 regmap_update_bits(rt298->regmap,
1014 INIT_DELAYED_WORK(&rt298->jack_detect_work,
1016 schedule_delayed_work(&rt298->jack_detect_work,
1025 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
1027 cancel_delayed_work_sync(&rt298->jack_detect_work);
1033 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
1035 rt298->is_hp_in = -1;
1036 regcache_cache_only(rt298->regmap, true);
1037 regcache_mark_dirty(rt298->regmap);
1044 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
1046 regcache_cache_only(rt298->regmap, false);
1048 regcache_sync(rt298->regmap);
1070 .name = "rt298-aif1",
1090 .name = "rt298-aif2",
1143 {"rt298", 0},
1185 struct rt298_priv *rt298;
1190 rt298 = devm_kzalloc(&i2c->dev, sizeof(*rt298),
1192 if (NULL == rt298)
1195 rt298->regmap = devm_regmap_init(&i2c->dev, NULL, i2c, &rt298_regmap);
1196 if (IS_ERR(rt298->regmap)) {
1197 ret = PTR_ERR(rt298->regmap);
1203 regmap_read(rt298->regmap,
1207 "Device with ID register %#x is not rt298\n", ret);
1211 rt298->index_cache = devm_kmemdup(&i2c->dev, rt298_index_def,
1213 if (!rt298->index_cache)
1216 rt298->index_cache_size = INDEX_CACHE_SIZE;
1217 rt298->i2c = i2c;
1218 i2c_set_clientdata(i2c, rt298);
1222 regmap_write(rt298->regmap, rt298->index_cache[i].reg,
1223 rt298->index_cache[i].def);
1225 regmap_write(rt298->regmap, rt298_reg[i].reg,
1229 rt298->pdata = *pdata;
1234 rt298->pdata = *(struct rt298_platform_data *)
1239 rt298->pdata.cbj_en = true;
1240 rt298->pdata.gpio2_en = false;
1244 regmap_update_bits(rt298->regmap, 0x04, 0x80, 0x80);
1245 regmap_update_bits(rt298->regmap, 0x1b, 0x860, 0x860);
1247 regmap_update_bits(rt298->regmap, 0x08, 0x20, 0x20);
1249 regmap_write(rt298->regmap, RT298_SET_AUDIO_POWER, AC_PWRST_D3);
1252 regmap_write(rt298->regmap,
1256 if (!rt298->pdata.cbj_en) {
1257 regmap_write(rt298->regmap, RT298_CBJ_CTRL2, 0x0000);
1258 regmap_write(rt298->regmap, RT298_MIC1_DET_CTRL, 0x0816);
1259 regmap_update_bits(rt298->regmap,
1262 regmap_update_bits(rt298->regmap,
1268 if (!rt298->pdata.gpio2_en)
1269 regmap_write(rt298->regmap, RT298_SET_DMIC2_DEFAULT, 0x40);
1271 regmap_write(rt298->regmap, RT298_SET_DMIC2_DEFAULT, 0);
1275 regmap_write(rt298->regmap, RT298_MISC_CTRL1, 0x0000);
1276 regmap_update_bits(rt298->regmap,
1279 regmap_write(rt298->regmap, RT298_UNSOLICITED_INLINE_CMD, 0x81);
1280 regmap_write(rt298->regmap, RT298_UNSOLICITED_HP_OUT, 0x82);
1281 regmap_write(rt298->regmap, RT298_UNSOLICITED_MIC1, 0x84);
1282 regmap_update_bits(rt298->regmap, RT298_IRQ_FLAG_CTRL, 0x2, 0x2);
1284 rt298->is_hp_in = -1;
1286 if (rt298->i2c->irq) {
1287 ret = request_threaded_irq(rt298->i2c->irq, NULL, rt298_irq,
1288 IRQF_TRIGGER_HIGH | IRQF_ONESHOT, "rt298", rt298);
1305 struct rt298_priv *rt298 = i2c_get_clientdata(i2c);
1308 free_irq(i2c->irq, rt298);
1316 .name = "rt298",