sppctl.c 32 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * SP7021 Pin Controller Driver.
  4. * Copyright (C) Sunplus Tech / Tibbo Tech.
  5. */
  6. #include <linux/cleanup.h>
  7. #include <linux/bitfield.h>
  8. #include <linux/device.h>
  9. #include <linux/err.h>
  10. #include <linux/gpio/driver.h>
  11. #include <linux/init.h>
  12. #include <linux/module.h>
  13. #include <linux/of.h>
  14. #include <linux/overflow.h>
  15. #include <linux/platform_device.h>
  16. #include <linux/seq_file.h>
  17. #include <linux/slab.h>
  18. #include <linux/pinctrl/pinconf.h>
  19. #include <linux/pinctrl/pinconf-generic.h>
  20. #include <linux/pinctrl/pinmux.h>
  21. #include <dt-bindings/pinctrl/sppctl-sp7021.h>
  22. #include "../core.h"
  23. #include "../pinctrl-utils.h"
  24. #include "sppctl.h"
  25. struct sppctl_gpio_chip {
  26. void __iomem *gpioxt_base; /* MASTER, OE, OUT, IN, I_INV, O_INV, OD */
  27. void __iomem *first_base; /* GPIO_FIRST */
  28. struct gpio_chip chip;
  29. spinlock_t lock; /* lock for accessing OE register */
  30. };
  31. static inline u32 sppctl_first_readl(struct sppctl_gpio_chip *spp_gchip, u32 off)
  32. {
  33. return readl(spp_gchip->first_base + SPPCTL_GPIO_OFF_FIRST + off);
  34. }
  35. static inline void sppctl_first_writel(struct sppctl_gpio_chip *spp_gchip, u32 val, u32 off)
  36. {
  37. writel(val, spp_gchip->first_base + SPPCTL_GPIO_OFF_FIRST + off);
  38. }
  39. static inline u32 sppctl_gpio_master_readl(struct sppctl_gpio_chip *spp_gchip, u32 off)
  40. {
  41. return readl(spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_MASTER + off);
  42. }
  43. static inline void sppctl_gpio_master_writel(struct sppctl_gpio_chip *spp_gchip, u32 val,
  44. u32 off)
  45. {
  46. writel(val, spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_MASTER + off);
  47. }
  48. static inline u32 sppctl_gpio_oe_readl(struct sppctl_gpio_chip *spp_gchip, u32 off)
  49. {
  50. return readl(spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_OE + off);
  51. }
  52. static inline void sppctl_gpio_oe_writel(struct sppctl_gpio_chip *spp_gchip, u32 val, u32 off)
  53. {
  54. writel(val, spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_OE + off);
  55. }
  56. static inline void sppctl_gpio_out_writel(struct sppctl_gpio_chip *spp_gchip, u32 val, u32 off)
  57. {
  58. writel(val, spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_OUT + off);
  59. }
  60. static inline u32 sppctl_gpio_in_readl(struct sppctl_gpio_chip *spp_gchip, u32 off)
  61. {
  62. return readl(spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_IN + off);
  63. }
  64. static inline u32 sppctl_gpio_iinv_readl(struct sppctl_gpio_chip *spp_gchip, u32 off)
  65. {
  66. return readl(spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_IINV + off);
  67. }
  68. static inline void sppctl_gpio_iinv_writel(struct sppctl_gpio_chip *spp_gchip, u32 val,
  69. u32 off)
  70. {
  71. writel(val, spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_IINV + off);
  72. }
  73. static inline u32 sppctl_gpio_oinv_readl(struct sppctl_gpio_chip *spp_gchip, u32 off)
  74. {
  75. return readl(spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_OINV + off);
  76. }
  77. static inline void sppctl_gpio_oinv_writel(struct sppctl_gpio_chip *spp_gchip, u32 val,
  78. u32 off)
  79. {
  80. writel(val, spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_OINV + off);
  81. }
  82. static inline u32 sppctl_gpio_od_readl(struct sppctl_gpio_chip *spp_gchip, u32 off)
  83. {
  84. return readl(spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_OD + off);
  85. }
  86. static inline void sppctl_gpio_od_writel(struct sppctl_gpio_chip *spp_gchip, u32 val, u32 off)
  87. {
  88. writel(val, spp_gchip->gpioxt_base + SPPCTL_GPIO_OFF_OD + off);
  89. }
  90. static inline u32 sppctl_get_reg_and_bit_offset(unsigned int offset, u32 *reg_off)
  91. {
  92. u32 bit_off;
  93. /* Each register has 32 bits. */
  94. *reg_off = (offset / 32) * 4;
  95. bit_off = offset % 32;
  96. return bit_off;
  97. }
  98. static inline u32 sppctl_get_moon_reg_and_bit_offset(unsigned int offset, u32 *reg_off)
  99. {
  100. u32 bit_off;
  101. /*
  102. * Each MOON register has 32 bits. Upper 16-bit word are mask-fields.
  103. * The lower 16-bit word are the control-fields. The corresponding
  104. * bits in mask-field should be set then you can write something to
  105. * control-field.
  106. */
  107. *reg_off = (offset / 16) * 4;
  108. bit_off = offset % 16;
  109. return bit_off;
  110. }
  111. static inline u32 sppctl_prep_moon_reg_and_offset(unsigned int offset, u32 *reg_off, int val)
  112. {
  113. u32 bit_off;
  114. bit_off = sppctl_get_moon_reg_and_bit_offset(offset, reg_off);
  115. if (val)
  116. return SPPCTL_SET_MOON_REG_BIT(bit_off);
  117. else
  118. return SPPCTL_CLR_MOON_REG_BIT(bit_off);
  119. }
  120. /**
  121. * sppctl_func_set() - Set pin of fully-pinmux function.
  122. *
  123. * Mask-fields and control-fields of fully-pinmux function of SP7021 are
  124. * arranged as shown below:
  125. *
  126. * func# | register | mask-field | control-field
  127. * -------+----------+--------------+---------------
  128. * 0 | base[0] | (22 : 16) | ( 6 : 0)
  129. * 1 | base[0] | (30 : 24) | (14 : 8)
  130. * 2 | base[1] | (22 : 16) | ( 6 : 0)
  131. * 3 | baeg[1] | (30 : 24) | (14 : 8)
  132. * : | : | : | :
  133. *
  134. * where mask-fields are used to protect control-fields from write-in
  135. * accidentally. Set the corresponding bits in the mask-field before
  136. * you write a value into a control-field.
  137. *
  138. * Control-fields are used to set where the function pin is going to
  139. * be routed to.
  140. *
  141. * Note that mask-fields and control-fields of even number of 'func'
  142. * are located at bits (22:16) and (6:0), while odd number of 'func's
  143. * are located at bits (30:24) and (14:8).
  144. */
  145. static void sppctl_func_set(struct sppctl_pdata *pctl, u8 func, u8 val)
  146. {
  147. u32 reg, offset;
  148. /*
  149. * Note that upper 16-bit word are mask-fields and lower 16-bit
  150. * word are the control-fields. Set corresponding bits in mask-
  151. * field before write to a control-field.
  152. */
  153. reg = SPPCTL_FULLY_PINMUX_MASK_MASK | val;
  154. /*
  155. * MUXF_L2SW_CLK_OUT is the first fully-pinmux pin
  156. * and its register offset is 0.
  157. */
  158. func -= MUXF_L2SW_CLK_OUT;
  159. /*
  160. * Check if 'func' is an odd number or not. Mask and control-
  161. * fields of odd number 'func' is located at upper portion of
  162. * a register. Extra shift is needed.
  163. */
  164. if (func & BIT(0))
  165. reg <<= SPPCTL_FULLY_PINMUX_UPPER_SHIFT;
  166. /* Convert func# to register offset w.r.t. base register. */
  167. offset = func * 2;
  168. offset &= GENMASK(31, 2);
  169. writel(reg, pctl->moon2_base + offset);
  170. }
  171. /**
  172. * sppctl_gmx_set() - Set pin of group-pinmux.
  173. *
  174. * Mask-fields and control-fields of group-pinmux function of SP7021 are
  175. * arranged as shown below:
  176. *
  177. * register | mask-fields | control-fields
  178. * ----------+--------------+----------------
  179. * base[0] | (31 : 16) | (15 : 0)
  180. * base[1] | (31 : 24) | (15 : 0)
  181. * base[2] | (31 : 24) | (15 : 0)
  182. * : | : | :
  183. *
  184. * where mask-fields are used to protect control-fields from write-in
  185. * accidentally. Set the corresponding bits in the mask-field before
  186. * you write a value into a control-field.
  187. *
  188. * Control-fields are used to set where the function pin is going to
  189. * be routed to. A control-field consists of one or more bits.
  190. */
  191. static void sppctl_gmx_set(struct sppctl_pdata *pctl, u8 reg_off, u8 bit_off, u8 bit_sz,
  192. u8 val)
  193. {
  194. u32 mask, reg;
  195. /*
  196. * Note that upper 16-bit word are mask-fields and lower 16-bit
  197. * word are the control-fields. Set corresponding bits in mask-
  198. * field before write to a control-field.
  199. */
  200. mask = GENMASK(bit_sz - 1, 0) << SPPCTL_MOON_REG_MASK_SHIFT;
  201. reg = (mask | val) << bit_off;
  202. writel(reg, pctl->moon1_base + reg_off * 4);
  203. }
  204. /**
  205. * sppctl_first_get() - get bit of FIRST register.
  206. *
  207. * There are 4 FIRST registers. Each has 32 control-bits.
  208. * Totally, there are 4 * 32 = 128 control-bits.
  209. * Control-bits are arranged as shown below:
  210. *
  211. * registers | control-bits
  212. * -----------+--------------
  213. * first[0] | (31 : 0)
  214. * first[1] | (63 : 32)
  215. * first[2] | (95 : 64)
  216. * first[3] | (127 : 96)
  217. *
  218. * Each control-bit sets type of a GPIO pin.
  219. * 0: a fully-pinmux pin
  220. * 1: a GPIO or IOP pin
  221. */
  222. static int sppctl_first_get(struct gpio_chip *chip, unsigned int offset)
  223. {
  224. struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
  225. u32 reg_off, bit_off, reg;
  226. bit_off = sppctl_get_reg_and_bit_offset(offset, &reg_off);
  227. reg = sppctl_first_readl(spp_gchip, reg_off);
  228. return (reg & BIT(bit_off)) ? 1 : 0;
  229. }
  230. /**
  231. * sppctl_master_get() - get bit of MASTER register.
  232. *
  233. * There are 8 MASTER registers. Each has 16 mask-bits and 16 control-bits.
  234. * Upper 16-bit of MASTER registers are mask-bits while lower 16-bit are
  235. * control-bits. Totally, there are 128 mask-bits and 128 control-bits.
  236. * They are arranged as shown below:
  237. *
  238. * register | mask-bits | control-bits
  239. * -----------+-------------+--------------
  240. * master[0] | (15 : 0) | (15 : 0)
  241. * master[1] | (31 : 16) | (31 : 16)
  242. * master[2] | (47 : 32) | (47 : 32)
  243. * : | : | :
  244. * master[7] | (127 : 112) | (127 : 112)
  245. *
  246. * where mask-bits are used to protect control-bits from write-in
  247. * accidentally. Set the corresponding mask-bit before you write
  248. * a value into a control-bit.
  249. *
  250. * Each control-bit sets type of a GPIO pin when FIRST bit is 1.
  251. * 0: a IOP pin
  252. * 1: a GPIO pin
  253. */
  254. static int sppctl_master_get(struct gpio_chip *chip, unsigned int offset)
  255. {
  256. struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
  257. u32 reg_off, bit_off, reg;
  258. bit_off = sppctl_get_moon_reg_and_bit_offset(offset, &reg_off);
  259. reg = sppctl_gpio_master_readl(spp_gchip, reg_off);
  260. return (reg & BIT(bit_off)) ? 1 : 0;
  261. }
  262. static void sppctl_first_master_set(struct gpio_chip *chip, unsigned int offset,
  263. enum mux_first_reg first, enum mux_master_reg master)
  264. {
  265. struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
  266. u32 reg_off, bit_off, reg;
  267. enum mux_first_reg val;
  268. /* FIRST register */
  269. if (first != mux_f_keep) {
  270. bit_off = sppctl_get_reg_and_bit_offset(offset, &reg_off);
  271. reg = sppctl_first_readl(spp_gchip, reg_off);
  272. val = (reg & BIT(bit_off)) ? mux_f_gpio : mux_f_mux;
  273. if (first != val)
  274. switch (first) {
  275. case mux_f_gpio:
  276. reg |= BIT(bit_off);
  277. sppctl_first_writel(spp_gchip, reg, reg_off);
  278. break;
  279. case mux_f_mux:
  280. reg &= ~BIT(bit_off);
  281. sppctl_first_writel(spp_gchip, reg, reg_off);
  282. break;
  283. case mux_f_keep:
  284. break;
  285. }
  286. }
  287. /* MASTER register */
  288. if (master != mux_m_keep) {
  289. reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, (master == mux_m_gpio));
  290. sppctl_gpio_master_writel(spp_gchip, reg, reg_off);
  291. }
  292. }
  293. static void sppctl_gpio_input_inv_set(struct gpio_chip *chip, unsigned int offset)
  294. {
  295. struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
  296. u32 reg_off, reg;
  297. reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, 1);
  298. sppctl_gpio_iinv_writel(spp_gchip, reg, reg_off);
  299. }
  300. static void sppctl_gpio_output_inv_set(struct gpio_chip *chip, unsigned int offset)
  301. {
  302. struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
  303. u32 reg_off, reg;
  304. reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, 1);
  305. sppctl_gpio_oinv_writel(spp_gchip, reg, reg_off);
  306. }
  307. static int sppctl_gpio_output_od_get(struct gpio_chip *chip, unsigned int offset)
  308. {
  309. struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
  310. u32 reg_off, bit_off, reg;
  311. bit_off = sppctl_get_moon_reg_and_bit_offset(offset, &reg_off);
  312. reg = sppctl_gpio_od_readl(spp_gchip, reg_off);
  313. return (reg & BIT(bit_off)) ? 1 : 0;
  314. }
  315. static void sppctl_gpio_output_od_set(struct gpio_chip *chip, unsigned int offset,
  316. unsigned int val)
  317. {
  318. struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
  319. u32 reg_off, reg;
  320. reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, val);
  321. sppctl_gpio_od_writel(spp_gchip, reg, reg_off);
  322. }
  323. static int sppctl_gpio_get_direction(struct gpio_chip *chip, unsigned int offset)
  324. {
  325. struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
  326. u32 reg_off, bit_off, reg;
  327. bit_off = sppctl_get_moon_reg_and_bit_offset(offset, &reg_off);
  328. reg = sppctl_gpio_oe_readl(spp_gchip, reg_off);
  329. return (reg & BIT(bit_off)) ? 0 : 1;
  330. }
  331. static int sppctl_gpio_inv_get(struct gpio_chip *chip, unsigned int offset)
  332. {
  333. struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
  334. u32 reg_off, bit_off, reg;
  335. unsigned long flags;
  336. bit_off = sppctl_get_moon_reg_and_bit_offset(offset, &reg_off);
  337. spin_lock_irqsave(&spp_gchip->lock, flags);
  338. if (sppctl_gpio_get_direction(chip, offset))
  339. reg = sppctl_gpio_iinv_readl(spp_gchip, reg_off);
  340. else
  341. reg = sppctl_gpio_oinv_readl(spp_gchip, reg_off);
  342. spin_unlock_irqrestore(&spp_gchip->lock, flags);
  343. return (reg & BIT(bit_off)) ? 1 : 0;
  344. }
  345. static int sppctl_gpio_direction_input(struct gpio_chip *chip, unsigned int offset)
  346. {
  347. struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
  348. unsigned long flags;
  349. u32 reg_off, reg;
  350. reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, 0);
  351. spin_lock_irqsave(&spp_gchip->lock, flags);
  352. sppctl_gpio_oe_writel(spp_gchip, reg, reg_off);
  353. spin_unlock_irqrestore(&spp_gchip->lock, flags);
  354. return 0;
  355. }
  356. static int sppctl_gpio_direction_output(struct gpio_chip *chip, unsigned int offset, int val)
  357. {
  358. struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
  359. unsigned long flags;
  360. u32 reg_off, reg;
  361. reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, 1);
  362. spin_lock_irqsave(&spp_gchip->lock, flags);
  363. sppctl_gpio_oe_writel(spp_gchip, reg, reg_off);
  364. if (val < 0) {
  365. spin_unlock_irqrestore(&spp_gchip->lock, flags);
  366. return 0;
  367. }
  368. reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, val);
  369. sppctl_gpio_out_writel(spp_gchip, reg, reg_off);
  370. spin_unlock_irqrestore(&spp_gchip->lock, flags);
  371. return 0;
  372. }
  373. static int sppctl_gpio_get(struct gpio_chip *chip, unsigned int offset)
  374. {
  375. struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
  376. u32 reg_off, bit_off, reg;
  377. bit_off = sppctl_get_reg_and_bit_offset(offset, &reg_off);
  378. reg = sppctl_gpio_in_readl(spp_gchip, reg_off);
  379. return (reg & BIT(bit_off)) ? 1 : 0;
  380. }
  381. static void sppctl_gpio_set(struct gpio_chip *chip, unsigned int offset, int val)
  382. {
  383. struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
  384. u32 reg_off, reg;
  385. reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, val);
  386. sppctl_gpio_out_writel(spp_gchip, reg, reg_off);
  387. }
  388. static int sppctl_gpio_set_config(struct gpio_chip *chip, unsigned int offset,
  389. unsigned long config)
  390. {
  391. enum pin_config_param param = pinconf_to_config_param(config);
  392. struct sppctl_gpio_chip *spp_gchip = gpiochip_get_data(chip);
  393. u32 reg_off, reg;
  394. switch (param) {
  395. case PIN_CONFIG_DRIVE_OPEN_DRAIN:
  396. reg = sppctl_prep_moon_reg_and_offset(offset, &reg_off, 1);
  397. sppctl_gpio_od_writel(spp_gchip, reg, reg_off);
  398. break;
  399. case PIN_CONFIG_INPUT_ENABLE:
  400. break;
  401. case PIN_CONFIG_OUTPUT:
  402. return sppctl_gpio_direction_output(chip, offset, 0);
  403. case PIN_CONFIG_PERSIST_STATE:
  404. return -ENOTSUPP;
  405. default:
  406. return -EINVAL;
  407. }
  408. return 0;
  409. }
  410. static void sppctl_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
  411. {
  412. int i;
  413. for (i = 0; i < chip->ngpio; i++) {
  414. char *label __free(kfree) = gpiochip_dup_line_label(chip, i);
  415. if (IS_ERR(label))
  416. continue;
  417. seq_printf(s, " gpio-%03d (%-16.16s | %-16.16s)", i + chip->base,
  418. chip->names[i], label ?: "");
  419. seq_printf(s, " %c", sppctl_gpio_get_direction(chip, i) ? 'I' : 'O');
  420. seq_printf(s, ":%d", sppctl_gpio_get(chip, i));
  421. seq_printf(s, " %s", sppctl_first_get(chip, i) ? "gpi" : "mux");
  422. seq_printf(s, " %s", sppctl_master_get(chip, i) ? "gpi" : "iop");
  423. seq_printf(s, " %s", sppctl_gpio_inv_get(chip, i) ? "inv" : " ");
  424. seq_printf(s, " %s", sppctl_gpio_output_od_get(chip, i) ? "oDr" : "");
  425. seq_puts(s, "\n");
  426. }
  427. }
  428. static int sppctl_gpio_new(struct platform_device *pdev, struct sppctl_pdata *pctl)
  429. {
  430. struct sppctl_gpio_chip *spp_gchip;
  431. struct gpio_chip *gchip;
  432. int err;
  433. spp_gchip = devm_kzalloc(&pdev->dev, sizeof(*spp_gchip), GFP_KERNEL);
  434. if (!spp_gchip)
  435. return -ENOMEM;
  436. pctl->spp_gchip = spp_gchip;
  437. spp_gchip->gpioxt_base = pctl->gpioxt_base;
  438. spp_gchip->first_base = pctl->first_base;
  439. spin_lock_init(&spp_gchip->lock);
  440. gchip = &spp_gchip->chip;
  441. gchip->label = SPPCTL_MODULE_NAME;
  442. gchip->parent = &pdev->dev;
  443. gchip->owner = THIS_MODULE;
  444. gchip->request = gpiochip_generic_request;
  445. gchip->free = gpiochip_generic_free;
  446. gchip->get_direction = sppctl_gpio_get_direction;
  447. gchip->direction_input = sppctl_gpio_direction_input;
  448. gchip->direction_output = sppctl_gpio_direction_output;
  449. gchip->get = sppctl_gpio_get;
  450. gchip->set = sppctl_gpio_set;
  451. gchip->set_config = sppctl_gpio_set_config;
  452. gchip->dbg_show = IS_ENABLED(CONFIG_DEBUG_FS) ?
  453. sppctl_gpio_dbg_show : NULL;
  454. gchip->base = -1;
  455. gchip->ngpio = sppctl_gpio_list_sz;
  456. gchip->names = sppctl_gpio_list_s;
  457. pctl->pctl_grange.npins = gchip->ngpio;
  458. pctl->pctl_grange.name = gchip->label;
  459. pctl->pctl_grange.gc = gchip;
  460. err = devm_gpiochip_add_data(&pdev->dev, gchip, spp_gchip);
  461. if (err)
  462. return dev_err_probe(&pdev->dev, err, "Failed to add gpiochip!\n");
  463. return 0;
  464. }
  465. static int sppctl_pin_config_get(struct pinctrl_dev *pctldev, unsigned int pin,
  466. unsigned long *config)
  467. {
  468. struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
  469. unsigned int param = pinconf_to_config_param(*config);
  470. unsigned int arg;
  471. switch (param) {
  472. case PIN_CONFIG_DRIVE_OPEN_DRAIN:
  473. if (!sppctl_gpio_output_od_get(&pctl->spp_gchip->chip, pin))
  474. return -EINVAL;
  475. arg = 0;
  476. break;
  477. case PIN_CONFIG_OUTPUT:
  478. if (!sppctl_first_get(&pctl->spp_gchip->chip, pin))
  479. return -EINVAL;
  480. if (!sppctl_master_get(&pctl->spp_gchip->chip, pin))
  481. return -EINVAL;
  482. if (sppctl_gpio_get_direction(&pctl->spp_gchip->chip, pin))
  483. return -EINVAL;
  484. arg = sppctl_gpio_get(&pctl->spp_gchip->chip, pin);
  485. break;
  486. default:
  487. return -EOPNOTSUPP;
  488. }
  489. *config = pinconf_to_config_packed(param, arg);
  490. return 0;
  491. }
  492. static int sppctl_pin_config_set(struct pinctrl_dev *pctldev, unsigned int pin,
  493. unsigned long *configs, unsigned int num_configs)
  494. {
  495. struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
  496. int i;
  497. /* Special handling for IOP pins */
  498. if (configs[0] == SPPCTL_IOP_CONFIGS) {
  499. sppctl_first_master_set(&pctl->spp_gchip->chip, pin, mux_f_gpio, mux_m_iop);
  500. return 0;
  501. }
  502. for (i = 0; i < num_configs; i++) {
  503. if (configs[i] & SPPCTL_PCTL_L_OUT)
  504. sppctl_gpio_direction_output(&pctl->spp_gchip->chip, pin, 0);
  505. if (configs[i] & SPPCTL_PCTL_L_OU1)
  506. sppctl_gpio_direction_output(&pctl->spp_gchip->chip, pin, 1);
  507. if (configs[i] & SPPCTL_PCTL_L_INV)
  508. sppctl_gpio_input_inv_set(&pctl->spp_gchip->chip, pin);
  509. if (configs[i] & SPPCTL_PCTL_L_ONV)
  510. sppctl_gpio_output_inv_set(&pctl->spp_gchip->chip, pin);
  511. if (configs[i] & SPPCTL_PCTL_L_ODR)
  512. sppctl_gpio_output_od_set(&pctl->spp_gchip->chip, pin, 1);
  513. }
  514. return 0;
  515. }
  516. static const struct pinconf_ops sppctl_pconf_ops = {
  517. .is_generic = true,
  518. .pin_config_get = sppctl_pin_config_get,
  519. .pin_config_set = sppctl_pin_config_set,
  520. };
  521. static int sppctl_get_functions_count(struct pinctrl_dev *pctldev)
  522. {
  523. return sppctl_list_funcs_sz;
  524. }
  525. static const char *sppctl_get_function_name(struct pinctrl_dev *pctldev,
  526. unsigned int selector)
  527. {
  528. return sppctl_list_funcs[selector].name;
  529. }
  530. static int sppctl_get_function_groups(struct pinctrl_dev *pctldev, unsigned int selector,
  531. const char * const **groups, unsigned int *num_groups)
  532. {
  533. struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
  534. const struct sppctl_func *f = &sppctl_list_funcs[selector];
  535. int i;
  536. *num_groups = 0;
  537. switch (f->type) {
  538. case pinmux_type_fpmx:
  539. *num_groups = sppctl_pmux_list_sz;
  540. *groups = sppctl_pmux_list_s;
  541. break;
  542. case pinmux_type_grp:
  543. if (!f->grps)
  544. break;
  545. *num_groups = f->gnum;
  546. for (i = 0; i < pctl->unq_grps_sz; i++)
  547. if (pctl->g2fp_maps[i].f_idx == selector)
  548. break;
  549. *groups = &pctl->unq_grps[i];
  550. break;
  551. default:
  552. dev_err(pctldev->dev, "Unknown pinmux (selector: %d, type: %d)\n",
  553. selector, f->type);
  554. break;
  555. }
  556. return 0;
  557. }
  558. /**
  559. * sppctl_fully_pinmux_conv - Convert GPIO# to fully-pinmux control-field setting
  560. *
  561. * Each fully-pinmux function can be mapped to any of GPIO 8 ~ 71 by
  562. * settings its control-field. Refer to following table:
  563. *
  564. * control-field | GPIO
  565. * --------------+--------
  566. * 0 | No map
  567. * 1 | 8
  568. * 2 | 9
  569. * 3 | 10
  570. * : | :
  571. * 65 | 71
  572. */
  573. static inline int sppctl_fully_pinmux_conv(unsigned int offset)
  574. {
  575. return (offset < 8) ? 0 : offset - 7;
  576. }
  577. static int sppctl_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector,
  578. unsigned int group_selector)
  579. {
  580. const struct sppctl_func *f = &sppctl_list_funcs[func_selector];
  581. struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
  582. struct grp2fp_map g2fpm = pctl->g2fp_maps[group_selector];
  583. int i;
  584. switch (f->type) {
  585. case pinmux_type_fpmx:
  586. sppctl_first_master_set(&pctl->spp_gchip->chip, group_selector,
  587. mux_f_mux, mux_m_keep);
  588. sppctl_func_set(pctl, func_selector, sppctl_fully_pinmux_conv(group_selector));
  589. break;
  590. case pinmux_type_grp:
  591. for (i = 0; i < f->grps[g2fpm.g_idx].pnum; i++)
  592. sppctl_first_master_set(&pctl->spp_gchip->chip,
  593. f->grps[g2fpm.g_idx].pins[i],
  594. mux_f_mux, mux_m_keep);
  595. sppctl_gmx_set(pctl, f->roff, f->boff, f->blen, f->grps[g2fpm.g_idx].gval);
  596. break;
  597. default:
  598. dev_err(pctldev->dev, "Unknown pinmux type (func_selector: %d, type: %d)\n",
  599. func_selector, f->type);
  600. break;
  601. }
  602. return 0;
  603. }
  604. static int sppctl_gpio_request_enable(struct pinctrl_dev *pctldev,
  605. struct pinctrl_gpio_range *range, unsigned int offset)
  606. {
  607. struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
  608. int g_f, g_m;
  609. g_f = sppctl_first_get(&pctl->spp_gchip->chip, offset);
  610. g_m = sppctl_master_get(&pctl->spp_gchip->chip, offset);
  611. if (g_f == mux_f_gpio && g_m == mux_m_gpio)
  612. return 0;
  613. sppctl_first_master_set(&pctl->spp_gchip->chip, offset, mux_f_gpio, mux_m_gpio);
  614. return 0;
  615. }
  616. static const struct pinmux_ops sppctl_pinmux_ops = {
  617. .get_functions_count = sppctl_get_functions_count,
  618. .get_function_name = sppctl_get_function_name,
  619. .get_function_groups = sppctl_get_function_groups,
  620. .set_mux = sppctl_set_mux,
  621. .gpio_request_enable = sppctl_gpio_request_enable,
  622. .strict = true,
  623. };
  624. static int sppctl_get_groups_count(struct pinctrl_dev *pctldev)
  625. {
  626. struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
  627. return pctl->unq_grps_sz;
  628. }
  629. static const char *sppctl_get_group_name(struct pinctrl_dev *pctldev, unsigned int selector)
  630. {
  631. struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
  632. return pctl->unq_grps[selector];
  633. }
  634. static int sppctl_get_group_pins(struct pinctrl_dev *pctldev, unsigned int selector,
  635. const unsigned int **pins, unsigned int *num_pins)
  636. {
  637. struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
  638. struct grp2fp_map g2fpm = pctl->g2fp_maps[selector];
  639. const struct sppctl_func *f;
  640. f = &sppctl_list_funcs[g2fpm.f_idx];
  641. *num_pins = 0;
  642. /* Except group-pinmux, each group has 1 pin. */
  643. if (f->type != pinmux_type_grp) {
  644. *num_pins = 1;
  645. *pins = &sppctl_pins_gpio[selector];
  646. return 0;
  647. }
  648. /* Group-pinmux may have more than one pin. */
  649. if (!f->grps)
  650. return 0;
  651. if (f->gnum < 1)
  652. return 0;
  653. *num_pins = f->grps[g2fpm.g_idx].pnum;
  654. *pins = f->grps[g2fpm.g_idx].pins;
  655. return 0;
  656. }
  657. #ifdef CONFIG_DEBUG_FS
  658. static void sppctl_pin_dbg_show(struct pinctrl_dev *pctldev, struct seq_file *s,
  659. unsigned int offset)
  660. {
  661. struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
  662. const char *pin_type;
  663. u8 first, master;
  664. first = sppctl_first_get(&pctl->spp_gchip->chip, offset);
  665. master = sppctl_master_get(&pctl->spp_gchip->chip, offset);
  666. if (first)
  667. if (master)
  668. pin_type = "GPIO";
  669. else
  670. pin_type = " IOP";
  671. else
  672. pin_type = " MUX";
  673. seq_printf(s, " %s", pin_type);
  674. }
  675. #endif
  676. static int sppctl_dt_node_to_map(struct pinctrl_dev *pctldev, struct device_node *np_config,
  677. struct pinctrl_map **map, unsigned int *num_maps)
  678. {
  679. struct sppctl_pdata *pctl = pinctrl_dev_get_drvdata(pctldev);
  680. int nmG = of_property_count_strings(np_config, "groups");
  681. const struct sppctl_func *f = NULL;
  682. u8 pin_num, pin_type, pin_func;
  683. struct device_node *parent;
  684. unsigned long *configs;
  685. struct property *prop;
  686. const char *s_f, *s_g;
  687. const __be32 *list;
  688. u32 dt_pin, dt_fun;
  689. int i, size = 0;
  690. list = of_get_property(np_config, "sunplus,pins", &size);
  691. *num_maps = size / sizeof(*list);
  692. /*
  693. * Process property:
  694. * sunplus,pins = < u32 u32 u32 ... >;
  695. *
  696. * Each 32-bit integer defines a individual pin in which:
  697. *
  698. * Bit 32~24: defines GPIO pin number. Its range is 0 ~ 98.
  699. * Bit 23~16: defines types: (1) fully-pinmux pins
  700. * (2) IO processor pins
  701. * (3) digital GPIO pins
  702. * Bit 15~8: defines pins of peripherals (which are defined in
  703. * 'include/dt-binging/pinctrl/sppctl.h').
  704. * Bit 7~0: defines types or initial-state of digital GPIO pins.
  705. */
  706. for (i = 0; i < (*num_maps); i++) {
  707. dt_pin = be32_to_cpu(list[i]);
  708. pin_num = FIELD_GET(GENMASK(31, 24), dt_pin);
  709. if (pin_num >= sppctl_pins_all_sz) {
  710. dev_err(pctldev->dev, "Invalid pin property at index %d (0x%08x)\n",
  711. i, dt_pin);
  712. return -EINVAL;
  713. }
  714. }
  715. if (nmG <= 0)
  716. nmG = 0;
  717. *map = kcalloc(*num_maps + nmG, sizeof(**map), GFP_KERNEL);
  718. if (!(*map))
  719. return -ENOMEM;
  720. parent = of_get_parent(np_config);
  721. for (i = 0; i < (*num_maps); i++) {
  722. dt_pin = be32_to_cpu(list[i]);
  723. pin_num = FIELD_GET(GENMASK(31, 24), dt_pin);
  724. pin_type = FIELD_GET(GENMASK(23, 16), dt_pin);
  725. pin_func = FIELD_GET(GENMASK(15, 8), dt_pin);
  726. (*map)[i].name = parent->name;
  727. if (pin_type == SPPCTL_PCTL_G_GPIO) {
  728. /* A digital GPIO pin */
  729. (*map)[i].type = PIN_MAP_TYPE_CONFIGS_PIN;
  730. (*map)[i].data.configs.num_configs = 1;
  731. (*map)[i].data.configs.group_or_pin = pin_get_name(pctldev, pin_num);
  732. configs = kmalloc(sizeof(*configs), GFP_KERNEL);
  733. if (!configs)
  734. goto sppctl_map_err;
  735. *configs = FIELD_GET(GENMASK(7, 0), dt_pin);
  736. (*map)[i].data.configs.configs = configs;
  737. dev_dbg(pctldev->dev, "%s: GPIO (%s)\n",
  738. (*map)[i].data.configs.group_or_pin,
  739. (*configs & (SPPCTL_PCTL_L_OUT | SPPCTL_PCTL_L_OU1)) ?
  740. "OUT" : "IN");
  741. } else if (pin_type == SPPCTL_PCTL_G_IOPP) {
  742. /* A IO Processor (IOP) pin */
  743. (*map)[i].type = PIN_MAP_TYPE_CONFIGS_PIN;
  744. (*map)[i].data.configs.num_configs = 1;
  745. (*map)[i].data.configs.group_or_pin = pin_get_name(pctldev, pin_num);
  746. configs = kmalloc(sizeof(*configs), GFP_KERNEL);
  747. if (!configs)
  748. goto sppctl_map_err;
  749. *configs = SPPCTL_IOP_CONFIGS;
  750. (*map)[i].data.configs.configs = configs;
  751. dev_dbg(pctldev->dev, "%s: IOP\n",
  752. (*map)[i].data.configs.group_or_pin);
  753. } else {
  754. /* A fully-pinmux pin */
  755. (*map)[i].type = PIN_MAP_TYPE_MUX_GROUP;
  756. (*map)[i].data.mux.function = sppctl_list_funcs[pin_func].name;
  757. (*map)[i].data.mux.group = pin_get_name(pctldev, pin_num);
  758. dev_dbg(pctldev->dev, "%s: %s\n", (*map)[i].data.mux.group,
  759. (*map)[i].data.mux.function);
  760. }
  761. }
  762. /*
  763. * Process properties:
  764. * function = "xxx";
  765. * groups = "yyy";
  766. */
  767. if (nmG > 0 && of_property_read_string(np_config, "function", &s_f) == 0) {
  768. of_property_for_each_string(np_config, "groups", prop, s_g) {
  769. (*map)[*num_maps].type = PIN_MAP_TYPE_MUX_GROUP;
  770. (*map)[*num_maps].data.mux.function = s_f;
  771. (*map)[*num_maps].data.mux.group = s_g;
  772. (*num_maps)++;
  773. dev_dbg(pctldev->dev, "%s: %s\n", s_f, s_g);
  774. }
  775. }
  776. /*
  777. * Process property:
  778. * sunplus,zerofunc = < u32 u32 u32 ...>
  779. */
  780. list = of_get_property(np_config, "sunplus,zerofunc", &size);
  781. if (list) {
  782. for (i = 0; i < (size / sizeof(*list)); i++) {
  783. dt_fun = be32_to_cpu(list[i]);
  784. if (dt_fun >= sppctl_list_funcs_sz) {
  785. dev_err(pctldev->dev, "Zero-func %d out of range!\n",
  786. dt_fun);
  787. continue;
  788. }
  789. f = &sppctl_list_funcs[dt_fun];
  790. switch (f->type) {
  791. case pinmux_type_fpmx:
  792. sppctl_func_set(pctl, dt_fun, 0);
  793. dev_dbg(pctldev->dev, "%s: No map\n", f->name);
  794. break;
  795. case pinmux_type_grp:
  796. sppctl_gmx_set(pctl, f->roff, f->boff, f->blen, 0);
  797. dev_dbg(pctldev->dev, "%s: No map\n", f->name);
  798. break;
  799. default:
  800. dev_err(pctldev->dev, "Wrong zero-group: %d (%s)\n",
  801. dt_fun, f->name);
  802. break;
  803. }
  804. }
  805. }
  806. of_node_put(parent);
  807. dev_dbg(pctldev->dev, "%d pins mapped\n", *num_maps);
  808. return 0;
  809. sppctl_map_err:
  810. for (i = 0; i < (*num_maps); i++)
  811. if ((*map)[i].type == PIN_MAP_TYPE_CONFIGS_PIN)
  812. kfree((*map)[i].data.configs.configs);
  813. kfree(*map);
  814. of_node_put(parent);
  815. return -ENOMEM;
  816. }
  817. static const struct pinctrl_ops sppctl_pctl_ops = {
  818. .get_groups_count = sppctl_get_groups_count,
  819. .get_group_name = sppctl_get_group_name,
  820. .get_group_pins = sppctl_get_group_pins,
  821. #ifdef CONFIG_DEBUG_FS
  822. .pin_dbg_show = sppctl_pin_dbg_show,
  823. #endif
  824. .dt_node_to_map = sppctl_dt_node_to_map,
  825. .dt_free_map = pinctrl_utils_free_map,
  826. };
  827. static int sppctl_group_groups(struct platform_device *pdev)
  828. {
  829. struct sppctl_pdata *sppctl = platform_get_drvdata(pdev);
  830. int i, k, j;
  831. /* Calculate number of total group (GPIO + group-pinmux group). */
  832. sppctl->unq_grps_sz = sppctl_gpio_list_sz;
  833. for (i = 0; i < sppctl_list_funcs_sz; i++)
  834. if (sppctl_list_funcs[i].type == pinmux_type_grp)
  835. sppctl->unq_grps_sz += sppctl_list_funcs[i].gnum;
  836. sppctl->unq_grps = devm_kcalloc(&pdev->dev, sppctl->unq_grps_sz + 1,
  837. sizeof(*sppctl->unq_grps), GFP_KERNEL);
  838. if (!sppctl->unq_grps)
  839. return -ENOMEM;
  840. sppctl->g2fp_maps = devm_kcalloc(&pdev->dev, sppctl->unq_grps_sz + 1,
  841. sizeof(*sppctl->g2fp_maps), GFP_KERNEL);
  842. if (!sppctl->g2fp_maps)
  843. return -ENOMEM;
  844. /* Add GPIO pins. */
  845. for (i = 0; i < sppctl_gpio_list_sz; i++) {
  846. sppctl->unq_grps[i] = sppctl_gpio_list_s[i];
  847. sppctl->g2fp_maps[i].f_idx = 0;
  848. sppctl->g2fp_maps[i].g_idx = i;
  849. }
  850. /* Add group-pinmux to end of GPIO pins. */
  851. j = sppctl_gpio_list_sz;
  852. for (i = 0; i < sppctl_list_funcs_sz; i++) {
  853. if (sppctl_list_funcs[i].type != pinmux_type_grp)
  854. continue;
  855. for (k = 0; k < sppctl_list_funcs[i].gnum; k++) {
  856. sppctl->unq_grps[j] = sppctl_list_funcs[i].grps[k].name;
  857. sppctl->g2fp_maps[j].f_idx = i;
  858. sppctl->g2fp_maps[j].g_idx = k;
  859. j++;
  860. }
  861. }
  862. return 0;
  863. }
  864. static int sppctl_pinctrl_init(struct platform_device *pdev)
  865. {
  866. struct sppctl_pdata *sppctl = platform_get_drvdata(pdev);
  867. int err;
  868. sppctl->pctl_desc.owner = THIS_MODULE;
  869. sppctl->pctl_desc.name = dev_name(&pdev->dev);
  870. sppctl->pctl_desc.pins = sppctl_pins_all;
  871. sppctl->pctl_desc.npins = sppctl_pins_all_sz;
  872. sppctl->pctl_desc.pctlops = &sppctl_pctl_ops;
  873. sppctl->pctl_desc.confops = &sppctl_pconf_ops;
  874. sppctl->pctl_desc.pmxops = &sppctl_pinmux_ops;
  875. err = sppctl_group_groups(pdev);
  876. if (err)
  877. return err;
  878. err = devm_pinctrl_register_and_init(&pdev->dev, &sppctl->pctl_desc,
  879. sppctl, &sppctl->pctl_dev);
  880. if (err)
  881. return dev_err_probe(&pdev->dev, err, "Failed to register pinctrl!\n");
  882. pinctrl_enable(sppctl->pctl_dev);
  883. return 0;
  884. }
  885. static int sppctl_resource_map(struct platform_device *pdev, struct sppctl_pdata *sppctl)
  886. {
  887. sppctl->moon2_base = devm_platform_ioremap_resource_byname(pdev, "moon2");
  888. if (IS_ERR(sppctl->moon2_base))
  889. return PTR_ERR(sppctl->moon2_base);
  890. sppctl->gpioxt_base = devm_platform_ioremap_resource_byname(pdev, "gpioxt");
  891. if (IS_ERR(sppctl->gpioxt_base))
  892. return PTR_ERR(sppctl->gpioxt_base);
  893. sppctl->first_base = devm_platform_ioremap_resource_byname(pdev, "first");
  894. if (IS_ERR(sppctl->first_base))
  895. return PTR_ERR(sppctl->first_base);
  896. sppctl->moon1_base = devm_platform_ioremap_resource_byname(pdev, "moon1");
  897. if (IS_ERR(sppctl->moon1_base))
  898. return PTR_ERR(sppctl->moon1_base);
  899. return 0;
  900. }
  901. static int sppctl_probe(struct platform_device *pdev)
  902. {
  903. struct sppctl_pdata *sppctl;
  904. int ret;
  905. sppctl = devm_kzalloc(&pdev->dev, sizeof(*sppctl), GFP_KERNEL);
  906. if (!sppctl)
  907. return -ENOMEM;
  908. platform_set_drvdata(pdev, sppctl);
  909. ret = sppctl_resource_map(pdev, sppctl);
  910. if (ret)
  911. return ret;
  912. ret = sppctl_gpio_new(pdev, sppctl);
  913. if (ret)
  914. return ret;
  915. ret = sppctl_pinctrl_init(pdev);
  916. if (ret)
  917. return ret;
  918. pinctrl_add_gpio_range(sppctl->pctl_dev, &sppctl->pctl_grange);
  919. return 0;
  920. }
  921. static const struct of_device_id sppctl_match_table[] = {
  922. { .compatible = "sunplus,sp7021-pctl" },
  923. { /* sentinel */ }
  924. };
  925. static struct platform_driver sppctl_pinctrl_driver = {
  926. .driver = {
  927. .name = SPPCTL_MODULE_NAME,
  928. .of_match_table = sppctl_match_table,
  929. },
  930. .probe = sppctl_probe,
  931. };
  932. builtin_platform_driver(sppctl_pinctrl_driver)
  933. MODULE_AUTHOR("Dvorkin Dmitry <dvorkin@tibbo.com>");
  934. MODULE_AUTHOR("Wells Lu <wellslutw@gmail.com>");
  935. MODULE_DESCRIPTION("Sunplus SP7021 Pin Control and GPIO driver");
  936. MODULE_LICENSE("GPL v2");