qpnp-pin.c 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654
  1. /* Copyright (c) 2012-2014, 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. #define pr_fmt(fmt) "%s: " fmt, __func__
  13. #include <linux/interrupt.h>
  14. #include <linux/types.h>
  15. #include <linux/spmi.h>
  16. #include <linux/platform_device.h>
  17. #include <linux/debugfs.h>
  18. #include <linux/gpio.h>
  19. #include <linux/slab.h>
  20. #include <linux/of.h>
  21. #include <linux/of_gpio.h>
  22. #include <linux/of_irq.h>
  23. #include <linux/export.h>
  24. #include <linux/module.h>
  25. #include <linux/export.h>
  26. #include <linux/qpnp/pin.h>
  27. #define Q_REG_ADDR(q_spec, reg_index) \
  28. ((q_spec)->offset + reg_index)
  29. #define Q_REG_STATUS1 0x8
  30. #define Q_REG_STATUS1_VAL_MASK 0x1
  31. #define Q_REG_STATUS1_GPIO_EN_REV0_MASK 0x2
  32. #define Q_REG_STATUS1_GPIO_EN_MASK 0x80
  33. #define Q_REG_STATUS1_MPP_EN_MASK 0x80
  34. #define Q_NUM_CTL_REGS 0xD
  35. /* revision registers base address offsets */
  36. #define Q_REG_DIG_MINOR_REV 0x0
  37. #define Q_REG_DIG_MAJOR_REV 0x1
  38. #define Q_REG_ANA_MINOR_REV 0x2
  39. /* type registers base address offsets */
  40. #define Q_REG_TYPE 0x4
  41. #define Q_REG_SUBTYPE 0x5
  42. /* gpio peripheral type and subtype values */
  43. #define Q_GPIO_TYPE 0x10
  44. #define Q_GPIO_SUBTYPE_GPIO_4CH 0x1
  45. #define Q_GPIO_SUBTYPE_GPIOC_4CH 0x5
  46. #define Q_GPIO_SUBTYPE_GPIO_8CH 0x9
  47. #define Q_GPIO_SUBTYPE_GPIOC_8CH 0xD
  48. /* mpp peripheral type and subtype values */
  49. #define Q_MPP_TYPE 0x11
  50. #define Q_MPP_SUBTYPE_4CH_NO_ANA_OUT 0x3
  51. #define Q_MPP_SUBTYPE_ULT_4CH_NO_ANA_OUT 0x4
  52. #define Q_MPP_SUBTYPE_4CH_NO_SINK 0x5
  53. #define Q_MPP_SUBTYPE_ULT_4CH_NO_SINK 0x6
  54. #define Q_MPP_SUBTYPE_4CH_FULL_FUNC 0x7
  55. #define Q_MPP_SUBTYPE_8CH_FULL_FUNC 0xF
  56. /* control register base address offsets */
  57. #define Q_REG_MODE_CTL 0x40
  58. #define Q_REG_DIG_VIN_CTL 0x41
  59. #define Q_REG_DIG_PULL_CTL 0x42
  60. #define Q_REG_DIG_IN_CTL 0x43
  61. #define Q_REG_DIG_OUT_CTL 0x45
  62. #define Q_REG_EN_CTL 0x46
  63. #define Q_REG_AOUT_CTL 0x48
  64. #define Q_REG_AIN_CTL 0x4A
  65. #define Q_REG_SINK_CTL 0x4C
  66. /* control register regs array indices */
  67. #define Q_REG_I_MODE_CTL 0
  68. #define Q_REG_I_DIG_VIN_CTL 1
  69. #define Q_REG_I_DIG_PULL_CTL 2
  70. #define Q_REG_I_DIG_IN_CTL 3
  71. #define Q_REG_I_DIG_OUT_CTL 5
  72. #define Q_REG_I_EN_CTL 6
  73. #define Q_REG_I_AOUT_CTL 8
  74. #define Q_REG_I_AIN_CTL 10
  75. #define Q_REG_I_SINK_CTL 12
  76. /* control reg: mode */
  77. #define Q_REG_OUT_INVERT_SHIFT 0
  78. #define Q_REG_OUT_INVERT_MASK 0x1
  79. #define Q_REG_SRC_SEL_SHIFT 1
  80. #define Q_REG_SRC_SEL_MASK 0xE
  81. #define Q_REG_MODE_SEL_SHIFT 4
  82. #define Q_REG_MODE_SEL_MASK 0x70
  83. #define Q_REG_INVERT_SHIFT Q_REG_OUT_INVERT_SHIFT
  84. #define Q_REG_INVERT_MASK Q_REG_OUT_INVERT_MASK
  85. #define Q_REG_MODE_SHIFT Q_REG_MODE_SEL_SHIFT
  86. #define Q_REG_MODE_MASK Q_REG_MODE_SEL_MASK
  87. /* control reg: dig_vin */
  88. #define Q_REG_VIN_SHIFT 0
  89. #define Q_REG_VIN_MASK 0x7
  90. #define Q_REG_VIN_SEL_SHIFT Q_REG_VIN_SHIFT
  91. #define Q_REG_VIN_SEL_MASK Q_REG_VIN_MASK
  92. /* control reg: dig_pull */
  93. #define Q_REG_PULL_SHIFT 0
  94. #define Q_REG_PULL_MASK 0x7
  95. /* control reg: dig_out */
  96. #define Q_REG_OUT_STRENGTH_SHIFT 0
  97. #define Q_REG_OUT_STRENGTH_MASK 0x3
  98. #define Q_REG_OUT_TYPE_SHIFT 4
  99. #define Q_REG_OUT_TYPE_MASK 0x30
  100. #define Q_REG_OUTPUT_TYPE_SHIFT Q_REG_OUT_TYPE_SHIFT
  101. #define Q_REG_OUTPUT_TYPE_MASK Q_REG_OUT_TYPE_MASK
  102. /* control reg: en */
  103. #define Q_REG_MASTER_EN_SHIFT 7
  104. #define Q_REG_MASTER_EN_MASK 0x80
  105. /* control reg: ana_out */
  106. #define Q_REG_AOUT_REF_SHIFT 0
  107. #define Q_REG_AOUT_REF_MASK 0x7
  108. /* control reg: ana_in */
  109. #define Q_REG_AIN_ROUTE_SHIFT 0
  110. #define Q_REG_AIN_ROUTE_MASK 0x7
  111. /* control reg: sink */
  112. #define Q_REG_CS_OUT_SHIFT 0
  113. #define Q_REG_CS_OUT_MASK 0x7
  114. enum qpnp_pin_param_type {
  115. Q_PIN_CFG_MODE,
  116. Q_PIN_CFG_OUTPUT_TYPE,
  117. Q_PIN_CFG_INVERT,
  118. Q_PIN_CFG_PULL,
  119. Q_PIN_CFG_VIN_SEL,
  120. Q_PIN_CFG_OUT_STRENGTH,
  121. Q_PIN_CFG_SRC_SEL,
  122. Q_PIN_CFG_MASTER_EN,
  123. Q_PIN_CFG_AOUT_REF,
  124. Q_PIN_CFG_AIN_ROUTE,
  125. Q_PIN_CFG_CS_OUT,
  126. Q_PIN_CFG_INVALID,
  127. };
  128. #define Q_NUM_PARAMS Q_PIN_CFG_INVALID
  129. /* param error checking */
  130. #define QPNP_PIN_GPIO_MODE_INVALID 3
  131. #define QPNP_PIN_MPP_MODE_INVALID 7
  132. #define QPNP_PIN_INVERT_INVALID 2
  133. #define QPNP_PIN_OUT_BUF_INVALID 3
  134. #define QPNP_PIN_VIN_4CH_INVALID 5
  135. #define QPNP_PIN_VIN_8CH_INVALID 8
  136. #define QPNP_PIN_GPIO_PULL_INVALID 6
  137. #define QPNP_PIN_MPP_PULL_INVALID 4
  138. #define QPNP_PIN_OUT_STRENGTH_INVALID 4
  139. #define QPNP_PIN_SRC_INVALID 8
  140. #define QPNP_PIN_MASTER_INVALID 2
  141. #define QPNP_PIN_AOUT_REF_INVALID 8
  142. #define QPNP_PIN_AIN_ROUTE_INVALID 8
  143. #define QPNP_PIN_CS_OUT_INVALID 8
  144. struct qpnp_pin_spec {
  145. uint8_t slave; /* 0-15 */
  146. uint16_t offset; /* 0-255 */
  147. uint32_t gpio_chip_idx; /* offset from gpio_chip base */
  148. uint32_t pmic_pin; /* PMIC pin number */
  149. int irq; /* logical IRQ number */
  150. u8 regs[Q_NUM_CTL_REGS]; /* Control regs */
  151. u8 num_ctl_regs; /* usable number on this pin */
  152. u8 type; /* peripheral type */
  153. u8 subtype; /* peripheral subtype */
  154. u8 dig_major_rev;
  155. struct device_node *node;
  156. enum qpnp_pin_param_type params[Q_NUM_PARAMS];
  157. struct qpnp_pin_chip *q_chip;
  158. };
  159. struct qpnp_pin_chip {
  160. struct gpio_chip gpio_chip;
  161. struct spmi_device *spmi;
  162. struct qpnp_pin_spec **pmic_pins;
  163. struct qpnp_pin_spec **chip_gpios;
  164. uint32_t pmic_pin_lowest;
  165. uint32_t pmic_pin_highest;
  166. struct device_node *int_ctrl;
  167. struct list_head chip_list;
  168. struct dentry *dfs_dir;
  169. bool chip_registered;
  170. };
  171. static LIST_HEAD(qpnp_pin_chips);
  172. static DEFINE_MUTEX(qpnp_pin_chips_lock);
  173. static inline void qpnp_pmic_pin_set_spec(struct qpnp_pin_chip *q_chip,
  174. uint32_t pmic_pin,
  175. struct qpnp_pin_spec *spec)
  176. {
  177. q_chip->pmic_pins[pmic_pin - q_chip->pmic_pin_lowest] = spec;
  178. }
  179. static inline struct qpnp_pin_spec *qpnp_pmic_pin_get_spec(
  180. struct qpnp_pin_chip *q_chip,
  181. uint32_t pmic_pin)
  182. {
  183. if (pmic_pin < q_chip->pmic_pin_lowest ||
  184. pmic_pin > q_chip->pmic_pin_highest)
  185. return NULL;
  186. return q_chip->pmic_pins[pmic_pin - q_chip->pmic_pin_lowest];
  187. }
  188. static inline struct qpnp_pin_spec *qpnp_chip_gpio_get_spec(
  189. struct qpnp_pin_chip *q_chip,
  190. uint32_t chip_gpio)
  191. {
  192. if (chip_gpio > q_chip->gpio_chip.ngpio)
  193. return NULL;
  194. return q_chip->chip_gpios[chip_gpio];
  195. }
  196. static inline void qpnp_chip_gpio_set_spec(struct qpnp_pin_chip *q_chip,
  197. uint32_t chip_gpio,
  198. struct qpnp_pin_spec *spec)
  199. {
  200. q_chip->chip_gpios[chip_gpio] = spec;
  201. }
  202. /*
  203. * Determines whether a specified param's configuration is correct.
  204. * This check is two tier. First a check is done whether the hardware
  205. * supports this param and value requested. The second check validates
  206. * that the configuration is correct, given the fact that the hardware
  207. * supports it.
  208. *
  209. * Returns
  210. * -ENXIO is the hardware does not support this param.
  211. * -EINVAL if the the hardware does support this param, but the
  212. * requested value is outside the supported range.
  213. */
  214. static int qpnp_pin_check_config(enum qpnp_pin_param_type idx,
  215. struct qpnp_pin_spec *q_spec, uint32_t val)
  216. {
  217. u8 subtype = q_spec->subtype;
  218. switch (idx) {
  219. case Q_PIN_CFG_MODE:
  220. if (q_spec->type == Q_GPIO_TYPE &&
  221. val >= QPNP_PIN_GPIO_MODE_INVALID)
  222. return -EINVAL;
  223. else if (q_spec->type == Q_MPP_TYPE) {
  224. if (val >= QPNP_PIN_MPP_MODE_INVALID)
  225. return -EINVAL;
  226. if ((subtype == Q_MPP_SUBTYPE_ULT_4CH_NO_ANA_OUT ||
  227. subtype == Q_MPP_SUBTYPE_ULT_4CH_NO_SINK) &&
  228. (val == QPNP_PIN_MODE_BIDIR))
  229. return -ENXIO;
  230. }
  231. break;
  232. case Q_PIN_CFG_OUTPUT_TYPE:
  233. if (q_spec->type != Q_GPIO_TYPE)
  234. return -ENXIO;
  235. if ((val == QPNP_PIN_OUT_BUF_OPEN_DRAIN_NMOS ||
  236. val == QPNP_PIN_OUT_BUF_OPEN_DRAIN_PMOS) &&
  237. (subtype == Q_GPIO_SUBTYPE_GPIOC_4CH ||
  238. (subtype == Q_GPIO_SUBTYPE_GPIOC_8CH)))
  239. return -EINVAL;
  240. else if (val >= QPNP_PIN_OUT_BUF_INVALID)
  241. return -EINVAL;
  242. break;
  243. case Q_PIN_CFG_INVERT:
  244. if (val >= QPNP_PIN_INVERT_INVALID)
  245. return -EINVAL;
  246. break;
  247. case Q_PIN_CFG_PULL:
  248. if (q_spec->type == Q_GPIO_TYPE &&
  249. val >= QPNP_PIN_GPIO_PULL_INVALID)
  250. return -EINVAL;
  251. if (q_spec->type == Q_MPP_TYPE) {
  252. if (val >= QPNP_PIN_MPP_PULL_INVALID)
  253. return -EINVAL;
  254. if (subtype == Q_MPP_SUBTYPE_ULT_4CH_NO_ANA_OUT ||
  255. subtype == Q_MPP_SUBTYPE_ULT_4CH_NO_SINK)
  256. return -ENXIO;
  257. }
  258. break;
  259. case Q_PIN_CFG_VIN_SEL:
  260. if (val >= QPNP_PIN_VIN_8CH_INVALID)
  261. return -EINVAL;
  262. else if (val >= QPNP_PIN_VIN_4CH_INVALID) {
  263. if (q_spec->type == Q_GPIO_TYPE &&
  264. (subtype == Q_GPIO_SUBTYPE_GPIO_4CH ||
  265. subtype == Q_GPIO_SUBTYPE_GPIOC_4CH))
  266. return -EINVAL;
  267. if (q_spec->type == Q_MPP_TYPE &&
  268. (subtype == Q_MPP_SUBTYPE_4CH_NO_ANA_OUT ||
  269. subtype == Q_MPP_SUBTYPE_4CH_NO_SINK ||
  270. subtype == Q_MPP_SUBTYPE_4CH_FULL_FUNC ||
  271. subtype == Q_MPP_SUBTYPE_ULT_4CH_NO_ANA_OUT ||
  272. subtype == Q_MPP_SUBTYPE_ULT_4CH_NO_SINK))
  273. return -EINVAL;
  274. }
  275. break;
  276. case Q_PIN_CFG_OUT_STRENGTH:
  277. if (q_spec->type != Q_GPIO_TYPE)
  278. return -ENXIO;
  279. if (val >= QPNP_PIN_OUT_STRENGTH_INVALID ||
  280. val == 0)
  281. return -EINVAL;
  282. break;
  283. case Q_PIN_CFG_SRC_SEL:
  284. if (q_spec->type == Q_MPP_TYPE &&
  285. (val == QPNP_PIN_SEL_FUNC_1 ||
  286. val == QPNP_PIN_SEL_FUNC_2))
  287. return -EINVAL;
  288. if (val >= QPNP_PIN_SRC_INVALID)
  289. return -EINVAL;
  290. break;
  291. case Q_PIN_CFG_MASTER_EN:
  292. if (val >= QPNP_PIN_MASTER_INVALID)
  293. return -EINVAL;
  294. break;
  295. case Q_PIN_CFG_AOUT_REF:
  296. if (q_spec->type != Q_MPP_TYPE)
  297. return -ENXIO;
  298. if (subtype == Q_MPP_SUBTYPE_4CH_NO_ANA_OUT ||
  299. subtype == Q_MPP_SUBTYPE_ULT_4CH_NO_ANA_OUT)
  300. return -ENXIO;
  301. if (val >= QPNP_PIN_AOUT_REF_INVALID)
  302. return -EINVAL;
  303. break;
  304. case Q_PIN_CFG_AIN_ROUTE:
  305. if (q_spec->type != Q_MPP_TYPE)
  306. return -ENXIO;
  307. if (val >= QPNP_PIN_AIN_ROUTE_INVALID)
  308. return -EINVAL;
  309. break;
  310. case Q_PIN_CFG_CS_OUT:
  311. if (q_spec->type != Q_MPP_TYPE)
  312. return -ENXIO;
  313. if (subtype == Q_MPP_SUBTYPE_4CH_NO_SINK ||
  314. subtype == Q_MPP_SUBTYPE_ULT_4CH_NO_SINK)
  315. return -ENXIO;
  316. if (val >= QPNP_PIN_CS_OUT_INVALID)
  317. return -EINVAL;
  318. break;
  319. default:
  320. pr_err("invalid param type %u specified\n", idx);
  321. return -EINVAL;
  322. }
  323. return 0;
  324. }
  325. #define Q_CHK_INVALID(idx, q_spec, val) \
  326. (qpnp_pin_check_config(idx, q_spec, val) == -EINVAL)
  327. static int qpnp_pin_check_constraints(struct qpnp_pin_spec *q_spec,
  328. struct qpnp_pin_cfg *param)
  329. {
  330. int pin = q_spec->pmic_pin;
  331. const char *name;
  332. name = (q_spec->type == Q_GPIO_TYPE) ? "gpio" : "mpp";
  333. if (Q_CHK_INVALID(Q_PIN_CFG_MODE, q_spec, param->mode))
  334. pr_err("invalid direction value %d for %s %d\n",
  335. param->mode, name, pin);
  336. else if (Q_CHK_INVALID(Q_PIN_CFG_INVERT, q_spec, param->invert))
  337. pr_err("invalid invert polarity value %d for %s %d\n",
  338. param->invert, name, pin);
  339. else if (Q_CHK_INVALID(Q_PIN_CFG_SRC_SEL, q_spec, param->src_sel))
  340. pr_err("invalid source select value %d for %s %d\n",
  341. param->src_sel, name, pin);
  342. else if (Q_CHK_INVALID(Q_PIN_CFG_OUT_STRENGTH,
  343. q_spec, param->out_strength))
  344. pr_err("invalid out strength value %d for %s %d\n",
  345. param->out_strength, name, pin);
  346. else if (Q_CHK_INVALID(Q_PIN_CFG_OUTPUT_TYPE,
  347. q_spec, param->output_type))
  348. pr_err("invalid out type value %d for %s %d\n",
  349. param->output_type, name, pin);
  350. else if (Q_CHK_INVALID(Q_PIN_CFG_VIN_SEL, q_spec, param->vin_sel))
  351. pr_err("invalid vin select %d value for %s %d\n",
  352. param->vin_sel, name, pin);
  353. else if (Q_CHK_INVALID(Q_PIN_CFG_PULL, q_spec, param->pull))
  354. pr_err("invalid pull value %d for pin %s %d\n",
  355. param->pull, name, pin);
  356. else if (Q_CHK_INVALID(Q_PIN_CFG_MASTER_EN, q_spec, param->master_en))
  357. pr_err("invalid master_en value %d for %s %d\n",
  358. param->master_en, name, pin);
  359. else if (Q_CHK_INVALID(Q_PIN_CFG_AOUT_REF, q_spec, param->aout_ref))
  360. pr_err("invalid aout_reg value %d for %s %d\n",
  361. param->aout_ref, name, pin);
  362. else if (Q_CHK_INVALID(Q_PIN_CFG_AIN_ROUTE, q_spec, param->ain_route))
  363. pr_err("invalid ain_route value %d for %s %d\n",
  364. param->ain_route, name, pin);
  365. else if (Q_CHK_INVALID(Q_PIN_CFG_CS_OUT, q_spec, param->cs_out))
  366. pr_err("invalid cs_out value %d for %s %d\n",
  367. param->cs_out, name, pin);
  368. else
  369. return 0;
  370. return -EINVAL;
  371. }
  372. static inline u8 q_reg_get(u8 *reg, int shift, int mask)
  373. {
  374. return (*reg & mask) >> shift;
  375. }
  376. static inline void q_reg_set(u8 *reg, int shift, int mask, int value)
  377. {
  378. *reg |= (value << shift) & mask;
  379. }
  380. static inline void q_reg_clr_set(u8 *reg, int shift, int mask, int value)
  381. {
  382. *reg &= ~mask;
  383. *reg |= (value << shift) & mask;
  384. }
  385. /*
  386. * Calculate the minimum number of registers that must be read / written
  387. * in order to satisfy the full feature set of the given pin.
  388. */
  389. static int qpnp_pin_ctl_regs_init(struct qpnp_pin_spec *q_spec)
  390. {
  391. if (q_spec->type == Q_GPIO_TYPE)
  392. q_spec->num_ctl_regs = 7;
  393. else if (q_spec->type == Q_MPP_TYPE)
  394. switch (q_spec->subtype) {
  395. case Q_MPP_SUBTYPE_4CH_NO_SINK:
  396. case Q_MPP_SUBTYPE_ULT_4CH_NO_SINK:
  397. q_spec->num_ctl_regs = 12;
  398. break;
  399. case Q_MPP_SUBTYPE_4CH_NO_ANA_OUT:
  400. case Q_MPP_SUBTYPE_ULT_4CH_NO_ANA_OUT:
  401. case Q_MPP_SUBTYPE_4CH_FULL_FUNC:
  402. case Q_MPP_SUBTYPE_8CH_FULL_FUNC:
  403. q_spec->num_ctl_regs = 13;
  404. break;
  405. default:
  406. pr_err("Invalid MPP subtype 0x%x\n", q_spec->subtype);
  407. return -EINVAL;
  408. }
  409. else {
  410. pr_err("Invalid type 0x%x\n", q_spec->type);
  411. return -EINVAL;
  412. }
  413. return 0;
  414. }
  415. static int qpnp_pin_read_regs(struct qpnp_pin_chip *q_chip,
  416. struct qpnp_pin_spec *q_spec)
  417. {
  418. int bytes_left = q_spec->num_ctl_regs;
  419. int rc;
  420. char *buf_p = &q_spec->regs[0];
  421. u16 reg_addr = Q_REG_ADDR(q_spec, Q_REG_MODE_CTL);
  422. while (bytes_left > 0) {
  423. rc = spmi_ext_register_readl(q_chip->spmi->ctrl, q_spec->slave,
  424. reg_addr, buf_p, bytes_left < 8 ? bytes_left : 8);
  425. if (rc)
  426. return rc;
  427. bytes_left -= 8;
  428. buf_p += 8;
  429. reg_addr += 8;
  430. }
  431. return 0;
  432. }
  433. static int qpnp_pin_write_regs(struct qpnp_pin_chip *q_chip,
  434. struct qpnp_pin_spec *q_spec)
  435. {
  436. int bytes_left = q_spec->num_ctl_regs;
  437. int rc;
  438. char *buf_p = &q_spec->regs[0];
  439. u16 reg_addr = Q_REG_ADDR(q_spec, Q_REG_MODE_CTL);
  440. while (bytes_left > 0) {
  441. rc = spmi_ext_register_writel(q_chip->spmi->ctrl, q_spec->slave,
  442. reg_addr, buf_p, bytes_left < 8 ? bytes_left : 8);
  443. if (rc)
  444. return rc;
  445. bytes_left -= 8;
  446. buf_p += 8;
  447. reg_addr += 8;
  448. }
  449. return 0;
  450. }
  451. static int qpnp_pin_cache_regs(struct qpnp_pin_chip *q_chip,
  452. struct qpnp_pin_spec *q_spec)
  453. {
  454. int rc;
  455. struct device *dev = &q_chip->spmi->dev;
  456. rc = qpnp_pin_read_regs(q_chip, q_spec);
  457. if (rc)
  458. dev_err(dev, "%s: unable to read control regs\n", __func__);
  459. return rc;
  460. }
  461. #define Q_HAVE_HW_SP(idx, q_spec, val) \
  462. (qpnp_pin_check_config(idx, q_spec, val) == 0)
  463. static int _qpnp_pin_config(struct qpnp_pin_chip *q_chip,
  464. struct qpnp_pin_spec *q_spec,
  465. struct qpnp_pin_cfg *param)
  466. {
  467. struct device *dev = &q_chip->spmi->dev;
  468. int rc;
  469. #if defined(CONFIG_SEC_ATLANTIC_PROJECT) && defined(CONFIG_GPIO_PCAL6416A)
  470. int pin = q_spec->pmic_pin;
  471. #endif
  472. rc = qpnp_pin_check_constraints(q_spec, param);
  473. if (rc)
  474. goto gpio_cfg;
  475. #if defined(CONFIG_SEC_ATLANTIC_PROJECT) && defined(CONFIG_GPIO_PCAL6416A)
  476. /* Stop GPIO 6 set mode config for KMINI USA devices
  477. * Reason: Its a work arround for KMINI USA HWs only.
  478. * Because, LCD_ON PIN connected to Expander I/O.
  479. * EXPANDER-resets due to GPIO 6 going low due to mode config of GPIO 6 being set, LCD_ON PIN GO LOW and LCD turns-off.
  480. */
  481. if ((pin == 6) && (q_spec->type == Q_GPIO_TYPE))
  482. {
  483. dev_info(dev, "%s: Skip Set mode config for PMIC GPIO 6\n", __func__);
  484. }
  485. else
  486. #endif
  487. {
  488. /* set mode */
  489. if (Q_HAVE_HW_SP(Q_PIN_CFG_MODE, q_spec, param->mode))
  490. q_reg_clr_set(&q_spec->regs[Q_REG_I_MODE_CTL],
  491. Q_REG_MODE_SEL_SHIFT, Q_REG_MODE_SEL_MASK,
  492. param->mode);
  493. }
  494. /* output specific configuration */
  495. if (Q_HAVE_HW_SP(Q_PIN_CFG_INVERT, q_spec, param->invert))
  496. q_reg_clr_set(&q_spec->regs[Q_REG_I_MODE_CTL],
  497. Q_REG_OUT_INVERT_SHIFT, Q_REG_OUT_INVERT_MASK,
  498. param->invert);
  499. if (Q_HAVE_HW_SP(Q_PIN_CFG_SRC_SEL, q_spec, param->src_sel))
  500. q_reg_clr_set(&q_spec->regs[Q_REG_I_MODE_CTL],
  501. Q_REG_SRC_SEL_SHIFT, Q_REG_SRC_SEL_MASK,
  502. param->src_sel);
  503. if (Q_HAVE_HW_SP(Q_PIN_CFG_OUT_STRENGTH, q_spec, param->out_strength))
  504. q_reg_clr_set(&q_spec->regs[Q_REG_I_DIG_OUT_CTL],
  505. Q_REG_OUT_STRENGTH_SHIFT, Q_REG_OUT_STRENGTH_MASK,
  506. param->out_strength);
  507. if (Q_HAVE_HW_SP(Q_PIN_CFG_OUTPUT_TYPE, q_spec, param->output_type))
  508. q_reg_clr_set(&q_spec->regs[Q_REG_I_DIG_OUT_CTL],
  509. Q_REG_OUT_TYPE_SHIFT, Q_REG_OUT_TYPE_MASK,
  510. param->output_type);
  511. /* config applicable for both input / output */
  512. if (Q_HAVE_HW_SP(Q_PIN_CFG_VIN_SEL, q_spec, param->vin_sel))
  513. q_reg_clr_set(&q_spec->regs[Q_REG_I_DIG_VIN_CTL],
  514. Q_REG_VIN_SHIFT, Q_REG_VIN_MASK,
  515. param->vin_sel);
  516. if (Q_HAVE_HW_SP(Q_PIN_CFG_PULL, q_spec, param->pull))
  517. q_reg_clr_set(&q_spec->regs[Q_REG_I_DIG_PULL_CTL],
  518. Q_REG_PULL_SHIFT, Q_REG_PULL_MASK,
  519. param->pull);
  520. if (Q_HAVE_HW_SP(Q_PIN_CFG_MASTER_EN, q_spec, param->master_en))
  521. q_reg_clr_set(&q_spec->regs[Q_REG_I_EN_CTL],
  522. Q_REG_MASTER_EN_SHIFT, Q_REG_MASTER_EN_MASK,
  523. param->master_en);
  524. /* mpp specific config */
  525. if (Q_HAVE_HW_SP(Q_PIN_CFG_AOUT_REF, q_spec, param->aout_ref))
  526. q_reg_clr_set(&q_spec->regs[Q_REG_I_AOUT_CTL],
  527. Q_REG_AOUT_REF_SHIFT, Q_REG_AOUT_REF_MASK,
  528. param->aout_ref);
  529. if (Q_HAVE_HW_SP(Q_PIN_CFG_AIN_ROUTE, q_spec, param->ain_route))
  530. q_reg_clr_set(&q_spec->regs[Q_REG_I_AIN_CTL],
  531. Q_REG_AIN_ROUTE_SHIFT, Q_REG_AIN_ROUTE_MASK,
  532. param->ain_route);
  533. if (Q_HAVE_HW_SP(Q_PIN_CFG_CS_OUT, q_spec, param->cs_out))
  534. q_reg_clr_set(&q_spec->regs[Q_REG_I_SINK_CTL],
  535. Q_REG_CS_OUT_SHIFT, Q_REG_CS_OUT_MASK,
  536. param->cs_out);
  537. rc = qpnp_pin_write_regs(q_chip, q_spec);
  538. if (rc) {
  539. dev_err(&q_chip->spmi->dev, "%s: unable to write master enable\n",
  540. __func__);
  541. goto gpio_cfg;
  542. }
  543. return 0;
  544. gpio_cfg:
  545. dev_err(dev, "%s: unable to set default config for pmic pin %d\n",
  546. __func__, q_spec->pmic_pin);
  547. return rc;
  548. }
  549. int qpnp_pin_config(int gpio, struct qpnp_pin_cfg *param)
  550. {
  551. int rc, chip_offset;
  552. struct qpnp_pin_chip *q_chip;
  553. struct qpnp_pin_spec *q_spec = NULL;
  554. struct gpio_chip *gpio_chip;
  555. if (param == NULL)
  556. return -EINVAL;
  557. mutex_lock(&qpnp_pin_chips_lock);
  558. list_for_each_entry(q_chip, &qpnp_pin_chips, chip_list) {
  559. gpio_chip = &q_chip->gpio_chip;
  560. if (gpio >= gpio_chip->base
  561. && gpio < gpio_chip->base + gpio_chip->ngpio) {
  562. chip_offset = gpio - gpio_chip->base;
  563. q_spec = qpnp_chip_gpio_get_spec(q_chip, chip_offset);
  564. if (WARN_ON(!q_spec)) {
  565. mutex_unlock(&qpnp_pin_chips_lock);
  566. return -ENODEV;
  567. }
  568. break;
  569. }
  570. }
  571. mutex_unlock(&qpnp_pin_chips_lock);
  572. if (!q_spec)
  573. return -ENODEV;
  574. rc = _qpnp_pin_config(q_chip, q_spec, param);
  575. return rc;
  576. }
  577. EXPORT_SYMBOL(qpnp_pin_config);
  578. #define Q_MAX_CHIP_NAME 128
  579. int qpnp_pin_map(const char *name, uint32_t pmic_pin)
  580. {
  581. struct qpnp_pin_chip *q_chip;
  582. struct qpnp_pin_spec *q_spec = NULL;
  583. mutex_lock(&qpnp_pin_chips_lock);
  584. list_for_each_entry(q_chip, &qpnp_pin_chips, chip_list) {
  585. if (strncmp(q_chip->gpio_chip.label, name,
  586. Q_MAX_CHIP_NAME) != 0)
  587. continue;
  588. if (q_chip->pmic_pin_lowest <= pmic_pin &&
  589. q_chip->pmic_pin_highest >= pmic_pin) {
  590. q_spec = qpnp_pmic_pin_get_spec(q_chip, pmic_pin);
  591. mutex_unlock(&qpnp_pin_chips_lock);
  592. if (WARN_ON(!q_spec))
  593. return -ENODEV;
  594. return q_chip->gpio_chip.base + q_spec->gpio_chip_idx;
  595. }
  596. }
  597. mutex_unlock(&qpnp_pin_chips_lock);
  598. return -EINVAL;
  599. }
  600. EXPORT_SYMBOL(qpnp_pin_map);
  601. static int qpnp_pin_to_irq(struct gpio_chip *gpio_chip, unsigned offset)
  602. {
  603. struct qpnp_pin_chip *q_chip = dev_get_drvdata(gpio_chip->dev);
  604. struct qpnp_pin_spec *q_spec;
  605. u32 intspec[3];
  606. q_spec = qpnp_chip_gpio_get_spec(q_chip, offset);
  607. if (!q_spec)
  608. return -EINVAL;
  609. /* if we have mapped this pin previously return the virq */
  610. if (q_spec->irq)
  611. return q_spec->irq;
  612. /* call into irq_domain to get irq mapping */
  613. intspec[0] = q_chip->spmi->sid;
  614. intspec[1] = (q_spec->offset >> 8) & 0xFF;
  615. intspec[2] = 0;
  616. q_spec->irq = irq_create_of_mapping(q_chip->int_ctrl, intspec, 3);
  617. if (!q_spec->irq) {
  618. dev_err(&q_chip->spmi->dev, "%s: invalid irq for gpio %u\n",
  619. __func__, q_spec->pmic_pin);
  620. WARN_ON(1);
  621. return -EINVAL;
  622. }
  623. return q_spec->irq;
  624. }
  625. static int qpnp_pin_get(struct gpio_chip *gpio_chip, unsigned offset)
  626. {
  627. int rc, ret_val;
  628. struct qpnp_pin_chip *q_chip = dev_get_drvdata(gpio_chip->dev);
  629. struct qpnp_pin_spec *q_spec = NULL;
  630. u8 buf[1], en_mask;
  631. if (WARN_ON(!q_chip))
  632. return -ENODEV;
  633. q_spec = qpnp_chip_gpio_get_spec(q_chip, offset);
  634. if (WARN_ON(!q_spec))
  635. return -ENODEV;
  636. /* gpio val is from RT status iff input is enabled */
  637. if ((q_spec->regs[Q_REG_I_MODE_CTL] & Q_REG_MODE_SEL_MASK)
  638. == QPNP_PIN_MODE_DIG_IN) {
  639. rc = spmi_ext_register_readl(q_chip->spmi->ctrl, q_spec->slave,
  640. Q_REG_ADDR(q_spec, Q_REG_STATUS1),
  641. &buf[0], 1);
  642. if (q_spec->type == Q_GPIO_TYPE && q_spec->dig_major_rev == 0)
  643. en_mask = Q_REG_STATUS1_GPIO_EN_REV0_MASK;
  644. else if (q_spec->type == Q_GPIO_TYPE &&
  645. q_spec->dig_major_rev > 0)
  646. en_mask = Q_REG_STATUS1_GPIO_EN_MASK;
  647. else /* MPP */
  648. en_mask = Q_REG_STATUS1_MPP_EN_MASK;
  649. if (!(buf[0] & en_mask))
  650. return -EPERM;
  651. return buf[0] & Q_REG_STATUS1_VAL_MASK;
  652. } else {
  653. ret_val = (q_spec->regs[Q_REG_I_MODE_CTL] &
  654. Q_REG_OUT_INVERT_MASK) >> Q_REG_OUT_INVERT_SHIFT;
  655. return ret_val;
  656. }
  657. return 0;
  658. }
  659. static int __qpnp_pin_set(struct qpnp_pin_chip *q_chip,
  660. struct qpnp_pin_spec *q_spec, int value)
  661. {
  662. int rc;
  663. if (!q_chip || !q_spec)
  664. return -EINVAL;
  665. if (value)
  666. q_reg_clr_set(&q_spec->regs[Q_REG_I_MODE_CTL],
  667. Q_REG_OUT_INVERT_SHIFT, Q_REG_OUT_INVERT_MASK, 1);
  668. else
  669. q_reg_clr_set(&q_spec->regs[Q_REG_I_MODE_CTL],
  670. Q_REG_OUT_INVERT_SHIFT, Q_REG_OUT_INVERT_MASK, 0);
  671. rc = spmi_ext_register_writel(q_chip->spmi->ctrl, q_spec->slave,
  672. Q_REG_ADDR(q_spec, Q_REG_MODE_CTL),
  673. &q_spec->regs[Q_REG_I_MODE_CTL], 1);
  674. if (rc)
  675. dev_err(&q_chip->spmi->dev, "%s: spmi write failed\n",
  676. __func__);
  677. return rc;
  678. }
  679. static void qpnp_pin_set(struct gpio_chip *gpio_chip,
  680. unsigned offset, int value)
  681. {
  682. struct qpnp_pin_chip *q_chip = dev_get_drvdata(gpio_chip->dev);
  683. struct qpnp_pin_spec *q_spec;
  684. if (WARN_ON(!q_chip))
  685. return;
  686. q_spec = qpnp_chip_gpio_get_spec(q_chip, offset);
  687. if (WARN_ON(!q_spec))
  688. return;
  689. __qpnp_pin_set(q_chip, q_spec, value);
  690. }
  691. static int qpnp_pin_set_mode(struct qpnp_pin_chip *q_chip,
  692. struct qpnp_pin_spec *q_spec, int mode)
  693. {
  694. int rc;
  695. if (!q_chip || !q_spec)
  696. return -EINVAL;
  697. if (qpnp_pin_check_config(Q_PIN_CFG_MODE, q_spec, mode)) {
  698. pr_err("invalid mode specification %d\n", mode);
  699. return -EINVAL;
  700. }
  701. q_reg_clr_set(&q_spec->regs[Q_REG_I_MODE_CTL],
  702. Q_REG_MODE_SEL_SHIFT,
  703. Q_REG_MODE_SEL_MASK,
  704. mode);
  705. rc = spmi_ext_register_writel(q_chip->spmi->ctrl, q_spec->slave,
  706. Q_REG_ADDR(q_spec, Q_REG_MODE_CTL),
  707. &q_spec->regs[Q_REG_I_MODE_CTL], 1);
  708. return rc;
  709. }
  710. static int qpnp_pin_direction_input(struct gpio_chip *gpio_chip,
  711. unsigned offset)
  712. {
  713. struct qpnp_pin_chip *q_chip = dev_get_drvdata(gpio_chip->dev);
  714. struct qpnp_pin_spec *q_spec;
  715. if (WARN_ON(!q_chip))
  716. return -ENODEV;
  717. q_spec = qpnp_chip_gpio_get_spec(q_chip, offset);
  718. if (WARN_ON(!q_spec))
  719. return -ENODEV;
  720. return qpnp_pin_set_mode(q_chip, q_spec, QPNP_PIN_MODE_DIG_IN);
  721. }
  722. static int qpnp_pin_direction_output(struct gpio_chip *gpio_chip,
  723. unsigned offset,
  724. int val)
  725. {
  726. int rc;
  727. struct qpnp_pin_chip *q_chip = dev_get_drvdata(gpio_chip->dev);
  728. struct qpnp_pin_spec *q_spec;
  729. if (WARN_ON(!q_chip))
  730. return -ENODEV;
  731. q_spec = qpnp_chip_gpio_get_spec(q_chip, offset);
  732. if (WARN_ON(!q_spec))
  733. return -ENODEV;
  734. rc = __qpnp_pin_set(q_chip, q_spec, val);
  735. if (rc)
  736. return rc;
  737. rc = qpnp_pin_set_mode(q_chip, q_spec, QPNP_PIN_MODE_DIG_OUT);
  738. return rc;
  739. }
  740. static int qpnp_pin_of_gpio_xlate(struct gpio_chip *gpio_chip,
  741. const struct of_phandle_args *gpio_spec,
  742. u32 *flags)
  743. {
  744. struct qpnp_pin_chip *q_chip = dev_get_drvdata(gpio_chip->dev);
  745. struct qpnp_pin_spec *q_spec;
  746. if (WARN_ON(gpio_chip->of_gpio_n_cells < 2)) {
  747. pr_err("of_gpio_n_cells < 2\n");
  748. return -EINVAL;
  749. }
  750. q_spec = qpnp_pmic_pin_get_spec(q_chip, gpio_spec->args[0]);
  751. if (!q_spec) {
  752. pr_err("no such PMIC gpio %u in device topology\n",
  753. gpio_spec->args[0]);
  754. return -EINVAL;
  755. }
  756. if (flags)
  757. *flags = gpio_spec->args[1];
  758. return q_spec->gpio_chip_idx;
  759. }
  760. static int qpnp_pin_apply_config(struct qpnp_pin_chip *q_chip,
  761. struct qpnp_pin_spec *q_spec)
  762. {
  763. struct qpnp_pin_cfg param;
  764. struct device_node *node = q_spec->node;
  765. int rc;
  766. param.mode = q_reg_get(&q_spec->regs[Q_REG_I_MODE_CTL],
  767. Q_REG_MODE_SEL_SHIFT,
  768. Q_REG_MODE_SEL_MASK);
  769. param.output_type = q_reg_get(&q_spec->regs[Q_REG_I_DIG_OUT_CTL],
  770. Q_REG_OUT_TYPE_SHIFT,
  771. Q_REG_OUT_TYPE_MASK);
  772. param.invert = q_reg_get(&q_spec->regs[Q_REG_I_MODE_CTL],
  773. Q_REG_OUT_INVERT_SHIFT,
  774. Q_REG_OUT_INVERT_MASK);
  775. param.pull = q_reg_get(&q_spec->regs[Q_REG_I_DIG_PULL_CTL],
  776. Q_REG_PULL_SHIFT, Q_REG_PULL_MASK);
  777. param.vin_sel = q_reg_get(&q_spec->regs[Q_REG_I_DIG_VIN_CTL],
  778. Q_REG_VIN_SHIFT, Q_REG_VIN_MASK);
  779. param.out_strength = q_reg_get(&q_spec->regs[Q_REG_I_DIG_OUT_CTL],
  780. Q_REG_OUT_STRENGTH_SHIFT,
  781. Q_REG_OUT_STRENGTH_MASK);
  782. param.src_sel = q_reg_get(&q_spec->regs[Q_REG_I_MODE_CTL],
  783. Q_REG_SRC_SEL_SHIFT, Q_REG_SRC_SEL_MASK);
  784. param.master_en = q_reg_get(&q_spec->regs[Q_REG_I_EN_CTL],
  785. Q_REG_MASTER_EN_SHIFT,
  786. Q_REG_MASTER_EN_MASK);
  787. param.aout_ref = q_reg_get(&q_spec->regs[Q_REG_I_AOUT_CTL],
  788. Q_REG_AOUT_REF_SHIFT,
  789. Q_REG_AOUT_REF_MASK);
  790. param.ain_route = q_reg_get(&q_spec->regs[Q_REG_I_AIN_CTL],
  791. Q_REG_AIN_ROUTE_SHIFT,
  792. Q_REG_AIN_ROUTE_MASK);
  793. param.cs_out = q_reg_get(&q_spec->regs[Q_REG_I_SINK_CTL],
  794. Q_REG_CS_OUT_SHIFT,
  795. Q_REG_CS_OUT_MASK);
  796. of_property_read_u32(node, "qcom,mode",
  797. &param.mode);
  798. of_property_read_u32(node, "qcom,output-type",
  799. &param.output_type);
  800. of_property_read_u32(node, "qcom,invert",
  801. &param.invert);
  802. of_property_read_u32(node, "qcom,pull",
  803. &param.pull);
  804. of_property_read_u32(node, "qcom,vin-sel",
  805. &param.vin_sel);
  806. of_property_read_u32(node, "qcom,out-strength",
  807. &param.out_strength);
  808. of_property_read_u32(node, "qcom,src-sel",
  809. &param.src_sel);
  810. of_property_read_u32(node, "qcom,master-en",
  811. &param.master_en);
  812. of_property_read_u32(node, "qcom,aout-ref",
  813. &param.aout_ref);
  814. of_property_read_u32(node, "qcom,ain-route",
  815. &param.ain_route);
  816. of_property_read_u32(node, "qcom,cs-out",
  817. &param.cs_out);
  818. rc = _qpnp_pin_config(q_chip, q_spec, &param);
  819. return rc;
  820. }
  821. static int qpnp_pin_free_chip(struct qpnp_pin_chip *q_chip)
  822. {
  823. struct spmi_device *spmi = q_chip->spmi;
  824. struct qpnp_pin_spec *q_spec = NULL;
  825. int i, rc = 0;
  826. if (q_chip->chip_gpios)
  827. for (i = 0; i < spmi->num_dev_node; i++) {
  828. q_spec = qpnp_chip_gpio_get_spec(q_chip, i);
  829. if (q_spec)
  830. kfree(q_spec);
  831. kfree(q_chip->chip_gpios[i]);
  832. }
  833. mutex_lock(&qpnp_pin_chips_lock);
  834. list_del(&q_chip->chip_list);
  835. mutex_unlock(&qpnp_pin_chips_lock);
  836. if (q_chip->chip_registered) {
  837. rc = gpiochip_remove(&q_chip->gpio_chip);
  838. if (rc)
  839. dev_err(&q_chip->spmi->dev, "%s: unable to remove gpio\n",
  840. __func__);
  841. }
  842. kfree(q_chip->chip_gpios);
  843. kfree(q_chip->pmic_pins);
  844. kfree(q_chip);
  845. return rc;
  846. }
  847. #ifdef CONFIG_GPIO_QPNP_PIN_DEBUG
  848. struct qpnp_pin_reg {
  849. uint32_t addr;
  850. uint32_t idx;
  851. uint32_t shift;
  852. uint32_t mask;
  853. };
  854. static struct dentry *driver_dfs_dir;
  855. static int qpnp_pin_reg_attr(enum qpnp_pin_param_type type,
  856. struct qpnp_pin_reg *cfg)
  857. {
  858. switch (type) {
  859. case Q_PIN_CFG_MODE:
  860. cfg->addr = Q_REG_MODE_CTL;
  861. cfg->idx = Q_REG_I_MODE_CTL;
  862. cfg->shift = Q_REG_MODE_SEL_SHIFT;
  863. cfg->mask = Q_REG_MODE_SEL_MASK;
  864. break;
  865. case Q_PIN_CFG_OUTPUT_TYPE:
  866. cfg->addr = Q_REG_DIG_OUT_CTL;
  867. cfg->idx = Q_REG_I_DIG_OUT_CTL;
  868. cfg->shift = Q_REG_OUT_TYPE_SHIFT;
  869. cfg->mask = Q_REG_OUT_TYPE_MASK;
  870. break;
  871. case Q_PIN_CFG_INVERT:
  872. cfg->addr = Q_REG_MODE_CTL;
  873. cfg->idx = Q_REG_I_MODE_CTL;
  874. cfg->shift = Q_REG_OUT_INVERT_SHIFT;
  875. cfg->mask = Q_REG_OUT_INVERT_MASK;
  876. break;
  877. case Q_PIN_CFG_PULL:
  878. cfg->addr = Q_REG_DIG_PULL_CTL;
  879. cfg->idx = Q_REG_I_DIG_PULL_CTL;
  880. cfg->shift = Q_REG_PULL_SHIFT;
  881. cfg->mask = Q_REG_PULL_MASK;
  882. break;
  883. case Q_PIN_CFG_VIN_SEL:
  884. cfg->addr = Q_REG_DIG_VIN_CTL;
  885. cfg->idx = Q_REG_I_DIG_VIN_CTL;
  886. cfg->shift = Q_REG_VIN_SHIFT;
  887. cfg->mask = Q_REG_VIN_MASK;
  888. break;
  889. case Q_PIN_CFG_OUT_STRENGTH:
  890. cfg->addr = Q_REG_DIG_OUT_CTL;
  891. cfg->idx = Q_REG_I_DIG_OUT_CTL;
  892. cfg->shift = Q_REG_OUT_STRENGTH_SHIFT;
  893. cfg->mask = Q_REG_OUT_STRENGTH_MASK;
  894. break;
  895. case Q_PIN_CFG_SRC_SEL:
  896. cfg->addr = Q_REG_MODE_CTL;
  897. cfg->idx = Q_REG_I_MODE_CTL;
  898. cfg->shift = Q_REG_SRC_SEL_SHIFT;
  899. cfg->mask = Q_REG_SRC_SEL_MASK;
  900. break;
  901. case Q_PIN_CFG_MASTER_EN:
  902. cfg->addr = Q_REG_EN_CTL;
  903. cfg->idx = Q_REG_I_EN_CTL;
  904. cfg->shift = Q_REG_MASTER_EN_SHIFT;
  905. cfg->mask = Q_REG_MASTER_EN_MASK;
  906. break;
  907. case Q_PIN_CFG_AOUT_REF:
  908. cfg->addr = Q_REG_AOUT_CTL;
  909. cfg->idx = Q_REG_I_AOUT_CTL;
  910. cfg->shift = Q_REG_AOUT_REF_SHIFT;
  911. cfg->mask = Q_REG_AOUT_REF_MASK;
  912. break;
  913. case Q_PIN_CFG_AIN_ROUTE:
  914. cfg->addr = Q_REG_AIN_CTL;
  915. cfg->idx = Q_REG_I_AIN_CTL;
  916. cfg->shift = Q_REG_AIN_ROUTE_SHIFT;
  917. cfg->mask = Q_REG_AIN_ROUTE_MASK;
  918. break;
  919. case Q_PIN_CFG_CS_OUT:
  920. cfg->addr = Q_REG_SINK_CTL;
  921. cfg->idx = Q_REG_I_SINK_CTL;
  922. cfg->shift = Q_REG_CS_OUT_SHIFT;
  923. cfg->mask = Q_REG_CS_OUT_MASK;
  924. break;
  925. default:
  926. return -EINVAL;
  927. }
  928. return 0;
  929. }
  930. static int qpnp_pin_debugfs_get(void *data, u64 *val)
  931. {
  932. enum qpnp_pin_param_type *idx = data;
  933. struct qpnp_pin_spec *q_spec;
  934. struct qpnp_pin_reg cfg = {};
  935. int rc;
  936. rc = qpnp_pin_reg_attr(*idx, &cfg);
  937. if (rc)
  938. return rc;
  939. q_spec = container_of(idx, struct qpnp_pin_spec, params[*idx]);
  940. *val = q_reg_get(&q_spec->regs[cfg.idx], cfg.shift, cfg.mask);
  941. return 0;
  942. }
  943. static int qpnp_pin_debugfs_set(void *data, u64 val)
  944. {
  945. enum qpnp_pin_param_type *idx = data;
  946. struct qpnp_pin_spec *q_spec;
  947. struct qpnp_pin_chip *q_chip;
  948. struct qpnp_pin_reg cfg = {};
  949. int rc;
  950. q_spec = container_of(idx, struct qpnp_pin_spec, params[*idx]);
  951. q_chip = q_spec->q_chip;
  952. rc = qpnp_pin_check_config(*idx, q_spec, val);
  953. if (rc)
  954. return rc;
  955. rc = qpnp_pin_reg_attr(*idx, &cfg);
  956. if (rc)
  957. return rc;
  958. q_reg_clr_set(&q_spec->regs[cfg.idx], cfg.shift, cfg.mask, val);
  959. rc = spmi_ext_register_writel(q_chip->spmi->ctrl, q_spec->slave,
  960. Q_REG_ADDR(q_spec, cfg.addr),
  961. &q_spec->regs[cfg.idx], 1);
  962. return rc;
  963. }
  964. DEFINE_SIMPLE_ATTRIBUTE(qpnp_pin_fops, qpnp_pin_debugfs_get,
  965. qpnp_pin_debugfs_set, "%llu\n");
  966. #define DEBUGFS_BUF_SIZE 11 /* supports 2^32 in decimal */
  967. struct qpnp_pin_debugfs_args {
  968. enum qpnp_pin_param_type type;
  969. const char *filename;
  970. };
  971. static struct qpnp_pin_debugfs_args dfs_args[] = {
  972. { Q_PIN_CFG_MODE, "mode" },
  973. { Q_PIN_CFG_OUTPUT_TYPE, "output_type" },
  974. { Q_PIN_CFG_INVERT, "invert" },
  975. { Q_PIN_CFG_PULL, "pull" },
  976. { Q_PIN_CFG_VIN_SEL, "vin_sel" },
  977. { Q_PIN_CFG_OUT_STRENGTH, "out_strength" },
  978. { Q_PIN_CFG_SRC_SEL, "src_sel" },
  979. { Q_PIN_CFG_MASTER_EN, "master_en" },
  980. { Q_PIN_CFG_AOUT_REF, "aout_ref" },
  981. { Q_PIN_CFG_AIN_ROUTE, "ain_route" },
  982. { Q_PIN_CFG_CS_OUT, "cs_out" },
  983. };
  984. static int qpnp_pin_debugfs_create(struct qpnp_pin_chip *q_chip)
  985. {
  986. struct spmi_device *spmi = q_chip->spmi;
  987. struct device *dev = &spmi->dev;
  988. struct qpnp_pin_spec *q_spec;
  989. enum qpnp_pin_param_type *params;
  990. enum qpnp_pin_param_type type;
  991. char pmic_pin[DEBUGFS_BUF_SIZE];
  992. const char *filename;
  993. struct dentry *dfs, *dfs_io_dir;
  994. int i, j, rc;
  995. BUG_ON(Q_NUM_PARAMS != ARRAY_SIZE(dfs_args));
  996. q_chip->dfs_dir = debugfs_create_dir(q_chip->gpio_chip.label,
  997. driver_dfs_dir);
  998. if (q_chip->dfs_dir == NULL) {
  999. dev_err(dev, "%s: cannot register chip debugfs directory %s\n",
  1000. __func__, dev->of_node->name);
  1001. return -ENODEV;
  1002. }
  1003. for (i = 0; i < spmi->num_dev_node; i++) {
  1004. q_spec = qpnp_chip_gpio_get_spec(q_chip, i);
  1005. params = q_spec->params;
  1006. snprintf(pmic_pin, DEBUGFS_BUF_SIZE, "%u", q_spec->pmic_pin);
  1007. dfs_io_dir = debugfs_create_dir(pmic_pin, q_chip->dfs_dir);
  1008. if (dfs_io_dir == NULL)
  1009. goto dfs_err;
  1010. for (j = 0; j < Q_NUM_PARAMS; j++) {
  1011. type = dfs_args[j].type;
  1012. filename = dfs_args[j].filename;
  1013. /*
  1014. * Use a value of '0' to see if the pin has even basic
  1015. * support for a function. Do not create a file if
  1016. * it doesn't.
  1017. */
  1018. rc = qpnp_pin_check_config(type, q_spec, 0);
  1019. if (rc == -ENXIO)
  1020. continue;
  1021. params[type] = type;
  1022. dfs = debugfs_create_file(
  1023. filename,
  1024. S_IRUGO | S_IWUSR,
  1025. dfs_io_dir,
  1026. &q_spec->params[type],
  1027. &qpnp_pin_fops);
  1028. if (dfs == NULL)
  1029. goto dfs_err;
  1030. }
  1031. }
  1032. return 0;
  1033. dfs_err:
  1034. dev_err(dev, "%s: cannot register debugfs for pmic gpio %u on chip %s\n",
  1035. __func__, q_spec->pmic_pin, dev->of_node->name);
  1036. debugfs_remove_recursive(q_chip->dfs_dir);
  1037. return -ENFILE;
  1038. }
  1039. static const char * const qpnp_mode_str[] = {
  1040. "D_IN",
  1041. "D_OUT",
  1042. "D_INOUT",
  1043. "D_BI",
  1044. "A_IN",
  1045. "A_OUT",
  1046. "C_SINK",
  1047. "NA",
  1048. };
  1049. static const char * const qpnp_output_type_str[] = {
  1050. "CMOS",
  1051. "nMOS",
  1052. "pMOS",
  1053. "NA",
  1054. };
  1055. static const char * const qpnp_invert_str[] = {
  1056. "NORMAL",
  1057. "INVERT",
  1058. };
  1059. static const char * const qpnp_pull_str[] = {
  1060. "P_UP30",
  1061. "P_UP15",
  1062. "P_UP31",
  1063. "P_UPMAX",
  1064. "P_DOWN",
  1065. "NO_PULL",
  1066. "NA",
  1067. "NA",
  1068. };
  1069. static const char * const qpnp_vin_sel_str[] = {
  1070. "VIN0",
  1071. "VIN1",
  1072. "VIN2",
  1073. "VIN3",
  1074. "VIN4",
  1075. "VIN5",
  1076. "VIN6",
  1077. "VIN7",
  1078. };
  1079. static const char * const qpnp_out_strength_str[] = {
  1080. "NA",
  1081. "STR_LOW",
  1082. "STR_MID",
  1083. "STR_HIGH",
  1084. };
  1085. static const char * const qpnp_src_sel_str[] = {
  1086. "GND",
  1087. "PAIRED",
  1088. "FUNC1",
  1089. "FUNC2",
  1090. "DTEST1",
  1091. "DTEST2",
  1092. "DTEST3",
  1093. "DTEST4",
  1094. };
  1095. static const char * const qpnp_master_en_str[] = {
  1096. "HIGH-Z",
  1097. "GPIO",
  1098. };
  1099. static const char * const qpnp_aout_ref_str[] = {
  1100. "VREF1V25",
  1101. "NA", "NA", "NA", "NA", "NA", "NA", "NA",
  1102. };
  1103. static const char * const qpnp_ain_route_str[] = {
  1104. "HKADC5",
  1105. "HKADC6",
  1106. "HKADC7",
  1107. "HKADC8",
  1108. "NA", "NA", "NA", "NA",
  1109. };
  1110. static const char * const qpnp_cs_out_str[] = {
  1111. "SINK5",
  1112. "SINK10",
  1113. "SINK15",
  1114. "SINK20",
  1115. "SINK25",
  1116. "SINK30",
  1117. "SINK35",
  1118. "SINK40",
  1119. };
  1120. #define QPNP_PRINT_PARAM(m, q_spec, name, name2, val) \
  1121. if (qpnp_pin_check_config(Q_PIN_CFG_##name, q_spec, 0) != -ENXIO) { \
  1122. qpnp_pin_debugfs_get(&(q_spec->params[Q_PIN_CFG_##name]), &val); \
  1123. if (val <= (Q_REG_##name##_MASK >> Q_REG_##name##_SHIFT)) \
  1124. seq_printf(m, "%10s", qpnp_##name2##_str[val]); \
  1125. else \
  1126. seq_printf(m, "%10s", "ERR"); \
  1127. }
  1128. static int qpnp_debug_showall(struct seq_file *m, void *unused)
  1129. {
  1130. int i;
  1131. u64 val;
  1132. struct qpnp_pin_chip *q_chip;
  1133. struct qpnp_pin_spec *q_spec = NULL;
  1134. mutex_lock(&qpnp_pin_chips_lock);
  1135. list_for_each_entry(q_chip, &qpnp_pin_chips, chip_list) {
  1136. for (i = 0; i < q_chip->spmi->num_dev_node; i++) {
  1137. q_spec = qpnp_chip_gpio_get_spec(q_chip, i);
  1138. seq_printf(m, "%s-%02d", q_chip->gpio_chip.label, i + 1);
  1139. QPNP_PRINT_PARAM(m, q_spec, MODE, mode, val);
  1140. QPNP_PRINT_PARAM(m, q_spec, OUTPUT_TYPE, output_type, val);
  1141. QPNP_PRINT_PARAM(m, q_spec, INVERT, invert, val);
  1142. QPNP_PRINT_PARAM(m, q_spec, PULL, pull, val);
  1143. QPNP_PRINT_PARAM(m, q_spec, VIN_SEL, vin_sel, val);
  1144. QPNP_PRINT_PARAM(m, q_spec, OUT_STRENGTH, out_strength, val);
  1145. QPNP_PRINT_PARAM(m, q_spec, SRC_SEL, src_sel, val);
  1146. QPNP_PRINT_PARAM(m, q_spec, MASTER_EN, master_en, val);
  1147. QPNP_PRINT_PARAM(m, q_spec, AOUT_REF, aout_ref, val);
  1148. QPNP_PRINT_PARAM(m, q_spec, AIN_ROUTE, ain_route, val);
  1149. QPNP_PRINT_PARAM(m, q_spec, CS_OUT, cs_out, val);
  1150. seq_printf(m, "\n");
  1151. }
  1152. seq_printf(m, "\n");
  1153. }
  1154. mutex_unlock(&qpnp_pin_chips_lock);
  1155. return 0;
  1156. }
  1157. static int qpnp_debug_open(struct inode *inode, struct file *file)
  1158. {
  1159. return single_open(file, qpnp_debug_showall, inode->i_private);
  1160. }
  1161. static const struct file_operations qpnp_debug_fops = {
  1162. .open = qpnp_debug_open,
  1163. .read = seq_read,
  1164. .llseek = seq_lseek,
  1165. .release = seq_release,
  1166. };
  1167. #define QPNP_PRINT_PARAM2(q_spec, name, name2, val) \
  1168. if (qpnp_pin_check_config(Q_PIN_CFG_##name, q_spec, 0) != -ENXIO) { \
  1169. qpnp_pin_debugfs_get(&(q_spec->params[Q_PIN_CFG_##name]), &val); \
  1170. if (val <= (Q_REG_##name##_MASK >> Q_REG_##name##_SHIFT)) \
  1171. pr_cont("%10s", qpnp_##name2##_str[val]); \
  1172. else \
  1173. pr_cont("%10s", "ERR"); \
  1174. }
  1175. void qpnp_debug_suspend_show(void)
  1176. {
  1177. int i;
  1178. u64 val;
  1179. struct qpnp_pin_chip *q_chip;
  1180. struct qpnp_pin_spec *q_spec = NULL;
  1181. mutex_lock(&qpnp_pin_chips_lock);
  1182. list_for_each_entry(q_chip, &qpnp_pin_chips, chip_list) {
  1183. for (i = 0; i < q_chip->spmi->num_dev_node; i++) {
  1184. q_spec = qpnp_chip_gpio_get_spec(q_chip, i);
  1185. pr_cont("%s-%02d", q_chip->gpio_chip.label, i + 1);
  1186. QPNP_PRINT_PARAM2(q_spec, MODE, mode, val);
  1187. QPNP_PRINT_PARAM2(q_spec, OUTPUT_TYPE, output_type, val);
  1188. QPNP_PRINT_PARAM2(q_spec, INVERT, invert, val);
  1189. QPNP_PRINT_PARAM2(q_spec, PULL, pull, val);
  1190. QPNP_PRINT_PARAM2(q_spec, VIN_SEL, vin_sel, val);
  1191. QPNP_PRINT_PARAM2(q_spec, OUT_STRENGTH, out_strength, val);
  1192. QPNP_PRINT_PARAM2(q_spec, SRC_SEL, src_sel, val);
  1193. QPNP_PRINT_PARAM2(q_spec, MASTER_EN, master_en, val);
  1194. QPNP_PRINT_PARAM2(q_spec, AOUT_REF, aout_ref, val);
  1195. QPNP_PRINT_PARAM2(q_spec, AIN_ROUTE, ain_route, val);
  1196. QPNP_PRINT_PARAM2(q_spec, CS_OUT, cs_out, val);
  1197. pr_cont("\n");
  1198. }
  1199. }
  1200. mutex_unlock(&qpnp_pin_chips_lock);
  1201. return;
  1202. }
  1203. #else
  1204. static int qpnp_pin_debugfs_create(struct qpnp_pin_chip *q_chip)
  1205. {
  1206. return 0;
  1207. }
  1208. void qpnp_debug_suspend_show(void)
  1209. {
  1210. return;
  1211. }
  1212. #endif
  1213. static int qpnp_pin_is_valid_pin(struct qpnp_pin_spec *q_spec)
  1214. {
  1215. if (q_spec->type == Q_GPIO_TYPE)
  1216. switch (q_spec->subtype) {
  1217. case Q_GPIO_SUBTYPE_GPIO_4CH:
  1218. case Q_GPIO_SUBTYPE_GPIOC_4CH:
  1219. case Q_GPIO_SUBTYPE_GPIO_8CH:
  1220. case Q_GPIO_SUBTYPE_GPIOC_8CH:
  1221. return 1;
  1222. }
  1223. else if (q_spec->type == Q_MPP_TYPE)
  1224. switch (q_spec->subtype) {
  1225. case Q_MPP_SUBTYPE_4CH_NO_ANA_OUT:
  1226. case Q_MPP_SUBTYPE_ULT_4CH_NO_ANA_OUT:
  1227. case Q_MPP_SUBTYPE_4CH_NO_SINK:
  1228. case Q_MPP_SUBTYPE_ULT_4CH_NO_SINK:
  1229. case Q_MPP_SUBTYPE_4CH_FULL_FUNC:
  1230. case Q_MPP_SUBTYPE_8CH_FULL_FUNC:
  1231. return 1;
  1232. }
  1233. return 0;
  1234. }
  1235. static int qpnp_pin_probe(struct spmi_device *spmi)
  1236. {
  1237. struct qpnp_pin_chip *q_chip;
  1238. struct qpnp_pin_spec *q_spec;
  1239. struct resource *res;
  1240. struct spmi_resource *d_node;
  1241. int i, rc;
  1242. int lowest_gpio = UINT_MAX, highest_gpio = 0;
  1243. u32 gpio;
  1244. char version[Q_REG_SUBTYPE - Q_REG_DIG_MAJOR_REV + 1];
  1245. const char *dev_name;
  1246. dev_name = spmi_get_primary_dev_name(spmi);
  1247. if (!dev_name) {
  1248. dev_err(&spmi->dev, "%s: label binding undefined for node %s\n",
  1249. __func__, spmi->dev.of_node->full_name);
  1250. return -EINVAL;
  1251. }
  1252. q_chip = kzalloc(sizeof(*q_chip), GFP_KERNEL);
  1253. if (!q_chip) {
  1254. dev_err(&spmi->dev, "%s: Can't allocate gpio_chip\n",
  1255. __func__);
  1256. return -ENOMEM;
  1257. }
  1258. q_chip->spmi = spmi;
  1259. dev_set_drvdata(&spmi->dev, q_chip);
  1260. mutex_lock(&qpnp_pin_chips_lock);
  1261. list_add(&q_chip->chip_list, &qpnp_pin_chips);
  1262. mutex_unlock(&qpnp_pin_chips_lock);
  1263. /* first scan through nodes to find the range required for allocation */
  1264. for (i = 0; i < spmi->num_dev_node; i++) {
  1265. rc = of_property_read_u32(spmi->dev_node[i].of_node,
  1266. "qcom,pin-num", &gpio);
  1267. if (rc) {
  1268. dev_err(&spmi->dev, "%s: unable to get qcom,pin-num property\n",
  1269. __func__);
  1270. goto err_probe;
  1271. }
  1272. if (gpio < lowest_gpio)
  1273. lowest_gpio = gpio;
  1274. if (gpio > highest_gpio)
  1275. highest_gpio = gpio;
  1276. }
  1277. if (highest_gpio < lowest_gpio) {
  1278. dev_err(&spmi->dev, "%s: no device nodes specified in topology\n",
  1279. __func__);
  1280. rc = -EINVAL;
  1281. goto err_probe;
  1282. } else if (lowest_gpio == 0) {
  1283. dev_err(&spmi->dev, "%s: 0 is not a valid PMIC GPIO\n",
  1284. __func__);
  1285. rc = -EINVAL;
  1286. goto err_probe;
  1287. }
  1288. q_chip->pmic_pin_lowest = lowest_gpio;
  1289. q_chip->pmic_pin_highest = highest_gpio;
  1290. /* allocate gpio lookup tables */
  1291. q_chip->pmic_pins = kzalloc(sizeof(struct qpnp_pin_spec *) *
  1292. highest_gpio - lowest_gpio + 1,
  1293. GFP_KERNEL);
  1294. q_chip->chip_gpios = kzalloc(sizeof(struct qpnp_pin_spec *) *
  1295. spmi->num_dev_node, GFP_KERNEL);
  1296. if (!q_chip->pmic_pins || !q_chip->chip_gpios) {
  1297. dev_err(&spmi->dev, "%s: unable to allocate memory\n",
  1298. __func__);
  1299. rc = -ENOMEM;
  1300. goto err_probe;
  1301. }
  1302. /* get interrupt controller device_node */
  1303. q_chip->int_ctrl = of_irq_find_parent(spmi->dev.of_node);
  1304. if (!q_chip->int_ctrl) {
  1305. dev_err(&spmi->dev, "%s: Can't find interrupt parent\n",
  1306. __func__);
  1307. rc = -EINVAL;
  1308. goto err_probe;
  1309. }
  1310. /* now scan through again and populate the lookup table */
  1311. for (i = 0; i < spmi->num_dev_node; i++) {
  1312. d_node = &spmi->dev_node[i];
  1313. res = spmi_get_resource(spmi, d_node, IORESOURCE_MEM, 0);
  1314. if (!res) {
  1315. dev_err(&spmi->dev, "%s: node %s is missing has no base address definition\n",
  1316. __func__, d_node->of_node->full_name);
  1317. rc = -EINVAL;
  1318. goto err_probe;
  1319. }
  1320. rc = of_property_read_u32(d_node->of_node,
  1321. "qcom,pin-num", &gpio);
  1322. if (rc) {
  1323. dev_err(&spmi->dev, "%s: unable to get qcom,pin-num property\n",
  1324. __func__);
  1325. goto err_probe;
  1326. }
  1327. q_spec = kzalloc(sizeof(struct qpnp_pin_spec),
  1328. GFP_KERNEL);
  1329. if (!q_spec) {
  1330. dev_err(&spmi->dev, "%s: unable to allocate memory\n",
  1331. __func__);
  1332. rc = -ENOMEM;
  1333. goto err_probe;
  1334. }
  1335. q_spec->slave = spmi->sid;
  1336. q_spec->offset = res->start;
  1337. q_spec->gpio_chip_idx = i;
  1338. q_spec->pmic_pin = gpio;
  1339. q_spec->node = d_node->of_node;
  1340. q_spec->q_chip = q_chip;
  1341. rc = spmi_ext_register_readl(spmi->ctrl, q_spec->slave,
  1342. Q_REG_ADDR(q_spec, Q_REG_DIG_MAJOR_REV),
  1343. &version[0], ARRAY_SIZE(version));
  1344. if (rc) {
  1345. dev_err(&spmi->dev, "%s: unable to read type regs\n",
  1346. __func__);
  1347. goto err_probe;
  1348. }
  1349. q_spec->dig_major_rev = version[Q_REG_DIG_MAJOR_REV -
  1350. Q_REG_DIG_MAJOR_REV];
  1351. q_spec->type = version[Q_REG_TYPE - Q_REG_DIG_MAJOR_REV];
  1352. q_spec->subtype = version[Q_REG_SUBTYPE - Q_REG_DIG_MAJOR_REV];
  1353. if (!qpnp_pin_is_valid_pin(q_spec)) {
  1354. dev_err(&spmi->dev, "%s: invalid pin type (type=0x%x subtype=0x%x)\n",
  1355. __func__, q_spec->type, q_spec->subtype);
  1356. goto err_probe;
  1357. }
  1358. rc = qpnp_pin_ctl_regs_init(q_spec);
  1359. if (rc)
  1360. goto err_probe;
  1361. /* initialize lookup table params */
  1362. qpnp_pmic_pin_set_spec(q_chip, gpio, q_spec);
  1363. qpnp_chip_gpio_set_spec(q_chip, i, q_spec);
  1364. }
  1365. q_chip->gpio_chip.base = -1;
  1366. q_chip->gpio_chip.ngpio = spmi->num_dev_node;
  1367. q_chip->gpio_chip.label = dev_name;
  1368. q_chip->gpio_chip.direction_input = qpnp_pin_direction_input;
  1369. q_chip->gpio_chip.direction_output = qpnp_pin_direction_output;
  1370. q_chip->gpio_chip.to_irq = qpnp_pin_to_irq;
  1371. q_chip->gpio_chip.get = qpnp_pin_get;
  1372. q_chip->gpio_chip.set = qpnp_pin_set;
  1373. q_chip->gpio_chip.dev = &spmi->dev;
  1374. q_chip->gpio_chip.of_xlate = qpnp_pin_of_gpio_xlate;
  1375. q_chip->gpio_chip.of_gpio_n_cells = 2;
  1376. q_chip->gpio_chip.can_sleep = 0;
  1377. rc = gpiochip_add(&q_chip->gpio_chip);
  1378. if (rc) {
  1379. dev_err(&spmi->dev, "%s: Can't add gpio chip, rc = %d\n",
  1380. __func__, rc);
  1381. goto err_probe;
  1382. }
  1383. q_chip->chip_registered = true;
  1384. /* now configure gpio config defaults if they exist */
  1385. for (i = 0; i < spmi->num_dev_node; i++) {
  1386. q_spec = qpnp_chip_gpio_get_spec(q_chip, i);
  1387. if (WARN_ON(!q_spec)) {
  1388. rc = -ENODEV;
  1389. goto err_probe;
  1390. }
  1391. rc = qpnp_pin_cache_regs(q_chip, q_spec);
  1392. if (rc)
  1393. goto err_probe;
  1394. rc = qpnp_pin_apply_config(q_chip, q_spec);
  1395. if (rc)
  1396. goto err_probe;
  1397. }
  1398. dev_dbg(&spmi->dev, "%s: gpio_chip registered between %d-%u\n",
  1399. __func__, q_chip->gpio_chip.base,
  1400. (q_chip->gpio_chip.base + q_chip->gpio_chip.ngpio) - 1);
  1401. rc = qpnp_pin_debugfs_create(q_chip);
  1402. if (rc) {
  1403. dev_err(&spmi->dev, "%s: debugfs creation failed\n", __func__);
  1404. goto err_probe;
  1405. }
  1406. return 0;
  1407. err_probe:
  1408. qpnp_pin_free_chip(q_chip);
  1409. return rc;
  1410. }
  1411. static int qpnp_pin_remove(struct spmi_device *spmi)
  1412. {
  1413. struct qpnp_pin_chip *q_chip = dev_get_drvdata(&spmi->dev);
  1414. debugfs_remove_recursive(q_chip->dfs_dir);
  1415. return qpnp_pin_free_chip(q_chip);
  1416. }
  1417. static struct of_device_id spmi_match_table[] = {
  1418. { .compatible = "qcom,qpnp-pin",
  1419. },
  1420. {}
  1421. };
  1422. static const struct spmi_device_id qpnp_pin_id[] = {
  1423. { "qcom,qpnp-pin", 0 },
  1424. { }
  1425. };
  1426. MODULE_DEVICE_TABLE(spmi, qpnp_pin_id);
  1427. static struct spmi_driver qpnp_pin_driver = {
  1428. .driver = {
  1429. .name = "qcom,qpnp-pin",
  1430. .of_match_table = spmi_match_table,
  1431. },
  1432. .probe = qpnp_pin_probe,
  1433. .remove = qpnp_pin_remove,
  1434. .id_table = qpnp_pin_id,
  1435. };
  1436. static int __init qpnp_pin_init(void)
  1437. {
  1438. #ifdef CONFIG_GPIO_QPNP_PIN_DEBUG
  1439. driver_dfs_dir = debugfs_create_dir("qpnp_pin", NULL);
  1440. if (driver_dfs_dir == NULL)
  1441. pr_err("Cannot register top level debugfs directory\n");
  1442. debugfs_create_file("all", S_IRUGO,
  1443. driver_dfs_dir, NULL, &qpnp_debug_fops);
  1444. #endif
  1445. return spmi_driver_register(&qpnp_pin_driver);
  1446. }
  1447. static void __exit qpnp_pin_exit(void)
  1448. {
  1449. #ifdef CONFIG_GPIO_QPNP_PIN_DEBUG
  1450. debugfs_remove_recursive(driver_dfs_dir);
  1451. #endif
  1452. spmi_driver_unregister(&qpnp_pin_driver);
  1453. }
  1454. MODULE_DESCRIPTION("QPNP PMIC gpio driver");
  1455. MODULE_LICENSE("GPL v2");
  1456. module_init(qpnp_pin_init);
  1457. module_exit(qpnp_pin_exit);