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,
274 regmap_update_bits(rt298->regmap,
280 regmap_update_bits(rt298->regmap,
285 regmap_write(rt298->regmap, RT298_SET_MIC1, 0x20);
286 regmap_update_bits(rt298->regmap,
290 regmap_read(rt298->regmap, RT298_GET_HP_SENSE, &buf);
292 regmap_read(rt298->regmap, RT298_GET_MIC1_SENSE, &buf);
310 struct rt298_priv *rt298 =
316 if (rt298_jack_detect(rt298, &hp, &mic) < 0)
325 snd_soc_jack_report(rt298->jack, status,
333 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
335 rt298->jack = jack;
339 if (rt298->jack->status & SND_JACK_HEADPHONE)
341 if (rt298->jack->status & SND_JACK_MICROPHONE) {
345 regmap_update_bits(rt298->regmap, RT298_IRQ_CTRL, 0x2, 0x2);
347 snd_soc_jack_report(rt298->jack, rt298->jack->status,
351 regmap_update_bits(rt298->regmap, RT298_IRQ_CTRL, 0x2, 0x0);
365 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
367 if (rt298->clk_id == RT298_SCLK_S_MCLK)
750 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
764 switch (rt298->sys_clk) {
769 params_rate(params), rt298->sys_clk);
777 params_rate(params), rt298->sys_clk);
876 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
928 rt298->sys_clk = freq;
929 rt298->clk_id = clk_id;
981 struct rt298_priv *rt298 = data;
986 ret = rt298_jack_detect(rt298, &hp, &mic);
989 regmap_update_bits(rt298->regmap, RT298_IRQ_CTRL, 0x1, 0x1);
998 snd_soc_jack_report(rt298->jack, status,
1001 pm_wakeup_event(&rt298->i2c->dev, 300);
1009 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
1011 rt298->component = component;
1012 INIT_DELAYED_WORK(&rt298->jack_detect_work, rt298_jack_detect_work);
1014 if (rt298->i2c->irq)
1015 schedule_delayed_work(&rt298->jack_detect_work,
1022 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
1024 cancel_delayed_work_sync(&rt298->jack_detect_work);
1025 rt298->component = NULL;
1031 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
1033 rt298->is_hp_in = -1;
1034 regcache_cache_only(rt298->regmap, true);
1035 regcache_mark_dirty(rt298->regmap);
1042 struct rt298_priv *rt298 = snd_soc_component_get_drvdata(component);
1044 regcache_cache_only(rt298->regmap, false);
1046 regcache_sync(rt298->regmap);
1068 .name = "rt298-aif1",
1088 .name = "rt298-aif2",
1141 {"rt298", 0},
1182 struct rt298_priv *rt298;
1187 rt298 = devm_kzalloc(&i2c->dev, sizeof(*rt298),
1189 if (NULL == rt298)
1192 rt298->regmap = devm_regmap_init(&i2c->dev, NULL, i2c, &rt298_regmap);
1193 if (IS_ERR(rt298->regmap)) {
1194 ret = PTR_ERR(rt298->regmap);
1200 regmap_read(rt298->regmap,
1204 "Device with ID register %#x is not rt298\n", ret);
1208 rt298->index_cache = devm_kmemdup(&i2c->dev, rt298_index_def,
1210 if (!rt298->index_cache)
1213 rt298->index_cache_size = INDEX_CACHE_SIZE;
1214 rt298->i2c = i2c;
1215 i2c_set_clientdata(i2c, rt298);
1219 regmap_write(rt298->regmap, rt298->index_cache[i].reg,
1220 rt298->index_cache[i].def);
1222 regmap_write(rt298->regmap, rt298_reg[i].reg,
1226 rt298->pdata = *pdata;
1231 rt298->pdata = *(struct rt298_platform_data *)
1236 rt298->pdata.cbj_en = true;
1237 rt298->pdata.gpio2_en = false;
1241 regmap_update_bits(rt298->regmap, 0x04, 0x80, 0x80);
1242 regmap_update_bits(rt298->regmap, 0x1b, 0x860, 0x860);
1244 regmap_update_bits(rt298->regmap, 0x08, 0x20, 0x20);
1246 regmap_write(rt298->regmap, RT298_SET_AUDIO_POWER, AC_PWRST_D3);
1249 regmap_write(rt298->regmap,
1253 if (!rt298->pdata.cbj_en) {
1254 regmap_write(rt298->regmap, RT298_CBJ_CTRL2, 0x0000);
1255 regmap_write(rt298->regmap, RT298_MIC1_DET_CTRL, 0x0816);
1256 regmap_update_bits(rt298->regmap,
1259 regmap_update_bits(rt298->regmap,
1265 if (!rt298->pdata.gpio2_en)
1266 regmap_write(rt298->regmap, RT298_SET_DMIC2_DEFAULT, 0x40);
1268 regmap_write(rt298->regmap, RT298_SET_DMIC2_DEFAULT, 0);
1272 regmap_write(rt298->regmap, RT298_MISC_CTRL1, 0x0000);
1273 regmap_update_bits(rt298->regmap,
1276 regmap_write(rt298->regmap, RT298_UNSOLICITED_INLINE_CMD, 0x81);
1277 regmap_write(rt298->regmap, RT298_UNSOLICITED_HP_OUT, 0x82);
1278 regmap_write(rt298->regmap, RT298_UNSOLICITED_MIC1, 0x84);
1279 regmap_update_bits(rt298->regmap, RT298_IRQ_FLAG_CTRL, 0x2, 0x2);
1281 rt298->is_hp_in = -1;
1283 if (rt298->i2c->irq) {
1284 ret = request_threaded_irq(rt298->i2c->irq, NULL, rt298_irq,
1285 IRQF_TRIGGER_HIGH | IRQF_ONESHOT, "rt298", rt298);
1302 struct rt298_priv *rt298 = i2c_get_clientdata(i2c);
1305 free_irq(i2c->irq, rt298);
1311 .name = "rt298",