sgtl5000.c 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525
  1. /*
  2. * sgtl5000.c -- SGTL5000 ALSA SoC Audio driver
  3. *
  4. * Copyright 2010-2011 Freescale Semiconductor, Inc. All Rights Reserved.
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License version 2 as
  8. * published by the Free Software Foundation.
  9. */
  10. #include <linux/module.h>
  11. #include <linux/moduleparam.h>
  12. #include <linux/init.h>
  13. #include <linux/delay.h>
  14. #include <linux/slab.h>
  15. #include <linux/pm.h>
  16. #include <linux/i2c.h>
  17. #include <linux/clk.h>
  18. #include <linux/regmap.h>
  19. #include <linux/regulator/driver.h>
  20. #include <linux/regulator/machine.h>
  21. #include <linux/regulator/consumer.h>
  22. #include <linux/of_device.h>
  23. #include <sound/core.h>
  24. #include <sound/tlv.h>
  25. #include <sound/pcm.h>
  26. #include <sound/pcm_params.h>
  27. #include <sound/soc.h>
  28. #include <sound/soc-dapm.h>
  29. #include <sound/initval.h>
  30. #include "sgtl5000.h"
  31. #define SGTL5000_DAP_REG_OFFSET 0x0100
  32. #define SGTL5000_MAX_REG_OFFSET 0x013A
  33. /* default value of sgtl5000 registers */
  34. static const struct reg_default sgtl5000_reg_defaults[] = {
  35. { SGTL5000_CHIP_DIG_POWER, 0x0000 },
  36. { SGTL5000_CHIP_CLK_CTRL, 0x0008 },
  37. { SGTL5000_CHIP_I2S_CTRL, 0x0010 },
  38. { SGTL5000_CHIP_SSS_CTRL, 0x0010 },
  39. { SGTL5000_CHIP_ADCDAC_CTRL, 0x020c },
  40. { SGTL5000_CHIP_DAC_VOL, 0x3c3c },
  41. { SGTL5000_CHIP_PAD_STRENGTH, 0x015f },
  42. { SGTL5000_CHIP_ANA_ADC_CTRL, 0x0000 },
  43. { SGTL5000_CHIP_ANA_HP_CTRL, 0x1818 },
  44. { SGTL5000_CHIP_ANA_CTRL, 0x0111 },
  45. { SGTL5000_CHIP_LINREG_CTRL, 0x0000 },
  46. { SGTL5000_CHIP_REF_CTRL, 0x0000 },
  47. { SGTL5000_CHIP_MIC_CTRL, 0x0000 },
  48. { SGTL5000_CHIP_LINE_OUT_CTRL, 0x0000 },
  49. { SGTL5000_CHIP_LINE_OUT_VOL, 0x0404 },
  50. { SGTL5000_CHIP_ANA_POWER, 0x7060 },
  51. { SGTL5000_CHIP_PLL_CTRL, 0x5000 },
  52. { SGTL5000_CHIP_CLK_TOP_CTRL, 0x0000 },
  53. { SGTL5000_CHIP_ANA_STATUS, 0x0000 },
  54. { SGTL5000_CHIP_SHORT_CTRL, 0x0000 },
  55. { SGTL5000_CHIP_ANA_TEST2, 0x0000 },
  56. { SGTL5000_DAP_CTRL, 0x0000 },
  57. { SGTL5000_DAP_PEQ, 0x0000 },
  58. { SGTL5000_DAP_BASS_ENHANCE, 0x0040 },
  59. { SGTL5000_DAP_BASS_ENHANCE_CTRL, 0x051f },
  60. { SGTL5000_DAP_AUDIO_EQ, 0x0000 },
  61. { SGTL5000_DAP_SURROUND, 0x0040 },
  62. { SGTL5000_DAP_EQ_BASS_BAND0, 0x002f },
  63. { SGTL5000_DAP_EQ_BASS_BAND1, 0x002f },
  64. { SGTL5000_DAP_EQ_BASS_BAND2, 0x002f },
  65. { SGTL5000_DAP_EQ_BASS_BAND3, 0x002f },
  66. { SGTL5000_DAP_EQ_BASS_BAND4, 0x002f },
  67. { SGTL5000_DAP_MAIN_CHAN, 0x8000 },
  68. { SGTL5000_DAP_MIX_CHAN, 0x0000 },
  69. { SGTL5000_DAP_AVC_CTRL, 0x0510 },
  70. { SGTL5000_DAP_AVC_THRESHOLD, 0x1473 },
  71. { SGTL5000_DAP_AVC_ATTACK, 0x0028 },
  72. { SGTL5000_DAP_AVC_DECAY, 0x0050 },
  73. };
  74. /* regulator supplies for sgtl5000, VDDD is an optional external supply */
  75. enum sgtl5000_regulator_supplies {
  76. VDDA,
  77. VDDIO,
  78. VDDD,
  79. SGTL5000_SUPPLY_NUM
  80. };
  81. /* vddd is optional supply */
  82. static const char *supply_names[SGTL5000_SUPPLY_NUM] = {
  83. "VDDA",
  84. "VDDIO",
  85. "VDDD"
  86. };
  87. #define LDO_CONSUMER_NAME "VDDD_LDO"
  88. #define LDO_VOLTAGE 1200000
  89. static struct regulator_consumer_supply ldo_consumer[] = {
  90. REGULATOR_SUPPLY(LDO_CONSUMER_NAME, NULL),
  91. };
  92. static struct regulator_init_data ldo_init_data = {
  93. .constraints = {
  94. .min_uV = 1200000,
  95. .max_uV = 1200000,
  96. .valid_modes_mask = REGULATOR_MODE_NORMAL,
  97. .valid_ops_mask = REGULATOR_CHANGE_STATUS,
  98. },
  99. .num_consumer_supplies = 1,
  100. .consumer_supplies = &ldo_consumer[0],
  101. };
  102. /*
  103. * sgtl5000 internal ldo regulator,
  104. * enabled when VDDD not provided
  105. */
  106. struct ldo_regulator {
  107. struct regulator_desc desc;
  108. struct regulator_dev *dev;
  109. int voltage;
  110. void *codec_data;
  111. bool enabled;
  112. };
  113. /* sgtl5000 private structure in codec */
  114. struct sgtl5000_priv {
  115. int sysclk; /* sysclk rate */
  116. int master; /* i2s master or not */
  117. int fmt; /* i2s data format */
  118. struct regulator_bulk_data supplies[SGTL5000_SUPPLY_NUM];
  119. struct ldo_regulator *ldo;
  120. struct regmap *regmap;
  121. struct clk *mclk;
  122. int revision;
  123. };
  124. /*
  125. * mic_bias power on/off share the same register bits with
  126. * output impedance of mic bias, when power on mic bias, we
  127. * need reclaim it to impedance value.
  128. * 0x0 = Powered off
  129. * 0x1 = 2Kohm
  130. * 0x2 = 4Kohm
  131. * 0x3 = 8Kohm
  132. */
  133. static int mic_bias_event(struct snd_soc_dapm_widget *w,
  134. struct snd_kcontrol *kcontrol, int event)
  135. {
  136. switch (event) {
  137. case SND_SOC_DAPM_POST_PMU:
  138. /* change mic bias resistor to 4Kohm */
  139. snd_soc_update_bits(w->codec, SGTL5000_CHIP_MIC_CTRL,
  140. SGTL5000_BIAS_R_MASK,
  141. SGTL5000_BIAS_R_4k << SGTL5000_BIAS_R_SHIFT);
  142. break;
  143. case SND_SOC_DAPM_PRE_PMD:
  144. snd_soc_update_bits(w->codec, SGTL5000_CHIP_MIC_CTRL,
  145. SGTL5000_BIAS_R_MASK, 0);
  146. break;
  147. }
  148. return 0;
  149. }
  150. /*
  151. * As manual described, ADC/DAC only works when VAG powerup,
  152. * So enabled VAG before ADC/DAC up.
  153. * In power down case, we need wait 400ms when vag fully ramped down.
  154. */
  155. static int power_vag_event(struct snd_soc_dapm_widget *w,
  156. struct snd_kcontrol *kcontrol, int event)
  157. {
  158. const u32 mask = SGTL5000_DAC_POWERUP | SGTL5000_ADC_POWERUP;
  159. switch (event) {
  160. case SND_SOC_DAPM_POST_PMU:
  161. snd_soc_update_bits(w->codec, SGTL5000_CHIP_ANA_POWER,
  162. SGTL5000_VAG_POWERUP, SGTL5000_VAG_POWERUP);
  163. break;
  164. case SND_SOC_DAPM_PRE_PMD:
  165. /*
  166. * Don't clear VAG_POWERUP, when both DAC and ADC are
  167. * operational to prevent inadvertently starving the
  168. * other one of them.
  169. */
  170. if ((snd_soc_read(w->codec, SGTL5000_CHIP_ANA_POWER) &
  171. mask) != mask) {
  172. snd_soc_update_bits(w->codec, SGTL5000_CHIP_ANA_POWER,
  173. SGTL5000_VAG_POWERUP, 0);
  174. msleep(400);
  175. }
  176. break;
  177. default:
  178. break;
  179. }
  180. return 0;
  181. }
  182. /* input sources for ADC */
  183. static const char *adc_mux_text[] = {
  184. "MIC_IN", "LINE_IN"
  185. };
  186. static SOC_ENUM_SINGLE_DECL(adc_enum,
  187. SGTL5000_CHIP_ANA_CTRL, 2,
  188. adc_mux_text);
  189. static const struct snd_kcontrol_new adc_mux =
  190. SOC_DAPM_ENUM("Capture Mux", adc_enum);
  191. /* input sources for DAC */
  192. static const char *dac_mux_text[] = {
  193. "DAC", "LINE_IN"
  194. };
  195. static SOC_ENUM_SINGLE_DECL(dac_enum,
  196. SGTL5000_CHIP_ANA_CTRL, 6,
  197. dac_mux_text);
  198. static const struct snd_kcontrol_new dac_mux =
  199. SOC_DAPM_ENUM("Headphone Mux", dac_enum);
  200. static const struct snd_soc_dapm_widget sgtl5000_dapm_widgets[] = {
  201. SND_SOC_DAPM_INPUT("LINE_IN"),
  202. SND_SOC_DAPM_INPUT("MIC_IN"),
  203. SND_SOC_DAPM_OUTPUT("HP_OUT"),
  204. SND_SOC_DAPM_OUTPUT("LINE_OUT"),
  205. SND_SOC_DAPM_SUPPLY("Mic Bias", SGTL5000_CHIP_MIC_CTRL, 8, 0,
  206. mic_bias_event,
  207. SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
  208. SND_SOC_DAPM_PGA("HP", SGTL5000_CHIP_ANA_POWER, 4, 0, NULL, 0),
  209. SND_SOC_DAPM_PGA("LO", SGTL5000_CHIP_ANA_POWER, 0, 0, NULL, 0),
  210. SND_SOC_DAPM_MUX("Capture Mux", SND_SOC_NOPM, 0, 0, &adc_mux),
  211. SND_SOC_DAPM_MUX("Headphone Mux", SND_SOC_NOPM, 0, 0, &dac_mux),
  212. /* aif for i2s input */
  213. SND_SOC_DAPM_AIF_IN("AIFIN", "Playback",
  214. 0, SGTL5000_CHIP_DIG_POWER,
  215. 0, 0),
  216. /* aif for i2s output */
  217. SND_SOC_DAPM_AIF_OUT("AIFOUT", "Capture",
  218. 0, SGTL5000_CHIP_DIG_POWER,
  219. 1, 0),
  220. SND_SOC_DAPM_ADC("ADC", "Capture", SGTL5000_CHIP_ANA_POWER, 1, 0),
  221. SND_SOC_DAPM_DAC("DAC", "Playback", SGTL5000_CHIP_ANA_POWER, 3, 0),
  222. SND_SOC_DAPM_PRE("VAG_POWER_PRE", power_vag_event),
  223. SND_SOC_DAPM_POST("VAG_POWER_POST", power_vag_event),
  224. };
  225. /* routes for sgtl5000 */
  226. static const struct snd_soc_dapm_route sgtl5000_dapm_routes[] = {
  227. {"Capture Mux", "LINE_IN", "LINE_IN"}, /* line_in --> adc_mux */
  228. {"Capture Mux", "MIC_IN", "MIC_IN"}, /* mic_in --> adc_mux */
  229. {"ADC", NULL, "Capture Mux"}, /* adc_mux --> adc */
  230. {"AIFOUT", NULL, "ADC"}, /* adc --> i2s_out */
  231. {"DAC", NULL, "AIFIN"}, /* i2s-->dac,skip audio mux */
  232. {"Headphone Mux", "DAC", "DAC"}, /* dac --> hp_mux */
  233. {"LO", NULL, "DAC"}, /* dac --> line_out */
  234. {"Headphone Mux", "LINE_IN", "LINE_IN"},/* line_in --> hp_mux */
  235. {"HP", NULL, "Headphone Mux"}, /* hp_mux --> hp */
  236. {"LINE_OUT", NULL, "LO"},
  237. {"HP_OUT", NULL, "HP"},
  238. };
  239. /* custom function to fetch info of PCM playback volume */
  240. static int dac_info_volsw(struct snd_kcontrol *kcontrol,
  241. struct snd_ctl_elem_info *uinfo)
  242. {
  243. uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
  244. uinfo->count = 2;
  245. uinfo->value.integer.min = 0;
  246. uinfo->value.integer.max = 0xfc - 0x3c;
  247. return 0;
  248. }
  249. /*
  250. * custom function to get of PCM playback volume
  251. *
  252. * dac volume register
  253. * 15-------------8-7--------------0
  254. * | R channel vol | L channel vol |
  255. * -------------------------------
  256. *
  257. * PCM volume with 0.5017 dB steps from 0 to -90 dB
  258. *
  259. * register values map to dB
  260. * 0x3B and less = Reserved
  261. * 0x3C = 0 dB
  262. * 0x3D = -0.5 dB
  263. * 0xF0 = -90 dB
  264. * 0xFC and greater = Muted
  265. *
  266. * register value map to userspace value
  267. *
  268. * register value 0x3c(0dB) 0xf0(-90dB)0xfc
  269. * ------------------------------
  270. * userspace value 0xc0 0
  271. */
  272. static int dac_get_volsw(struct snd_kcontrol *kcontrol,
  273. struct snd_ctl_elem_value *ucontrol)
  274. {
  275. struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
  276. int reg;
  277. int l;
  278. int r;
  279. reg = snd_soc_read(codec, SGTL5000_CHIP_DAC_VOL);
  280. /* get left channel volume */
  281. l = (reg & SGTL5000_DAC_VOL_LEFT_MASK) >> SGTL5000_DAC_VOL_LEFT_SHIFT;
  282. /* get right channel volume */
  283. r = (reg & SGTL5000_DAC_VOL_RIGHT_MASK) >> SGTL5000_DAC_VOL_RIGHT_SHIFT;
  284. /* make sure value fall in (0x3c,0xfc) */
  285. l = clamp(l, 0x3c, 0xfc);
  286. r = clamp(r, 0x3c, 0xfc);
  287. /* invert it and map to userspace value */
  288. l = 0xfc - l;
  289. r = 0xfc - r;
  290. ucontrol->value.integer.value[0] = l;
  291. ucontrol->value.integer.value[1] = r;
  292. return 0;
  293. }
  294. /*
  295. * custom function to put of PCM playback volume
  296. *
  297. * dac volume register
  298. * 15-------------8-7--------------0
  299. * | R channel vol | L channel vol |
  300. * -------------------------------
  301. *
  302. * PCM volume with 0.5017 dB steps from 0 to -90 dB
  303. *
  304. * register values map to dB
  305. * 0x3B and less = Reserved
  306. * 0x3C = 0 dB
  307. * 0x3D = -0.5 dB
  308. * 0xF0 = -90 dB
  309. * 0xFC and greater = Muted
  310. *
  311. * userspace value map to register value
  312. *
  313. * userspace value 0xc0 0
  314. * ------------------------------
  315. * register value 0x3c(0dB) 0xf0(-90dB)0xfc
  316. */
  317. static int dac_put_volsw(struct snd_kcontrol *kcontrol,
  318. struct snd_ctl_elem_value *ucontrol)
  319. {
  320. struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
  321. int reg;
  322. int l;
  323. int r;
  324. l = ucontrol->value.integer.value[0];
  325. r = ucontrol->value.integer.value[1];
  326. /* make sure userspace volume fall in (0, 0xfc-0x3c) */
  327. l = clamp(l, 0, 0xfc - 0x3c);
  328. r = clamp(r, 0, 0xfc - 0x3c);
  329. /* invert it, get the value can be set to register */
  330. l = 0xfc - l;
  331. r = 0xfc - r;
  332. /* shift to get the register value */
  333. reg = l << SGTL5000_DAC_VOL_LEFT_SHIFT |
  334. r << SGTL5000_DAC_VOL_RIGHT_SHIFT;
  335. snd_soc_write(codec, SGTL5000_CHIP_DAC_VOL, reg);
  336. return 0;
  337. }
  338. static const DECLARE_TLV_DB_SCALE(capture_6db_attenuate, -600, 600, 0);
  339. /* tlv for mic gain, 0db 20db 30db 40db */
  340. static const unsigned int mic_gain_tlv[] = {
  341. TLV_DB_RANGE_HEAD(2),
  342. 0, 0, TLV_DB_SCALE_ITEM(0, 0, 0),
  343. 1, 3, TLV_DB_SCALE_ITEM(2000, 1000, 0),
  344. };
  345. /* tlv for hp volume, -51.5db to 12.0db, step .5db */
  346. static const DECLARE_TLV_DB_SCALE(headphone_volume, -5150, 50, 0);
  347. static const struct snd_kcontrol_new sgtl5000_snd_controls[] = {
  348. /* SOC_DOUBLE_S8_TLV with invert */
  349. {
  350. .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
  351. .name = "PCM Playback Volume",
  352. .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |
  353. SNDRV_CTL_ELEM_ACCESS_READWRITE,
  354. .info = dac_info_volsw,
  355. .get = dac_get_volsw,
  356. .put = dac_put_volsw,
  357. },
  358. SOC_DOUBLE("Capture Volume", SGTL5000_CHIP_ANA_ADC_CTRL, 0, 4, 0xf, 0),
  359. SOC_SINGLE_TLV("Capture Attenuate Switch (-6dB)",
  360. SGTL5000_CHIP_ANA_ADC_CTRL,
  361. 8, 1, 0, capture_6db_attenuate),
  362. SOC_SINGLE("Capture ZC Switch", SGTL5000_CHIP_ANA_CTRL, 1, 1, 0),
  363. SOC_DOUBLE_TLV("Headphone Playback Volume",
  364. SGTL5000_CHIP_ANA_HP_CTRL,
  365. 0, 8,
  366. 0x7f, 1,
  367. headphone_volume),
  368. SOC_SINGLE("Headphone Playback ZC Switch", SGTL5000_CHIP_ANA_CTRL,
  369. 5, 1, 0),
  370. SOC_SINGLE_TLV("Mic Volume", SGTL5000_CHIP_MIC_CTRL,
  371. 0, 3, 0, mic_gain_tlv),
  372. };
  373. /* mute the codec used by alsa core */
  374. static int sgtl5000_digital_mute(struct snd_soc_dai *codec_dai, int mute)
  375. {
  376. struct snd_soc_codec *codec = codec_dai->codec;
  377. u16 adcdac_ctrl = SGTL5000_DAC_MUTE_LEFT | SGTL5000_DAC_MUTE_RIGHT;
  378. snd_soc_update_bits(codec, SGTL5000_CHIP_ADCDAC_CTRL,
  379. adcdac_ctrl, mute ? adcdac_ctrl : 0);
  380. return 0;
  381. }
  382. /* set codec format */
  383. static int sgtl5000_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
  384. {
  385. struct snd_soc_codec *codec = codec_dai->codec;
  386. struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(codec);
  387. u16 i2sctl = 0;
  388. sgtl5000->master = 0;
  389. /*
  390. * i2s clock and frame master setting.
  391. * ONLY support:
  392. * - clock and frame slave,
  393. * - clock and frame master
  394. */
  395. switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
  396. case SND_SOC_DAIFMT_CBS_CFS:
  397. break;
  398. case SND_SOC_DAIFMT_CBM_CFM:
  399. i2sctl |= SGTL5000_I2S_MASTER;
  400. sgtl5000->master = 1;
  401. break;
  402. default:
  403. return -EINVAL;
  404. }
  405. /* setting i2s data format */
  406. switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
  407. case SND_SOC_DAIFMT_DSP_A:
  408. i2sctl |= SGTL5000_I2S_MODE_PCM;
  409. break;
  410. case SND_SOC_DAIFMT_DSP_B:
  411. i2sctl |= SGTL5000_I2S_MODE_PCM;
  412. i2sctl |= SGTL5000_I2S_LRALIGN;
  413. break;
  414. case SND_SOC_DAIFMT_I2S:
  415. i2sctl |= SGTL5000_I2S_MODE_I2S_LJ;
  416. break;
  417. case SND_SOC_DAIFMT_RIGHT_J:
  418. i2sctl |= SGTL5000_I2S_MODE_RJ;
  419. i2sctl |= SGTL5000_I2S_LRPOL;
  420. break;
  421. case SND_SOC_DAIFMT_LEFT_J:
  422. i2sctl |= SGTL5000_I2S_MODE_I2S_LJ;
  423. i2sctl |= SGTL5000_I2S_LRALIGN;
  424. break;
  425. default:
  426. return -EINVAL;
  427. }
  428. sgtl5000->fmt = fmt & SND_SOC_DAIFMT_FORMAT_MASK;
  429. /* Clock inversion */
  430. switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
  431. case SND_SOC_DAIFMT_NB_NF:
  432. break;
  433. case SND_SOC_DAIFMT_IB_NF:
  434. i2sctl |= SGTL5000_I2S_SCLK_INV;
  435. break;
  436. default:
  437. return -EINVAL;
  438. }
  439. snd_soc_write(codec, SGTL5000_CHIP_I2S_CTRL, i2sctl);
  440. return 0;
  441. }
  442. /* set codec sysclk */
  443. static int sgtl5000_set_dai_sysclk(struct snd_soc_dai *codec_dai,
  444. int clk_id, unsigned int freq, int dir)
  445. {
  446. struct snd_soc_codec *codec = codec_dai->codec;
  447. struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(codec);
  448. switch (clk_id) {
  449. case SGTL5000_SYSCLK:
  450. sgtl5000->sysclk = freq;
  451. break;
  452. default:
  453. return -EINVAL;
  454. }
  455. return 0;
  456. }
  457. /*
  458. * set clock according to i2s frame clock,
  459. * sgtl5000 provide 2 clock sources.
  460. * 1. sys_mclk. sample freq can only configure to
  461. * 1/256, 1/384, 1/512 of sys_mclk.
  462. * 2. pll. can derive any audio clocks.
  463. *
  464. * clock setting rules:
  465. * 1. in slave mode, only sys_mclk can use.
  466. * 2. as constraint by sys_mclk, sample freq should
  467. * set to 32k, 44.1k and above.
  468. * 3. using sys_mclk prefer to pll to save power.
  469. */
  470. static int sgtl5000_set_clock(struct snd_soc_codec *codec, int frame_rate)
  471. {
  472. struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(codec);
  473. int clk_ctl = 0;
  474. int sys_fs; /* sample freq */
  475. /*
  476. * sample freq should be divided by frame clock,
  477. * if frame clock lower than 44.1khz, sample feq should set to
  478. * 32khz or 44.1khz.
  479. */
  480. switch (frame_rate) {
  481. case 8000:
  482. case 16000:
  483. sys_fs = 32000;
  484. break;
  485. case 11025:
  486. case 22050:
  487. sys_fs = 44100;
  488. break;
  489. default:
  490. sys_fs = frame_rate;
  491. break;
  492. }
  493. /* set divided factor of frame clock */
  494. switch (sys_fs / frame_rate) {
  495. case 4:
  496. clk_ctl |= SGTL5000_RATE_MODE_DIV_4 << SGTL5000_RATE_MODE_SHIFT;
  497. break;
  498. case 2:
  499. clk_ctl |= SGTL5000_RATE_MODE_DIV_2 << SGTL5000_RATE_MODE_SHIFT;
  500. break;
  501. case 1:
  502. clk_ctl |= SGTL5000_RATE_MODE_DIV_1 << SGTL5000_RATE_MODE_SHIFT;
  503. break;
  504. default:
  505. return -EINVAL;
  506. }
  507. /* set the sys_fs according to frame rate */
  508. switch (sys_fs) {
  509. case 32000:
  510. clk_ctl |= SGTL5000_SYS_FS_32k << SGTL5000_SYS_FS_SHIFT;
  511. break;
  512. case 44100:
  513. clk_ctl |= SGTL5000_SYS_FS_44_1k << SGTL5000_SYS_FS_SHIFT;
  514. break;
  515. case 48000:
  516. clk_ctl |= SGTL5000_SYS_FS_48k << SGTL5000_SYS_FS_SHIFT;
  517. break;
  518. case 96000:
  519. clk_ctl |= SGTL5000_SYS_FS_96k << SGTL5000_SYS_FS_SHIFT;
  520. break;
  521. default:
  522. dev_err(codec->dev, "frame rate %d not supported\n",
  523. frame_rate);
  524. return -EINVAL;
  525. }
  526. /*
  527. * calculate the divider of mclk/sample_freq,
  528. * factor of freq =96k can only be 256, since mclk in range (12m,27m)
  529. */
  530. switch (sgtl5000->sysclk / sys_fs) {
  531. case 256:
  532. clk_ctl |= SGTL5000_MCLK_FREQ_256FS <<
  533. SGTL5000_MCLK_FREQ_SHIFT;
  534. break;
  535. case 384:
  536. clk_ctl |= SGTL5000_MCLK_FREQ_384FS <<
  537. SGTL5000_MCLK_FREQ_SHIFT;
  538. break;
  539. case 512:
  540. clk_ctl |= SGTL5000_MCLK_FREQ_512FS <<
  541. SGTL5000_MCLK_FREQ_SHIFT;
  542. break;
  543. default:
  544. /* if mclk not satisify the divider, use pll */
  545. if (sgtl5000->master) {
  546. clk_ctl |= SGTL5000_MCLK_FREQ_PLL <<
  547. SGTL5000_MCLK_FREQ_SHIFT;
  548. } else {
  549. dev_err(codec->dev,
  550. "PLL not supported in slave mode\n");
  551. dev_err(codec->dev, "%d ratio is not supported. "
  552. "SYS_MCLK needs to be 256, 384 or 512 * fs\n",
  553. sgtl5000->sysclk / sys_fs);
  554. return -EINVAL;
  555. }
  556. }
  557. /* if using pll, please check manual 6.4.2 for detail */
  558. if ((clk_ctl & SGTL5000_MCLK_FREQ_MASK) == SGTL5000_MCLK_FREQ_PLL) {
  559. u64 out, t;
  560. int div2;
  561. int pll_ctl;
  562. unsigned int in, int_div, frac_div;
  563. if (sgtl5000->sysclk > 17000000) {
  564. div2 = 1;
  565. in = sgtl5000->sysclk / 2;
  566. } else {
  567. div2 = 0;
  568. in = sgtl5000->sysclk;
  569. }
  570. if (sys_fs == 44100)
  571. out = 180633600;
  572. else
  573. out = 196608000;
  574. t = do_div(out, in);
  575. int_div = out;
  576. t *= 2048;
  577. do_div(t, in);
  578. frac_div = t;
  579. pll_ctl = int_div << SGTL5000_PLL_INT_DIV_SHIFT |
  580. frac_div << SGTL5000_PLL_FRAC_DIV_SHIFT;
  581. snd_soc_write(codec, SGTL5000_CHIP_PLL_CTRL, pll_ctl);
  582. if (div2)
  583. snd_soc_update_bits(codec,
  584. SGTL5000_CHIP_CLK_TOP_CTRL,
  585. SGTL5000_INPUT_FREQ_DIV2,
  586. SGTL5000_INPUT_FREQ_DIV2);
  587. else
  588. snd_soc_update_bits(codec,
  589. SGTL5000_CHIP_CLK_TOP_CTRL,
  590. SGTL5000_INPUT_FREQ_DIV2,
  591. 0);
  592. /* power up pll */
  593. snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
  594. SGTL5000_PLL_POWERUP | SGTL5000_VCOAMP_POWERUP,
  595. SGTL5000_PLL_POWERUP | SGTL5000_VCOAMP_POWERUP);
  596. /* if using pll, clk_ctrl must be set after pll power up */
  597. snd_soc_write(codec, SGTL5000_CHIP_CLK_CTRL, clk_ctl);
  598. } else {
  599. /* otherwise, clk_ctrl must be set before pll power down */
  600. snd_soc_write(codec, SGTL5000_CHIP_CLK_CTRL, clk_ctl);
  601. /* power down pll */
  602. snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
  603. SGTL5000_PLL_POWERUP | SGTL5000_VCOAMP_POWERUP,
  604. 0);
  605. }
  606. return 0;
  607. }
  608. /*
  609. * Set PCM DAI bit size and sample rate.
  610. * input: params_rate, params_fmt
  611. */
  612. static int sgtl5000_pcm_hw_params(struct snd_pcm_substream *substream,
  613. struct snd_pcm_hw_params *params,
  614. struct snd_soc_dai *dai)
  615. {
  616. struct snd_soc_codec *codec = dai->codec;
  617. struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(codec);
  618. int channels = params_channels(params);
  619. int i2s_ctl = 0;
  620. int stereo;
  621. int ret;
  622. /* sysclk should already set */
  623. if (!sgtl5000->sysclk) {
  624. dev_err(codec->dev, "%s: set sysclk first!\n", __func__);
  625. return -EFAULT;
  626. }
  627. if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
  628. stereo = SGTL5000_DAC_STEREO;
  629. else
  630. stereo = SGTL5000_ADC_STEREO;
  631. /* set mono to save power */
  632. snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER, stereo,
  633. channels == 1 ? 0 : stereo);
  634. /* set codec clock base on lrclk */
  635. ret = sgtl5000_set_clock(codec, params_rate(params));
  636. if (ret)
  637. return ret;
  638. /* set i2s data format */
  639. switch (params_width(params)) {
  640. case 16:
  641. if (sgtl5000->fmt == SND_SOC_DAIFMT_RIGHT_J)
  642. return -EINVAL;
  643. i2s_ctl |= SGTL5000_I2S_DLEN_16 << SGTL5000_I2S_DLEN_SHIFT;
  644. i2s_ctl |= SGTL5000_I2S_SCLKFREQ_32FS <<
  645. SGTL5000_I2S_SCLKFREQ_SHIFT;
  646. break;
  647. case 20:
  648. i2s_ctl |= SGTL5000_I2S_DLEN_20 << SGTL5000_I2S_DLEN_SHIFT;
  649. i2s_ctl |= SGTL5000_I2S_SCLKFREQ_64FS <<
  650. SGTL5000_I2S_SCLKFREQ_SHIFT;
  651. break;
  652. case 24:
  653. i2s_ctl |= SGTL5000_I2S_DLEN_24 << SGTL5000_I2S_DLEN_SHIFT;
  654. i2s_ctl |= SGTL5000_I2S_SCLKFREQ_64FS <<
  655. SGTL5000_I2S_SCLKFREQ_SHIFT;
  656. break;
  657. case 32:
  658. if (sgtl5000->fmt == SND_SOC_DAIFMT_RIGHT_J)
  659. return -EINVAL;
  660. i2s_ctl |= SGTL5000_I2S_DLEN_32 << SGTL5000_I2S_DLEN_SHIFT;
  661. i2s_ctl |= SGTL5000_I2S_SCLKFREQ_64FS <<
  662. SGTL5000_I2S_SCLKFREQ_SHIFT;
  663. break;
  664. default:
  665. return -EINVAL;
  666. }
  667. snd_soc_update_bits(codec, SGTL5000_CHIP_I2S_CTRL,
  668. SGTL5000_I2S_DLEN_MASK | SGTL5000_I2S_SCLKFREQ_MASK,
  669. i2s_ctl);
  670. return 0;
  671. }
  672. #ifdef CONFIG_REGULATOR
  673. static int ldo_regulator_is_enabled(struct regulator_dev *dev)
  674. {
  675. struct ldo_regulator *ldo = rdev_get_drvdata(dev);
  676. return ldo->enabled;
  677. }
  678. static int ldo_regulator_enable(struct regulator_dev *dev)
  679. {
  680. struct ldo_regulator *ldo = rdev_get_drvdata(dev);
  681. struct snd_soc_codec *codec = (struct snd_soc_codec *)ldo->codec_data;
  682. int reg;
  683. if (ldo_regulator_is_enabled(dev))
  684. return 0;
  685. /* set regulator value firstly */
  686. reg = (1600 - ldo->voltage / 1000) / 50;
  687. reg = clamp(reg, 0x0, 0xf);
  688. /* amend the voltage value, unit: uV */
  689. ldo->voltage = (1600 - reg * 50) * 1000;
  690. /* set voltage to register */
  691. snd_soc_update_bits(codec, SGTL5000_CHIP_LINREG_CTRL,
  692. SGTL5000_LINREG_VDDD_MASK, reg);
  693. snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
  694. SGTL5000_LINEREG_D_POWERUP,
  695. SGTL5000_LINEREG_D_POWERUP);
  696. /* when internal ldo enabled, simple digital power can be disabled */
  697. snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
  698. SGTL5000_LINREG_SIMPLE_POWERUP,
  699. 0);
  700. ldo->enabled = 1;
  701. return 0;
  702. }
  703. static int ldo_regulator_disable(struct regulator_dev *dev)
  704. {
  705. struct ldo_regulator *ldo = rdev_get_drvdata(dev);
  706. struct snd_soc_codec *codec = (struct snd_soc_codec *)ldo->codec_data;
  707. snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
  708. SGTL5000_LINEREG_D_POWERUP,
  709. 0);
  710. /* clear voltage info */
  711. snd_soc_update_bits(codec, SGTL5000_CHIP_LINREG_CTRL,
  712. SGTL5000_LINREG_VDDD_MASK, 0);
  713. ldo->enabled = 0;
  714. return 0;
  715. }
  716. static int ldo_regulator_get_voltage(struct regulator_dev *dev)
  717. {
  718. struct ldo_regulator *ldo = rdev_get_drvdata(dev);
  719. return ldo->voltage;
  720. }
  721. static struct regulator_ops ldo_regulator_ops = {
  722. .is_enabled = ldo_regulator_is_enabled,
  723. .enable = ldo_regulator_enable,
  724. .disable = ldo_regulator_disable,
  725. .get_voltage = ldo_regulator_get_voltage,
  726. };
  727. static int ldo_regulator_register(struct snd_soc_codec *codec,
  728. struct regulator_init_data *init_data,
  729. int voltage)
  730. {
  731. struct ldo_regulator *ldo;
  732. struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(codec);
  733. struct regulator_config config = { };
  734. ldo = kzalloc(sizeof(struct ldo_regulator), GFP_KERNEL);
  735. if (!ldo)
  736. return -ENOMEM;
  737. ldo->desc.name = kstrdup(dev_name(codec->dev), GFP_KERNEL);
  738. if (!ldo->desc.name) {
  739. kfree(ldo);
  740. dev_err(codec->dev, "failed to allocate decs name memory\n");
  741. return -ENOMEM;
  742. }
  743. ldo->desc.type = REGULATOR_VOLTAGE;
  744. ldo->desc.owner = THIS_MODULE;
  745. ldo->desc.ops = &ldo_regulator_ops;
  746. ldo->desc.n_voltages = 1;
  747. ldo->codec_data = codec;
  748. ldo->voltage = voltage;
  749. config.dev = codec->dev;
  750. config.driver_data = ldo;
  751. config.init_data = init_data;
  752. ldo->dev = regulator_register(&ldo->desc, &config);
  753. if (IS_ERR(ldo->dev)) {
  754. int ret = PTR_ERR(ldo->dev);
  755. dev_err(codec->dev, "failed to register regulator\n");
  756. kfree(ldo->desc.name);
  757. kfree(ldo);
  758. return ret;
  759. }
  760. sgtl5000->ldo = ldo;
  761. return 0;
  762. }
  763. static int ldo_regulator_remove(struct snd_soc_codec *codec)
  764. {
  765. struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(codec);
  766. struct ldo_regulator *ldo = sgtl5000->ldo;
  767. if (!ldo)
  768. return 0;
  769. regulator_unregister(ldo->dev);
  770. kfree(ldo->desc.name);
  771. kfree(ldo);
  772. return 0;
  773. }
  774. #else
  775. static int ldo_regulator_register(struct snd_soc_codec *codec,
  776. struct regulator_init_data *init_data,
  777. int voltage)
  778. {
  779. dev_err(codec->dev, "this setup needs regulator support in the kernel\n");
  780. return -EINVAL;
  781. }
  782. static int ldo_regulator_remove(struct snd_soc_codec *codec)
  783. {
  784. return 0;
  785. }
  786. #endif
  787. /*
  788. * set dac bias
  789. * common state changes:
  790. * startup:
  791. * off --> standby --> prepare --> on
  792. * standby --> prepare --> on
  793. *
  794. * stop:
  795. * on --> prepare --> standby
  796. */
  797. static int sgtl5000_set_bias_level(struct snd_soc_codec *codec,
  798. enum snd_soc_bias_level level)
  799. {
  800. int ret;
  801. struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(codec);
  802. switch (level) {
  803. case SND_SOC_BIAS_ON:
  804. case SND_SOC_BIAS_PREPARE:
  805. break;
  806. case SND_SOC_BIAS_STANDBY:
  807. if (codec->dapm.bias_level == SND_SOC_BIAS_OFF) {
  808. ret = regulator_bulk_enable(
  809. ARRAY_SIZE(sgtl5000->supplies),
  810. sgtl5000->supplies);
  811. if (ret)
  812. return ret;
  813. udelay(10);
  814. regcache_cache_only(sgtl5000->regmap, false);
  815. ret = regcache_sync(sgtl5000->regmap);
  816. if (ret != 0) {
  817. dev_err(codec->dev,
  818. "Failed to restore cache: %d\n", ret);
  819. regcache_cache_only(sgtl5000->regmap, true);
  820. regulator_bulk_disable(ARRAY_SIZE(sgtl5000->supplies),
  821. sgtl5000->supplies);
  822. return ret;
  823. }
  824. }
  825. break;
  826. case SND_SOC_BIAS_OFF:
  827. regcache_cache_only(sgtl5000->regmap, true);
  828. regulator_bulk_disable(ARRAY_SIZE(sgtl5000->supplies),
  829. sgtl5000->supplies);
  830. break;
  831. }
  832. codec->dapm.bias_level = level;
  833. return 0;
  834. }
  835. #define SGTL5000_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
  836. SNDRV_PCM_FMTBIT_S20_3LE |\
  837. SNDRV_PCM_FMTBIT_S24_LE |\
  838. SNDRV_PCM_FMTBIT_S32_LE)
  839. static const struct snd_soc_dai_ops sgtl5000_ops = {
  840. .hw_params = sgtl5000_pcm_hw_params,
  841. .digital_mute = sgtl5000_digital_mute,
  842. .set_fmt = sgtl5000_set_dai_fmt,
  843. .set_sysclk = sgtl5000_set_dai_sysclk,
  844. };
  845. static struct snd_soc_dai_driver sgtl5000_dai = {
  846. .name = "sgtl5000",
  847. .playback = {
  848. .stream_name = "Playback",
  849. .channels_min = 1,
  850. .channels_max = 2,
  851. /*
  852. * only support 8~48K + 96K,
  853. * TODO modify hw_param to support more
  854. */
  855. .rates = SNDRV_PCM_RATE_8000_48000 | SNDRV_PCM_RATE_96000,
  856. .formats = SGTL5000_FORMATS,
  857. },
  858. .capture = {
  859. .stream_name = "Capture",
  860. .channels_min = 1,
  861. .channels_max = 2,
  862. .rates = SNDRV_PCM_RATE_8000_48000 | SNDRV_PCM_RATE_96000,
  863. .formats = SGTL5000_FORMATS,
  864. },
  865. .ops = &sgtl5000_ops,
  866. .symmetric_rates = 1,
  867. };
  868. static bool sgtl5000_volatile(struct device *dev, unsigned int reg)
  869. {
  870. switch (reg) {
  871. case SGTL5000_CHIP_ID:
  872. case SGTL5000_CHIP_ADCDAC_CTRL:
  873. case SGTL5000_CHIP_ANA_STATUS:
  874. return true;
  875. }
  876. return false;
  877. }
  878. static bool sgtl5000_readable(struct device *dev, unsigned int reg)
  879. {
  880. switch (reg) {
  881. case SGTL5000_CHIP_ID:
  882. case SGTL5000_CHIP_DIG_POWER:
  883. case SGTL5000_CHIP_CLK_CTRL:
  884. case SGTL5000_CHIP_I2S_CTRL:
  885. case SGTL5000_CHIP_SSS_CTRL:
  886. case SGTL5000_CHIP_ADCDAC_CTRL:
  887. case SGTL5000_CHIP_DAC_VOL:
  888. case SGTL5000_CHIP_PAD_STRENGTH:
  889. case SGTL5000_CHIP_ANA_ADC_CTRL:
  890. case SGTL5000_CHIP_ANA_HP_CTRL:
  891. case SGTL5000_CHIP_ANA_CTRL:
  892. case SGTL5000_CHIP_LINREG_CTRL:
  893. case SGTL5000_CHIP_REF_CTRL:
  894. case SGTL5000_CHIP_MIC_CTRL:
  895. case SGTL5000_CHIP_LINE_OUT_CTRL:
  896. case SGTL5000_CHIP_LINE_OUT_VOL:
  897. case SGTL5000_CHIP_ANA_POWER:
  898. case SGTL5000_CHIP_PLL_CTRL:
  899. case SGTL5000_CHIP_CLK_TOP_CTRL:
  900. case SGTL5000_CHIP_ANA_STATUS:
  901. case SGTL5000_CHIP_SHORT_CTRL:
  902. case SGTL5000_CHIP_ANA_TEST2:
  903. case SGTL5000_DAP_CTRL:
  904. case SGTL5000_DAP_PEQ:
  905. case SGTL5000_DAP_BASS_ENHANCE:
  906. case SGTL5000_DAP_BASS_ENHANCE_CTRL:
  907. case SGTL5000_DAP_AUDIO_EQ:
  908. case SGTL5000_DAP_SURROUND:
  909. case SGTL5000_DAP_FLT_COEF_ACCESS:
  910. case SGTL5000_DAP_COEF_WR_B0_MSB:
  911. case SGTL5000_DAP_COEF_WR_B0_LSB:
  912. case SGTL5000_DAP_EQ_BASS_BAND0:
  913. case SGTL5000_DAP_EQ_BASS_BAND1:
  914. case SGTL5000_DAP_EQ_BASS_BAND2:
  915. case SGTL5000_DAP_EQ_BASS_BAND3:
  916. case SGTL5000_DAP_EQ_BASS_BAND4:
  917. case SGTL5000_DAP_MAIN_CHAN:
  918. case SGTL5000_DAP_MIX_CHAN:
  919. case SGTL5000_DAP_AVC_CTRL:
  920. case SGTL5000_DAP_AVC_THRESHOLD:
  921. case SGTL5000_DAP_AVC_ATTACK:
  922. case SGTL5000_DAP_AVC_DECAY:
  923. case SGTL5000_DAP_COEF_WR_B1_MSB:
  924. case SGTL5000_DAP_COEF_WR_B1_LSB:
  925. case SGTL5000_DAP_COEF_WR_B2_MSB:
  926. case SGTL5000_DAP_COEF_WR_B2_LSB:
  927. case SGTL5000_DAP_COEF_WR_A1_MSB:
  928. case SGTL5000_DAP_COEF_WR_A1_LSB:
  929. case SGTL5000_DAP_COEF_WR_A2_MSB:
  930. case SGTL5000_DAP_COEF_WR_A2_LSB:
  931. return true;
  932. default:
  933. return false;
  934. }
  935. }
  936. /*
  937. * sgtl5000 has 3 internal power supplies:
  938. * 1. VAG, normally set to vdda/2
  939. * 2. chargepump, set to different value
  940. * according to voltage of vdda and vddio
  941. * 3. line out VAG, normally set to vddio/2
  942. *
  943. * and should be set according to:
  944. * 1. vddd provided by external or not
  945. * 2. vdda and vddio voltage value. > 3.1v or not
  946. * 3. chip revision >=0x11 or not. If >=0x11, not use external vddd.
  947. */
  948. static int sgtl5000_set_power_regs(struct snd_soc_codec *codec)
  949. {
  950. int vddd;
  951. int vdda;
  952. int vddio;
  953. u16 ana_pwr;
  954. u16 lreg_ctrl;
  955. int vag;
  956. struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(codec);
  957. vdda = regulator_get_voltage(sgtl5000->supplies[VDDA].consumer);
  958. vddio = regulator_get_voltage(sgtl5000->supplies[VDDIO].consumer);
  959. vddd = regulator_get_voltage(sgtl5000->supplies[VDDD].consumer);
  960. vdda = vdda / 1000;
  961. vddio = vddio / 1000;
  962. vddd = vddd / 1000;
  963. if (vdda <= 0 || vddio <= 0 || vddd < 0) {
  964. dev_err(codec->dev, "regulator voltage not set correctly\n");
  965. return -EINVAL;
  966. }
  967. /* according to datasheet, maximum voltage of supplies */
  968. if (vdda > 3600 || vddio > 3600 || vddd > 1980) {
  969. dev_err(codec->dev,
  970. "exceed max voltage vdda %dmV vddio %dmV vddd %dmV\n",
  971. vdda, vddio, vddd);
  972. return -EINVAL;
  973. }
  974. /* reset value */
  975. ana_pwr = snd_soc_read(codec, SGTL5000_CHIP_ANA_POWER);
  976. ana_pwr |= SGTL5000_DAC_STEREO |
  977. SGTL5000_ADC_STEREO |
  978. SGTL5000_REFTOP_POWERUP;
  979. lreg_ctrl = snd_soc_read(codec, SGTL5000_CHIP_LINREG_CTRL);
  980. if (vddio < 3100 && vdda < 3100) {
  981. /* enable internal oscillator used for charge pump */
  982. snd_soc_update_bits(codec, SGTL5000_CHIP_CLK_TOP_CTRL,
  983. SGTL5000_INT_OSC_EN,
  984. SGTL5000_INT_OSC_EN);
  985. /* Enable VDDC charge pump */
  986. ana_pwr |= SGTL5000_VDDC_CHRGPMP_POWERUP;
  987. } else if (vddio >= 3100 && vdda >= 3100) {
  988. ana_pwr &= ~SGTL5000_VDDC_CHRGPMP_POWERUP;
  989. /* VDDC use VDDIO rail */
  990. lreg_ctrl |= SGTL5000_VDDC_ASSN_OVRD;
  991. lreg_ctrl |= SGTL5000_VDDC_MAN_ASSN_VDDIO <<
  992. SGTL5000_VDDC_MAN_ASSN_SHIFT;
  993. }
  994. snd_soc_write(codec, SGTL5000_CHIP_LINREG_CTRL, lreg_ctrl);
  995. snd_soc_write(codec, SGTL5000_CHIP_ANA_POWER, ana_pwr);
  996. /* set voltage to register */
  997. snd_soc_update_bits(codec, SGTL5000_CHIP_LINREG_CTRL,
  998. SGTL5000_LINREG_VDDD_MASK, 0x8);
  999. /*
  1000. * if vddd linear reg has been enabled,
  1001. * simple digital supply should be clear to get
  1002. * proper VDDD voltage.
  1003. */
  1004. if (ana_pwr & SGTL5000_LINEREG_D_POWERUP)
  1005. snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
  1006. SGTL5000_LINREG_SIMPLE_POWERUP,
  1007. 0);
  1008. else
  1009. snd_soc_update_bits(codec, SGTL5000_CHIP_ANA_POWER,
  1010. SGTL5000_LINREG_SIMPLE_POWERUP |
  1011. SGTL5000_STARTUP_POWERUP,
  1012. 0);
  1013. /*
  1014. * set ADC/DAC VAG to vdda / 2,
  1015. * should stay in range (0.8v, 1.575v)
  1016. */
  1017. vag = vdda / 2;
  1018. if (vag <= SGTL5000_ANA_GND_BASE)
  1019. vag = 0;
  1020. else if (vag >= SGTL5000_ANA_GND_BASE + SGTL5000_ANA_GND_STP *
  1021. (SGTL5000_ANA_GND_MASK >> SGTL5000_ANA_GND_SHIFT))
  1022. vag = SGTL5000_ANA_GND_MASK >> SGTL5000_ANA_GND_SHIFT;
  1023. else
  1024. vag = (vag - SGTL5000_ANA_GND_BASE) / SGTL5000_ANA_GND_STP;
  1025. snd_soc_update_bits(codec, SGTL5000_CHIP_REF_CTRL,
  1026. SGTL5000_ANA_GND_MASK, vag << SGTL5000_ANA_GND_SHIFT);
  1027. /* set line out VAG to vddio / 2, in range (0.8v, 1.675v) */
  1028. vag = vddio / 2;
  1029. if (vag <= SGTL5000_LINE_OUT_GND_BASE)
  1030. vag = 0;
  1031. else if (vag >= SGTL5000_LINE_OUT_GND_BASE +
  1032. SGTL5000_LINE_OUT_GND_STP * SGTL5000_LINE_OUT_GND_MAX)
  1033. vag = SGTL5000_LINE_OUT_GND_MAX;
  1034. else
  1035. vag = (vag - SGTL5000_LINE_OUT_GND_BASE) /
  1036. SGTL5000_LINE_OUT_GND_STP;
  1037. snd_soc_update_bits(codec, SGTL5000_CHIP_LINE_OUT_CTRL,
  1038. SGTL5000_LINE_OUT_CURRENT_MASK |
  1039. SGTL5000_LINE_OUT_GND_MASK,
  1040. vag << SGTL5000_LINE_OUT_GND_SHIFT |
  1041. SGTL5000_LINE_OUT_CURRENT_360u <<
  1042. SGTL5000_LINE_OUT_CURRENT_SHIFT);
  1043. return 0;
  1044. }
  1045. static int sgtl5000_replace_vddd_with_ldo(struct snd_soc_codec *codec)
  1046. {
  1047. struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(codec);
  1048. int ret;
  1049. /* set internal ldo to 1.2v */
  1050. ret = ldo_regulator_register(codec, &ldo_init_data, LDO_VOLTAGE);
  1051. if (ret) {
  1052. dev_err(codec->dev,
  1053. "Failed to register vddd internal supplies: %d\n", ret);
  1054. return ret;
  1055. }
  1056. sgtl5000->supplies[VDDD].supply = LDO_CONSUMER_NAME;
  1057. dev_info(codec->dev, "Using internal LDO instead of VDDD\n");
  1058. return 0;
  1059. }
  1060. static int sgtl5000_enable_regulators(struct snd_soc_codec *codec)
  1061. {
  1062. int ret;
  1063. int i;
  1064. int external_vddd = 0;
  1065. struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(codec);
  1066. struct regulator *vddd;
  1067. for (i = 0; i < ARRAY_SIZE(sgtl5000->supplies); i++)
  1068. sgtl5000->supplies[i].supply = supply_names[i];
  1069. /* External VDDD only works before revision 0x11 */
  1070. if (sgtl5000->revision < 0x11) {
  1071. vddd = regulator_get_optional(codec->dev, "VDDD");
  1072. if (IS_ERR(vddd)) {
  1073. /* See if it's just not registered yet */
  1074. if (PTR_ERR(vddd) == -EPROBE_DEFER)
  1075. return -EPROBE_DEFER;
  1076. } else {
  1077. external_vddd = 1;
  1078. regulator_put(vddd);
  1079. }
  1080. }
  1081. if (!external_vddd) {
  1082. ret = sgtl5000_replace_vddd_with_ldo(codec);
  1083. if (ret)
  1084. return ret;
  1085. }
  1086. ret = regulator_bulk_get(codec->dev, ARRAY_SIZE(sgtl5000->supplies),
  1087. sgtl5000->supplies);
  1088. if (ret)
  1089. goto err_ldo_remove;
  1090. ret = regulator_bulk_enable(ARRAY_SIZE(sgtl5000->supplies),
  1091. sgtl5000->supplies);
  1092. if (ret)
  1093. goto err_regulator_free;
  1094. /* wait for all power rails bring up */
  1095. udelay(10);
  1096. return 0;
  1097. err_regulator_free:
  1098. regulator_bulk_free(ARRAY_SIZE(sgtl5000->supplies),
  1099. sgtl5000->supplies);
  1100. err_ldo_remove:
  1101. if (!external_vddd)
  1102. ldo_regulator_remove(codec);
  1103. return ret;
  1104. }
  1105. static int sgtl5000_probe(struct snd_soc_codec *codec)
  1106. {
  1107. int ret;
  1108. struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(codec);
  1109. ret = sgtl5000_enable_regulators(codec);
  1110. if (ret)
  1111. return ret;
  1112. /* power up sgtl5000 */
  1113. ret = sgtl5000_set_power_regs(codec);
  1114. if (ret)
  1115. goto err;
  1116. /* enable small pop, introduce 400ms delay in turning off */
  1117. snd_soc_update_bits(codec, SGTL5000_CHIP_REF_CTRL,
  1118. SGTL5000_SMALL_POP, 1);
  1119. /* disable short cut detector */
  1120. snd_soc_write(codec, SGTL5000_CHIP_SHORT_CTRL, 0);
  1121. /*
  1122. * set i2s as default input of sound switch
  1123. * TODO: add sound switch to control and dapm widge.
  1124. */
  1125. snd_soc_write(codec, SGTL5000_CHIP_SSS_CTRL,
  1126. SGTL5000_DAC_SEL_I2S_IN << SGTL5000_DAC_SEL_SHIFT);
  1127. snd_soc_write(codec, SGTL5000_CHIP_DIG_POWER,
  1128. SGTL5000_ADC_EN | SGTL5000_DAC_EN);
  1129. /* enable dac volume ramp by default */
  1130. snd_soc_write(codec, SGTL5000_CHIP_ADCDAC_CTRL,
  1131. SGTL5000_DAC_VOL_RAMP_EN |
  1132. SGTL5000_DAC_MUTE_RIGHT |
  1133. SGTL5000_DAC_MUTE_LEFT);
  1134. snd_soc_write(codec, SGTL5000_CHIP_PAD_STRENGTH, 0x015f);
  1135. snd_soc_write(codec, SGTL5000_CHIP_ANA_CTRL,
  1136. SGTL5000_HP_ZCD_EN |
  1137. SGTL5000_ADC_ZCD_EN);
  1138. snd_soc_write(codec, SGTL5000_CHIP_MIC_CTRL, 2);
  1139. /*
  1140. * disable DAP
  1141. * TODO:
  1142. * Enable DAP in kcontrol and dapm.
  1143. */
  1144. snd_soc_write(codec, SGTL5000_DAP_CTRL, 0);
  1145. return 0;
  1146. err:
  1147. regulator_bulk_disable(ARRAY_SIZE(sgtl5000->supplies),
  1148. sgtl5000->supplies);
  1149. regulator_bulk_free(ARRAY_SIZE(sgtl5000->supplies),
  1150. sgtl5000->supplies);
  1151. ldo_regulator_remove(codec);
  1152. return ret;
  1153. }
  1154. static int sgtl5000_remove(struct snd_soc_codec *codec)
  1155. {
  1156. struct sgtl5000_priv *sgtl5000 = snd_soc_codec_get_drvdata(codec);
  1157. regulator_bulk_disable(ARRAY_SIZE(sgtl5000->supplies),
  1158. sgtl5000->supplies);
  1159. regulator_bulk_free(ARRAY_SIZE(sgtl5000->supplies),
  1160. sgtl5000->supplies);
  1161. ldo_regulator_remove(codec);
  1162. return 0;
  1163. }
  1164. static struct snd_soc_codec_driver sgtl5000_driver = {
  1165. .probe = sgtl5000_probe,
  1166. .remove = sgtl5000_remove,
  1167. .set_bias_level = sgtl5000_set_bias_level,
  1168. .suspend_bias_off = true,
  1169. .controls = sgtl5000_snd_controls,
  1170. .num_controls = ARRAY_SIZE(sgtl5000_snd_controls),
  1171. .dapm_widgets = sgtl5000_dapm_widgets,
  1172. .num_dapm_widgets = ARRAY_SIZE(sgtl5000_dapm_widgets),
  1173. .dapm_routes = sgtl5000_dapm_routes,
  1174. .num_dapm_routes = ARRAY_SIZE(sgtl5000_dapm_routes),
  1175. };
  1176. static const struct regmap_config sgtl5000_regmap = {
  1177. .reg_bits = 16,
  1178. .val_bits = 16,
  1179. .reg_stride = 2,
  1180. .max_register = SGTL5000_MAX_REG_OFFSET,
  1181. .volatile_reg = sgtl5000_volatile,
  1182. .readable_reg = sgtl5000_readable,
  1183. .cache_type = REGCACHE_RBTREE,
  1184. .reg_defaults = sgtl5000_reg_defaults,
  1185. .num_reg_defaults = ARRAY_SIZE(sgtl5000_reg_defaults),
  1186. };
  1187. /*
  1188. * Write all the default values from sgtl5000_reg_defaults[] array into the
  1189. * sgtl5000 registers, to make sure we always start with the sane registers
  1190. * values as stated in the datasheet.
  1191. *
  1192. * Since sgtl5000 does not have a reset line, nor a reset command in software,
  1193. * we follow this approach to guarantee we always start from the default values
  1194. * and avoid problems like, not being able to probe after an audio playback
  1195. * followed by a system reset or a 'reboot' command in Linux
  1196. */
  1197. static int sgtl5000_fill_defaults(struct sgtl5000_priv *sgtl5000)
  1198. {
  1199. int i, ret, val, index;
  1200. for (i = 0; i < ARRAY_SIZE(sgtl5000_reg_defaults); i++) {
  1201. val = sgtl5000_reg_defaults[i].def;
  1202. index = sgtl5000_reg_defaults[i].reg;
  1203. ret = regmap_write(sgtl5000->regmap, index, val);
  1204. if (ret)
  1205. return ret;
  1206. }
  1207. return 0;
  1208. }
  1209. static int sgtl5000_i2c_probe(struct i2c_client *client,
  1210. const struct i2c_device_id *id)
  1211. {
  1212. struct sgtl5000_priv *sgtl5000;
  1213. int ret, reg, rev;
  1214. unsigned int mclk;
  1215. sgtl5000 = devm_kzalloc(&client->dev, sizeof(struct sgtl5000_priv),
  1216. GFP_KERNEL);
  1217. if (!sgtl5000)
  1218. return -ENOMEM;
  1219. sgtl5000->regmap = devm_regmap_init_i2c(client, &sgtl5000_regmap);
  1220. if (IS_ERR(sgtl5000->regmap)) {
  1221. ret = PTR_ERR(sgtl5000->regmap);
  1222. dev_err(&client->dev, "Failed to allocate regmap: %d\n", ret);
  1223. return ret;
  1224. }
  1225. sgtl5000->mclk = devm_clk_get(&client->dev, NULL);
  1226. if (IS_ERR(sgtl5000->mclk)) {
  1227. ret = PTR_ERR(sgtl5000->mclk);
  1228. dev_err(&client->dev, "Failed to get mclock: %d\n", ret);
  1229. /* Defer the probe to see if the clk will be provided later */
  1230. if (ret == -ENOENT)
  1231. return -EPROBE_DEFER;
  1232. return ret;
  1233. }
  1234. /* SGTL5000 SYS_MCLK should be between 8 and 27 MHz */
  1235. mclk = clk_get_rate(sgtl5000->mclk);
  1236. if (mclk < 8000000 || mclk > 27000000) {
  1237. dev_err(&client->dev, "Invalid SYS_CLK frequency: %u.%03uMHz\n",
  1238. mclk / 1000000, mclk / 1000 % 1000);
  1239. return -EINVAL;
  1240. }
  1241. ret = clk_prepare_enable(sgtl5000->mclk);
  1242. if (ret)
  1243. return ret;
  1244. /* Need 8 clocks before I2C accesses */
  1245. udelay(1);
  1246. /* read chip information */
  1247. ret = regmap_read(sgtl5000->regmap, SGTL5000_CHIP_ID, &reg);
  1248. if (ret)
  1249. goto disable_clk;
  1250. if (((reg & SGTL5000_PARTID_MASK) >> SGTL5000_PARTID_SHIFT) !=
  1251. SGTL5000_PARTID_PART_ID) {
  1252. dev_err(&client->dev,
  1253. "Device with ID register %x is not a sgtl5000\n", reg);
  1254. ret = -ENODEV;
  1255. goto disable_clk;
  1256. }
  1257. rev = (reg & SGTL5000_REVID_MASK) >> SGTL5000_REVID_SHIFT;
  1258. dev_info(&client->dev, "sgtl5000 revision 0x%x\n", rev);
  1259. sgtl5000->revision = rev;
  1260. i2c_set_clientdata(client, sgtl5000);
  1261. /* Ensure sgtl5000 will start with sane register values */
  1262. ret = sgtl5000_fill_defaults(sgtl5000);
  1263. if (ret)
  1264. goto disable_clk;
  1265. ret = snd_soc_register_codec(&client->dev,
  1266. &sgtl5000_driver, &sgtl5000_dai, 1);
  1267. if (ret)
  1268. goto disable_clk;
  1269. return 0;
  1270. disable_clk:
  1271. clk_disable_unprepare(sgtl5000->mclk);
  1272. return ret;
  1273. }
  1274. static int sgtl5000_i2c_remove(struct i2c_client *client)
  1275. {
  1276. struct sgtl5000_priv *sgtl5000 = i2c_get_clientdata(client);
  1277. snd_soc_unregister_codec(&client->dev);
  1278. clk_disable_unprepare(sgtl5000->mclk);
  1279. return 0;
  1280. }
  1281. static const struct i2c_device_id sgtl5000_id[] = {
  1282. {"sgtl5000", 0},
  1283. {},
  1284. };
  1285. MODULE_DEVICE_TABLE(i2c, sgtl5000_id);
  1286. static const struct of_device_id sgtl5000_dt_ids[] = {
  1287. { .compatible = "fsl,sgtl5000", },
  1288. { /* sentinel */ }
  1289. };
  1290. MODULE_DEVICE_TABLE(of, sgtl5000_dt_ids);
  1291. static struct i2c_driver sgtl5000_i2c_driver = {
  1292. .driver = {
  1293. .name = "sgtl5000",
  1294. .owner = THIS_MODULE,
  1295. .of_match_table = sgtl5000_dt_ids,
  1296. },
  1297. .probe = sgtl5000_i2c_probe,
  1298. .remove = sgtl5000_i2c_remove,
  1299. .id_table = sgtl5000_id,
  1300. };
  1301. module_i2c_driver(sgtl5000_i2c_driver);
  1302. MODULE_DESCRIPTION("Freescale SGTL5000 ALSA SoC Codec Driver");
  1303. MODULE_AUTHOR("Zeng Zhaoming <zengzm.kernel@gmail.com>");
  1304. MODULE_LICENSE("GPL");