aqt1000-core.c 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589
  1. /* Copyright (c) 2011-2018, The Linux Foundation. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. */
  12. #include <linux/kernel.h>
  13. #include <linux/module.h>
  14. #include <linux/of_device.h>
  15. #include <linux/slab.h>
  16. #include <linux/ratelimit.h>
  17. #include <linux/mfd/core.h>
  18. #include <linux/delay.h>
  19. #include <linux/gpio.h>
  20. #include <linux/debugfs.h>
  21. #include <linux/i2c.h>
  22. #include <linux/regmap.h>
  23. #include <sound/soc.h>
  24. #include "../msm-cdc-pinctrl.h"
  25. #include "../msm-cdc-supply.h"
  26. #include "aqt1000-registers.h"
  27. #include "aqt1000-internal.h"
  28. #include "aqt1000.h"
  29. #include "aqt1000-utils.h"
  30. static int aqt1000_bringup(struct aqt1000 *aqt)
  31. {
  32. struct aqt1000_pdata *pdata;
  33. u8 clk_div = 0, mclk = 1;
  34. if (!aqt->regmap) {
  35. dev_err(aqt->dev, "%s: aqt regmap is NULL\n", __func__);
  36. return -EINVAL;
  37. }
  38. /* Bringup register write sequence */
  39. regmap_update_bits(aqt->regmap, AQT1000_BUCK_5V_CTRL_CCL_1, 0xF0, 0xF0);
  40. regmap_update_bits(aqt->regmap, AQT1000_BIAS_CCOMP_FINE_ADJ,
  41. 0xF0, 0x90);
  42. regmap_update_bits(aqt->regmap, AQT1000_ANA_BIAS, 0x80, 0x80);
  43. regmap_update_bits(aqt->regmap, AQT1000_ANA_BIAS, 0x40, 0x40);
  44. /* Added 1msec sleep as per HW requirement */
  45. usleep_range(1000, 1010);
  46. regmap_update_bits(aqt->regmap, AQT1000_ANA_BIAS, 0x40, 0x00);
  47. clk_div = 0x04; /* Assumption is CLK DIV 2 */
  48. pdata = dev_get_platdata(aqt->dev);
  49. if (pdata) {
  50. if (pdata->mclk_rate == AQT1000_CLK_12P288MHZ)
  51. mclk = 0;
  52. clk_div = (((pdata->ext_clk_rate / pdata->mclk_rate) >> 1)
  53. << 2);
  54. }
  55. regmap_update_bits(aqt->regmap, AQT1000_CHIP_CFG0_CLK_CFG_MCLK,
  56. 0x03, mclk);
  57. regmap_update_bits(aqt->regmap, AQT1000_CLK_SYS_MCLK1_PRG,
  58. 0x0C, clk_div);
  59. /* Source clock enable */
  60. regmap_update_bits(aqt->regmap, AQT1000_CLK_SYS_MCLK1_PRG, 0x02, 0x02);
  61. /* Ungate the source clock */
  62. regmap_update_bits(aqt->regmap, AQT1000_CLK_SYS_MCLK1_PRG, 0x10, 0x10);
  63. /* Set the I2S_HS_CLK reference to CLK DIV 2 */
  64. regmap_update_bits(aqt->regmap, AQT1000_CLK_SYS_MCLK2_I2S_HS_CLK_PRG,
  65. 0x60, 0x20);
  66. /* Set the PLL preset to CLK9P6M_IN_12P288M_OUT */
  67. regmap_update_bits(aqt->regmap, AQT1000_CLK_SYS_PLL_PRESET, 0x0F, 0x02);
  68. /* Enable clock PLL */
  69. regmap_update_bits(aqt->regmap, AQT1000_CLK_SYS_PLL_ENABLES,
  70. 0x01, 0x01);
  71. /* Add 100usec delay as per HW requirement */
  72. usleep_range(100, 110);
  73. /* Set AQT to I2S Master */
  74. regmap_update_bits(aqt->regmap, AQT1000_I2S_I2S_0_CTL, 0x02, 0x02);
  75. /* Enable I2S HS clock */
  76. regmap_update_bits(aqt->regmap, AQT1000_CLK_SYS_MCLK2_I2S_HS_CLK_PRG,
  77. 0x01, 0x01);
  78. /* Codec digital reset */
  79. regmap_update_bits(aqt->regmap, AQT1000_CHIP_CFG0_RST_CTL, 0x01, 0x01);
  80. return 0;
  81. }
  82. static int aqt1000_device_init(struct aqt1000 *aqt)
  83. {
  84. int ret = 0;
  85. mutex_init(&aqt->io_lock);
  86. mutex_init(&aqt->xfer_lock);
  87. mutex_init(&aqt->cdc_bg_clk_lock);
  88. mutex_init(&aqt->master_bias_lock);
  89. ret = aqt1000_bringup(aqt);
  90. if (ret) {
  91. ret = -EPROBE_DEFER;
  92. goto done;
  93. }
  94. done:
  95. mutex_destroy(&aqt->io_lock);
  96. mutex_destroy(&aqt->xfer_lock);
  97. mutex_destroy(&aqt->cdc_bg_clk_lock);
  98. mutex_destroy(&aqt->master_bias_lock);
  99. return ret;
  100. }
  101. static int aqt1000_i2c_write(struct aqt1000 *aqt1000, unsigned short reg,
  102. void *val, int bytes)
  103. {
  104. struct i2c_msg *msg;
  105. int ret = 0;
  106. u8 reg_addr = 0;
  107. u8 data[bytes + 1];
  108. struct aqt1000_i2c *aqt1000_i2c;
  109. u8 *value = (u8 *)val;
  110. aqt1000_i2c = &aqt1000->i2c_dev;
  111. if (aqt1000_i2c == NULL || aqt1000_i2c->client == NULL) {
  112. pr_err("%s: Failed to get device info\n", __func__);
  113. return -ENODEV;
  114. }
  115. reg_addr = (u8)reg;
  116. msg = &aqt1000_i2c->xfer_msg[0];
  117. msg->addr = aqt1000_i2c->client->addr;
  118. msg->len = bytes + 1;
  119. msg->flags = 0;
  120. data[0] = reg;
  121. data[1] = *value;
  122. msg->buf = data;
  123. ret = i2c_transfer(aqt1000_i2c->client->adapter,
  124. aqt1000_i2c->xfer_msg, 1);
  125. /* Try again if the write fails */
  126. if (ret != 1) {
  127. ret = i2c_transfer(aqt1000_i2c->client->adapter,
  128. aqt1000_i2c->xfer_msg, 1);
  129. if (ret != 1) {
  130. dev_err(aqt1000->dev,
  131. "%s: I2C write failed, reg: 0x%x ret: %d\n",
  132. __func__, reg, ret);
  133. return ret;
  134. }
  135. }
  136. dev_dbg(aqt1000->dev, "%s: write success register = %x val = %x\n",
  137. __func__, reg, data[1]);
  138. return 0;
  139. }
  140. static int aqt1000_i2c_read(struct aqt1000 *aqt1000, unsigned short reg,
  141. void *dst, int bytes)
  142. {
  143. struct i2c_msg *msg;
  144. int ret = 0;
  145. u8 reg_addr = 0;
  146. struct aqt1000_i2c *aqt1000_i2c;
  147. u8 i = 0;
  148. unsigned char *dest = (unsigned char *)dst;
  149. aqt1000_i2c = &aqt1000->i2c_dev;
  150. if (aqt1000_i2c == NULL || aqt1000_i2c->client == NULL) {
  151. pr_err("%s: Failed to get device info\n", __func__);
  152. return -ENODEV;
  153. }
  154. for (i = 0; i < bytes; i++) {
  155. reg_addr = (u8)reg++;
  156. msg = &aqt1000_i2c->xfer_msg[0];
  157. msg->addr = aqt1000_i2c->client->addr;
  158. msg->len = 1;
  159. msg->flags = 0;
  160. msg->buf = &reg_addr;
  161. msg = &aqt1000_i2c->xfer_msg[1];
  162. msg->addr = aqt1000_i2c->client->addr;
  163. msg->len = 1;
  164. msg->flags = I2C_M_RD;
  165. msg->buf = dest++;
  166. ret = i2c_transfer(aqt1000_i2c->client->adapter,
  167. aqt1000_i2c->xfer_msg, 2);
  168. /* Try again if read fails first time */
  169. if (ret != 2) {
  170. ret = i2c_transfer(aqt1000_i2c->client->adapter,
  171. aqt1000_i2c->xfer_msg, 2);
  172. if (ret != 2) {
  173. dev_err(aqt1000->dev,
  174. "%s: I2C read failed, reg: 0x%x\n",
  175. __func__, reg);
  176. return ret;
  177. }
  178. }
  179. }
  180. return 0;
  181. }
  182. static int aqt1000_reset(struct device *dev)
  183. {
  184. struct aqt1000 *aqt1000;
  185. int rc = 0;
  186. if (!dev)
  187. return -ENODEV;
  188. aqt1000 = dev_get_drvdata(dev);
  189. if (!aqt1000)
  190. return -EINVAL;
  191. if (!aqt1000->aqt_rst_np) {
  192. dev_err(dev, "%s: reset gpio device node not specified\n",
  193. __func__);
  194. return -EINVAL;
  195. }
  196. if (!msm_cdc_pinctrl_get_state(aqt1000->aqt_rst_np)) {
  197. rc = msm_cdc_pinctrl_select_sleep_state(aqt1000->aqt_rst_np);
  198. if (rc) {
  199. dev_err(dev, "%s: aqt sleep state request fail!\n",
  200. __func__);
  201. return rc;
  202. }
  203. /* 20ms sleep required after pulling the reset gpio to LOW */
  204. msleep(20);
  205. rc = msm_cdc_pinctrl_select_active_state(aqt1000->aqt_rst_np);
  206. if (rc) {
  207. dev_err(dev,
  208. "%s: aqt active state request fail, ret: %d\n",
  209. __func__, rc);
  210. return rc;
  211. }
  212. /* 20ms sleep required after pulling the reset gpio to HIGH */
  213. msleep(20);
  214. }
  215. return rc;
  216. }
  217. static int aqt1000_read_of_property_u32(struct device *dev, const char *name,
  218. u32 *val)
  219. {
  220. int rc = 0;
  221. rc = of_property_read_u32(dev->of_node, name, val);
  222. if (rc)
  223. dev_err(dev, "%s: Looking up %s property in node %s failed",
  224. __func__, name, dev->of_node->full_name);
  225. return rc;
  226. }
  227. static void aqt1000_dt_parse_micbias_info(struct device *dev,
  228. struct aqt1000_micbias_setting *mb)
  229. {
  230. u32 prop_val;
  231. int rc;
  232. if (of_find_property(dev->of_node, "qcom,cdc-micbias-ldoh-v", NULL)) {
  233. rc = aqt1000_read_of_property_u32(dev,
  234. "qcom,cdc-micbias-ldoh-v",
  235. &prop_val);
  236. if (!rc)
  237. mb->ldoh_v = (u8)prop_val;
  238. }
  239. /* MB1 */
  240. if (of_find_property(dev->of_node, "qcom,cdc-micbias-cfilt1-mv",
  241. NULL)) {
  242. rc = aqt1000_read_of_property_u32(dev,
  243. "qcom,cdc-micbias-cfilt1-mv",
  244. &prop_val);
  245. if (!rc)
  246. mb->cfilt1_mv = prop_val;
  247. rc = aqt1000_read_of_property_u32(dev,
  248. "qcom,cdc-micbias1-cfilt-sel",
  249. &prop_val);
  250. if (!rc)
  251. mb->bias1_cfilt_sel = (u8)prop_val;
  252. } else if (of_find_property(dev->of_node, "qcom,cdc-micbias1-mv",
  253. NULL)) {
  254. rc = aqt1000_read_of_property_u32(dev,
  255. "qcom,cdc-micbias1-mv",
  256. &prop_val);
  257. if (!rc)
  258. mb->micb1_mv = prop_val;
  259. } else {
  260. dev_info(dev, "%s: Micbias1 DT property not found\n",
  261. __func__);
  262. }
  263. /* Print micbias info */
  264. dev_dbg(dev, "%s: ldoh_v %u cfilt1_mv %u micb1_mv %u \n", __func__,
  265. (u32)mb->ldoh_v, (u32)mb->cfilt1_mv, (u32)mb->micb1_mv);
  266. }
  267. static struct aqt1000_pdata *aqt1000_populate_dt_data(struct device *dev)
  268. {
  269. struct aqt1000_pdata *pdata;
  270. u32 prop_val;
  271. if (!dev || !dev->of_node)
  272. return NULL;
  273. pdata = devm_kzalloc(dev, sizeof(struct aqt1000_pdata),
  274. GFP_KERNEL);
  275. if (!pdata)
  276. return NULL;
  277. /* Parse power supplies */
  278. msm_cdc_get_power_supplies(dev, &pdata->regulator,
  279. &pdata->num_supplies);
  280. if (!pdata->regulator || (pdata->num_supplies <= 0)) {
  281. dev_err(dev, "%s: no power supplies defined for codec\n",
  282. __func__);
  283. goto err_power_sup;
  284. }
  285. /* Parse micbias info */
  286. aqt1000_dt_parse_micbias_info(dev, &pdata->micbias);
  287. pdata->aqt_rst_np = of_parse_phandle(dev->of_node,
  288. "qcom,aqt-rst-gpio-node", 0);
  289. if (!pdata->aqt_rst_np) {
  290. dev_err(dev, "%s: Looking up %s property in node %s failed\n",
  291. __func__, "qcom,aqt-rst-gpio-node",
  292. dev->of_node->full_name);
  293. goto err_parse_dt_prop;
  294. }
  295. if (!(aqt1000_read_of_property_u32(dev, "qcom,cdc-ext-clk-rate",
  296. &prop_val)))
  297. pdata->ext_clk_rate = prop_val;
  298. if (pdata->ext_clk_rate != AQT1000_CLK_24P576MHZ &&
  299. pdata->ext_clk_rate != AQT1000_CLK_19P2MHZ &&
  300. pdata->ext_clk_rate != AQT1000_CLK_12P288MHZ) {
  301. /* Use the default ext_clk_rate if the DT value is wrong */
  302. pdata->ext_clk_rate = AQT1000_CLK_9P6MHZ;
  303. }
  304. prop_val = 0;
  305. if (!(aqt1000_read_of_property_u32(dev, "qcom,cdc-mclk-clk-rate",
  306. &prop_val)))
  307. pdata->mclk_rate = prop_val;
  308. if (pdata->mclk_rate != AQT1000_CLK_9P6MHZ &&
  309. pdata->mclk_rate != AQT1000_CLK_12P288MHZ) {
  310. dev_err(dev, "%s: Invalid mclk_rate = %u\n", __func__,
  311. pdata->mclk_rate);
  312. goto err_parse_dt_prop;
  313. }
  314. if (pdata->ext_clk_rate % pdata->mclk_rate) {
  315. dev_err(dev,
  316. "%s: Invalid clock group, ext_clk = %d mclk = %d\n",
  317. __func__, pdata->ext_clk_rate, pdata->mclk_rate);
  318. goto err_parse_dt_prop;
  319. }
  320. return pdata;
  321. err_parse_dt_prop:
  322. devm_kfree(dev, pdata->regulator);
  323. pdata->regulator = NULL;
  324. pdata->num_supplies = 0;
  325. err_power_sup:
  326. devm_kfree(dev, pdata);
  327. return NULL;
  328. }
  329. static int aqt1000_bringdown(struct device *dev)
  330. {
  331. /* No sequence for teardown */
  332. return 0;
  333. }
  334. static void aqt1000_device_exit(struct aqt1000 *aqt)
  335. {
  336. aqt1000_bringdown(aqt->dev);
  337. mutex_destroy(&aqt->io_lock);
  338. mutex_destroy(&aqt->xfer_lock);
  339. mutex_destroy(&aqt->cdc_bg_clk_lock);
  340. mutex_destroy(&aqt->master_bias_lock);
  341. }
  342. static int aqt1000_i2c_probe(struct i2c_client *client,
  343. const struct i2c_device_id *id)
  344. {
  345. struct aqt1000 *aqt1000 = NULL;
  346. struct aqt1000_pdata *pdata = NULL;
  347. int ret = 0;
  348. pdata = aqt1000_populate_dt_data(&client->dev);
  349. if (!pdata) {
  350. dev_err(&client->dev,
  351. "%s: Fail to obtain pdata from device tree\n",
  352. __func__);
  353. ret = -EINVAL;
  354. goto fail;
  355. }
  356. client->dev.platform_data = pdata;
  357. aqt1000 = devm_kzalloc(&client->dev, sizeof(struct aqt1000),
  358. GFP_KERNEL);
  359. if (!aqt1000) {
  360. ret = -ENOMEM;
  361. goto fail;
  362. }
  363. aqt1000->regmap = aqt1000_regmap_init(&client->dev,
  364. &aqt1000_regmap_config);
  365. if (IS_ERR(aqt1000->regmap)) {
  366. ret = PTR_ERR(aqt1000->regmap);
  367. dev_err(&client->dev,
  368. "%s: Failed to init register map: %d\n",
  369. __func__, ret);
  370. goto fail;
  371. }
  372. aqt1000->aqt_rst_np = pdata->aqt_rst_np;
  373. if (!aqt1000->aqt_rst_np) {
  374. dev_err(&client->dev, "%s: pinctrl not used for rst_n\n",
  375. __func__);
  376. ret = -EINVAL;
  377. goto fail;
  378. }
  379. if (i2c_check_functionality(client->adapter,
  380. I2C_FUNC_I2C) == 0) {
  381. dev_dbg(&client->dev, "%s: can't talk I2C?\n", __func__);
  382. ret = -EIO;
  383. goto fail;
  384. }
  385. dev_set_drvdata(&client->dev, aqt1000);
  386. aqt1000->dev = &client->dev;
  387. aqt1000->dev_up = true;
  388. aqt1000->mclk_rate = pdata->mclk_rate;
  389. aqt1000->num_of_supplies = pdata->num_supplies;
  390. ret = msm_cdc_init_supplies(aqt1000->dev, &aqt1000->supplies,
  391. pdata->regulator,
  392. pdata->num_supplies);
  393. if (!aqt1000->supplies) {
  394. dev_err(aqt1000->dev, "%s: Cannot init aqt supplies\n",
  395. __func__);
  396. goto err_codec;
  397. }
  398. ret = msm_cdc_enable_static_supplies(aqt1000->dev,
  399. aqt1000->supplies,
  400. pdata->regulator,
  401. pdata->num_supplies);
  402. if (ret) {
  403. dev_err(aqt1000->dev, "%s: aqt static supply enable failed!\n",
  404. __func__);
  405. goto err_codec;
  406. }
  407. /* 5 usec sleep is needed as per HW requirement */
  408. usleep_range(5, 10);
  409. ret = aqt1000_reset(aqt1000->dev);
  410. if (ret) {
  411. dev_err(aqt1000->dev, "%s: Codec reset failed\n", __func__);
  412. goto err_supplies;
  413. }
  414. aqt1000->i2c_dev.client = client;
  415. aqt1000->read_dev = aqt1000_i2c_read;
  416. aqt1000->write_dev = aqt1000_i2c_write;
  417. ret = aqt1000_device_init(aqt1000);
  418. if (ret) {
  419. pr_err("%s: error, initializing device failed (%d)\n",
  420. __func__, ret);
  421. goto err_supplies;
  422. }
  423. ret = aqt_register_codec(&client->dev);
  424. if (ret) {
  425. dev_err(aqt1000->dev, "%s: Codec registration failed\n",
  426. __func__);
  427. goto err_cdc_register;
  428. }
  429. return ret;
  430. err_cdc_register:
  431. aqt1000_device_exit(aqt1000);
  432. err_supplies:
  433. msm_cdc_release_supplies(aqt1000->dev, aqt1000->supplies,
  434. pdata->regulator,
  435. pdata->num_supplies);
  436. pdata->regulator = NULL;
  437. pdata->num_supplies = 0;
  438. err_codec:
  439. devm_kfree(&client->dev, aqt1000);
  440. dev_set_drvdata(&client->dev, NULL);
  441. fail:
  442. return ret;
  443. }
  444. static int aqt1000_i2c_remove(struct i2c_client *client)
  445. {
  446. struct aqt1000 *aqt;
  447. struct aqt1000_pdata *pdata = client->dev.platform_data;
  448. aqt = dev_get_drvdata(&client->dev);
  449. msm_cdc_release_supplies(aqt->dev, aqt->supplies,
  450. pdata->regulator,
  451. pdata->num_supplies);
  452. aqt1000_device_exit(aqt);
  453. dev_set_drvdata(&client->dev, NULL);
  454. return 0;
  455. }
  456. #ifdef CONFIG_PM_SLEEP
  457. static int aqt1000_i2c_resume(struct device *dev)
  458. {
  459. pr_debug("%s system resume\n", __func__);
  460. return 0;
  461. }
  462. static int aqt1000_i2c_suspend(struct device *dev)
  463. {
  464. pr_debug("%s system suspend\n", __func__);
  465. return 0;
  466. }
  467. #endif
  468. static struct i2c_device_id aqt1000_id_table[] = {
  469. {"aqt1000-i2c", 0},
  470. {}
  471. };
  472. MODULE_DEVICE_TABLE(i2c, aqt1000_id_table);
  473. static const struct dev_pm_ops aqt1000_i2c_pm_ops = {
  474. .suspend = aqt1000_i2c_suspend,
  475. .resume = aqt1000_i2c_resume,
  476. };
  477. static const struct of_device_id aqt_match_table[] = {
  478. {.compatible = "qcom,aqt1000-i2c-codec"},
  479. {}
  480. };
  481. MODULE_DEVICE_TABLE(of, aqt_match_table);
  482. static struct i2c_driver aqt1000_i2c_driver = {
  483. .driver = {
  484. .owner = THIS_MODULE,
  485. .name = "aqt1000-i2c-codec",
  486. #ifdef CONFIG_PM_SLEEP
  487. .pm = &aqt1000_i2c_pm_ops,
  488. #endif
  489. .of_match_table = aqt_match_table,
  490. },
  491. .id_table = aqt1000_id_table,
  492. .probe = aqt1000_i2c_probe,
  493. .remove = aqt1000_i2c_remove,
  494. };
  495. static int __init aqt1000_init(void)
  496. {
  497. return i2c_add_driver(&aqt1000_i2c_driver);
  498. }
  499. module_init(aqt1000_init);
  500. static void __exit aqt1000_exit(void)
  501. {
  502. i2c_del_driver(&aqt1000_i2c_driver);
  503. }
  504. module_exit(aqt1000_exit);
  505. MODULE_DESCRIPTION("AQT1000 Codec driver");
  506. MODULE_LICENSE("GPL v2");