pinctrl-rockchip.c 118 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Pinctrl driver for Rockchip SoCs
  4. *
  5. * Copyright (c) 2013 MundoReader S.L.
  6. * Author: Heiko Stuebner <[email protected]>
  7. *
  8. * With some ideas taken from pinctrl-samsung:
  9. * Copyright (c) 2012 Samsung Electronics Co., Ltd.
  10. * http://www.samsung.com
  11. * Copyright (c) 2012 Linaro Ltd
  12. * https://www.linaro.org
  13. *
  14. * and pinctrl-at91:
  15. * Copyright (C) 2011-2012 Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
  16. */
  17. #include <linux/init.h>
  18. #include <linux/module.h>
  19. #include <linux/platform_device.h>
  20. #include <linux/io.h>
  21. #include <linux/bitops.h>
  22. #include <linux/gpio/driver.h>
  23. #include <linux/of_address.h>
  24. #include <linux/of_device.h>
  25. #include <linux/of_irq.h>
  26. #include <linux/pinctrl/machine.h>
  27. #include <linux/pinctrl/pinconf.h>
  28. #include <linux/pinctrl/pinctrl.h>
  29. #include <linux/pinctrl/pinmux.h>
  30. #include <linux/pinctrl/pinconf-generic.h>
  31. #include <linux/irqchip/chained_irq.h>
  32. #include <linux/clk.h>
  33. #include <linux/regmap.h>
  34. #include <linux/mfd/syscon.h>
  35. #include <linux/string_helpers.h>
  36. #include <dt-bindings/pinctrl/rockchip.h>
  37. #include "core.h"
  38. #include "pinconf.h"
  39. #include "pinctrl-rockchip.h"
  40. /*
  41. * Generate a bitmask for setting a value (v) with a write mask bit in hiword
  42. * register 31:16 area.
  43. */
  44. #define WRITE_MASK_VAL(h, l, v) \
  45. (GENMASK(((h) + 16), ((l) + 16)) | (((v) << (l)) & GENMASK((h), (l))))
  46. /*
  47. * Encode variants of iomux registers into a type variable
  48. */
  49. #define IOMUX_GPIO_ONLY BIT(0)
  50. #define IOMUX_WIDTH_4BIT BIT(1)
  51. #define IOMUX_SOURCE_PMU BIT(2)
  52. #define IOMUX_UNROUTED BIT(3)
  53. #define IOMUX_WIDTH_3BIT BIT(4)
  54. #define IOMUX_WIDTH_2BIT BIT(5)
  55. #define IOMUX_L_SOURCE_PMU BIT(6)
  56. #define PIN_BANK(id, pins, label) \
  57. { \
  58. .bank_num = id, \
  59. .nr_pins = pins, \
  60. .name = label, \
  61. .iomux = { \
  62. { .offset = -1 }, \
  63. { .offset = -1 }, \
  64. { .offset = -1 }, \
  65. { .offset = -1 }, \
  66. }, \
  67. }
  68. #define PIN_BANK_IOMUX_FLAGS(id, pins, label, iom0, iom1, iom2, iom3) \
  69. { \
  70. .bank_num = id, \
  71. .nr_pins = pins, \
  72. .name = label, \
  73. .iomux = { \
  74. { .type = iom0, .offset = -1 }, \
  75. { .type = iom1, .offset = -1 }, \
  76. { .type = iom2, .offset = -1 }, \
  77. { .type = iom3, .offset = -1 }, \
  78. }, \
  79. }
  80. #define PIN_BANK_DRV_FLAGS(id, pins, label, type0, type1, type2, type3) \
  81. { \
  82. .bank_num = id, \
  83. .nr_pins = pins, \
  84. .name = label, \
  85. .iomux = { \
  86. { .offset = -1 }, \
  87. { .offset = -1 }, \
  88. { .offset = -1 }, \
  89. { .offset = -1 }, \
  90. }, \
  91. .drv = { \
  92. { .drv_type = type0, .offset = -1 }, \
  93. { .drv_type = type1, .offset = -1 }, \
  94. { .drv_type = type2, .offset = -1 }, \
  95. { .drv_type = type3, .offset = -1 }, \
  96. }, \
  97. }
  98. #define PIN_BANK_IOMUX_FLAGS_PULL_FLAGS(id, pins, label, iom0, iom1, \
  99. iom2, iom3, pull0, pull1, \
  100. pull2, pull3) \
  101. { \
  102. .bank_num = id, \
  103. .nr_pins = pins, \
  104. .name = label, \
  105. .iomux = { \
  106. { .type = iom0, .offset = -1 }, \
  107. { .type = iom1, .offset = -1 }, \
  108. { .type = iom2, .offset = -1 }, \
  109. { .type = iom3, .offset = -1 }, \
  110. }, \
  111. .pull_type[0] = pull0, \
  112. .pull_type[1] = pull1, \
  113. .pull_type[2] = pull2, \
  114. .pull_type[3] = pull3, \
  115. }
  116. #define PIN_BANK_DRV_FLAGS_PULL_FLAGS(id, pins, label, drv0, drv1, \
  117. drv2, drv3, pull0, pull1, \
  118. pull2, pull3) \
  119. { \
  120. .bank_num = id, \
  121. .nr_pins = pins, \
  122. .name = label, \
  123. .iomux = { \
  124. { .offset = -1 }, \
  125. { .offset = -1 }, \
  126. { .offset = -1 }, \
  127. { .offset = -1 }, \
  128. }, \
  129. .drv = { \
  130. { .drv_type = drv0, .offset = -1 }, \
  131. { .drv_type = drv1, .offset = -1 }, \
  132. { .drv_type = drv2, .offset = -1 }, \
  133. { .drv_type = drv3, .offset = -1 }, \
  134. }, \
  135. .pull_type[0] = pull0, \
  136. .pull_type[1] = pull1, \
  137. .pull_type[2] = pull2, \
  138. .pull_type[3] = pull3, \
  139. }
  140. #define PIN_BANK_IOMUX_FLAGS_OFFSET(id, pins, label, iom0, iom1, iom2, \
  141. iom3, offset0, offset1, offset2, \
  142. offset3) \
  143. { \
  144. .bank_num = id, \
  145. .nr_pins = pins, \
  146. .name = label, \
  147. .iomux = { \
  148. { .type = iom0, .offset = offset0 }, \
  149. { .type = iom1, .offset = offset1 }, \
  150. { .type = iom2, .offset = offset2 }, \
  151. { .type = iom3, .offset = offset3 }, \
  152. }, \
  153. }
  154. #define PIN_BANK_IOMUX_DRV_FLAGS_OFFSET(id, pins, label, iom0, iom1, \
  155. iom2, iom3, drv0, drv1, drv2, \
  156. drv3, offset0, offset1, \
  157. offset2, offset3) \
  158. { \
  159. .bank_num = id, \
  160. .nr_pins = pins, \
  161. .name = label, \
  162. .iomux = { \
  163. { .type = iom0, .offset = -1 }, \
  164. { .type = iom1, .offset = -1 }, \
  165. { .type = iom2, .offset = -1 }, \
  166. { .type = iom3, .offset = -1 }, \
  167. }, \
  168. .drv = { \
  169. { .drv_type = drv0, .offset = offset0 }, \
  170. { .drv_type = drv1, .offset = offset1 }, \
  171. { .drv_type = drv2, .offset = offset2 }, \
  172. { .drv_type = drv3, .offset = offset3 }, \
  173. }, \
  174. }
  175. #define PIN_BANK_IOMUX_FLAGS_DRV_FLAGS_OFFSET_PULL_FLAGS(id, pins, \
  176. label, iom0, iom1, iom2, \
  177. iom3, drv0, drv1, drv2, \
  178. drv3, offset0, offset1, \
  179. offset2, offset3, pull0, \
  180. pull1, pull2, pull3) \
  181. { \
  182. .bank_num = id, \
  183. .nr_pins = pins, \
  184. .name = label, \
  185. .iomux = { \
  186. { .type = iom0, .offset = -1 }, \
  187. { .type = iom1, .offset = -1 }, \
  188. { .type = iom2, .offset = -1 }, \
  189. { .type = iom3, .offset = -1 }, \
  190. }, \
  191. .drv = { \
  192. { .drv_type = drv0, .offset = offset0 }, \
  193. { .drv_type = drv1, .offset = offset1 }, \
  194. { .drv_type = drv2, .offset = offset2 }, \
  195. { .drv_type = drv3, .offset = offset3 }, \
  196. }, \
  197. .pull_type[0] = pull0, \
  198. .pull_type[1] = pull1, \
  199. .pull_type[2] = pull2, \
  200. .pull_type[3] = pull3, \
  201. }
  202. #define PIN_BANK_MUX_ROUTE_FLAGS(ID, PIN, FUNC, REG, VAL, FLAG) \
  203. { \
  204. .bank_num = ID, \
  205. .pin = PIN, \
  206. .func = FUNC, \
  207. .route_offset = REG, \
  208. .route_val = VAL, \
  209. .route_location = FLAG, \
  210. }
  211. #define RK_MUXROUTE_SAME(ID, PIN, FUNC, REG, VAL) \
  212. PIN_BANK_MUX_ROUTE_FLAGS(ID, PIN, FUNC, REG, VAL, ROCKCHIP_ROUTE_SAME)
  213. #define RK_MUXROUTE_GRF(ID, PIN, FUNC, REG, VAL) \
  214. PIN_BANK_MUX_ROUTE_FLAGS(ID, PIN, FUNC, REG, VAL, ROCKCHIP_ROUTE_GRF)
  215. #define RK_MUXROUTE_PMU(ID, PIN, FUNC, REG, VAL) \
  216. PIN_BANK_MUX_ROUTE_FLAGS(ID, PIN, FUNC, REG, VAL, ROCKCHIP_ROUTE_PMU)
  217. #define RK3588_PIN_BANK_FLAGS(ID, PIN, LABEL, M, P) \
  218. PIN_BANK_IOMUX_FLAGS_PULL_FLAGS(ID, PIN, LABEL, M, M, M, M, P, P, P, P)
  219. static struct regmap_config rockchip_regmap_config = {
  220. .reg_bits = 32,
  221. .val_bits = 32,
  222. .reg_stride = 4,
  223. };
  224. static inline const struct rockchip_pin_group *pinctrl_name_to_group(
  225. const struct rockchip_pinctrl *info,
  226. const char *name)
  227. {
  228. int i;
  229. for (i = 0; i < info->ngroups; i++) {
  230. if (!strcmp(info->groups[i].name, name))
  231. return &info->groups[i];
  232. }
  233. return NULL;
  234. }
  235. /*
  236. * given a pin number that is local to a pin controller, find out the pin bank
  237. * and the register base of the pin bank.
  238. */
  239. static struct rockchip_pin_bank *pin_to_bank(struct rockchip_pinctrl *info,
  240. unsigned pin)
  241. {
  242. struct rockchip_pin_bank *b = info->ctrl->pin_banks;
  243. while (pin >= (b->pin_base + b->nr_pins))
  244. b++;
  245. return b;
  246. }
  247. static struct rockchip_pin_bank *bank_num_to_bank(
  248. struct rockchip_pinctrl *info,
  249. unsigned num)
  250. {
  251. struct rockchip_pin_bank *b = info->ctrl->pin_banks;
  252. int i;
  253. for (i = 0; i < info->ctrl->nr_banks; i++, b++) {
  254. if (b->bank_num == num)
  255. return b;
  256. }
  257. return ERR_PTR(-EINVAL);
  258. }
  259. /*
  260. * Pinctrl_ops handling
  261. */
  262. static int rockchip_get_groups_count(struct pinctrl_dev *pctldev)
  263. {
  264. struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
  265. return info->ngroups;
  266. }
  267. static const char *rockchip_get_group_name(struct pinctrl_dev *pctldev,
  268. unsigned selector)
  269. {
  270. struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
  271. return info->groups[selector].name;
  272. }
  273. static int rockchip_get_group_pins(struct pinctrl_dev *pctldev,
  274. unsigned selector, const unsigned **pins,
  275. unsigned *npins)
  276. {
  277. struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
  278. if (selector >= info->ngroups)
  279. return -EINVAL;
  280. *pins = info->groups[selector].pins;
  281. *npins = info->groups[selector].npins;
  282. return 0;
  283. }
  284. static int rockchip_dt_node_to_map(struct pinctrl_dev *pctldev,
  285. struct device_node *np,
  286. struct pinctrl_map **map, unsigned *num_maps)
  287. {
  288. struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
  289. const struct rockchip_pin_group *grp;
  290. struct device *dev = info->dev;
  291. struct pinctrl_map *new_map;
  292. struct device_node *parent;
  293. int map_num = 1;
  294. int i;
  295. /*
  296. * first find the group of this node and check if we need to create
  297. * config maps for pins
  298. */
  299. grp = pinctrl_name_to_group(info, np->name);
  300. if (!grp) {
  301. dev_err(dev, "unable to find group for node %pOFn\n", np);
  302. return -EINVAL;
  303. }
  304. map_num += grp->npins;
  305. new_map = kcalloc(map_num, sizeof(*new_map), GFP_KERNEL);
  306. if (!new_map)
  307. return -ENOMEM;
  308. *map = new_map;
  309. *num_maps = map_num;
  310. /* create mux map */
  311. parent = of_get_parent(np);
  312. if (!parent) {
  313. kfree(new_map);
  314. return -EINVAL;
  315. }
  316. new_map[0].type = PIN_MAP_TYPE_MUX_GROUP;
  317. new_map[0].data.mux.function = parent->name;
  318. new_map[0].data.mux.group = np->name;
  319. of_node_put(parent);
  320. /* create config map */
  321. new_map++;
  322. for (i = 0; i < grp->npins; i++) {
  323. new_map[i].type = PIN_MAP_TYPE_CONFIGS_PIN;
  324. new_map[i].data.configs.group_or_pin =
  325. pin_get_name(pctldev, grp->pins[i]);
  326. new_map[i].data.configs.configs = grp->data[i].configs;
  327. new_map[i].data.configs.num_configs = grp->data[i].nconfigs;
  328. }
  329. dev_dbg(dev, "maps: function %s group %s num %d\n",
  330. (*map)->data.mux.function, (*map)->data.mux.group, map_num);
  331. return 0;
  332. }
  333. static void rockchip_dt_free_map(struct pinctrl_dev *pctldev,
  334. struct pinctrl_map *map, unsigned num_maps)
  335. {
  336. kfree(map);
  337. }
  338. static const struct pinctrl_ops rockchip_pctrl_ops = {
  339. .get_groups_count = rockchip_get_groups_count,
  340. .get_group_name = rockchip_get_group_name,
  341. .get_group_pins = rockchip_get_group_pins,
  342. .dt_node_to_map = rockchip_dt_node_to_map,
  343. .dt_free_map = rockchip_dt_free_map,
  344. };
  345. /*
  346. * Hardware access
  347. */
  348. static struct rockchip_mux_recalced_data rv1108_mux_recalced_data[] = {
  349. {
  350. .num = 1,
  351. .pin = 0,
  352. .reg = 0x418,
  353. .bit = 0,
  354. .mask = 0x3
  355. }, {
  356. .num = 1,
  357. .pin = 1,
  358. .reg = 0x418,
  359. .bit = 2,
  360. .mask = 0x3
  361. }, {
  362. .num = 1,
  363. .pin = 2,
  364. .reg = 0x418,
  365. .bit = 4,
  366. .mask = 0x3
  367. }, {
  368. .num = 1,
  369. .pin = 3,
  370. .reg = 0x418,
  371. .bit = 6,
  372. .mask = 0x3
  373. }, {
  374. .num = 1,
  375. .pin = 4,
  376. .reg = 0x418,
  377. .bit = 8,
  378. .mask = 0x3
  379. }, {
  380. .num = 1,
  381. .pin = 5,
  382. .reg = 0x418,
  383. .bit = 10,
  384. .mask = 0x3
  385. }, {
  386. .num = 1,
  387. .pin = 6,
  388. .reg = 0x418,
  389. .bit = 12,
  390. .mask = 0x3
  391. }, {
  392. .num = 1,
  393. .pin = 7,
  394. .reg = 0x418,
  395. .bit = 14,
  396. .mask = 0x3
  397. }, {
  398. .num = 1,
  399. .pin = 8,
  400. .reg = 0x41c,
  401. .bit = 0,
  402. .mask = 0x3
  403. }, {
  404. .num = 1,
  405. .pin = 9,
  406. .reg = 0x41c,
  407. .bit = 2,
  408. .mask = 0x3
  409. },
  410. };
  411. static struct rockchip_mux_recalced_data rv1126_mux_recalced_data[] = {
  412. {
  413. .num = 0,
  414. .pin = 20,
  415. .reg = 0x10000,
  416. .bit = 0,
  417. .mask = 0xf
  418. },
  419. {
  420. .num = 0,
  421. .pin = 21,
  422. .reg = 0x10000,
  423. .bit = 4,
  424. .mask = 0xf
  425. },
  426. {
  427. .num = 0,
  428. .pin = 22,
  429. .reg = 0x10000,
  430. .bit = 8,
  431. .mask = 0xf
  432. },
  433. {
  434. .num = 0,
  435. .pin = 23,
  436. .reg = 0x10000,
  437. .bit = 12,
  438. .mask = 0xf
  439. },
  440. };
  441. static struct rockchip_mux_recalced_data rk3128_mux_recalced_data[] = {
  442. {
  443. .num = 2,
  444. .pin = 20,
  445. .reg = 0xe8,
  446. .bit = 0,
  447. .mask = 0x7
  448. }, {
  449. .num = 2,
  450. .pin = 21,
  451. .reg = 0xe8,
  452. .bit = 4,
  453. .mask = 0x7
  454. }, {
  455. .num = 2,
  456. .pin = 22,
  457. .reg = 0xe8,
  458. .bit = 8,
  459. .mask = 0x7
  460. }, {
  461. .num = 2,
  462. .pin = 23,
  463. .reg = 0xe8,
  464. .bit = 12,
  465. .mask = 0x7
  466. }, {
  467. .num = 2,
  468. .pin = 24,
  469. .reg = 0xd4,
  470. .bit = 12,
  471. .mask = 0x7
  472. },
  473. };
  474. static struct rockchip_mux_recalced_data rk3308_mux_recalced_data[] = {
  475. {
  476. /* gpio1b6_sel */
  477. .num = 1,
  478. .pin = 14,
  479. .reg = 0x28,
  480. .bit = 12,
  481. .mask = 0xf
  482. }, {
  483. /* gpio1b7_sel */
  484. .num = 1,
  485. .pin = 15,
  486. .reg = 0x2c,
  487. .bit = 0,
  488. .mask = 0x3
  489. }, {
  490. /* gpio1c2_sel */
  491. .num = 1,
  492. .pin = 18,
  493. .reg = 0x30,
  494. .bit = 4,
  495. .mask = 0xf
  496. }, {
  497. /* gpio1c3_sel */
  498. .num = 1,
  499. .pin = 19,
  500. .reg = 0x30,
  501. .bit = 8,
  502. .mask = 0xf
  503. }, {
  504. /* gpio1c4_sel */
  505. .num = 1,
  506. .pin = 20,
  507. .reg = 0x30,
  508. .bit = 12,
  509. .mask = 0xf
  510. }, {
  511. /* gpio1c5_sel */
  512. .num = 1,
  513. .pin = 21,
  514. .reg = 0x34,
  515. .bit = 0,
  516. .mask = 0xf
  517. }, {
  518. /* gpio1c6_sel */
  519. .num = 1,
  520. .pin = 22,
  521. .reg = 0x34,
  522. .bit = 4,
  523. .mask = 0xf
  524. }, {
  525. /* gpio1c7_sel */
  526. .num = 1,
  527. .pin = 23,
  528. .reg = 0x34,
  529. .bit = 8,
  530. .mask = 0xf
  531. }, {
  532. /* gpio2a2_sel */
  533. .num = 2,
  534. .pin = 2,
  535. .reg = 0x40,
  536. .bit = 4,
  537. .mask = 0x3
  538. }, {
  539. /* gpio2a3_sel */
  540. .num = 2,
  541. .pin = 3,
  542. .reg = 0x40,
  543. .bit = 6,
  544. .mask = 0x3
  545. }, {
  546. /* gpio2c0_sel */
  547. .num = 2,
  548. .pin = 16,
  549. .reg = 0x50,
  550. .bit = 0,
  551. .mask = 0x3
  552. }, {
  553. /* gpio3b2_sel */
  554. .num = 3,
  555. .pin = 10,
  556. .reg = 0x68,
  557. .bit = 4,
  558. .mask = 0x3
  559. }, {
  560. /* gpio3b3_sel */
  561. .num = 3,
  562. .pin = 11,
  563. .reg = 0x68,
  564. .bit = 6,
  565. .mask = 0x3
  566. }, {
  567. /* gpio3b4_sel */
  568. .num = 3,
  569. .pin = 12,
  570. .reg = 0x68,
  571. .bit = 8,
  572. .mask = 0xf
  573. }, {
  574. /* gpio3b5_sel */
  575. .num = 3,
  576. .pin = 13,
  577. .reg = 0x68,
  578. .bit = 12,
  579. .mask = 0xf
  580. },
  581. };
  582. static struct rockchip_mux_recalced_data rk3328_mux_recalced_data[] = {
  583. {
  584. .num = 2,
  585. .pin = 12,
  586. .reg = 0x24,
  587. .bit = 8,
  588. .mask = 0x3
  589. }, {
  590. .num = 2,
  591. .pin = 15,
  592. .reg = 0x28,
  593. .bit = 0,
  594. .mask = 0x7
  595. }, {
  596. .num = 2,
  597. .pin = 23,
  598. .reg = 0x30,
  599. .bit = 14,
  600. .mask = 0x3
  601. },
  602. };
  603. static void rockchip_get_recalced_mux(struct rockchip_pin_bank *bank, int pin,
  604. int *reg, u8 *bit, int *mask)
  605. {
  606. struct rockchip_pinctrl *info = bank->drvdata;
  607. struct rockchip_pin_ctrl *ctrl = info->ctrl;
  608. struct rockchip_mux_recalced_data *data;
  609. int i;
  610. for (i = 0; i < ctrl->niomux_recalced; i++) {
  611. data = &ctrl->iomux_recalced[i];
  612. if (data->num == bank->bank_num &&
  613. data->pin == pin)
  614. break;
  615. }
  616. if (i >= ctrl->niomux_recalced)
  617. return;
  618. *reg = data->reg;
  619. *mask = data->mask;
  620. *bit = data->bit;
  621. }
  622. static struct rockchip_mux_route_data px30_mux_route_data[] = {
  623. RK_MUXROUTE_SAME(2, RK_PB4, 1, 0x184, BIT(16 + 7)), /* cif-d0m0 */
  624. RK_MUXROUTE_SAME(3, RK_PA1, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d0m1 */
  625. RK_MUXROUTE_SAME(2, RK_PB6, 1, 0x184, BIT(16 + 7)), /* cif-d1m0 */
  626. RK_MUXROUTE_SAME(3, RK_PA2, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d1m1 */
  627. RK_MUXROUTE_SAME(2, RK_PA0, 1, 0x184, BIT(16 + 7)), /* cif-d2m0 */
  628. RK_MUXROUTE_SAME(3, RK_PA3, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d2m1 */
  629. RK_MUXROUTE_SAME(2, RK_PA1, 1, 0x184, BIT(16 + 7)), /* cif-d3m0 */
  630. RK_MUXROUTE_SAME(3, RK_PA5, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d3m1 */
  631. RK_MUXROUTE_SAME(2, RK_PA2, 1, 0x184, BIT(16 + 7)), /* cif-d4m0 */
  632. RK_MUXROUTE_SAME(3, RK_PA7, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d4m1 */
  633. RK_MUXROUTE_SAME(2, RK_PA3, 1, 0x184, BIT(16 + 7)), /* cif-d5m0 */
  634. RK_MUXROUTE_SAME(3, RK_PB0, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d5m1 */
  635. RK_MUXROUTE_SAME(2, RK_PA4, 1, 0x184, BIT(16 + 7)), /* cif-d6m0 */
  636. RK_MUXROUTE_SAME(3, RK_PB1, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d6m1 */
  637. RK_MUXROUTE_SAME(2, RK_PA5, 1, 0x184, BIT(16 + 7)), /* cif-d7m0 */
  638. RK_MUXROUTE_SAME(3, RK_PB4, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d7m1 */
  639. RK_MUXROUTE_SAME(2, RK_PA6, 1, 0x184, BIT(16 + 7)), /* cif-d8m0 */
  640. RK_MUXROUTE_SAME(3, RK_PB6, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d8m1 */
  641. RK_MUXROUTE_SAME(2, RK_PA7, 1, 0x184, BIT(16 + 7)), /* cif-d9m0 */
  642. RK_MUXROUTE_SAME(3, RK_PB7, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d9m1 */
  643. RK_MUXROUTE_SAME(2, RK_PB7, 1, 0x184, BIT(16 + 7)), /* cif-d10m0 */
  644. RK_MUXROUTE_SAME(3, RK_PC6, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d10m1 */
  645. RK_MUXROUTE_SAME(2, RK_PC0, 1, 0x184, BIT(16 + 7)), /* cif-d11m0 */
  646. RK_MUXROUTE_SAME(3, RK_PC7, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d11m1 */
  647. RK_MUXROUTE_SAME(2, RK_PB0, 1, 0x184, BIT(16 + 7)), /* cif-vsyncm0 */
  648. RK_MUXROUTE_SAME(3, RK_PD1, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-vsyncm1 */
  649. RK_MUXROUTE_SAME(2, RK_PB1, 1, 0x184, BIT(16 + 7)), /* cif-hrefm0 */
  650. RK_MUXROUTE_SAME(3, RK_PD2, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-hrefm1 */
  651. RK_MUXROUTE_SAME(2, RK_PB2, 1, 0x184, BIT(16 + 7)), /* cif-clkinm0 */
  652. RK_MUXROUTE_SAME(3, RK_PD3, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-clkinm1 */
  653. RK_MUXROUTE_SAME(2, RK_PB3, 1, 0x184, BIT(16 + 7)), /* cif-clkoutm0 */
  654. RK_MUXROUTE_SAME(3, RK_PD0, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-clkoutm1 */
  655. RK_MUXROUTE_SAME(3, RK_PC6, 2, 0x184, BIT(16 + 8)), /* pdm-m0 */
  656. RK_MUXROUTE_SAME(2, RK_PC6, 1, 0x184, BIT(16 + 8) | BIT(8)), /* pdm-m1 */
  657. RK_MUXROUTE_SAME(3, RK_PD3, 2, 0x184, BIT(16 + 8)), /* pdm-sdi0m0 */
  658. RK_MUXROUTE_SAME(2, RK_PC5, 2, 0x184, BIT(16 + 8) | BIT(8)), /* pdm-sdi0m1 */
  659. RK_MUXROUTE_SAME(1, RK_PD3, 2, 0x184, BIT(16 + 10)), /* uart2-rxm0 */
  660. RK_MUXROUTE_SAME(2, RK_PB6, 2, 0x184, BIT(16 + 10) | BIT(10)), /* uart2-rxm1 */
  661. RK_MUXROUTE_SAME(1, RK_PD2, 2, 0x184, BIT(16 + 10)), /* uart2-txm0 */
  662. RK_MUXROUTE_SAME(2, RK_PB4, 2, 0x184, BIT(16 + 10) | BIT(10)), /* uart2-txm1 */
  663. RK_MUXROUTE_SAME(0, RK_PC1, 2, 0x184, BIT(16 + 9)), /* uart3-rxm0 */
  664. RK_MUXROUTE_SAME(1, RK_PB7, 2, 0x184, BIT(16 + 9) | BIT(9)), /* uart3-rxm1 */
  665. RK_MUXROUTE_SAME(0, RK_PC0, 2, 0x184, BIT(16 + 9)), /* uart3-txm0 */
  666. RK_MUXROUTE_SAME(1, RK_PB6, 2, 0x184, BIT(16 + 9) | BIT(9)), /* uart3-txm1 */
  667. RK_MUXROUTE_SAME(0, RK_PC2, 2, 0x184, BIT(16 + 9)), /* uart3-ctsm0 */
  668. RK_MUXROUTE_SAME(1, RK_PB4, 2, 0x184, BIT(16 + 9) | BIT(9)), /* uart3-ctsm1 */
  669. RK_MUXROUTE_SAME(0, RK_PC3, 2, 0x184, BIT(16 + 9)), /* uart3-rtsm0 */
  670. RK_MUXROUTE_SAME(1, RK_PB5, 2, 0x184, BIT(16 + 9) | BIT(9)), /* uart3-rtsm1 */
  671. };
  672. static struct rockchip_mux_route_data rv1126_mux_route_data[] = {
  673. RK_MUXROUTE_GRF(3, RK_PD2, 1, 0x10260, WRITE_MASK_VAL(0, 0, 0)), /* I2S0_MCLK_M0 */
  674. RK_MUXROUTE_GRF(3, RK_PB0, 3, 0x10260, WRITE_MASK_VAL(0, 0, 1)), /* I2S0_MCLK_M1 */
  675. RK_MUXROUTE_GRF(0, RK_PD4, 4, 0x10260, WRITE_MASK_VAL(3, 2, 0)), /* I2S1_MCLK_M0 */
  676. RK_MUXROUTE_GRF(1, RK_PD5, 2, 0x10260, WRITE_MASK_VAL(3, 2, 1)), /* I2S1_MCLK_M1 */
  677. RK_MUXROUTE_GRF(2, RK_PC7, 6, 0x10260, WRITE_MASK_VAL(3, 2, 2)), /* I2S1_MCLK_M2 */
  678. RK_MUXROUTE_GRF(1, RK_PD0, 1, 0x10260, WRITE_MASK_VAL(4, 4, 0)), /* I2S2_MCLK_M0 */
  679. RK_MUXROUTE_GRF(2, RK_PB3, 2, 0x10260, WRITE_MASK_VAL(4, 4, 1)), /* I2S2_MCLK_M1 */
  680. RK_MUXROUTE_GRF(3, RK_PD4, 2, 0x10260, WRITE_MASK_VAL(12, 12, 0)), /* PDM_CLK0_M0 */
  681. RK_MUXROUTE_GRF(3, RK_PC0, 3, 0x10260, WRITE_MASK_VAL(12, 12, 1)), /* PDM_CLK0_M1 */
  682. RK_MUXROUTE_GRF(3, RK_PC6, 1, 0x10264, WRITE_MASK_VAL(0, 0, 0)), /* CIF_CLKOUT_M0 */
  683. RK_MUXROUTE_GRF(2, RK_PD1, 3, 0x10264, WRITE_MASK_VAL(0, 0, 1)), /* CIF_CLKOUT_M1 */
  684. RK_MUXROUTE_GRF(3, RK_PA4, 5, 0x10264, WRITE_MASK_VAL(5, 4, 0)), /* I2C3_SCL_M0 */
  685. RK_MUXROUTE_GRF(2, RK_PD4, 7, 0x10264, WRITE_MASK_VAL(5, 4, 1)), /* I2C3_SCL_M1 */
  686. RK_MUXROUTE_GRF(1, RK_PD6, 3, 0x10264, WRITE_MASK_VAL(5, 4, 2)), /* I2C3_SCL_M2 */
  687. RK_MUXROUTE_GRF(3, RK_PA0, 7, 0x10264, WRITE_MASK_VAL(6, 6, 0)), /* I2C4_SCL_M0 */
  688. RK_MUXROUTE_GRF(4, RK_PA0, 4, 0x10264, WRITE_MASK_VAL(6, 6, 1)), /* I2C4_SCL_M1 */
  689. RK_MUXROUTE_GRF(2, RK_PA5, 7, 0x10264, WRITE_MASK_VAL(9, 8, 0)), /* I2C5_SCL_M0 */
  690. RK_MUXROUTE_GRF(3, RK_PB0, 5, 0x10264, WRITE_MASK_VAL(9, 8, 1)), /* I2C5_SCL_M1 */
  691. RK_MUXROUTE_GRF(1, RK_PD0, 4, 0x10264, WRITE_MASK_VAL(9, 8, 2)), /* I2C5_SCL_M2 */
  692. RK_MUXROUTE_GRF(3, RK_PC0, 5, 0x10264, WRITE_MASK_VAL(11, 10, 0)), /* SPI1_CLK_M0 */
  693. RK_MUXROUTE_GRF(1, RK_PC6, 3, 0x10264, WRITE_MASK_VAL(11, 10, 1)), /* SPI1_CLK_M1 */
  694. RK_MUXROUTE_GRF(2, RK_PD5, 6, 0x10264, WRITE_MASK_VAL(11, 10, 2)), /* SPI1_CLK_M2 */
  695. RK_MUXROUTE_GRF(3, RK_PC0, 2, 0x10264, WRITE_MASK_VAL(12, 12, 0)), /* RGMII_CLK_M0 */
  696. RK_MUXROUTE_GRF(2, RK_PB7, 2, 0x10264, WRITE_MASK_VAL(12, 12, 1)), /* RGMII_CLK_M1 */
  697. RK_MUXROUTE_GRF(3, RK_PA1, 3, 0x10264, WRITE_MASK_VAL(13, 13, 0)), /* CAN_TXD_M0 */
  698. RK_MUXROUTE_GRF(3, RK_PA7, 5, 0x10264, WRITE_MASK_VAL(13, 13, 1)), /* CAN_TXD_M1 */
  699. RK_MUXROUTE_GRF(3, RK_PA4, 6, 0x10268, WRITE_MASK_VAL(0, 0, 0)), /* PWM8_M0 */
  700. RK_MUXROUTE_GRF(2, RK_PD7, 5, 0x10268, WRITE_MASK_VAL(0, 0, 1)), /* PWM8_M1 */
  701. RK_MUXROUTE_GRF(3, RK_PA5, 6, 0x10268, WRITE_MASK_VAL(2, 2, 0)), /* PWM9_M0 */
  702. RK_MUXROUTE_GRF(2, RK_PD6, 5, 0x10268, WRITE_MASK_VAL(2, 2, 1)), /* PWM9_M1 */
  703. RK_MUXROUTE_GRF(3, RK_PA6, 6, 0x10268, WRITE_MASK_VAL(4, 4, 0)), /* PWM10_M0 */
  704. RK_MUXROUTE_GRF(2, RK_PD5, 5, 0x10268, WRITE_MASK_VAL(4, 4, 1)), /* PWM10_M1 */
  705. RK_MUXROUTE_GRF(3, RK_PA7, 6, 0x10268, WRITE_MASK_VAL(6, 6, 0)), /* PWM11_IR_M0 */
  706. RK_MUXROUTE_GRF(3, RK_PA1, 5, 0x10268, WRITE_MASK_VAL(6, 6, 1)), /* PWM11_IR_M1 */
  707. RK_MUXROUTE_GRF(1, RK_PA5, 3, 0x10268, WRITE_MASK_VAL(8, 8, 0)), /* UART2_TX_M0 */
  708. RK_MUXROUTE_GRF(3, RK_PA2, 1, 0x10268, WRITE_MASK_VAL(8, 8, 1)), /* UART2_TX_M1 */
  709. RK_MUXROUTE_GRF(3, RK_PC6, 3, 0x10268, WRITE_MASK_VAL(11, 10, 0)), /* UART3_TX_M0 */
  710. RK_MUXROUTE_GRF(1, RK_PA7, 2, 0x10268, WRITE_MASK_VAL(11, 10, 1)), /* UART3_TX_M1 */
  711. RK_MUXROUTE_GRF(3, RK_PA0, 4, 0x10268, WRITE_MASK_VAL(11, 10, 2)), /* UART3_TX_M2 */
  712. RK_MUXROUTE_GRF(3, RK_PA4, 4, 0x10268, WRITE_MASK_VAL(13, 12, 0)), /* UART4_TX_M0 */
  713. RK_MUXROUTE_GRF(2, RK_PA6, 4, 0x10268, WRITE_MASK_VAL(13, 12, 1)), /* UART4_TX_M1 */
  714. RK_MUXROUTE_GRF(1, RK_PD5, 3, 0x10268, WRITE_MASK_VAL(13, 12, 2)), /* UART4_TX_M2 */
  715. RK_MUXROUTE_GRF(3, RK_PA6, 4, 0x10268, WRITE_MASK_VAL(15, 14, 0)), /* UART5_TX_M0 */
  716. RK_MUXROUTE_GRF(2, RK_PB0, 4, 0x10268, WRITE_MASK_VAL(15, 14, 1)), /* UART5_TX_M1 */
  717. RK_MUXROUTE_GRF(2, RK_PA0, 3, 0x10268, WRITE_MASK_VAL(15, 14, 2)), /* UART5_TX_M2 */
  718. RK_MUXROUTE_PMU(0, RK_PB6, 3, 0x0114, WRITE_MASK_VAL(0, 0, 0)), /* PWM0_M0 */
  719. RK_MUXROUTE_PMU(2, RK_PB3, 5, 0x0114, WRITE_MASK_VAL(0, 0, 1)), /* PWM0_M1 */
  720. RK_MUXROUTE_PMU(0, RK_PB7, 3, 0x0114, WRITE_MASK_VAL(2, 2, 0)), /* PWM1_M0 */
  721. RK_MUXROUTE_PMU(2, RK_PB2, 5, 0x0114, WRITE_MASK_VAL(2, 2, 1)), /* PWM1_M1 */
  722. RK_MUXROUTE_PMU(0, RK_PC0, 3, 0x0114, WRITE_MASK_VAL(4, 4, 0)), /* PWM2_M0 */
  723. RK_MUXROUTE_PMU(2, RK_PB1, 5, 0x0114, WRITE_MASK_VAL(4, 4, 1)), /* PWM2_M1 */
  724. RK_MUXROUTE_PMU(0, RK_PC1, 3, 0x0114, WRITE_MASK_VAL(6, 6, 0)), /* PWM3_IR_M0 */
  725. RK_MUXROUTE_PMU(2, RK_PB0, 5, 0x0114, WRITE_MASK_VAL(6, 6, 1)), /* PWM3_IR_M1 */
  726. RK_MUXROUTE_PMU(0, RK_PC2, 3, 0x0114, WRITE_MASK_VAL(8, 8, 0)), /* PWM4_M0 */
  727. RK_MUXROUTE_PMU(2, RK_PA7, 5, 0x0114, WRITE_MASK_VAL(8, 8, 1)), /* PWM4_M1 */
  728. RK_MUXROUTE_PMU(0, RK_PC3, 3, 0x0114, WRITE_MASK_VAL(10, 10, 0)), /* PWM5_M0 */
  729. RK_MUXROUTE_PMU(2, RK_PA6, 5, 0x0114, WRITE_MASK_VAL(10, 10, 1)), /* PWM5_M1 */
  730. RK_MUXROUTE_PMU(0, RK_PB2, 3, 0x0114, WRITE_MASK_VAL(12, 12, 0)), /* PWM6_M0 */
  731. RK_MUXROUTE_PMU(2, RK_PD4, 5, 0x0114, WRITE_MASK_VAL(12, 12, 1)), /* PWM6_M1 */
  732. RK_MUXROUTE_PMU(0, RK_PB1, 3, 0x0114, WRITE_MASK_VAL(14, 14, 0)), /* PWM7_IR_M0 */
  733. RK_MUXROUTE_PMU(3, RK_PA0, 5, 0x0114, WRITE_MASK_VAL(14, 14, 1)), /* PWM7_IR_M1 */
  734. RK_MUXROUTE_PMU(0, RK_PB0, 1, 0x0118, WRITE_MASK_VAL(1, 0, 0)), /* SPI0_CLK_M0 */
  735. RK_MUXROUTE_PMU(2, RK_PA1, 1, 0x0118, WRITE_MASK_VAL(1, 0, 1)), /* SPI0_CLK_M1 */
  736. RK_MUXROUTE_PMU(2, RK_PB2, 6, 0x0118, WRITE_MASK_VAL(1, 0, 2)), /* SPI0_CLK_M2 */
  737. RK_MUXROUTE_PMU(0, RK_PB6, 2, 0x0118, WRITE_MASK_VAL(2, 2, 0)), /* UART1_TX_M0 */
  738. RK_MUXROUTE_PMU(1, RK_PD0, 5, 0x0118, WRITE_MASK_VAL(2, 2, 1)), /* UART1_TX_M1 */
  739. };
  740. static struct rockchip_mux_route_data rk3128_mux_route_data[] = {
  741. RK_MUXROUTE_SAME(1, RK_PB2, 1, 0x144, BIT(16 + 3) | BIT(16 + 4)), /* spi-0 */
  742. RK_MUXROUTE_SAME(1, RK_PD3, 3, 0x144, BIT(16 + 3) | BIT(16 + 4) | BIT(3)), /* spi-1 */
  743. RK_MUXROUTE_SAME(0, RK_PB5, 2, 0x144, BIT(16 + 3) | BIT(16 + 4) | BIT(4)), /* spi-2 */
  744. RK_MUXROUTE_SAME(1, RK_PA5, 1, 0x144, BIT(16 + 5)), /* i2s-0 */
  745. RK_MUXROUTE_SAME(0, RK_PB6, 1, 0x144, BIT(16 + 5) | BIT(5)), /* i2s-1 */
  746. RK_MUXROUTE_SAME(1, RK_PC6, 2, 0x144, BIT(16 + 6)), /* emmc-0 */
  747. RK_MUXROUTE_SAME(2, RK_PA4, 2, 0x144, BIT(16 + 6) | BIT(6)), /* emmc-1 */
  748. };
  749. static struct rockchip_mux_route_data rk3188_mux_route_data[] = {
  750. RK_MUXROUTE_SAME(0, RK_PD0, 1, 0xa0, BIT(16 + 11)), /* non-iomuxed emmc/flash pins on flash-dqs */
  751. RK_MUXROUTE_SAME(0, RK_PD0, 2, 0xa0, BIT(16 + 11) | BIT(11)), /* non-iomuxed emmc/flash pins on emmc-clk */
  752. };
  753. static struct rockchip_mux_route_data rk3228_mux_route_data[] = {
  754. RK_MUXROUTE_SAME(0, RK_PD2, 1, 0x50, BIT(16)), /* pwm0-0 */
  755. RK_MUXROUTE_SAME(3, RK_PC5, 1, 0x50, BIT(16) | BIT(0)), /* pwm0-1 */
  756. RK_MUXROUTE_SAME(0, RK_PD3, 1, 0x50, BIT(16 + 1)), /* pwm1-0 */
  757. RK_MUXROUTE_SAME(0, RK_PD6, 2, 0x50, BIT(16 + 1) | BIT(1)), /* pwm1-1 */
  758. RK_MUXROUTE_SAME(0, RK_PD4, 1, 0x50, BIT(16 + 2)), /* pwm2-0 */
  759. RK_MUXROUTE_SAME(1, RK_PB4, 2, 0x50, BIT(16 + 2) | BIT(2)), /* pwm2-1 */
  760. RK_MUXROUTE_SAME(3, RK_PD2, 1, 0x50, BIT(16 + 3)), /* pwm3-0 */
  761. RK_MUXROUTE_SAME(1, RK_PB3, 2, 0x50, BIT(16 + 3) | BIT(3)), /* pwm3-1 */
  762. RK_MUXROUTE_SAME(1, RK_PA1, 1, 0x50, BIT(16 + 4)), /* sdio-0_d0 */
  763. RK_MUXROUTE_SAME(3, RK_PA2, 1, 0x50, BIT(16 + 4) | BIT(4)), /* sdio-1_d0 */
  764. RK_MUXROUTE_SAME(0, RK_PB5, 2, 0x50, BIT(16 + 5)), /* spi-0_rx */
  765. RK_MUXROUTE_SAME(2, RK_PA0, 2, 0x50, BIT(16 + 5) | BIT(5)), /* spi-1_rx */
  766. RK_MUXROUTE_SAME(1, RK_PC6, 2, 0x50, BIT(16 + 7)), /* emmc-0_cmd */
  767. RK_MUXROUTE_SAME(2, RK_PA4, 2, 0x50, BIT(16 + 7) | BIT(7)), /* emmc-1_cmd */
  768. RK_MUXROUTE_SAME(1, RK_PC3, 2, 0x50, BIT(16 + 8)), /* uart2-0_rx */
  769. RK_MUXROUTE_SAME(1, RK_PB2, 2, 0x50, BIT(16 + 8) | BIT(8)), /* uart2-1_rx */
  770. RK_MUXROUTE_SAME(1, RK_PB2, 1, 0x50, BIT(16 + 11)), /* uart1-0_rx */
  771. RK_MUXROUTE_SAME(3, RK_PB5, 1, 0x50, BIT(16 + 11) | BIT(11)), /* uart1-1_rx */
  772. };
  773. static struct rockchip_mux_route_data rk3288_mux_route_data[] = {
  774. RK_MUXROUTE_SAME(7, RK_PC0, 2, 0x264, BIT(16 + 12) | BIT(12)), /* edphdmi_cecinoutt1 */
  775. RK_MUXROUTE_SAME(7, RK_PC7, 4, 0x264, BIT(16 + 12)), /* edphdmi_cecinout */
  776. };
  777. static struct rockchip_mux_route_data rk3308_mux_route_data[] = {
  778. RK_MUXROUTE_SAME(0, RK_PC3, 1, 0x314, BIT(16 + 0) | BIT(0)), /* rtc_clk */
  779. RK_MUXROUTE_SAME(1, RK_PC6, 2, 0x314, BIT(16 + 2) | BIT(16 + 3)), /* uart2_rxm0 */
  780. RK_MUXROUTE_SAME(4, RK_PD2, 2, 0x314, BIT(16 + 2) | BIT(16 + 3) | BIT(2)), /* uart2_rxm1 */
  781. RK_MUXROUTE_SAME(0, RK_PB7, 2, 0x608, BIT(16 + 8) | BIT(16 + 9)), /* i2c3_sdam0 */
  782. RK_MUXROUTE_SAME(3, RK_PB4, 2, 0x608, BIT(16 + 8) | BIT(16 + 9) | BIT(8)), /* i2c3_sdam1 */
  783. RK_MUXROUTE_SAME(2, RK_PA0, 3, 0x608, BIT(16 + 8) | BIT(16 + 9) | BIT(9)), /* i2c3_sdam2 */
  784. RK_MUXROUTE_SAME(1, RK_PA3, 2, 0x308, BIT(16 + 3)), /* i2s-8ch-1-sclktxm0 */
  785. RK_MUXROUTE_SAME(1, RK_PA4, 2, 0x308, BIT(16 + 3)), /* i2s-8ch-1-sclkrxm0 */
  786. RK_MUXROUTE_SAME(1, RK_PB5, 2, 0x308, BIT(16 + 3) | BIT(3)), /* i2s-8ch-1-sclktxm1 */
  787. RK_MUXROUTE_SAME(1, RK_PB6, 2, 0x308, BIT(16 + 3) | BIT(3)), /* i2s-8ch-1-sclkrxm1 */
  788. RK_MUXROUTE_SAME(1, RK_PA4, 3, 0x308, BIT(16 + 12) | BIT(16 + 13)), /* pdm-clkm0 */
  789. RK_MUXROUTE_SAME(1, RK_PB6, 4, 0x308, BIT(16 + 12) | BIT(16 + 13) | BIT(12)), /* pdm-clkm1 */
  790. RK_MUXROUTE_SAME(2, RK_PA6, 2, 0x308, BIT(16 + 12) | BIT(16 + 13) | BIT(13)), /* pdm-clkm2 */
  791. RK_MUXROUTE_SAME(2, RK_PA4, 3, 0x600, BIT(16 + 2) | BIT(2)), /* pdm-clkm-m2 */
  792. RK_MUXROUTE_SAME(3, RK_PB2, 3, 0x314, BIT(16 + 9)), /* spi1_miso */
  793. RK_MUXROUTE_SAME(2, RK_PA4, 2, 0x314, BIT(16 + 9) | BIT(9)), /* spi1_miso_m1 */
  794. RK_MUXROUTE_SAME(0, RK_PB3, 3, 0x314, BIT(16 + 10) | BIT(16 + 11)), /* owire_m0 */
  795. RK_MUXROUTE_SAME(1, RK_PC6, 7, 0x314, BIT(16 + 10) | BIT(16 + 11) | BIT(10)), /* owire_m1 */
  796. RK_MUXROUTE_SAME(2, RK_PA2, 5, 0x314, BIT(16 + 10) | BIT(16 + 11) | BIT(11)), /* owire_m2 */
  797. RK_MUXROUTE_SAME(0, RK_PB3, 2, 0x314, BIT(16 + 12) | BIT(16 + 13)), /* can_rxd_m0 */
  798. RK_MUXROUTE_SAME(1, RK_PC6, 5, 0x314, BIT(16 + 12) | BIT(16 + 13) | BIT(12)), /* can_rxd_m1 */
  799. RK_MUXROUTE_SAME(2, RK_PA2, 4, 0x314, BIT(16 + 12) | BIT(16 + 13) | BIT(13)), /* can_rxd_m2 */
  800. RK_MUXROUTE_SAME(1, RK_PC4, 3, 0x314, BIT(16 + 14)), /* mac_rxd0_m0 */
  801. RK_MUXROUTE_SAME(4, RK_PA2, 2, 0x314, BIT(16 + 14) | BIT(14)), /* mac_rxd0_m1 */
  802. RK_MUXROUTE_SAME(3, RK_PB4, 4, 0x314, BIT(16 + 15)), /* uart3_rx */
  803. RK_MUXROUTE_SAME(0, RK_PC1, 3, 0x314, BIT(16 + 15) | BIT(15)), /* uart3_rx_m1 */
  804. };
  805. static struct rockchip_mux_route_data rk3328_mux_route_data[] = {
  806. RK_MUXROUTE_SAME(1, RK_PA1, 2, 0x50, BIT(16) | BIT(16 + 1)), /* uart2dbg_rxm0 */
  807. RK_MUXROUTE_SAME(2, RK_PA1, 1, 0x50, BIT(16) | BIT(16 + 1) | BIT(0)), /* uart2dbg_rxm1 */
  808. RK_MUXROUTE_SAME(1, RK_PB3, 2, 0x50, BIT(16 + 2) | BIT(2)), /* gmac-m1_rxd0 */
  809. RK_MUXROUTE_SAME(1, RK_PB6, 2, 0x50, BIT(16 + 10) | BIT(10)), /* gmac-m1-optimized_rxd3 */
  810. RK_MUXROUTE_SAME(2, RK_PC3, 2, 0x50, BIT(16 + 3)), /* pdm_sdi0m0 */
  811. RK_MUXROUTE_SAME(1, RK_PC7, 3, 0x50, BIT(16 + 3) | BIT(3)), /* pdm_sdi0m1 */
  812. RK_MUXROUTE_SAME(3, RK_PA2, 4, 0x50, BIT(16 + 4) | BIT(16 + 5) | BIT(5)), /* spi_rxdm2 */
  813. RK_MUXROUTE_SAME(1, RK_PD0, 1, 0x50, BIT(16 + 6)), /* i2s2_sdim0 */
  814. RK_MUXROUTE_SAME(3, RK_PA2, 6, 0x50, BIT(16 + 6) | BIT(6)), /* i2s2_sdim1 */
  815. RK_MUXROUTE_SAME(2, RK_PC6, 3, 0x50, BIT(16 + 7) | BIT(7)), /* card_iom1 */
  816. RK_MUXROUTE_SAME(2, RK_PC0, 3, 0x50, BIT(16 + 8) | BIT(8)), /* tsp_d5m1 */
  817. RK_MUXROUTE_SAME(2, RK_PC0, 4, 0x50, BIT(16 + 9) | BIT(9)), /* cif_data5m1 */
  818. };
  819. static struct rockchip_mux_route_data rk3399_mux_route_data[] = {
  820. RK_MUXROUTE_SAME(4, RK_PB0, 2, 0xe21c, BIT(16 + 10) | BIT(16 + 11)), /* uart2dbga_rx */
  821. RK_MUXROUTE_SAME(4, RK_PC0, 2, 0xe21c, BIT(16 + 10) | BIT(16 + 11) | BIT(10)), /* uart2dbgb_rx */
  822. RK_MUXROUTE_SAME(4, RK_PC3, 1, 0xe21c, BIT(16 + 10) | BIT(16 + 11) | BIT(11)), /* uart2dbgc_rx */
  823. RK_MUXROUTE_SAME(2, RK_PD2, 2, 0xe21c, BIT(16 + 14)), /* pcie_clkreqn */
  824. RK_MUXROUTE_SAME(4, RK_PD0, 1, 0xe21c, BIT(16 + 14) | BIT(14)), /* pcie_clkreqnb */
  825. };
  826. static struct rockchip_mux_route_data rk3568_mux_route_data[] = {
  827. RK_MUXROUTE_PMU(0, RK_PB7, 1, 0x0110, WRITE_MASK_VAL(1, 0, 0)), /* PWM0 IO mux M0 */
  828. RK_MUXROUTE_PMU(0, RK_PC7, 2, 0x0110, WRITE_MASK_VAL(1, 0, 1)), /* PWM0 IO mux M1 */
  829. RK_MUXROUTE_PMU(0, RK_PC0, 1, 0x0110, WRITE_MASK_VAL(3, 2, 0)), /* PWM1 IO mux M0 */
  830. RK_MUXROUTE_PMU(0, RK_PB5, 4, 0x0110, WRITE_MASK_VAL(3, 2, 1)), /* PWM1 IO mux M1 */
  831. RK_MUXROUTE_PMU(0, RK_PC1, 1, 0x0110, WRITE_MASK_VAL(5, 4, 0)), /* PWM2 IO mux M0 */
  832. RK_MUXROUTE_PMU(0, RK_PB6, 4, 0x0110, WRITE_MASK_VAL(5, 4, 1)), /* PWM2 IO mux M1 */
  833. RK_MUXROUTE_GRF(0, RK_PB3, 2, 0x0300, WRITE_MASK_VAL(0, 0, 0)), /* CAN0 IO mux M0 */
  834. RK_MUXROUTE_GRF(2, RK_PA1, 4, 0x0300, WRITE_MASK_VAL(0, 0, 1)), /* CAN0 IO mux M1 */
  835. RK_MUXROUTE_GRF(1, RK_PA1, 3, 0x0300, WRITE_MASK_VAL(2, 2, 0)), /* CAN1 IO mux M0 */
  836. RK_MUXROUTE_GRF(4, RK_PC3, 3, 0x0300, WRITE_MASK_VAL(2, 2, 1)), /* CAN1 IO mux M1 */
  837. RK_MUXROUTE_GRF(4, RK_PB5, 3, 0x0300, WRITE_MASK_VAL(4, 4, 0)), /* CAN2 IO mux M0 */
  838. RK_MUXROUTE_GRF(2, RK_PB2, 4, 0x0300, WRITE_MASK_VAL(4, 4, 1)), /* CAN2 IO mux M1 */
  839. RK_MUXROUTE_GRF(4, RK_PC4, 1, 0x0300, WRITE_MASK_VAL(6, 6, 0)), /* HPDIN IO mux M0 */
  840. RK_MUXROUTE_GRF(0, RK_PC2, 2, 0x0300, WRITE_MASK_VAL(6, 6, 1)), /* HPDIN IO mux M1 */
  841. RK_MUXROUTE_GRF(3, RK_PB1, 3, 0x0300, WRITE_MASK_VAL(8, 8, 0)), /* GMAC1 IO mux M0 */
  842. RK_MUXROUTE_GRF(4, RK_PA7, 3, 0x0300, WRITE_MASK_VAL(8, 8, 1)), /* GMAC1 IO mux M1 */
  843. RK_MUXROUTE_GRF(4, RK_PD1, 1, 0x0300, WRITE_MASK_VAL(10, 10, 0)), /* HDMITX IO mux M0 */
  844. RK_MUXROUTE_GRF(0, RK_PC7, 1, 0x0300, WRITE_MASK_VAL(10, 10, 1)), /* HDMITX IO mux M1 */
  845. RK_MUXROUTE_GRF(0, RK_PB6, 1, 0x0300, WRITE_MASK_VAL(14, 14, 0)), /* I2C2 IO mux M0 */
  846. RK_MUXROUTE_GRF(4, RK_PB4, 1, 0x0300, WRITE_MASK_VAL(14, 14, 1)), /* I2C2 IO mux M1 */
  847. RK_MUXROUTE_GRF(1, RK_PA0, 1, 0x0304, WRITE_MASK_VAL(0, 0, 0)), /* I2C3 IO mux M0 */
  848. RK_MUXROUTE_GRF(3, RK_PB6, 4, 0x0304, WRITE_MASK_VAL(0, 0, 1)), /* I2C3 IO mux M1 */
  849. RK_MUXROUTE_GRF(4, RK_PB2, 1, 0x0304, WRITE_MASK_VAL(2, 2, 0)), /* I2C4 IO mux M0 */
  850. RK_MUXROUTE_GRF(2, RK_PB1, 2, 0x0304, WRITE_MASK_VAL(2, 2, 1)), /* I2C4 IO mux M1 */
  851. RK_MUXROUTE_GRF(3, RK_PB4, 4, 0x0304, WRITE_MASK_VAL(4, 4, 0)), /* I2C5 IO mux M0 */
  852. RK_MUXROUTE_GRF(4, RK_PD0, 2, 0x0304, WRITE_MASK_VAL(4, 4, 1)), /* I2C5 IO mux M1 */
  853. RK_MUXROUTE_GRF(3, RK_PB1, 5, 0x0304, WRITE_MASK_VAL(14, 14, 0)), /* PWM8 IO mux M0 */
  854. RK_MUXROUTE_GRF(1, RK_PD5, 4, 0x0304, WRITE_MASK_VAL(14, 14, 1)), /* PWM8 IO mux M1 */
  855. RK_MUXROUTE_GRF(3, RK_PB2, 5, 0x0308, WRITE_MASK_VAL(0, 0, 0)), /* PWM9 IO mux M0 */
  856. RK_MUXROUTE_GRF(1, RK_PD6, 4, 0x0308, WRITE_MASK_VAL(0, 0, 1)), /* PWM9 IO mux M1 */
  857. RK_MUXROUTE_GRF(3, RK_PB5, 5, 0x0308, WRITE_MASK_VAL(2, 2, 0)), /* PWM10 IO mux M0 */
  858. RK_MUXROUTE_GRF(2, RK_PA1, 2, 0x0308, WRITE_MASK_VAL(2, 2, 1)), /* PWM10 IO mux M1 */
  859. RK_MUXROUTE_GRF(3, RK_PB6, 5, 0x0308, WRITE_MASK_VAL(4, 4, 0)), /* PWM11 IO mux M0 */
  860. RK_MUXROUTE_GRF(4, RK_PC0, 3, 0x0308, WRITE_MASK_VAL(4, 4, 1)), /* PWM11 IO mux M1 */
  861. RK_MUXROUTE_GRF(3, RK_PB7, 2, 0x0308, WRITE_MASK_VAL(6, 6, 0)), /* PWM12 IO mux M0 */
  862. RK_MUXROUTE_GRF(4, RK_PC5, 1, 0x0308, WRITE_MASK_VAL(6, 6, 1)), /* PWM12 IO mux M1 */
  863. RK_MUXROUTE_GRF(3, RK_PC0, 2, 0x0308, WRITE_MASK_VAL(8, 8, 0)), /* PWM13 IO mux M0 */
  864. RK_MUXROUTE_GRF(4, RK_PC6, 1, 0x0308, WRITE_MASK_VAL(8, 8, 1)), /* PWM13 IO mux M1 */
  865. RK_MUXROUTE_GRF(3, RK_PC4, 1, 0x0308, WRITE_MASK_VAL(10, 10, 0)), /* PWM14 IO mux M0 */
  866. RK_MUXROUTE_GRF(4, RK_PC2, 1, 0x0308, WRITE_MASK_VAL(10, 10, 1)), /* PWM14 IO mux M1 */
  867. RK_MUXROUTE_GRF(3, RK_PC5, 1, 0x0308, WRITE_MASK_VAL(12, 12, 0)), /* PWM15 IO mux M0 */
  868. RK_MUXROUTE_GRF(4, RK_PC3, 1, 0x0308, WRITE_MASK_VAL(12, 12, 1)), /* PWM15 IO mux M1 */
  869. RK_MUXROUTE_GRF(3, RK_PD2, 3, 0x0308, WRITE_MASK_VAL(14, 14, 0)), /* SDMMC2 IO mux M0 */
  870. RK_MUXROUTE_GRF(3, RK_PA5, 5, 0x0308, WRITE_MASK_VAL(14, 14, 1)), /* SDMMC2 IO mux M1 */
  871. RK_MUXROUTE_GRF(0, RK_PB5, 2, 0x030c, WRITE_MASK_VAL(0, 0, 0)), /* SPI0 IO mux M0 */
  872. RK_MUXROUTE_GRF(2, RK_PD3, 3, 0x030c, WRITE_MASK_VAL(0, 0, 1)), /* SPI0 IO mux M1 */
  873. RK_MUXROUTE_GRF(2, RK_PB5, 3, 0x030c, WRITE_MASK_VAL(2, 2, 0)), /* SPI1 IO mux M0 */
  874. RK_MUXROUTE_GRF(3, RK_PC3, 3, 0x030c, WRITE_MASK_VAL(2, 2, 1)), /* SPI1 IO mux M1 */
  875. RK_MUXROUTE_GRF(2, RK_PC1, 4, 0x030c, WRITE_MASK_VAL(4, 4, 0)), /* SPI2 IO mux M0 */
  876. RK_MUXROUTE_GRF(3, RK_PA0, 3, 0x030c, WRITE_MASK_VAL(4, 4, 1)), /* SPI2 IO mux M1 */
  877. RK_MUXROUTE_GRF(4, RK_PB3, 4, 0x030c, WRITE_MASK_VAL(6, 6, 0)), /* SPI3 IO mux M0 */
  878. RK_MUXROUTE_GRF(4, RK_PC2, 2, 0x030c, WRITE_MASK_VAL(6, 6, 1)), /* SPI3 IO mux M1 */
  879. RK_MUXROUTE_GRF(2, RK_PB4, 2, 0x030c, WRITE_MASK_VAL(8, 8, 0)), /* UART1 IO mux M0 */
  880. RK_MUXROUTE_GRF(3, RK_PD6, 4, 0x030c, WRITE_MASK_VAL(8, 8, 1)), /* UART1 IO mux M1 */
  881. RK_MUXROUTE_GRF(0, RK_PD1, 1, 0x030c, WRITE_MASK_VAL(10, 10, 0)), /* UART2 IO mux M0 */
  882. RK_MUXROUTE_GRF(1, RK_PD5, 2, 0x030c, WRITE_MASK_VAL(10, 10, 1)), /* UART2 IO mux M1 */
  883. RK_MUXROUTE_GRF(1, RK_PA1, 2, 0x030c, WRITE_MASK_VAL(12, 12, 0)), /* UART3 IO mux M0 */
  884. RK_MUXROUTE_GRF(3, RK_PB7, 4, 0x030c, WRITE_MASK_VAL(12, 12, 1)), /* UART3 IO mux M1 */
  885. RK_MUXROUTE_GRF(1, RK_PA6, 2, 0x030c, WRITE_MASK_VAL(14, 14, 0)), /* UART4 IO mux M0 */
  886. RK_MUXROUTE_GRF(3, RK_PB2, 4, 0x030c, WRITE_MASK_VAL(14, 14, 1)), /* UART4 IO mux M1 */
  887. RK_MUXROUTE_GRF(2, RK_PA2, 3, 0x0310, WRITE_MASK_VAL(0, 0, 0)), /* UART5 IO mux M0 */
  888. RK_MUXROUTE_GRF(3, RK_PC2, 4, 0x0310, WRITE_MASK_VAL(0, 0, 1)), /* UART5 IO mux M1 */
  889. RK_MUXROUTE_GRF(2, RK_PA4, 3, 0x0310, WRITE_MASK_VAL(2, 2, 0)), /* UART6 IO mux M0 */
  890. RK_MUXROUTE_GRF(1, RK_PD5, 3, 0x0310, WRITE_MASK_VAL(2, 2, 1)), /* UART6 IO mux M1 */
  891. RK_MUXROUTE_GRF(2, RK_PA6, 3, 0x0310, WRITE_MASK_VAL(5, 4, 0)), /* UART7 IO mux M0 */
  892. RK_MUXROUTE_GRF(3, RK_PC4, 4, 0x0310, WRITE_MASK_VAL(5, 4, 1)), /* UART7 IO mux M1 */
  893. RK_MUXROUTE_GRF(4, RK_PA2, 4, 0x0310, WRITE_MASK_VAL(5, 4, 2)), /* UART7 IO mux M2 */
  894. RK_MUXROUTE_GRF(2, RK_PC5, 3, 0x0310, WRITE_MASK_VAL(6, 6, 0)), /* UART8 IO mux M0 */
  895. RK_MUXROUTE_GRF(2, RK_PD7, 4, 0x0310, WRITE_MASK_VAL(6, 6, 1)), /* UART8 IO mux M1 */
  896. RK_MUXROUTE_GRF(2, RK_PB0, 3, 0x0310, WRITE_MASK_VAL(9, 8, 0)), /* UART9 IO mux M0 */
  897. RK_MUXROUTE_GRF(4, RK_PC5, 4, 0x0310, WRITE_MASK_VAL(9, 8, 1)), /* UART9 IO mux M1 */
  898. RK_MUXROUTE_GRF(4, RK_PA4, 4, 0x0310, WRITE_MASK_VAL(9, 8, 2)), /* UART9 IO mux M2 */
  899. RK_MUXROUTE_GRF(1, RK_PA2, 1, 0x0310, WRITE_MASK_VAL(11, 10, 0)), /* I2S1 IO mux M0 */
  900. RK_MUXROUTE_GRF(3, RK_PC6, 4, 0x0310, WRITE_MASK_VAL(11, 10, 1)), /* I2S1 IO mux M1 */
  901. RK_MUXROUTE_GRF(2, RK_PD0, 5, 0x0310, WRITE_MASK_VAL(11, 10, 2)), /* I2S1 IO mux M2 */
  902. RK_MUXROUTE_GRF(2, RK_PC1, 1, 0x0310, WRITE_MASK_VAL(12, 12, 0)), /* I2S2 IO mux M0 */
  903. RK_MUXROUTE_GRF(4, RK_PB6, 5, 0x0310, WRITE_MASK_VAL(12, 12, 1)), /* I2S2 IO mux M1 */
  904. RK_MUXROUTE_GRF(3, RK_PA2, 4, 0x0310, WRITE_MASK_VAL(14, 14, 0)), /* I2S3 IO mux M0 */
  905. RK_MUXROUTE_GRF(4, RK_PC2, 5, 0x0310, WRITE_MASK_VAL(14, 14, 1)), /* I2S3 IO mux M1 */
  906. RK_MUXROUTE_GRF(1, RK_PA4, 3, 0x0314, WRITE_MASK_VAL(1, 0, 0)), /* PDM IO mux M0 */
  907. RK_MUXROUTE_GRF(1, RK_PA6, 3, 0x0314, WRITE_MASK_VAL(1, 0, 0)), /* PDM IO mux M0 */
  908. RK_MUXROUTE_GRF(3, RK_PD6, 5, 0x0314, WRITE_MASK_VAL(1, 0, 1)), /* PDM IO mux M1 */
  909. RK_MUXROUTE_GRF(4, RK_PA0, 4, 0x0314, WRITE_MASK_VAL(1, 0, 1)), /* PDM IO mux M1 */
  910. RK_MUXROUTE_GRF(3, RK_PC4, 5, 0x0314, WRITE_MASK_VAL(1, 0, 2)), /* PDM IO mux M2 */
  911. RK_MUXROUTE_GRF(0, RK_PA5, 3, 0x0314, WRITE_MASK_VAL(3, 2, 0)), /* PCIE20 IO mux M0 */
  912. RK_MUXROUTE_GRF(2, RK_PD0, 4, 0x0314, WRITE_MASK_VAL(3, 2, 1)), /* PCIE20 IO mux M1 */
  913. RK_MUXROUTE_GRF(1, RK_PB0, 4, 0x0314, WRITE_MASK_VAL(3, 2, 2)), /* PCIE20 IO mux M2 */
  914. RK_MUXROUTE_GRF(0, RK_PA4, 3, 0x0314, WRITE_MASK_VAL(5, 4, 0)), /* PCIE30X1 IO mux M0 */
  915. RK_MUXROUTE_GRF(2, RK_PD2, 4, 0x0314, WRITE_MASK_VAL(5, 4, 1)), /* PCIE30X1 IO mux M1 */
  916. RK_MUXROUTE_GRF(1, RK_PA5, 4, 0x0314, WRITE_MASK_VAL(5, 4, 2)), /* PCIE30X1 IO mux M2 */
  917. RK_MUXROUTE_GRF(0, RK_PA6, 2, 0x0314, WRITE_MASK_VAL(7, 6, 0)), /* PCIE30X2 IO mux M0 */
  918. RK_MUXROUTE_GRF(2, RK_PD4, 4, 0x0314, WRITE_MASK_VAL(7, 6, 1)), /* PCIE30X2 IO mux M1 */
  919. RK_MUXROUTE_GRF(4, RK_PC2, 4, 0x0314, WRITE_MASK_VAL(7, 6, 2)), /* PCIE30X2 IO mux M2 */
  920. };
  921. static bool rockchip_get_mux_route(struct rockchip_pin_bank *bank, int pin,
  922. int mux, u32 *loc, u32 *reg, u32 *value)
  923. {
  924. struct rockchip_pinctrl *info = bank->drvdata;
  925. struct rockchip_pin_ctrl *ctrl = info->ctrl;
  926. struct rockchip_mux_route_data *data;
  927. int i;
  928. for (i = 0; i < ctrl->niomux_routes; i++) {
  929. data = &ctrl->iomux_routes[i];
  930. if ((data->bank_num == bank->bank_num) &&
  931. (data->pin == pin) && (data->func == mux))
  932. break;
  933. }
  934. if (i >= ctrl->niomux_routes)
  935. return false;
  936. *loc = data->route_location;
  937. *reg = data->route_offset;
  938. *value = data->route_val;
  939. return true;
  940. }
  941. static int rockchip_get_mux(struct rockchip_pin_bank *bank, int pin)
  942. {
  943. struct rockchip_pinctrl *info = bank->drvdata;
  944. struct rockchip_pin_ctrl *ctrl = info->ctrl;
  945. int iomux_num = (pin / 8);
  946. struct regmap *regmap;
  947. unsigned int val;
  948. int reg, ret, mask, mux_type;
  949. u8 bit;
  950. if (iomux_num > 3)
  951. return -EINVAL;
  952. if (bank->iomux[iomux_num].type & IOMUX_UNROUTED) {
  953. dev_err(info->dev, "pin %d is unrouted\n", pin);
  954. return -EINVAL;
  955. }
  956. if (bank->iomux[iomux_num].type & IOMUX_GPIO_ONLY)
  957. return RK_FUNC_GPIO;
  958. if (bank->iomux[iomux_num].type & IOMUX_SOURCE_PMU)
  959. regmap = info->regmap_pmu;
  960. else if (bank->iomux[iomux_num].type & IOMUX_L_SOURCE_PMU)
  961. regmap = (pin % 8 < 4) ? info->regmap_pmu : info->regmap_base;
  962. else
  963. regmap = info->regmap_base;
  964. /* get basic quadrupel of mux registers and the correct reg inside */
  965. mux_type = bank->iomux[iomux_num].type;
  966. reg = bank->iomux[iomux_num].offset;
  967. if (mux_type & IOMUX_WIDTH_4BIT) {
  968. if ((pin % 8) >= 4)
  969. reg += 0x4;
  970. bit = (pin % 4) * 4;
  971. mask = 0xf;
  972. } else if (mux_type & IOMUX_WIDTH_3BIT) {
  973. if ((pin % 8) >= 5)
  974. reg += 0x4;
  975. bit = (pin % 8 % 5) * 3;
  976. mask = 0x7;
  977. } else {
  978. bit = (pin % 8) * 2;
  979. mask = 0x3;
  980. }
  981. if (bank->recalced_mask & BIT(pin))
  982. rockchip_get_recalced_mux(bank, pin, &reg, &bit, &mask);
  983. if (ctrl->type == RK3588) {
  984. if (bank->bank_num == 0) {
  985. if ((pin >= RK_PB4) && (pin <= RK_PD7)) {
  986. u32 reg0 = 0;
  987. reg0 = reg + 0x4000 - 0xC; /* PMU2_IOC_BASE */
  988. ret = regmap_read(regmap, reg0, &val);
  989. if (ret)
  990. return ret;
  991. if (!(val & BIT(8)))
  992. return ((val >> bit) & mask);
  993. reg = reg + 0x8000; /* BUS_IOC_BASE */
  994. regmap = info->regmap_base;
  995. }
  996. } else if (bank->bank_num > 0) {
  997. reg += 0x8000; /* BUS_IOC_BASE */
  998. }
  999. }
  1000. ret = regmap_read(regmap, reg, &val);
  1001. if (ret)
  1002. return ret;
  1003. return ((val >> bit) & mask);
  1004. }
  1005. static int rockchip_verify_mux(struct rockchip_pin_bank *bank,
  1006. int pin, int mux)
  1007. {
  1008. struct rockchip_pinctrl *info = bank->drvdata;
  1009. struct device *dev = info->dev;
  1010. int iomux_num = (pin / 8);
  1011. if (iomux_num > 3)
  1012. return -EINVAL;
  1013. if (bank->iomux[iomux_num].type & IOMUX_UNROUTED) {
  1014. dev_err(dev, "pin %d is unrouted\n", pin);
  1015. return -EINVAL;
  1016. }
  1017. if (bank->iomux[iomux_num].type & IOMUX_GPIO_ONLY) {
  1018. if (mux != RK_FUNC_GPIO) {
  1019. dev_err(dev, "pin %d only supports a gpio mux\n", pin);
  1020. return -ENOTSUPP;
  1021. }
  1022. }
  1023. return 0;
  1024. }
  1025. /*
  1026. * Set a new mux function for a pin.
  1027. *
  1028. * The register is divided into the upper and lower 16 bit. When changing
  1029. * a value, the previous register value is not read and changed. Instead
  1030. * it seems the changed bits are marked in the upper 16 bit, while the
  1031. * changed value gets set in the same offset in the lower 16 bit.
  1032. * All pin settings seem to be 2 bit wide in both the upper and lower
  1033. * parts.
  1034. * @bank: pin bank to change
  1035. * @pin: pin to change
  1036. * @mux: new mux function to set
  1037. */
  1038. static int rockchip_set_mux(struct rockchip_pin_bank *bank, int pin, int mux)
  1039. {
  1040. struct rockchip_pinctrl *info = bank->drvdata;
  1041. struct rockchip_pin_ctrl *ctrl = info->ctrl;
  1042. struct device *dev = info->dev;
  1043. int iomux_num = (pin / 8);
  1044. struct regmap *regmap;
  1045. int reg, ret, mask, mux_type;
  1046. u8 bit;
  1047. u32 data, rmask, route_location, route_reg, route_val;
  1048. ret = rockchip_verify_mux(bank, pin, mux);
  1049. if (ret < 0)
  1050. return ret;
  1051. if (bank->iomux[iomux_num].type & IOMUX_GPIO_ONLY)
  1052. return 0;
  1053. dev_dbg(dev, "setting mux of GPIO%d-%d to %d\n", bank->bank_num, pin, mux);
  1054. if (bank->iomux[iomux_num].type & IOMUX_SOURCE_PMU)
  1055. regmap = info->regmap_pmu;
  1056. else if (bank->iomux[iomux_num].type & IOMUX_L_SOURCE_PMU)
  1057. regmap = (pin % 8 < 4) ? info->regmap_pmu : info->regmap_base;
  1058. else
  1059. regmap = info->regmap_base;
  1060. /* get basic quadrupel of mux registers and the correct reg inside */
  1061. mux_type = bank->iomux[iomux_num].type;
  1062. reg = bank->iomux[iomux_num].offset;
  1063. if (mux_type & IOMUX_WIDTH_4BIT) {
  1064. if ((pin % 8) >= 4)
  1065. reg += 0x4;
  1066. bit = (pin % 4) * 4;
  1067. mask = 0xf;
  1068. } else if (mux_type & IOMUX_WIDTH_3BIT) {
  1069. if ((pin % 8) >= 5)
  1070. reg += 0x4;
  1071. bit = (pin % 8 % 5) * 3;
  1072. mask = 0x7;
  1073. } else {
  1074. bit = (pin % 8) * 2;
  1075. mask = 0x3;
  1076. }
  1077. if (bank->recalced_mask & BIT(pin))
  1078. rockchip_get_recalced_mux(bank, pin, &reg, &bit, &mask);
  1079. if (ctrl->type == RK3588) {
  1080. if (bank->bank_num == 0) {
  1081. if ((pin >= RK_PB4) && (pin <= RK_PD7)) {
  1082. if (mux < 8) {
  1083. reg += 0x4000 - 0xC; /* PMU2_IOC_BASE */
  1084. data = (mask << (bit + 16));
  1085. rmask = data | (data >> 16);
  1086. data |= (mux & mask) << bit;
  1087. ret = regmap_update_bits(regmap, reg, rmask, data);
  1088. } else {
  1089. u32 reg0 = 0;
  1090. reg0 = reg + 0x4000 - 0xC; /* PMU2_IOC_BASE */
  1091. data = (mask << (bit + 16));
  1092. rmask = data | (data >> 16);
  1093. data |= 8 << bit;
  1094. ret = regmap_update_bits(regmap, reg0, rmask, data);
  1095. reg0 = reg + 0x8000; /* BUS_IOC_BASE */
  1096. data = (mask << (bit + 16));
  1097. rmask = data | (data >> 16);
  1098. data |= mux << bit;
  1099. regmap = info->regmap_base;
  1100. ret |= regmap_update_bits(regmap, reg0, rmask, data);
  1101. }
  1102. } else {
  1103. data = (mask << (bit + 16));
  1104. rmask = data | (data >> 16);
  1105. data |= (mux & mask) << bit;
  1106. ret = regmap_update_bits(regmap, reg, rmask, data);
  1107. }
  1108. return ret;
  1109. } else if (bank->bank_num > 0) {
  1110. reg += 0x8000; /* BUS_IOC_BASE */
  1111. }
  1112. }
  1113. if (mux > mask)
  1114. return -EINVAL;
  1115. if (bank->route_mask & BIT(pin)) {
  1116. if (rockchip_get_mux_route(bank, pin, mux, &route_location,
  1117. &route_reg, &route_val)) {
  1118. struct regmap *route_regmap = regmap;
  1119. /* handle special locations */
  1120. switch (route_location) {
  1121. case ROCKCHIP_ROUTE_PMU:
  1122. route_regmap = info->regmap_pmu;
  1123. break;
  1124. case ROCKCHIP_ROUTE_GRF:
  1125. route_regmap = info->regmap_base;
  1126. break;
  1127. }
  1128. ret = regmap_write(route_regmap, route_reg, route_val);
  1129. if (ret)
  1130. return ret;
  1131. }
  1132. }
  1133. data = (mask << (bit + 16));
  1134. rmask = data | (data >> 16);
  1135. data |= (mux & mask) << bit;
  1136. ret = regmap_update_bits(regmap, reg, rmask, data);
  1137. return ret;
  1138. }
  1139. #define PX30_PULL_PMU_OFFSET 0x10
  1140. #define PX30_PULL_GRF_OFFSET 0x60
  1141. #define PX30_PULL_BITS_PER_PIN 2
  1142. #define PX30_PULL_PINS_PER_REG 8
  1143. #define PX30_PULL_BANK_STRIDE 16
  1144. static int px30_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
  1145. int pin_num, struct regmap **regmap,
  1146. int *reg, u8 *bit)
  1147. {
  1148. struct rockchip_pinctrl *info = bank->drvdata;
  1149. /* The first 32 pins of the first bank are located in PMU */
  1150. if (bank->bank_num == 0) {
  1151. *regmap = info->regmap_pmu;
  1152. *reg = PX30_PULL_PMU_OFFSET;
  1153. } else {
  1154. *regmap = info->regmap_base;
  1155. *reg = PX30_PULL_GRF_OFFSET;
  1156. /* correct the offset, as we're starting with the 2nd bank */
  1157. *reg -= 0x10;
  1158. *reg += bank->bank_num * PX30_PULL_BANK_STRIDE;
  1159. }
  1160. *reg += ((pin_num / PX30_PULL_PINS_PER_REG) * 4);
  1161. *bit = (pin_num % PX30_PULL_PINS_PER_REG);
  1162. *bit *= PX30_PULL_BITS_PER_PIN;
  1163. return 0;
  1164. }
  1165. #define PX30_DRV_PMU_OFFSET 0x20
  1166. #define PX30_DRV_GRF_OFFSET 0xf0
  1167. #define PX30_DRV_BITS_PER_PIN 2
  1168. #define PX30_DRV_PINS_PER_REG 8
  1169. #define PX30_DRV_BANK_STRIDE 16
  1170. static int px30_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
  1171. int pin_num, struct regmap **regmap,
  1172. int *reg, u8 *bit)
  1173. {
  1174. struct rockchip_pinctrl *info = bank->drvdata;
  1175. /* The first 32 pins of the first bank are located in PMU */
  1176. if (bank->bank_num == 0) {
  1177. *regmap = info->regmap_pmu;
  1178. *reg = PX30_DRV_PMU_OFFSET;
  1179. } else {
  1180. *regmap = info->regmap_base;
  1181. *reg = PX30_DRV_GRF_OFFSET;
  1182. /* correct the offset, as we're starting with the 2nd bank */
  1183. *reg -= 0x10;
  1184. *reg += bank->bank_num * PX30_DRV_BANK_STRIDE;
  1185. }
  1186. *reg += ((pin_num / PX30_DRV_PINS_PER_REG) * 4);
  1187. *bit = (pin_num % PX30_DRV_PINS_PER_REG);
  1188. *bit *= PX30_DRV_BITS_PER_PIN;
  1189. return 0;
  1190. }
  1191. #define PX30_SCHMITT_PMU_OFFSET 0x38
  1192. #define PX30_SCHMITT_GRF_OFFSET 0xc0
  1193. #define PX30_SCHMITT_PINS_PER_PMU_REG 16
  1194. #define PX30_SCHMITT_BANK_STRIDE 16
  1195. #define PX30_SCHMITT_PINS_PER_GRF_REG 8
  1196. static int px30_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank,
  1197. int pin_num,
  1198. struct regmap **regmap,
  1199. int *reg, u8 *bit)
  1200. {
  1201. struct rockchip_pinctrl *info = bank->drvdata;
  1202. int pins_per_reg;
  1203. if (bank->bank_num == 0) {
  1204. *regmap = info->regmap_pmu;
  1205. *reg = PX30_SCHMITT_PMU_OFFSET;
  1206. pins_per_reg = PX30_SCHMITT_PINS_PER_PMU_REG;
  1207. } else {
  1208. *regmap = info->regmap_base;
  1209. *reg = PX30_SCHMITT_GRF_OFFSET;
  1210. pins_per_reg = PX30_SCHMITT_PINS_PER_GRF_REG;
  1211. *reg += (bank->bank_num - 1) * PX30_SCHMITT_BANK_STRIDE;
  1212. }
  1213. *reg += ((pin_num / pins_per_reg) * 4);
  1214. *bit = pin_num % pins_per_reg;
  1215. return 0;
  1216. }
  1217. #define RV1108_PULL_PMU_OFFSET 0x10
  1218. #define RV1108_PULL_OFFSET 0x110
  1219. #define RV1108_PULL_PINS_PER_REG 8
  1220. #define RV1108_PULL_BITS_PER_PIN 2
  1221. #define RV1108_PULL_BANK_STRIDE 16
  1222. static int rv1108_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
  1223. int pin_num, struct regmap **regmap,
  1224. int *reg, u8 *bit)
  1225. {
  1226. struct rockchip_pinctrl *info = bank->drvdata;
  1227. /* The first 24 pins of the first bank are located in PMU */
  1228. if (bank->bank_num == 0) {
  1229. *regmap = info->regmap_pmu;
  1230. *reg = RV1108_PULL_PMU_OFFSET;
  1231. } else {
  1232. *reg = RV1108_PULL_OFFSET;
  1233. *regmap = info->regmap_base;
  1234. /* correct the offset, as we're starting with the 2nd bank */
  1235. *reg -= 0x10;
  1236. *reg += bank->bank_num * RV1108_PULL_BANK_STRIDE;
  1237. }
  1238. *reg += ((pin_num / RV1108_PULL_PINS_PER_REG) * 4);
  1239. *bit = (pin_num % RV1108_PULL_PINS_PER_REG);
  1240. *bit *= RV1108_PULL_BITS_PER_PIN;
  1241. return 0;
  1242. }
  1243. #define RV1108_DRV_PMU_OFFSET 0x20
  1244. #define RV1108_DRV_GRF_OFFSET 0x210
  1245. #define RV1108_DRV_BITS_PER_PIN 2
  1246. #define RV1108_DRV_PINS_PER_REG 8
  1247. #define RV1108_DRV_BANK_STRIDE 16
  1248. static int rv1108_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
  1249. int pin_num, struct regmap **regmap,
  1250. int *reg, u8 *bit)
  1251. {
  1252. struct rockchip_pinctrl *info = bank->drvdata;
  1253. /* The first 24 pins of the first bank are located in PMU */
  1254. if (bank->bank_num == 0) {
  1255. *regmap = info->regmap_pmu;
  1256. *reg = RV1108_DRV_PMU_OFFSET;
  1257. } else {
  1258. *regmap = info->regmap_base;
  1259. *reg = RV1108_DRV_GRF_OFFSET;
  1260. /* correct the offset, as we're starting with the 2nd bank */
  1261. *reg -= 0x10;
  1262. *reg += bank->bank_num * RV1108_DRV_BANK_STRIDE;
  1263. }
  1264. *reg += ((pin_num / RV1108_DRV_PINS_PER_REG) * 4);
  1265. *bit = pin_num % RV1108_DRV_PINS_PER_REG;
  1266. *bit *= RV1108_DRV_BITS_PER_PIN;
  1267. return 0;
  1268. }
  1269. #define RV1108_SCHMITT_PMU_OFFSET 0x30
  1270. #define RV1108_SCHMITT_GRF_OFFSET 0x388
  1271. #define RV1108_SCHMITT_BANK_STRIDE 8
  1272. #define RV1108_SCHMITT_PINS_PER_GRF_REG 16
  1273. #define RV1108_SCHMITT_PINS_PER_PMU_REG 8
  1274. static int rv1108_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank,
  1275. int pin_num,
  1276. struct regmap **regmap,
  1277. int *reg, u8 *bit)
  1278. {
  1279. struct rockchip_pinctrl *info = bank->drvdata;
  1280. int pins_per_reg;
  1281. if (bank->bank_num == 0) {
  1282. *regmap = info->regmap_pmu;
  1283. *reg = RV1108_SCHMITT_PMU_OFFSET;
  1284. pins_per_reg = RV1108_SCHMITT_PINS_PER_PMU_REG;
  1285. } else {
  1286. *regmap = info->regmap_base;
  1287. *reg = RV1108_SCHMITT_GRF_OFFSET;
  1288. pins_per_reg = RV1108_SCHMITT_PINS_PER_GRF_REG;
  1289. *reg += (bank->bank_num - 1) * RV1108_SCHMITT_BANK_STRIDE;
  1290. }
  1291. *reg += ((pin_num / pins_per_reg) * 4);
  1292. *bit = pin_num % pins_per_reg;
  1293. return 0;
  1294. }
  1295. #define RV1126_PULL_PMU_OFFSET 0x40
  1296. #define RV1126_PULL_GRF_GPIO1A0_OFFSET 0x10108
  1297. #define RV1126_PULL_PINS_PER_REG 8
  1298. #define RV1126_PULL_BITS_PER_PIN 2
  1299. #define RV1126_PULL_BANK_STRIDE 16
  1300. #define RV1126_GPIO_C4_D7(p) (p >= 20 && p <= 31) /* GPIO0_C4 ~ GPIO0_D7 */
  1301. static int rv1126_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
  1302. int pin_num, struct regmap **regmap,
  1303. int *reg, u8 *bit)
  1304. {
  1305. struct rockchip_pinctrl *info = bank->drvdata;
  1306. /* The first 24 pins of the first bank are located in PMU */
  1307. if (bank->bank_num == 0) {
  1308. if (RV1126_GPIO_C4_D7(pin_num)) {
  1309. *regmap = info->regmap_base;
  1310. *reg = RV1126_PULL_GRF_GPIO1A0_OFFSET;
  1311. *reg -= (((31 - pin_num) / RV1126_PULL_PINS_PER_REG + 1) * 4);
  1312. *bit = pin_num % RV1126_PULL_PINS_PER_REG;
  1313. *bit *= RV1126_PULL_BITS_PER_PIN;
  1314. return 0;
  1315. }
  1316. *regmap = info->regmap_pmu;
  1317. *reg = RV1126_PULL_PMU_OFFSET;
  1318. } else {
  1319. *reg = RV1126_PULL_GRF_GPIO1A0_OFFSET;
  1320. *regmap = info->regmap_base;
  1321. *reg += (bank->bank_num - 1) * RV1126_PULL_BANK_STRIDE;
  1322. }
  1323. *reg += ((pin_num / RV1126_PULL_PINS_PER_REG) * 4);
  1324. *bit = (pin_num % RV1126_PULL_PINS_PER_REG);
  1325. *bit *= RV1126_PULL_BITS_PER_PIN;
  1326. return 0;
  1327. }
  1328. #define RV1126_DRV_PMU_OFFSET 0x20
  1329. #define RV1126_DRV_GRF_GPIO1A0_OFFSET 0x10090
  1330. #define RV1126_DRV_BITS_PER_PIN 4
  1331. #define RV1126_DRV_PINS_PER_REG 4
  1332. #define RV1126_DRV_BANK_STRIDE 32
  1333. static int rv1126_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
  1334. int pin_num, struct regmap **regmap,
  1335. int *reg, u8 *bit)
  1336. {
  1337. struct rockchip_pinctrl *info = bank->drvdata;
  1338. /* The first 24 pins of the first bank are located in PMU */
  1339. if (bank->bank_num == 0) {
  1340. if (RV1126_GPIO_C4_D7(pin_num)) {
  1341. *regmap = info->regmap_base;
  1342. *reg = RV1126_DRV_GRF_GPIO1A0_OFFSET;
  1343. *reg -= (((31 - pin_num) / RV1126_DRV_PINS_PER_REG + 1) * 4);
  1344. *reg -= 0x4;
  1345. *bit = pin_num % RV1126_DRV_PINS_PER_REG;
  1346. *bit *= RV1126_DRV_BITS_PER_PIN;
  1347. return 0;
  1348. }
  1349. *regmap = info->regmap_pmu;
  1350. *reg = RV1126_DRV_PMU_OFFSET;
  1351. } else {
  1352. *regmap = info->regmap_base;
  1353. *reg = RV1126_DRV_GRF_GPIO1A0_OFFSET;
  1354. *reg += (bank->bank_num - 1) * RV1126_DRV_BANK_STRIDE;
  1355. }
  1356. *reg += ((pin_num / RV1126_DRV_PINS_PER_REG) * 4);
  1357. *bit = pin_num % RV1126_DRV_PINS_PER_REG;
  1358. *bit *= RV1126_DRV_BITS_PER_PIN;
  1359. return 0;
  1360. }
  1361. #define RV1126_SCHMITT_PMU_OFFSET 0x60
  1362. #define RV1126_SCHMITT_GRF_GPIO1A0_OFFSET 0x10188
  1363. #define RV1126_SCHMITT_BANK_STRIDE 16
  1364. #define RV1126_SCHMITT_PINS_PER_GRF_REG 8
  1365. #define RV1126_SCHMITT_PINS_PER_PMU_REG 8
  1366. static int rv1126_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank,
  1367. int pin_num,
  1368. struct regmap **regmap,
  1369. int *reg, u8 *bit)
  1370. {
  1371. struct rockchip_pinctrl *info = bank->drvdata;
  1372. int pins_per_reg;
  1373. if (bank->bank_num == 0) {
  1374. if (RV1126_GPIO_C4_D7(pin_num)) {
  1375. *regmap = info->regmap_base;
  1376. *reg = RV1126_SCHMITT_GRF_GPIO1A0_OFFSET;
  1377. *reg -= (((31 - pin_num) / RV1126_SCHMITT_PINS_PER_GRF_REG + 1) * 4);
  1378. *bit = pin_num % RV1126_SCHMITT_PINS_PER_GRF_REG;
  1379. return 0;
  1380. }
  1381. *regmap = info->regmap_pmu;
  1382. *reg = RV1126_SCHMITT_PMU_OFFSET;
  1383. pins_per_reg = RV1126_SCHMITT_PINS_PER_PMU_REG;
  1384. } else {
  1385. *regmap = info->regmap_base;
  1386. *reg = RV1126_SCHMITT_GRF_GPIO1A0_OFFSET;
  1387. pins_per_reg = RV1126_SCHMITT_PINS_PER_GRF_REG;
  1388. *reg += (bank->bank_num - 1) * RV1126_SCHMITT_BANK_STRIDE;
  1389. }
  1390. *reg += ((pin_num / pins_per_reg) * 4);
  1391. *bit = pin_num % pins_per_reg;
  1392. return 0;
  1393. }
  1394. #define RK3308_SCHMITT_PINS_PER_REG 8
  1395. #define RK3308_SCHMITT_BANK_STRIDE 16
  1396. #define RK3308_SCHMITT_GRF_OFFSET 0x1a0
  1397. static int rk3308_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank,
  1398. int pin_num, struct regmap **regmap,
  1399. int *reg, u8 *bit)
  1400. {
  1401. struct rockchip_pinctrl *info = bank->drvdata;
  1402. *regmap = info->regmap_base;
  1403. *reg = RK3308_SCHMITT_GRF_OFFSET;
  1404. *reg += bank->bank_num * RK3308_SCHMITT_BANK_STRIDE;
  1405. *reg += ((pin_num / RK3308_SCHMITT_PINS_PER_REG) * 4);
  1406. *bit = pin_num % RK3308_SCHMITT_PINS_PER_REG;
  1407. return 0;
  1408. }
  1409. #define RK2928_PULL_OFFSET 0x118
  1410. #define RK2928_PULL_PINS_PER_REG 16
  1411. #define RK2928_PULL_BANK_STRIDE 8
  1412. static int rk2928_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
  1413. int pin_num, struct regmap **regmap,
  1414. int *reg, u8 *bit)
  1415. {
  1416. struct rockchip_pinctrl *info = bank->drvdata;
  1417. *regmap = info->regmap_base;
  1418. *reg = RK2928_PULL_OFFSET;
  1419. *reg += bank->bank_num * RK2928_PULL_BANK_STRIDE;
  1420. *reg += (pin_num / RK2928_PULL_PINS_PER_REG) * 4;
  1421. *bit = pin_num % RK2928_PULL_PINS_PER_REG;
  1422. return 0;
  1423. };
  1424. #define RK3128_PULL_OFFSET 0x118
  1425. static int rk3128_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
  1426. int pin_num, struct regmap **regmap,
  1427. int *reg, u8 *bit)
  1428. {
  1429. struct rockchip_pinctrl *info = bank->drvdata;
  1430. *regmap = info->regmap_base;
  1431. *reg = RK3128_PULL_OFFSET;
  1432. *reg += bank->bank_num * RK2928_PULL_BANK_STRIDE;
  1433. *reg += ((pin_num / RK2928_PULL_PINS_PER_REG) * 4);
  1434. *bit = pin_num % RK2928_PULL_PINS_PER_REG;
  1435. return 0;
  1436. }
  1437. #define RK3188_PULL_OFFSET 0x164
  1438. #define RK3188_PULL_BITS_PER_PIN 2
  1439. #define RK3188_PULL_PINS_PER_REG 8
  1440. #define RK3188_PULL_BANK_STRIDE 16
  1441. #define RK3188_PULL_PMU_OFFSET 0x64
  1442. static int rk3188_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
  1443. int pin_num, struct regmap **regmap,
  1444. int *reg, u8 *bit)
  1445. {
  1446. struct rockchip_pinctrl *info = bank->drvdata;
  1447. /* The first 12 pins of the first bank are located elsewhere */
  1448. if (bank->bank_num == 0 && pin_num < 12) {
  1449. *regmap = info->regmap_pmu ? info->regmap_pmu
  1450. : bank->regmap_pull;
  1451. *reg = info->regmap_pmu ? RK3188_PULL_PMU_OFFSET : 0;
  1452. *reg += ((pin_num / RK3188_PULL_PINS_PER_REG) * 4);
  1453. *bit = pin_num % RK3188_PULL_PINS_PER_REG;
  1454. *bit *= RK3188_PULL_BITS_PER_PIN;
  1455. } else {
  1456. *regmap = info->regmap_pull ? info->regmap_pull
  1457. : info->regmap_base;
  1458. *reg = info->regmap_pull ? 0 : RK3188_PULL_OFFSET;
  1459. /* correct the offset, as it is the 2nd pull register */
  1460. *reg -= 4;
  1461. *reg += bank->bank_num * RK3188_PULL_BANK_STRIDE;
  1462. *reg += ((pin_num / RK3188_PULL_PINS_PER_REG) * 4);
  1463. /*
  1464. * The bits in these registers have an inverse ordering
  1465. * with the lowest pin being in bits 15:14 and the highest
  1466. * pin in bits 1:0
  1467. */
  1468. *bit = 7 - (pin_num % RK3188_PULL_PINS_PER_REG);
  1469. *bit *= RK3188_PULL_BITS_PER_PIN;
  1470. }
  1471. return 0;
  1472. }
  1473. #define RK3288_PULL_OFFSET 0x140
  1474. static int rk3288_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
  1475. int pin_num, struct regmap **regmap,
  1476. int *reg, u8 *bit)
  1477. {
  1478. struct rockchip_pinctrl *info = bank->drvdata;
  1479. /* The first 24 pins of the first bank are located in PMU */
  1480. if (bank->bank_num == 0) {
  1481. *regmap = info->regmap_pmu;
  1482. *reg = RK3188_PULL_PMU_OFFSET;
  1483. *reg += ((pin_num / RK3188_PULL_PINS_PER_REG) * 4);
  1484. *bit = pin_num % RK3188_PULL_PINS_PER_REG;
  1485. *bit *= RK3188_PULL_BITS_PER_PIN;
  1486. } else {
  1487. *regmap = info->regmap_base;
  1488. *reg = RK3288_PULL_OFFSET;
  1489. /* correct the offset, as we're starting with the 2nd bank */
  1490. *reg -= 0x10;
  1491. *reg += bank->bank_num * RK3188_PULL_BANK_STRIDE;
  1492. *reg += ((pin_num / RK3188_PULL_PINS_PER_REG) * 4);
  1493. *bit = (pin_num % RK3188_PULL_PINS_PER_REG);
  1494. *bit *= RK3188_PULL_BITS_PER_PIN;
  1495. }
  1496. return 0;
  1497. }
  1498. #define RK3288_DRV_PMU_OFFSET 0x70
  1499. #define RK3288_DRV_GRF_OFFSET 0x1c0
  1500. #define RK3288_DRV_BITS_PER_PIN 2
  1501. #define RK3288_DRV_PINS_PER_REG 8
  1502. #define RK3288_DRV_BANK_STRIDE 16
  1503. static int rk3288_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
  1504. int pin_num, struct regmap **regmap,
  1505. int *reg, u8 *bit)
  1506. {
  1507. struct rockchip_pinctrl *info = bank->drvdata;
  1508. /* The first 24 pins of the first bank are located in PMU */
  1509. if (bank->bank_num == 0) {
  1510. *regmap = info->regmap_pmu;
  1511. *reg = RK3288_DRV_PMU_OFFSET;
  1512. *reg += ((pin_num / RK3288_DRV_PINS_PER_REG) * 4);
  1513. *bit = pin_num % RK3288_DRV_PINS_PER_REG;
  1514. *bit *= RK3288_DRV_BITS_PER_PIN;
  1515. } else {
  1516. *regmap = info->regmap_base;
  1517. *reg = RK3288_DRV_GRF_OFFSET;
  1518. /* correct the offset, as we're starting with the 2nd bank */
  1519. *reg -= 0x10;
  1520. *reg += bank->bank_num * RK3288_DRV_BANK_STRIDE;
  1521. *reg += ((pin_num / RK3288_DRV_PINS_PER_REG) * 4);
  1522. *bit = (pin_num % RK3288_DRV_PINS_PER_REG);
  1523. *bit *= RK3288_DRV_BITS_PER_PIN;
  1524. }
  1525. return 0;
  1526. }
  1527. #define RK3228_PULL_OFFSET 0x100
  1528. static int rk3228_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
  1529. int pin_num, struct regmap **regmap,
  1530. int *reg, u8 *bit)
  1531. {
  1532. struct rockchip_pinctrl *info = bank->drvdata;
  1533. *regmap = info->regmap_base;
  1534. *reg = RK3228_PULL_OFFSET;
  1535. *reg += bank->bank_num * RK3188_PULL_BANK_STRIDE;
  1536. *reg += ((pin_num / RK3188_PULL_PINS_PER_REG) * 4);
  1537. *bit = (pin_num % RK3188_PULL_PINS_PER_REG);
  1538. *bit *= RK3188_PULL_BITS_PER_PIN;
  1539. return 0;
  1540. }
  1541. #define RK3228_DRV_GRF_OFFSET 0x200
  1542. static int rk3228_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
  1543. int pin_num, struct regmap **regmap,
  1544. int *reg, u8 *bit)
  1545. {
  1546. struct rockchip_pinctrl *info = bank->drvdata;
  1547. *regmap = info->regmap_base;
  1548. *reg = RK3228_DRV_GRF_OFFSET;
  1549. *reg += bank->bank_num * RK3288_DRV_BANK_STRIDE;
  1550. *reg += ((pin_num / RK3288_DRV_PINS_PER_REG) * 4);
  1551. *bit = (pin_num % RK3288_DRV_PINS_PER_REG);
  1552. *bit *= RK3288_DRV_BITS_PER_PIN;
  1553. return 0;
  1554. }
  1555. #define RK3308_PULL_OFFSET 0xa0
  1556. static int rk3308_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
  1557. int pin_num, struct regmap **regmap,
  1558. int *reg, u8 *bit)
  1559. {
  1560. struct rockchip_pinctrl *info = bank->drvdata;
  1561. *regmap = info->regmap_base;
  1562. *reg = RK3308_PULL_OFFSET;
  1563. *reg += bank->bank_num * RK3188_PULL_BANK_STRIDE;
  1564. *reg += ((pin_num / RK3188_PULL_PINS_PER_REG) * 4);
  1565. *bit = (pin_num % RK3188_PULL_PINS_PER_REG);
  1566. *bit *= RK3188_PULL_BITS_PER_PIN;
  1567. return 0;
  1568. }
  1569. #define RK3308_DRV_GRF_OFFSET 0x100
  1570. static int rk3308_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
  1571. int pin_num, struct regmap **regmap,
  1572. int *reg, u8 *bit)
  1573. {
  1574. struct rockchip_pinctrl *info = bank->drvdata;
  1575. *regmap = info->regmap_base;
  1576. *reg = RK3308_DRV_GRF_OFFSET;
  1577. *reg += bank->bank_num * RK3288_DRV_BANK_STRIDE;
  1578. *reg += ((pin_num / RK3288_DRV_PINS_PER_REG) * 4);
  1579. *bit = (pin_num % RK3288_DRV_PINS_PER_REG);
  1580. *bit *= RK3288_DRV_BITS_PER_PIN;
  1581. return 0;
  1582. }
  1583. #define RK3368_PULL_GRF_OFFSET 0x100
  1584. #define RK3368_PULL_PMU_OFFSET 0x10
  1585. static int rk3368_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
  1586. int pin_num, struct regmap **regmap,
  1587. int *reg, u8 *bit)
  1588. {
  1589. struct rockchip_pinctrl *info = bank->drvdata;
  1590. /* The first 32 pins of the first bank are located in PMU */
  1591. if (bank->bank_num == 0) {
  1592. *regmap = info->regmap_pmu;
  1593. *reg = RK3368_PULL_PMU_OFFSET;
  1594. *reg += ((pin_num / RK3188_PULL_PINS_PER_REG) * 4);
  1595. *bit = pin_num % RK3188_PULL_PINS_PER_REG;
  1596. *bit *= RK3188_PULL_BITS_PER_PIN;
  1597. } else {
  1598. *regmap = info->regmap_base;
  1599. *reg = RK3368_PULL_GRF_OFFSET;
  1600. /* correct the offset, as we're starting with the 2nd bank */
  1601. *reg -= 0x10;
  1602. *reg += bank->bank_num * RK3188_PULL_BANK_STRIDE;
  1603. *reg += ((pin_num / RK3188_PULL_PINS_PER_REG) * 4);
  1604. *bit = (pin_num % RK3188_PULL_PINS_PER_REG);
  1605. *bit *= RK3188_PULL_BITS_PER_PIN;
  1606. }
  1607. return 0;
  1608. }
  1609. #define RK3368_DRV_PMU_OFFSET 0x20
  1610. #define RK3368_DRV_GRF_OFFSET 0x200
  1611. static int rk3368_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
  1612. int pin_num, struct regmap **regmap,
  1613. int *reg, u8 *bit)
  1614. {
  1615. struct rockchip_pinctrl *info = bank->drvdata;
  1616. /* The first 32 pins of the first bank are located in PMU */
  1617. if (bank->bank_num == 0) {
  1618. *regmap = info->regmap_pmu;
  1619. *reg = RK3368_DRV_PMU_OFFSET;
  1620. *reg += ((pin_num / RK3288_DRV_PINS_PER_REG) * 4);
  1621. *bit = pin_num % RK3288_DRV_PINS_PER_REG;
  1622. *bit *= RK3288_DRV_BITS_PER_PIN;
  1623. } else {
  1624. *regmap = info->regmap_base;
  1625. *reg = RK3368_DRV_GRF_OFFSET;
  1626. /* correct the offset, as we're starting with the 2nd bank */
  1627. *reg -= 0x10;
  1628. *reg += bank->bank_num * RK3288_DRV_BANK_STRIDE;
  1629. *reg += ((pin_num / RK3288_DRV_PINS_PER_REG) * 4);
  1630. *bit = (pin_num % RK3288_DRV_PINS_PER_REG);
  1631. *bit *= RK3288_DRV_BITS_PER_PIN;
  1632. }
  1633. return 0;
  1634. }
  1635. #define RK3399_PULL_GRF_OFFSET 0xe040
  1636. #define RK3399_PULL_PMU_OFFSET 0x40
  1637. #define RK3399_DRV_3BITS_PER_PIN 3
  1638. static int rk3399_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
  1639. int pin_num, struct regmap **regmap,
  1640. int *reg, u8 *bit)
  1641. {
  1642. struct rockchip_pinctrl *info = bank->drvdata;
  1643. /* The bank0:16 and bank1:32 pins are located in PMU */
  1644. if ((bank->bank_num == 0) || (bank->bank_num == 1)) {
  1645. *regmap = info->regmap_pmu;
  1646. *reg = RK3399_PULL_PMU_OFFSET;
  1647. *reg += bank->bank_num * RK3188_PULL_BANK_STRIDE;
  1648. *reg += ((pin_num / RK3188_PULL_PINS_PER_REG) * 4);
  1649. *bit = pin_num % RK3188_PULL_PINS_PER_REG;
  1650. *bit *= RK3188_PULL_BITS_PER_PIN;
  1651. } else {
  1652. *regmap = info->regmap_base;
  1653. *reg = RK3399_PULL_GRF_OFFSET;
  1654. /* correct the offset, as we're starting with the 3rd bank */
  1655. *reg -= 0x20;
  1656. *reg += bank->bank_num * RK3188_PULL_BANK_STRIDE;
  1657. *reg += ((pin_num / RK3188_PULL_PINS_PER_REG) * 4);
  1658. *bit = (pin_num % RK3188_PULL_PINS_PER_REG);
  1659. *bit *= RK3188_PULL_BITS_PER_PIN;
  1660. }
  1661. return 0;
  1662. }
  1663. static int rk3399_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
  1664. int pin_num, struct regmap **regmap,
  1665. int *reg, u8 *bit)
  1666. {
  1667. struct rockchip_pinctrl *info = bank->drvdata;
  1668. int drv_num = (pin_num / 8);
  1669. /* The bank0:16 and bank1:32 pins are located in PMU */
  1670. if ((bank->bank_num == 0) || (bank->bank_num == 1))
  1671. *regmap = info->regmap_pmu;
  1672. else
  1673. *regmap = info->regmap_base;
  1674. *reg = bank->drv[drv_num].offset;
  1675. if ((bank->drv[drv_num].drv_type == DRV_TYPE_IO_1V8_3V0_AUTO) ||
  1676. (bank->drv[drv_num].drv_type == DRV_TYPE_IO_3V3_ONLY))
  1677. *bit = (pin_num % 8) * 3;
  1678. else
  1679. *bit = (pin_num % 8) * 2;
  1680. return 0;
  1681. }
  1682. #define RK3568_PULL_PMU_OFFSET 0x20
  1683. #define RK3568_PULL_GRF_OFFSET 0x80
  1684. #define RK3568_PULL_BITS_PER_PIN 2
  1685. #define RK3568_PULL_PINS_PER_REG 8
  1686. #define RK3568_PULL_BANK_STRIDE 0x10
  1687. static int rk3568_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
  1688. int pin_num, struct regmap **regmap,
  1689. int *reg, u8 *bit)
  1690. {
  1691. struct rockchip_pinctrl *info = bank->drvdata;
  1692. if (bank->bank_num == 0) {
  1693. *regmap = info->regmap_pmu;
  1694. *reg = RK3568_PULL_PMU_OFFSET;
  1695. *reg += bank->bank_num * RK3568_PULL_BANK_STRIDE;
  1696. *reg += ((pin_num / RK3568_PULL_PINS_PER_REG) * 4);
  1697. *bit = pin_num % RK3568_PULL_PINS_PER_REG;
  1698. *bit *= RK3568_PULL_BITS_PER_PIN;
  1699. } else {
  1700. *regmap = info->regmap_base;
  1701. *reg = RK3568_PULL_GRF_OFFSET;
  1702. *reg += (bank->bank_num - 1) * RK3568_PULL_BANK_STRIDE;
  1703. *reg += ((pin_num / RK3568_PULL_PINS_PER_REG) * 4);
  1704. *bit = (pin_num % RK3568_PULL_PINS_PER_REG);
  1705. *bit *= RK3568_PULL_BITS_PER_PIN;
  1706. }
  1707. return 0;
  1708. }
  1709. #define RK3568_DRV_PMU_OFFSET 0x70
  1710. #define RK3568_DRV_GRF_OFFSET 0x200
  1711. #define RK3568_DRV_BITS_PER_PIN 8
  1712. #define RK3568_DRV_PINS_PER_REG 2
  1713. #define RK3568_DRV_BANK_STRIDE 0x40
  1714. static int rk3568_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
  1715. int pin_num, struct regmap **regmap,
  1716. int *reg, u8 *bit)
  1717. {
  1718. struct rockchip_pinctrl *info = bank->drvdata;
  1719. /* The first 32 pins of the first bank are located in PMU */
  1720. if (bank->bank_num == 0) {
  1721. *regmap = info->regmap_pmu;
  1722. *reg = RK3568_DRV_PMU_OFFSET;
  1723. *reg += ((pin_num / RK3568_DRV_PINS_PER_REG) * 4);
  1724. *bit = pin_num % RK3568_DRV_PINS_PER_REG;
  1725. *bit *= RK3568_DRV_BITS_PER_PIN;
  1726. } else {
  1727. *regmap = info->regmap_base;
  1728. *reg = RK3568_DRV_GRF_OFFSET;
  1729. *reg += (bank->bank_num - 1) * RK3568_DRV_BANK_STRIDE;
  1730. *reg += ((pin_num / RK3568_DRV_PINS_PER_REG) * 4);
  1731. *bit = (pin_num % RK3568_DRV_PINS_PER_REG);
  1732. *bit *= RK3568_DRV_BITS_PER_PIN;
  1733. }
  1734. return 0;
  1735. }
  1736. #define RK3588_PMU1_IOC_REG (0x0000)
  1737. #define RK3588_PMU2_IOC_REG (0x4000)
  1738. #define RK3588_BUS_IOC_REG (0x8000)
  1739. #define RK3588_VCCIO1_4_IOC_REG (0x9000)
  1740. #define RK3588_VCCIO3_5_IOC_REG (0xA000)
  1741. #define RK3588_VCCIO2_IOC_REG (0xB000)
  1742. #define RK3588_VCCIO6_IOC_REG (0xC000)
  1743. #define RK3588_EMMC_IOC_REG (0xD000)
  1744. static const u32 rk3588_ds_regs[][2] = {
  1745. {RK_GPIO0_A0, RK3588_PMU1_IOC_REG + 0x0010},
  1746. {RK_GPIO0_A4, RK3588_PMU1_IOC_REG + 0x0014},
  1747. {RK_GPIO0_B0, RK3588_PMU1_IOC_REG + 0x0018},
  1748. {RK_GPIO0_B4, RK3588_PMU2_IOC_REG + 0x0014},
  1749. {RK_GPIO0_C0, RK3588_PMU2_IOC_REG + 0x0018},
  1750. {RK_GPIO0_C4, RK3588_PMU2_IOC_REG + 0x001C},
  1751. {RK_GPIO0_D0, RK3588_PMU2_IOC_REG + 0x0020},
  1752. {RK_GPIO0_D4, RK3588_PMU2_IOC_REG + 0x0024},
  1753. {RK_GPIO1_A0, RK3588_VCCIO1_4_IOC_REG + 0x0020},
  1754. {RK_GPIO1_A4, RK3588_VCCIO1_4_IOC_REG + 0x0024},
  1755. {RK_GPIO1_B0, RK3588_VCCIO1_4_IOC_REG + 0x0028},
  1756. {RK_GPIO1_B4, RK3588_VCCIO1_4_IOC_REG + 0x002C},
  1757. {RK_GPIO1_C0, RK3588_VCCIO1_4_IOC_REG + 0x0030},
  1758. {RK_GPIO1_C4, RK3588_VCCIO1_4_IOC_REG + 0x0034},
  1759. {RK_GPIO1_D0, RK3588_VCCIO1_4_IOC_REG + 0x0038},
  1760. {RK_GPIO1_D4, RK3588_VCCIO1_4_IOC_REG + 0x003C},
  1761. {RK_GPIO2_A0, RK3588_EMMC_IOC_REG + 0x0040},
  1762. {RK_GPIO2_A4, RK3588_VCCIO3_5_IOC_REG + 0x0044},
  1763. {RK_GPIO2_B0, RK3588_VCCIO3_5_IOC_REG + 0x0048},
  1764. {RK_GPIO2_B4, RK3588_VCCIO3_5_IOC_REG + 0x004C},
  1765. {RK_GPIO2_C0, RK3588_VCCIO3_5_IOC_REG + 0x0050},
  1766. {RK_GPIO2_C4, RK3588_VCCIO3_5_IOC_REG + 0x0054},
  1767. {RK_GPIO2_D0, RK3588_EMMC_IOC_REG + 0x0058},
  1768. {RK_GPIO2_D4, RK3588_EMMC_IOC_REG + 0x005C},
  1769. {RK_GPIO3_A0, RK3588_VCCIO3_5_IOC_REG + 0x0060},
  1770. {RK_GPIO3_A4, RK3588_VCCIO3_5_IOC_REG + 0x0064},
  1771. {RK_GPIO3_B0, RK3588_VCCIO3_5_IOC_REG + 0x0068},
  1772. {RK_GPIO3_B4, RK3588_VCCIO3_5_IOC_REG + 0x006C},
  1773. {RK_GPIO3_C0, RK3588_VCCIO3_5_IOC_REG + 0x0070},
  1774. {RK_GPIO3_C4, RK3588_VCCIO3_5_IOC_REG + 0x0074},
  1775. {RK_GPIO3_D0, RK3588_VCCIO3_5_IOC_REG + 0x0078},
  1776. {RK_GPIO3_D4, RK3588_VCCIO3_5_IOC_REG + 0x007C},
  1777. {RK_GPIO4_A0, RK3588_VCCIO6_IOC_REG + 0x0080},
  1778. {RK_GPIO4_A4, RK3588_VCCIO6_IOC_REG + 0x0084},
  1779. {RK_GPIO4_B0, RK3588_VCCIO6_IOC_REG + 0x0088},
  1780. {RK_GPIO4_B4, RK3588_VCCIO6_IOC_REG + 0x008C},
  1781. {RK_GPIO4_C0, RK3588_VCCIO6_IOC_REG + 0x0090},
  1782. {RK_GPIO4_C2, RK3588_VCCIO3_5_IOC_REG + 0x0090},
  1783. {RK_GPIO4_C4, RK3588_VCCIO3_5_IOC_REG + 0x0094},
  1784. {RK_GPIO4_D0, RK3588_VCCIO2_IOC_REG + 0x0098},
  1785. {RK_GPIO4_D4, RK3588_VCCIO2_IOC_REG + 0x009C},
  1786. };
  1787. static const u32 rk3588_p_regs[][2] = {
  1788. {RK_GPIO0_A0, RK3588_PMU1_IOC_REG + 0x0020},
  1789. {RK_GPIO0_B0, RK3588_PMU1_IOC_REG + 0x0024},
  1790. {RK_GPIO0_B5, RK3588_PMU2_IOC_REG + 0x0028},
  1791. {RK_GPIO0_C0, RK3588_PMU2_IOC_REG + 0x002C},
  1792. {RK_GPIO0_D0, RK3588_PMU2_IOC_REG + 0x0030},
  1793. {RK_GPIO1_A0, RK3588_VCCIO1_4_IOC_REG + 0x0110},
  1794. {RK_GPIO1_B0, RK3588_VCCIO1_4_IOC_REG + 0x0114},
  1795. {RK_GPIO1_C0, RK3588_VCCIO1_4_IOC_REG + 0x0118},
  1796. {RK_GPIO1_D0, RK3588_VCCIO1_4_IOC_REG + 0x011C},
  1797. {RK_GPIO2_A0, RK3588_EMMC_IOC_REG + 0x0120},
  1798. {RK_GPIO2_A6, RK3588_VCCIO3_5_IOC_REG + 0x0120},
  1799. {RK_GPIO2_B0, RK3588_VCCIO3_5_IOC_REG + 0x0124},
  1800. {RK_GPIO2_C0, RK3588_VCCIO3_5_IOC_REG + 0x0128},
  1801. {RK_GPIO2_D0, RK3588_EMMC_IOC_REG + 0x012C},
  1802. {RK_GPIO3_A0, RK3588_VCCIO3_5_IOC_REG + 0x0130},
  1803. {RK_GPIO3_B0, RK3588_VCCIO3_5_IOC_REG + 0x0134},
  1804. {RK_GPIO3_C0, RK3588_VCCIO3_5_IOC_REG + 0x0138},
  1805. {RK_GPIO3_D0, RK3588_VCCIO3_5_IOC_REG + 0x013C},
  1806. {RK_GPIO4_A0, RK3588_VCCIO6_IOC_REG + 0x0140},
  1807. {RK_GPIO4_B0, RK3588_VCCIO6_IOC_REG + 0x0144},
  1808. {RK_GPIO4_C0, RK3588_VCCIO6_IOC_REG + 0x0148},
  1809. {RK_GPIO4_C2, RK3588_VCCIO3_5_IOC_REG + 0x0148},
  1810. {RK_GPIO4_D0, RK3588_VCCIO2_IOC_REG + 0x014C},
  1811. };
  1812. static const u32 rk3588_smt_regs[][2] = {
  1813. {RK_GPIO0_A0, RK3588_PMU1_IOC_REG + 0x0030},
  1814. {RK_GPIO0_B0, RK3588_PMU1_IOC_REG + 0x0034},
  1815. {RK_GPIO0_B5, RK3588_PMU2_IOC_REG + 0x0040},
  1816. {RK_GPIO0_C0, RK3588_PMU2_IOC_REG + 0x0044},
  1817. {RK_GPIO0_D0, RK3588_PMU2_IOC_REG + 0x0048},
  1818. {RK_GPIO1_A0, RK3588_VCCIO1_4_IOC_REG + 0x0210},
  1819. {RK_GPIO1_B0, RK3588_VCCIO1_4_IOC_REG + 0x0214},
  1820. {RK_GPIO1_C0, RK3588_VCCIO1_4_IOC_REG + 0x0218},
  1821. {RK_GPIO1_D0, RK3588_VCCIO1_4_IOC_REG + 0x021C},
  1822. {RK_GPIO2_A0, RK3588_EMMC_IOC_REG + 0x0220},
  1823. {RK_GPIO2_A6, RK3588_VCCIO3_5_IOC_REG + 0x0220},
  1824. {RK_GPIO2_B0, RK3588_VCCIO3_5_IOC_REG + 0x0224},
  1825. {RK_GPIO2_C0, RK3588_VCCIO3_5_IOC_REG + 0x0228},
  1826. {RK_GPIO2_D0, RK3588_EMMC_IOC_REG + 0x022C},
  1827. {RK_GPIO3_A0, RK3588_VCCIO3_5_IOC_REG + 0x0230},
  1828. {RK_GPIO3_B0, RK3588_VCCIO3_5_IOC_REG + 0x0234},
  1829. {RK_GPIO3_C0, RK3588_VCCIO3_5_IOC_REG + 0x0238},
  1830. {RK_GPIO3_D0, RK3588_VCCIO3_5_IOC_REG + 0x023C},
  1831. {RK_GPIO4_A0, RK3588_VCCIO6_IOC_REG + 0x0240},
  1832. {RK_GPIO4_B0, RK3588_VCCIO6_IOC_REG + 0x0244},
  1833. {RK_GPIO4_C0, RK3588_VCCIO6_IOC_REG + 0x0248},
  1834. {RK_GPIO4_C2, RK3588_VCCIO3_5_IOC_REG + 0x0248},
  1835. {RK_GPIO4_D0, RK3588_VCCIO2_IOC_REG + 0x024C},
  1836. };
  1837. #define RK3588_PULL_BITS_PER_PIN 2
  1838. #define RK3588_PULL_PINS_PER_REG 8
  1839. static int rk3588_calc_pull_reg_and_bit(struct rockchip_pin_bank *bank,
  1840. int pin_num, struct regmap **regmap,
  1841. int *reg, u8 *bit)
  1842. {
  1843. struct rockchip_pinctrl *info = bank->drvdata;
  1844. u8 bank_num = bank->bank_num;
  1845. u32 pin = bank_num * 32 + pin_num;
  1846. int i;
  1847. for (i = ARRAY_SIZE(rk3588_p_regs) - 1; i >= 0; i--) {
  1848. if (pin >= rk3588_p_regs[i][0]) {
  1849. *reg = rk3588_p_regs[i][1];
  1850. *regmap = info->regmap_base;
  1851. *bit = pin_num % RK3588_PULL_PINS_PER_REG;
  1852. *bit *= RK3588_PULL_BITS_PER_PIN;
  1853. return 0;
  1854. }
  1855. }
  1856. return -EINVAL;
  1857. }
  1858. #define RK3588_DRV_BITS_PER_PIN 4
  1859. #define RK3588_DRV_PINS_PER_REG 4
  1860. static int rk3588_calc_drv_reg_and_bit(struct rockchip_pin_bank *bank,
  1861. int pin_num, struct regmap **regmap,
  1862. int *reg, u8 *bit)
  1863. {
  1864. struct rockchip_pinctrl *info = bank->drvdata;
  1865. u8 bank_num = bank->bank_num;
  1866. u32 pin = bank_num * 32 + pin_num;
  1867. int i;
  1868. for (i = ARRAY_SIZE(rk3588_ds_regs) - 1; i >= 0; i--) {
  1869. if (pin >= rk3588_ds_regs[i][0]) {
  1870. *reg = rk3588_ds_regs[i][1];
  1871. *regmap = info->regmap_base;
  1872. *bit = pin_num % RK3588_DRV_PINS_PER_REG;
  1873. *bit *= RK3588_DRV_BITS_PER_PIN;
  1874. return 0;
  1875. }
  1876. }
  1877. return -EINVAL;
  1878. }
  1879. #define RK3588_SMT_BITS_PER_PIN 1
  1880. #define RK3588_SMT_PINS_PER_REG 8
  1881. static int rk3588_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank,
  1882. int pin_num,
  1883. struct regmap **regmap,
  1884. int *reg, u8 *bit)
  1885. {
  1886. struct rockchip_pinctrl *info = bank->drvdata;
  1887. u8 bank_num = bank->bank_num;
  1888. u32 pin = bank_num * 32 + pin_num;
  1889. int i;
  1890. for (i = ARRAY_SIZE(rk3588_smt_regs) - 1; i >= 0; i--) {
  1891. if (pin >= rk3588_smt_regs[i][0]) {
  1892. *reg = rk3588_smt_regs[i][1];
  1893. *regmap = info->regmap_base;
  1894. *bit = pin_num % RK3588_SMT_PINS_PER_REG;
  1895. *bit *= RK3588_SMT_BITS_PER_PIN;
  1896. return 0;
  1897. }
  1898. }
  1899. return -EINVAL;
  1900. }
  1901. static int rockchip_perpin_drv_list[DRV_TYPE_MAX][8] = {
  1902. { 2, 4, 8, 12, -1, -1, -1, -1 },
  1903. { 3, 6, 9, 12, -1, -1, -1, -1 },
  1904. { 5, 10, 15, 20, -1, -1, -1, -1 },
  1905. { 4, 6, 8, 10, 12, 14, 16, 18 },
  1906. { 4, 7, 10, 13, 16, 19, 22, 26 }
  1907. };
  1908. static int rockchip_get_drive_perpin(struct rockchip_pin_bank *bank,
  1909. int pin_num)
  1910. {
  1911. struct rockchip_pinctrl *info = bank->drvdata;
  1912. struct rockchip_pin_ctrl *ctrl = info->ctrl;
  1913. struct device *dev = info->dev;
  1914. struct regmap *regmap;
  1915. int reg, ret;
  1916. u32 data, temp, rmask_bits;
  1917. u8 bit;
  1918. int drv_type = bank->drv[pin_num / 8].drv_type;
  1919. ret = ctrl->drv_calc_reg(bank, pin_num, &regmap, &reg, &bit);
  1920. if (ret)
  1921. return ret;
  1922. switch (drv_type) {
  1923. case DRV_TYPE_IO_1V8_3V0_AUTO:
  1924. case DRV_TYPE_IO_3V3_ONLY:
  1925. rmask_bits = RK3399_DRV_3BITS_PER_PIN;
  1926. switch (bit) {
  1927. case 0 ... 12:
  1928. /* regular case, nothing to do */
  1929. break;
  1930. case 15:
  1931. /*
  1932. * drive-strength offset is special, as it is
  1933. * spread over 2 registers
  1934. */
  1935. ret = regmap_read(regmap, reg, &data);
  1936. if (ret)
  1937. return ret;
  1938. ret = regmap_read(regmap, reg + 0x4, &temp);
  1939. if (ret)
  1940. return ret;
  1941. /*
  1942. * the bit data[15] contains bit 0 of the value
  1943. * while temp[1:0] contains bits 2 and 1
  1944. */
  1945. data >>= 15;
  1946. temp &= 0x3;
  1947. temp <<= 1;
  1948. data |= temp;
  1949. return rockchip_perpin_drv_list[drv_type][data];
  1950. case 18 ... 21:
  1951. /* setting fully enclosed in the second register */
  1952. reg += 4;
  1953. bit -= 16;
  1954. break;
  1955. default:
  1956. dev_err(dev, "unsupported bit: %d for pinctrl drive type: %d\n",
  1957. bit, drv_type);
  1958. return -EINVAL;
  1959. }
  1960. break;
  1961. case DRV_TYPE_IO_DEFAULT:
  1962. case DRV_TYPE_IO_1V8_OR_3V0:
  1963. case DRV_TYPE_IO_1V8_ONLY:
  1964. rmask_bits = RK3288_DRV_BITS_PER_PIN;
  1965. break;
  1966. default:
  1967. dev_err(dev, "unsupported pinctrl drive type: %d\n", drv_type);
  1968. return -EINVAL;
  1969. }
  1970. ret = regmap_read(regmap, reg, &data);
  1971. if (ret)
  1972. return ret;
  1973. data >>= bit;
  1974. data &= (1 << rmask_bits) - 1;
  1975. return rockchip_perpin_drv_list[drv_type][data];
  1976. }
  1977. static int rockchip_set_drive_perpin(struct rockchip_pin_bank *bank,
  1978. int pin_num, int strength)
  1979. {
  1980. struct rockchip_pinctrl *info = bank->drvdata;
  1981. struct rockchip_pin_ctrl *ctrl = info->ctrl;
  1982. struct device *dev = info->dev;
  1983. struct regmap *regmap;
  1984. int reg, ret, i;
  1985. u32 data, rmask, rmask_bits, temp;
  1986. u8 bit;
  1987. int drv_type = bank->drv[pin_num / 8].drv_type;
  1988. dev_dbg(dev, "setting drive of GPIO%d-%d to %d\n",
  1989. bank->bank_num, pin_num, strength);
  1990. ret = ctrl->drv_calc_reg(bank, pin_num, &regmap, &reg, &bit);
  1991. if (ret)
  1992. return ret;
  1993. if (ctrl->type == RK3588) {
  1994. rmask_bits = RK3588_DRV_BITS_PER_PIN;
  1995. ret = strength;
  1996. goto config;
  1997. } else if (ctrl->type == RK3568) {
  1998. rmask_bits = RK3568_DRV_BITS_PER_PIN;
  1999. ret = (1 << (strength + 1)) - 1;
  2000. goto config;
  2001. }
  2002. if (ctrl->type == RV1126) {
  2003. rmask_bits = RV1126_DRV_BITS_PER_PIN;
  2004. ret = strength;
  2005. goto config;
  2006. }
  2007. ret = -EINVAL;
  2008. for (i = 0; i < ARRAY_SIZE(rockchip_perpin_drv_list[drv_type]); i++) {
  2009. if (rockchip_perpin_drv_list[drv_type][i] == strength) {
  2010. ret = i;
  2011. break;
  2012. } else if (rockchip_perpin_drv_list[drv_type][i] < 0) {
  2013. ret = rockchip_perpin_drv_list[drv_type][i];
  2014. break;
  2015. }
  2016. }
  2017. if (ret < 0) {
  2018. dev_err(dev, "unsupported driver strength %d\n", strength);
  2019. return ret;
  2020. }
  2021. switch (drv_type) {
  2022. case DRV_TYPE_IO_1V8_3V0_AUTO:
  2023. case DRV_TYPE_IO_3V3_ONLY:
  2024. rmask_bits = RK3399_DRV_3BITS_PER_PIN;
  2025. switch (bit) {
  2026. case 0 ... 12:
  2027. /* regular case, nothing to do */
  2028. break;
  2029. case 15:
  2030. /*
  2031. * drive-strength offset is special, as it is spread
  2032. * over 2 registers, the bit data[15] contains bit 0
  2033. * of the value while temp[1:0] contains bits 2 and 1
  2034. */
  2035. data = (ret & 0x1) << 15;
  2036. temp = (ret >> 0x1) & 0x3;
  2037. rmask = BIT(15) | BIT(31);
  2038. data |= BIT(31);
  2039. ret = regmap_update_bits(regmap, reg, rmask, data);
  2040. if (ret)
  2041. return ret;
  2042. rmask = 0x3 | (0x3 << 16);
  2043. temp |= (0x3 << 16);
  2044. reg += 0x4;
  2045. ret = regmap_update_bits(regmap, reg, rmask, temp);
  2046. return ret;
  2047. case 18 ... 21:
  2048. /* setting fully enclosed in the second register */
  2049. reg += 4;
  2050. bit -= 16;
  2051. break;
  2052. default:
  2053. dev_err(dev, "unsupported bit: %d for pinctrl drive type: %d\n",
  2054. bit, drv_type);
  2055. return -EINVAL;
  2056. }
  2057. break;
  2058. case DRV_TYPE_IO_DEFAULT:
  2059. case DRV_TYPE_IO_1V8_OR_3V0:
  2060. case DRV_TYPE_IO_1V8_ONLY:
  2061. rmask_bits = RK3288_DRV_BITS_PER_PIN;
  2062. break;
  2063. default:
  2064. dev_err(dev, "unsupported pinctrl drive type: %d\n", drv_type);
  2065. return -EINVAL;
  2066. }
  2067. config:
  2068. /* enable the write to the equivalent lower bits */
  2069. data = ((1 << rmask_bits) - 1) << (bit + 16);
  2070. rmask = data | (data >> 16);
  2071. data |= (ret << bit);
  2072. ret = regmap_update_bits(regmap, reg, rmask, data);
  2073. return ret;
  2074. }
  2075. static int rockchip_pull_list[PULL_TYPE_MAX][4] = {
  2076. {
  2077. PIN_CONFIG_BIAS_DISABLE,
  2078. PIN_CONFIG_BIAS_PULL_UP,
  2079. PIN_CONFIG_BIAS_PULL_DOWN,
  2080. PIN_CONFIG_BIAS_BUS_HOLD
  2081. },
  2082. {
  2083. PIN_CONFIG_BIAS_DISABLE,
  2084. PIN_CONFIG_BIAS_PULL_DOWN,
  2085. PIN_CONFIG_BIAS_DISABLE,
  2086. PIN_CONFIG_BIAS_PULL_UP
  2087. },
  2088. };
  2089. static int rockchip_get_pull(struct rockchip_pin_bank *bank, int pin_num)
  2090. {
  2091. struct rockchip_pinctrl *info = bank->drvdata;
  2092. struct rockchip_pin_ctrl *ctrl = info->ctrl;
  2093. struct device *dev = info->dev;
  2094. struct regmap *regmap;
  2095. int reg, ret, pull_type;
  2096. u8 bit;
  2097. u32 data;
  2098. /* rk3066b does support any pulls */
  2099. if (ctrl->type == RK3066B)
  2100. return PIN_CONFIG_BIAS_DISABLE;
  2101. ret = ctrl->pull_calc_reg(bank, pin_num, &regmap, &reg, &bit);
  2102. if (ret)
  2103. return ret;
  2104. ret = regmap_read(regmap, reg, &data);
  2105. if (ret)
  2106. return ret;
  2107. switch (ctrl->type) {
  2108. case RK2928:
  2109. case RK3128:
  2110. return !(data & BIT(bit))
  2111. ? PIN_CONFIG_BIAS_PULL_PIN_DEFAULT
  2112. : PIN_CONFIG_BIAS_DISABLE;
  2113. case PX30:
  2114. case RV1108:
  2115. case RK3188:
  2116. case RK3288:
  2117. case RK3308:
  2118. case RK3368:
  2119. case RK3399:
  2120. case RK3568:
  2121. case RK3588:
  2122. pull_type = bank->pull_type[pin_num / 8];
  2123. data >>= bit;
  2124. data &= (1 << RK3188_PULL_BITS_PER_PIN) - 1;
  2125. /*
  2126. * In the TRM, pull-up being 1 for everything except the GPIO0_D3-D6,
  2127. * where that pull up value becomes 3.
  2128. */
  2129. if (ctrl->type == RK3568 && bank->bank_num == 0 && pin_num >= 27 && pin_num <= 30) {
  2130. if (data == 3)
  2131. data = 1;
  2132. }
  2133. return rockchip_pull_list[pull_type][data];
  2134. default:
  2135. dev_err(dev, "unsupported pinctrl type\n");
  2136. return -EINVAL;
  2137. };
  2138. }
  2139. static int rockchip_set_pull(struct rockchip_pin_bank *bank,
  2140. int pin_num, int pull)
  2141. {
  2142. struct rockchip_pinctrl *info = bank->drvdata;
  2143. struct rockchip_pin_ctrl *ctrl = info->ctrl;
  2144. struct device *dev = info->dev;
  2145. struct regmap *regmap;
  2146. int reg, ret, i, pull_type;
  2147. u8 bit;
  2148. u32 data, rmask;
  2149. dev_dbg(dev, "setting pull of GPIO%d-%d to %d\n", bank->bank_num, pin_num, pull);
  2150. /* rk3066b does support any pulls */
  2151. if (ctrl->type == RK3066B)
  2152. return pull ? -EINVAL : 0;
  2153. ret = ctrl->pull_calc_reg(bank, pin_num, &regmap, &reg, &bit);
  2154. if (ret)
  2155. return ret;
  2156. switch (ctrl->type) {
  2157. case RK2928:
  2158. case RK3128:
  2159. data = BIT(bit + 16);
  2160. if (pull == PIN_CONFIG_BIAS_DISABLE)
  2161. data |= BIT(bit);
  2162. ret = regmap_write(regmap, reg, data);
  2163. break;
  2164. case PX30:
  2165. case RV1108:
  2166. case RV1126:
  2167. case RK3188:
  2168. case RK3288:
  2169. case RK3308:
  2170. case RK3368:
  2171. case RK3399:
  2172. case RK3568:
  2173. case RK3588:
  2174. pull_type = bank->pull_type[pin_num / 8];
  2175. ret = -EINVAL;
  2176. for (i = 0; i < ARRAY_SIZE(rockchip_pull_list[pull_type]);
  2177. i++) {
  2178. if (rockchip_pull_list[pull_type][i] == pull) {
  2179. ret = i;
  2180. break;
  2181. }
  2182. }
  2183. /*
  2184. * In the TRM, pull-up being 1 for everything except the GPIO0_D3-D6,
  2185. * where that pull up value becomes 3.
  2186. */
  2187. if (ctrl->type == RK3568 && bank->bank_num == 0 && pin_num >= 27 && pin_num <= 30) {
  2188. if (ret == 1)
  2189. ret = 3;
  2190. }
  2191. if (ret < 0) {
  2192. dev_err(dev, "unsupported pull setting %d\n", pull);
  2193. return ret;
  2194. }
  2195. /* enable the write to the equivalent lower bits */
  2196. data = ((1 << RK3188_PULL_BITS_PER_PIN) - 1) << (bit + 16);
  2197. rmask = data | (data >> 16);
  2198. data |= (ret << bit);
  2199. ret = regmap_update_bits(regmap, reg, rmask, data);
  2200. break;
  2201. default:
  2202. dev_err(dev, "unsupported pinctrl type\n");
  2203. return -EINVAL;
  2204. }
  2205. return ret;
  2206. }
  2207. #define RK3328_SCHMITT_BITS_PER_PIN 1
  2208. #define RK3328_SCHMITT_PINS_PER_REG 16
  2209. #define RK3328_SCHMITT_BANK_STRIDE 8
  2210. #define RK3328_SCHMITT_GRF_OFFSET 0x380
  2211. static int rk3328_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank,
  2212. int pin_num,
  2213. struct regmap **regmap,
  2214. int *reg, u8 *bit)
  2215. {
  2216. struct rockchip_pinctrl *info = bank->drvdata;
  2217. *regmap = info->regmap_base;
  2218. *reg = RK3328_SCHMITT_GRF_OFFSET;
  2219. *reg += bank->bank_num * RK3328_SCHMITT_BANK_STRIDE;
  2220. *reg += ((pin_num / RK3328_SCHMITT_PINS_PER_REG) * 4);
  2221. *bit = pin_num % RK3328_SCHMITT_PINS_PER_REG;
  2222. return 0;
  2223. }
  2224. #define RK3568_SCHMITT_BITS_PER_PIN 2
  2225. #define RK3568_SCHMITT_PINS_PER_REG 8
  2226. #define RK3568_SCHMITT_BANK_STRIDE 0x10
  2227. #define RK3568_SCHMITT_GRF_OFFSET 0xc0
  2228. #define RK3568_SCHMITT_PMUGRF_OFFSET 0x30
  2229. static int rk3568_calc_schmitt_reg_and_bit(struct rockchip_pin_bank *bank,
  2230. int pin_num,
  2231. struct regmap **regmap,
  2232. int *reg, u8 *bit)
  2233. {
  2234. struct rockchip_pinctrl *info = bank->drvdata;
  2235. if (bank->bank_num == 0) {
  2236. *regmap = info->regmap_pmu;
  2237. *reg = RK3568_SCHMITT_PMUGRF_OFFSET;
  2238. } else {
  2239. *regmap = info->regmap_base;
  2240. *reg = RK3568_SCHMITT_GRF_OFFSET;
  2241. *reg += (bank->bank_num - 1) * RK3568_SCHMITT_BANK_STRIDE;
  2242. }
  2243. *reg += ((pin_num / RK3568_SCHMITT_PINS_PER_REG) * 4);
  2244. *bit = pin_num % RK3568_SCHMITT_PINS_PER_REG;
  2245. *bit *= RK3568_SCHMITT_BITS_PER_PIN;
  2246. return 0;
  2247. }
  2248. static int rockchip_get_schmitt(struct rockchip_pin_bank *bank, int pin_num)
  2249. {
  2250. struct rockchip_pinctrl *info = bank->drvdata;
  2251. struct rockchip_pin_ctrl *ctrl = info->ctrl;
  2252. struct regmap *regmap;
  2253. int reg, ret;
  2254. u8 bit;
  2255. u32 data;
  2256. ret = ctrl->schmitt_calc_reg(bank, pin_num, &regmap, &reg, &bit);
  2257. if (ret)
  2258. return ret;
  2259. ret = regmap_read(regmap, reg, &data);
  2260. if (ret)
  2261. return ret;
  2262. data >>= bit;
  2263. switch (ctrl->type) {
  2264. case RK3568:
  2265. return data & ((1 << RK3568_SCHMITT_BITS_PER_PIN) - 1);
  2266. default:
  2267. break;
  2268. }
  2269. return data & 0x1;
  2270. }
  2271. static int rockchip_set_schmitt(struct rockchip_pin_bank *bank,
  2272. int pin_num, int enable)
  2273. {
  2274. struct rockchip_pinctrl *info = bank->drvdata;
  2275. struct rockchip_pin_ctrl *ctrl = info->ctrl;
  2276. struct device *dev = info->dev;
  2277. struct regmap *regmap;
  2278. int reg, ret;
  2279. u8 bit;
  2280. u32 data, rmask;
  2281. dev_dbg(dev, "setting input schmitt of GPIO%d-%d to %d\n",
  2282. bank->bank_num, pin_num, enable);
  2283. ret = ctrl->schmitt_calc_reg(bank, pin_num, &regmap, &reg, &bit);
  2284. if (ret)
  2285. return ret;
  2286. /* enable the write to the equivalent lower bits */
  2287. switch (ctrl->type) {
  2288. case RK3568:
  2289. data = ((1 << RK3568_SCHMITT_BITS_PER_PIN) - 1) << (bit + 16);
  2290. rmask = data | (data >> 16);
  2291. data |= ((enable ? 0x2 : 0x1) << bit);
  2292. break;
  2293. default:
  2294. data = BIT(bit + 16) | (enable << bit);
  2295. rmask = BIT(bit + 16) | BIT(bit);
  2296. break;
  2297. }
  2298. return regmap_update_bits(regmap, reg, rmask, data);
  2299. }
  2300. /*
  2301. * Pinmux_ops handling
  2302. */
  2303. static int rockchip_pmx_get_funcs_count(struct pinctrl_dev *pctldev)
  2304. {
  2305. struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
  2306. return info->nfunctions;
  2307. }
  2308. static const char *rockchip_pmx_get_func_name(struct pinctrl_dev *pctldev,
  2309. unsigned selector)
  2310. {
  2311. struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
  2312. return info->functions[selector].name;
  2313. }
  2314. static int rockchip_pmx_get_groups(struct pinctrl_dev *pctldev,
  2315. unsigned selector, const char * const **groups,
  2316. unsigned * const num_groups)
  2317. {
  2318. struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
  2319. *groups = info->functions[selector].groups;
  2320. *num_groups = info->functions[selector].ngroups;
  2321. return 0;
  2322. }
  2323. static int rockchip_pmx_set(struct pinctrl_dev *pctldev, unsigned selector,
  2324. unsigned group)
  2325. {
  2326. struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
  2327. const unsigned int *pins = info->groups[group].pins;
  2328. const struct rockchip_pin_config *data = info->groups[group].data;
  2329. struct device *dev = info->dev;
  2330. struct rockchip_pin_bank *bank;
  2331. int cnt, ret = 0;
  2332. dev_dbg(dev, "enable function %s group %s\n",
  2333. info->functions[selector].name, info->groups[group].name);
  2334. /*
  2335. * for each pin in the pin group selected, program the corresponding
  2336. * pin function number in the config register.
  2337. */
  2338. for (cnt = 0; cnt < info->groups[group].npins; cnt++) {
  2339. bank = pin_to_bank(info, pins[cnt]);
  2340. ret = rockchip_set_mux(bank, pins[cnt] - bank->pin_base,
  2341. data[cnt].func);
  2342. if (ret)
  2343. break;
  2344. }
  2345. if (ret) {
  2346. /* revert the already done pin settings */
  2347. for (cnt--; cnt >= 0; cnt--)
  2348. rockchip_set_mux(bank, pins[cnt] - bank->pin_base, 0);
  2349. return ret;
  2350. }
  2351. return 0;
  2352. }
  2353. static int rockchip_pmx_gpio_set_direction(struct pinctrl_dev *pctldev,
  2354. struct pinctrl_gpio_range *range,
  2355. unsigned offset,
  2356. bool input)
  2357. {
  2358. struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
  2359. struct rockchip_pin_bank *bank;
  2360. bank = pin_to_bank(info, offset);
  2361. return rockchip_set_mux(bank, offset - bank->pin_base, RK_FUNC_GPIO);
  2362. }
  2363. static const struct pinmux_ops rockchip_pmx_ops = {
  2364. .get_functions_count = rockchip_pmx_get_funcs_count,
  2365. .get_function_name = rockchip_pmx_get_func_name,
  2366. .get_function_groups = rockchip_pmx_get_groups,
  2367. .set_mux = rockchip_pmx_set,
  2368. .gpio_set_direction = rockchip_pmx_gpio_set_direction,
  2369. };
  2370. /*
  2371. * Pinconf_ops handling
  2372. */
  2373. static bool rockchip_pinconf_pull_valid(struct rockchip_pin_ctrl *ctrl,
  2374. enum pin_config_param pull)
  2375. {
  2376. switch (ctrl->type) {
  2377. case RK2928:
  2378. case RK3128:
  2379. return (pull == PIN_CONFIG_BIAS_PULL_PIN_DEFAULT ||
  2380. pull == PIN_CONFIG_BIAS_DISABLE);
  2381. case RK3066B:
  2382. return pull ? false : true;
  2383. case PX30:
  2384. case RV1108:
  2385. case RV1126:
  2386. case RK3188:
  2387. case RK3288:
  2388. case RK3308:
  2389. case RK3368:
  2390. case RK3399:
  2391. case RK3568:
  2392. case RK3588:
  2393. return (pull != PIN_CONFIG_BIAS_PULL_PIN_DEFAULT);
  2394. }
  2395. return false;
  2396. }
  2397. static int rockchip_pinconf_defer_pin(struct rockchip_pin_bank *bank,
  2398. unsigned int pin, u32 param, u32 arg)
  2399. {
  2400. struct rockchip_pin_deferred *cfg;
  2401. cfg = kzalloc(sizeof(*cfg), GFP_KERNEL);
  2402. if (!cfg)
  2403. return -ENOMEM;
  2404. cfg->pin = pin;
  2405. cfg->param = param;
  2406. cfg->arg = arg;
  2407. list_add_tail(&cfg->head, &bank->deferred_pins);
  2408. return 0;
  2409. }
  2410. /* set the pin config settings for a specified pin */
  2411. static int rockchip_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
  2412. unsigned long *configs, unsigned num_configs)
  2413. {
  2414. struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
  2415. struct rockchip_pin_bank *bank = pin_to_bank(info, pin);
  2416. struct gpio_chip *gpio = &bank->gpio_chip;
  2417. enum pin_config_param param;
  2418. u32 arg;
  2419. int i;
  2420. int rc;
  2421. for (i = 0; i < num_configs; i++) {
  2422. param = pinconf_to_config_param(configs[i]);
  2423. arg = pinconf_to_config_argument(configs[i]);
  2424. if (param == PIN_CONFIG_OUTPUT || param == PIN_CONFIG_INPUT_ENABLE) {
  2425. /*
  2426. * Check for gpio driver not being probed yet.
  2427. * The lock makes sure that either gpio-probe has completed
  2428. * or the gpio driver hasn't probed yet.
  2429. */
  2430. mutex_lock(&bank->deferred_lock);
  2431. if (!gpio || !gpio->direction_output) {
  2432. rc = rockchip_pinconf_defer_pin(bank, pin - bank->pin_base, param,
  2433. arg);
  2434. mutex_unlock(&bank->deferred_lock);
  2435. if (rc)
  2436. return rc;
  2437. break;
  2438. }
  2439. mutex_unlock(&bank->deferred_lock);
  2440. }
  2441. switch (param) {
  2442. case PIN_CONFIG_BIAS_DISABLE:
  2443. rc = rockchip_set_pull(bank, pin - bank->pin_base,
  2444. param);
  2445. if (rc)
  2446. return rc;
  2447. break;
  2448. case PIN_CONFIG_BIAS_PULL_UP:
  2449. case PIN_CONFIG_BIAS_PULL_DOWN:
  2450. case PIN_CONFIG_BIAS_PULL_PIN_DEFAULT:
  2451. case PIN_CONFIG_BIAS_BUS_HOLD:
  2452. if (!rockchip_pinconf_pull_valid(info->ctrl, param))
  2453. return -ENOTSUPP;
  2454. if (!arg)
  2455. return -EINVAL;
  2456. rc = rockchip_set_pull(bank, pin - bank->pin_base,
  2457. param);
  2458. if (rc)
  2459. return rc;
  2460. break;
  2461. case PIN_CONFIG_OUTPUT:
  2462. rc = rockchip_set_mux(bank, pin - bank->pin_base,
  2463. RK_FUNC_GPIO);
  2464. if (rc != RK_FUNC_GPIO)
  2465. return -EINVAL;
  2466. rc = gpio->direction_output(gpio, pin - bank->pin_base,
  2467. arg);
  2468. if (rc)
  2469. return rc;
  2470. break;
  2471. case PIN_CONFIG_INPUT_ENABLE:
  2472. rc = rockchip_set_mux(bank, pin - bank->pin_base,
  2473. RK_FUNC_GPIO);
  2474. if (rc != RK_FUNC_GPIO)
  2475. return -EINVAL;
  2476. rc = gpio->direction_input(gpio, pin - bank->pin_base);
  2477. if (rc)
  2478. return rc;
  2479. break;
  2480. case PIN_CONFIG_DRIVE_STRENGTH:
  2481. /* rk3288 is the first with per-pin drive-strength */
  2482. if (!info->ctrl->drv_calc_reg)
  2483. return -ENOTSUPP;
  2484. rc = rockchip_set_drive_perpin(bank,
  2485. pin - bank->pin_base, arg);
  2486. if (rc < 0)
  2487. return rc;
  2488. break;
  2489. case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
  2490. if (!info->ctrl->schmitt_calc_reg)
  2491. return -ENOTSUPP;
  2492. rc = rockchip_set_schmitt(bank,
  2493. pin - bank->pin_base, arg);
  2494. if (rc < 0)
  2495. return rc;
  2496. break;
  2497. default:
  2498. return -ENOTSUPP;
  2499. break;
  2500. }
  2501. } /* for each config */
  2502. return 0;
  2503. }
  2504. /* get the pin config settings for a specified pin */
  2505. static int rockchip_pinconf_get(struct pinctrl_dev *pctldev, unsigned int pin,
  2506. unsigned long *config)
  2507. {
  2508. struct rockchip_pinctrl *info = pinctrl_dev_get_drvdata(pctldev);
  2509. struct rockchip_pin_bank *bank = pin_to_bank(info, pin);
  2510. struct gpio_chip *gpio = &bank->gpio_chip;
  2511. enum pin_config_param param = pinconf_to_config_param(*config);
  2512. u16 arg;
  2513. int rc;
  2514. switch (param) {
  2515. case PIN_CONFIG_BIAS_DISABLE:
  2516. if (rockchip_get_pull(bank, pin - bank->pin_base) != param)
  2517. return -EINVAL;
  2518. arg = 0;
  2519. break;
  2520. case PIN_CONFIG_BIAS_PULL_UP:
  2521. case PIN_CONFIG_BIAS_PULL_DOWN:
  2522. case PIN_CONFIG_BIAS_PULL_PIN_DEFAULT:
  2523. case PIN_CONFIG_BIAS_BUS_HOLD:
  2524. if (!rockchip_pinconf_pull_valid(info->ctrl, param))
  2525. return -ENOTSUPP;
  2526. if (rockchip_get_pull(bank, pin - bank->pin_base) != param)
  2527. return -EINVAL;
  2528. arg = 1;
  2529. break;
  2530. case PIN_CONFIG_OUTPUT:
  2531. rc = rockchip_get_mux(bank, pin - bank->pin_base);
  2532. if (rc != RK_FUNC_GPIO)
  2533. return -EINVAL;
  2534. if (!gpio || !gpio->get) {
  2535. arg = 0;
  2536. break;
  2537. }
  2538. rc = gpio->get(gpio, pin - bank->pin_base);
  2539. if (rc < 0)
  2540. return rc;
  2541. arg = rc ? 1 : 0;
  2542. break;
  2543. case PIN_CONFIG_DRIVE_STRENGTH:
  2544. /* rk3288 is the first with per-pin drive-strength */
  2545. if (!info->ctrl->drv_calc_reg)
  2546. return -ENOTSUPP;
  2547. rc = rockchip_get_drive_perpin(bank, pin - bank->pin_base);
  2548. if (rc < 0)
  2549. return rc;
  2550. arg = rc;
  2551. break;
  2552. case PIN_CONFIG_INPUT_SCHMITT_ENABLE:
  2553. if (!info->ctrl->schmitt_calc_reg)
  2554. return -ENOTSUPP;
  2555. rc = rockchip_get_schmitt(bank, pin - bank->pin_base);
  2556. if (rc < 0)
  2557. return rc;
  2558. arg = rc;
  2559. break;
  2560. default:
  2561. return -ENOTSUPP;
  2562. break;
  2563. }
  2564. *config = pinconf_to_config_packed(param, arg);
  2565. return 0;
  2566. }
  2567. static const struct pinconf_ops rockchip_pinconf_ops = {
  2568. .pin_config_get = rockchip_pinconf_get,
  2569. .pin_config_set = rockchip_pinconf_set,
  2570. .is_generic = true,
  2571. };
  2572. static const struct of_device_id rockchip_bank_match[] = {
  2573. { .compatible = "rockchip,gpio-bank" },
  2574. { .compatible = "rockchip,rk3188-gpio-bank0" },
  2575. {},
  2576. };
  2577. static void rockchip_pinctrl_child_count(struct rockchip_pinctrl *info,
  2578. struct device_node *np)
  2579. {
  2580. struct device_node *child;
  2581. for_each_child_of_node(np, child) {
  2582. if (of_match_node(rockchip_bank_match, child))
  2583. continue;
  2584. info->nfunctions++;
  2585. info->ngroups += of_get_child_count(child);
  2586. }
  2587. }
  2588. static int rockchip_pinctrl_parse_groups(struct device_node *np,
  2589. struct rockchip_pin_group *grp,
  2590. struct rockchip_pinctrl *info,
  2591. u32 index)
  2592. {
  2593. struct device *dev = info->dev;
  2594. struct rockchip_pin_bank *bank;
  2595. int size;
  2596. const __be32 *list;
  2597. int num;
  2598. int i, j;
  2599. int ret;
  2600. dev_dbg(dev, "group(%d): %pOFn\n", index, np);
  2601. /* Initialise group */
  2602. grp->name = np->name;
  2603. /*
  2604. * the binding format is rockchip,pins = <bank pin mux CONFIG>,
  2605. * do sanity check and calculate pins number
  2606. */
  2607. list = of_get_property(np, "rockchip,pins", &size);
  2608. /* we do not check return since it's safe node passed down */
  2609. size /= sizeof(*list);
  2610. if (!size || size % 4)
  2611. return dev_err_probe(dev, -EINVAL, "wrong pins number or pins and configs should be by 4\n");
  2612. grp->npins = size / 4;
  2613. grp->pins = devm_kcalloc(dev, grp->npins, sizeof(*grp->pins), GFP_KERNEL);
  2614. grp->data = devm_kcalloc(dev, grp->npins, sizeof(*grp->data), GFP_KERNEL);
  2615. if (!grp->pins || !grp->data)
  2616. return -ENOMEM;
  2617. for (i = 0, j = 0; i < size; i += 4, j++) {
  2618. const __be32 *phandle;
  2619. struct device_node *np_config;
  2620. num = be32_to_cpu(*list++);
  2621. bank = bank_num_to_bank(info, num);
  2622. if (IS_ERR(bank))
  2623. return PTR_ERR(bank);
  2624. grp->pins[j] = bank->pin_base + be32_to_cpu(*list++);
  2625. grp->data[j].func = be32_to_cpu(*list++);
  2626. phandle = list++;
  2627. if (!phandle)
  2628. return -EINVAL;
  2629. np_config = of_find_node_by_phandle(be32_to_cpup(phandle));
  2630. ret = pinconf_generic_parse_dt_config(np_config, NULL,
  2631. &grp->data[j].configs, &grp->data[j].nconfigs);
  2632. of_node_put(np_config);
  2633. if (ret)
  2634. return ret;
  2635. }
  2636. return 0;
  2637. }
  2638. static int rockchip_pinctrl_parse_functions(struct device_node *np,
  2639. struct rockchip_pinctrl *info,
  2640. u32 index)
  2641. {
  2642. struct device *dev = info->dev;
  2643. struct device_node *child;
  2644. struct rockchip_pmx_func *func;
  2645. struct rockchip_pin_group *grp;
  2646. int ret;
  2647. static u32 grp_index;
  2648. u32 i = 0;
  2649. dev_dbg(dev, "parse function(%d): %pOFn\n", index, np);
  2650. func = &info->functions[index];
  2651. /* Initialise function */
  2652. func->name = np->name;
  2653. func->ngroups = of_get_child_count(np);
  2654. if (func->ngroups <= 0)
  2655. return 0;
  2656. func->groups = devm_kcalloc(dev, func->ngroups, sizeof(*func->groups), GFP_KERNEL);
  2657. if (!func->groups)
  2658. return -ENOMEM;
  2659. for_each_child_of_node(np, child) {
  2660. func->groups[i] = child->name;
  2661. grp = &info->groups[grp_index++];
  2662. ret = rockchip_pinctrl_parse_groups(child, grp, info, i++);
  2663. if (ret) {
  2664. of_node_put(child);
  2665. return ret;
  2666. }
  2667. }
  2668. return 0;
  2669. }
  2670. static int rockchip_pinctrl_parse_dt(struct platform_device *pdev,
  2671. struct rockchip_pinctrl *info)
  2672. {
  2673. struct device *dev = &pdev->dev;
  2674. struct device_node *np = dev->of_node;
  2675. struct device_node *child;
  2676. int ret;
  2677. int i;
  2678. rockchip_pinctrl_child_count(info, np);
  2679. dev_dbg(dev, "nfunctions = %d\n", info->nfunctions);
  2680. dev_dbg(dev, "ngroups = %d\n", info->ngroups);
  2681. info->functions = devm_kcalloc(dev, info->nfunctions, sizeof(*info->functions), GFP_KERNEL);
  2682. if (!info->functions)
  2683. return -ENOMEM;
  2684. info->groups = devm_kcalloc(dev, info->ngroups, sizeof(*info->groups), GFP_KERNEL);
  2685. if (!info->groups)
  2686. return -ENOMEM;
  2687. i = 0;
  2688. for_each_child_of_node(np, child) {
  2689. if (of_match_node(rockchip_bank_match, child))
  2690. continue;
  2691. ret = rockchip_pinctrl_parse_functions(child, info, i++);
  2692. if (ret) {
  2693. dev_err(dev, "failed to parse function\n");
  2694. of_node_put(child);
  2695. return ret;
  2696. }
  2697. }
  2698. return 0;
  2699. }
  2700. static int rockchip_pinctrl_register(struct platform_device *pdev,
  2701. struct rockchip_pinctrl *info)
  2702. {
  2703. struct pinctrl_desc *ctrldesc = &info->pctl;
  2704. struct pinctrl_pin_desc *pindesc, *pdesc;
  2705. struct rockchip_pin_bank *pin_bank;
  2706. struct device *dev = &pdev->dev;
  2707. char **pin_names;
  2708. int pin, bank, ret;
  2709. int k;
  2710. ctrldesc->name = "rockchip-pinctrl";
  2711. ctrldesc->owner = THIS_MODULE;
  2712. ctrldesc->pctlops = &rockchip_pctrl_ops;
  2713. ctrldesc->pmxops = &rockchip_pmx_ops;
  2714. ctrldesc->confops = &rockchip_pinconf_ops;
  2715. pindesc = devm_kcalloc(dev, info->ctrl->nr_pins, sizeof(*pindesc), GFP_KERNEL);
  2716. if (!pindesc)
  2717. return -ENOMEM;
  2718. ctrldesc->pins = pindesc;
  2719. ctrldesc->npins = info->ctrl->nr_pins;
  2720. pdesc = pindesc;
  2721. for (bank = 0, k = 0; bank < info->ctrl->nr_banks; bank++) {
  2722. pin_bank = &info->ctrl->pin_banks[bank];
  2723. pin_names = devm_kasprintf_strarray(dev, pin_bank->name, pin_bank->nr_pins);
  2724. if (IS_ERR(pin_names))
  2725. return PTR_ERR(pin_names);
  2726. for (pin = 0; pin < pin_bank->nr_pins; pin++, k++) {
  2727. pdesc->number = k;
  2728. pdesc->name = pin_names[pin];
  2729. pdesc++;
  2730. }
  2731. INIT_LIST_HEAD(&pin_bank->deferred_pins);
  2732. mutex_init(&pin_bank->deferred_lock);
  2733. }
  2734. ret = rockchip_pinctrl_parse_dt(pdev, info);
  2735. if (ret)
  2736. return ret;
  2737. info->pctl_dev = devm_pinctrl_register(dev, ctrldesc, info);
  2738. if (IS_ERR(info->pctl_dev))
  2739. return dev_err_probe(dev, PTR_ERR(info->pctl_dev), "could not register pinctrl driver\n");
  2740. return 0;
  2741. }
  2742. static const struct of_device_id rockchip_pinctrl_dt_match[];
  2743. /* retrieve the soc specific data */
  2744. static struct rockchip_pin_ctrl *rockchip_pinctrl_get_soc_data(
  2745. struct rockchip_pinctrl *d,
  2746. struct platform_device *pdev)
  2747. {
  2748. struct device *dev = &pdev->dev;
  2749. struct device_node *node = dev->of_node;
  2750. const struct of_device_id *match;
  2751. struct rockchip_pin_ctrl *ctrl;
  2752. struct rockchip_pin_bank *bank;
  2753. int grf_offs, pmu_offs, drv_grf_offs, drv_pmu_offs, i, j;
  2754. match = of_match_node(rockchip_pinctrl_dt_match, node);
  2755. ctrl = (struct rockchip_pin_ctrl *)match->data;
  2756. grf_offs = ctrl->grf_mux_offset;
  2757. pmu_offs = ctrl->pmu_mux_offset;
  2758. drv_pmu_offs = ctrl->pmu_drv_offset;
  2759. drv_grf_offs = ctrl->grf_drv_offset;
  2760. bank = ctrl->pin_banks;
  2761. for (i = 0; i < ctrl->nr_banks; ++i, ++bank) {
  2762. int bank_pins = 0;
  2763. raw_spin_lock_init(&bank->slock);
  2764. bank->drvdata = d;
  2765. bank->pin_base = ctrl->nr_pins;
  2766. ctrl->nr_pins += bank->nr_pins;
  2767. /* calculate iomux and drv offsets */
  2768. for (j = 0; j < 4; j++) {
  2769. struct rockchip_iomux *iom = &bank->iomux[j];
  2770. struct rockchip_drv *drv = &bank->drv[j];
  2771. int inc;
  2772. if (bank_pins >= bank->nr_pins)
  2773. break;
  2774. /* preset iomux offset value, set new start value */
  2775. if (iom->offset >= 0) {
  2776. if ((iom->type & IOMUX_SOURCE_PMU) ||
  2777. (iom->type & IOMUX_L_SOURCE_PMU))
  2778. pmu_offs = iom->offset;
  2779. else
  2780. grf_offs = iom->offset;
  2781. } else { /* set current iomux offset */
  2782. iom->offset = ((iom->type & IOMUX_SOURCE_PMU) ||
  2783. (iom->type & IOMUX_L_SOURCE_PMU)) ?
  2784. pmu_offs : grf_offs;
  2785. }
  2786. /* preset drv offset value, set new start value */
  2787. if (drv->offset >= 0) {
  2788. if (iom->type & IOMUX_SOURCE_PMU)
  2789. drv_pmu_offs = drv->offset;
  2790. else
  2791. drv_grf_offs = drv->offset;
  2792. } else { /* set current drv offset */
  2793. drv->offset = (iom->type & IOMUX_SOURCE_PMU) ?
  2794. drv_pmu_offs : drv_grf_offs;
  2795. }
  2796. dev_dbg(dev, "bank %d, iomux %d has iom_offset 0x%x drv_offset 0x%x\n",
  2797. i, j, iom->offset, drv->offset);
  2798. /*
  2799. * Increase offset according to iomux width.
  2800. * 4bit iomux'es are spread over two registers.
  2801. */
  2802. inc = (iom->type & (IOMUX_WIDTH_4BIT |
  2803. IOMUX_WIDTH_3BIT |
  2804. IOMUX_WIDTH_2BIT)) ? 8 : 4;
  2805. if ((iom->type & IOMUX_SOURCE_PMU) || (iom->type & IOMUX_L_SOURCE_PMU))
  2806. pmu_offs += inc;
  2807. else
  2808. grf_offs += inc;
  2809. /*
  2810. * Increase offset according to drv width.
  2811. * 3bit drive-strenth'es are spread over two registers.
  2812. */
  2813. if ((drv->drv_type == DRV_TYPE_IO_1V8_3V0_AUTO) ||
  2814. (drv->drv_type == DRV_TYPE_IO_3V3_ONLY))
  2815. inc = 8;
  2816. else
  2817. inc = 4;
  2818. if (iom->type & IOMUX_SOURCE_PMU)
  2819. drv_pmu_offs += inc;
  2820. else
  2821. drv_grf_offs += inc;
  2822. bank_pins += 8;
  2823. }
  2824. /* calculate the per-bank recalced_mask */
  2825. for (j = 0; j < ctrl->niomux_recalced; j++) {
  2826. int pin = 0;
  2827. if (ctrl->iomux_recalced[j].num == bank->bank_num) {
  2828. pin = ctrl->iomux_recalced[j].pin;
  2829. bank->recalced_mask |= BIT(pin);
  2830. }
  2831. }
  2832. /* calculate the per-bank route_mask */
  2833. for (j = 0; j < ctrl->niomux_routes; j++) {
  2834. int pin = 0;
  2835. if (ctrl->iomux_routes[j].bank_num == bank->bank_num) {
  2836. pin = ctrl->iomux_routes[j].pin;
  2837. bank->route_mask |= BIT(pin);
  2838. }
  2839. }
  2840. }
  2841. return ctrl;
  2842. }
  2843. #define RK3288_GRF_GPIO6C_IOMUX 0x64
  2844. #define GPIO6C6_SEL_WRITE_ENABLE BIT(28)
  2845. static u32 rk3288_grf_gpio6c_iomux;
  2846. static int __maybe_unused rockchip_pinctrl_suspend(struct device *dev)
  2847. {
  2848. struct rockchip_pinctrl *info = dev_get_drvdata(dev);
  2849. int ret = pinctrl_force_sleep(info->pctl_dev);
  2850. if (ret)
  2851. return ret;
  2852. /*
  2853. * RK3288 GPIO6_C6 mux would be modified by Maskrom when resume, so save
  2854. * the setting here, and restore it at resume.
  2855. */
  2856. if (info->ctrl->type == RK3288) {
  2857. ret = regmap_read(info->regmap_base, RK3288_GRF_GPIO6C_IOMUX,
  2858. &rk3288_grf_gpio6c_iomux);
  2859. if (ret) {
  2860. pinctrl_force_default(info->pctl_dev);
  2861. return ret;
  2862. }
  2863. }
  2864. return 0;
  2865. }
  2866. static int __maybe_unused rockchip_pinctrl_resume(struct device *dev)
  2867. {
  2868. struct rockchip_pinctrl *info = dev_get_drvdata(dev);
  2869. int ret;
  2870. if (info->ctrl->type == RK3288) {
  2871. ret = regmap_write(info->regmap_base, RK3288_GRF_GPIO6C_IOMUX,
  2872. rk3288_grf_gpio6c_iomux |
  2873. GPIO6C6_SEL_WRITE_ENABLE);
  2874. if (ret)
  2875. return ret;
  2876. }
  2877. return pinctrl_force_default(info->pctl_dev);
  2878. }
  2879. static SIMPLE_DEV_PM_OPS(rockchip_pinctrl_dev_pm_ops, rockchip_pinctrl_suspend,
  2880. rockchip_pinctrl_resume);
  2881. static int rockchip_pinctrl_probe(struct platform_device *pdev)
  2882. {
  2883. struct rockchip_pinctrl *info;
  2884. struct device *dev = &pdev->dev;
  2885. struct device_node *np = dev->of_node, *node;
  2886. struct rockchip_pin_ctrl *ctrl;
  2887. struct resource *res;
  2888. void __iomem *base;
  2889. int ret;
  2890. if (!dev->of_node)
  2891. return dev_err_probe(dev, -ENODEV, "device tree node not found\n");
  2892. info = devm_kzalloc(dev, sizeof(*info), GFP_KERNEL);
  2893. if (!info)
  2894. return -ENOMEM;
  2895. info->dev = dev;
  2896. ctrl = rockchip_pinctrl_get_soc_data(info, pdev);
  2897. if (!ctrl)
  2898. return dev_err_probe(dev, -EINVAL, "driver data not available\n");
  2899. info->ctrl = ctrl;
  2900. node = of_parse_phandle(np, "rockchip,grf", 0);
  2901. if (node) {
  2902. info->regmap_base = syscon_node_to_regmap(node);
  2903. of_node_put(node);
  2904. if (IS_ERR(info->regmap_base))
  2905. return PTR_ERR(info->regmap_base);
  2906. } else {
  2907. base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
  2908. if (IS_ERR(base))
  2909. return PTR_ERR(base);
  2910. rockchip_regmap_config.max_register = resource_size(res) - 4;
  2911. rockchip_regmap_config.name = "rockchip,pinctrl";
  2912. info->regmap_base =
  2913. devm_regmap_init_mmio(dev, base, &rockchip_regmap_config);
  2914. /* to check for the old dt-bindings */
  2915. info->reg_size = resource_size(res);
  2916. /* Honor the old binding, with pull registers as 2nd resource */
  2917. if (ctrl->type == RK3188 && info->reg_size < 0x200) {
  2918. base = devm_platform_get_and_ioremap_resource(pdev, 1, &res);
  2919. if (IS_ERR(base))
  2920. return PTR_ERR(base);
  2921. rockchip_regmap_config.max_register = resource_size(res) - 4;
  2922. rockchip_regmap_config.name = "rockchip,pinctrl-pull";
  2923. info->regmap_pull =
  2924. devm_regmap_init_mmio(dev, base, &rockchip_regmap_config);
  2925. }
  2926. }
  2927. /* try to find the optional reference to the pmu syscon */
  2928. node = of_parse_phandle(np, "rockchip,pmu", 0);
  2929. if (node) {
  2930. info->regmap_pmu = syscon_node_to_regmap(node);
  2931. of_node_put(node);
  2932. if (IS_ERR(info->regmap_pmu))
  2933. return PTR_ERR(info->regmap_pmu);
  2934. }
  2935. ret = rockchip_pinctrl_register(pdev, info);
  2936. if (ret)
  2937. return ret;
  2938. platform_set_drvdata(pdev, info);
  2939. ret = of_platform_populate(np, NULL, NULL, &pdev->dev);
  2940. if (ret)
  2941. return dev_err_probe(dev, ret, "failed to register gpio device\n");
  2942. return 0;
  2943. }
  2944. static int rockchip_pinctrl_remove(struct platform_device *pdev)
  2945. {
  2946. struct rockchip_pinctrl *info = platform_get_drvdata(pdev);
  2947. struct rockchip_pin_bank *bank;
  2948. struct rockchip_pin_deferred *cfg;
  2949. int i;
  2950. of_platform_depopulate(&pdev->dev);
  2951. for (i = 0; i < info->ctrl->nr_banks; i++) {
  2952. bank = &info->ctrl->pin_banks[i];
  2953. mutex_lock(&bank->deferred_lock);
  2954. while (!list_empty(&bank->deferred_pins)) {
  2955. cfg = list_first_entry(&bank->deferred_pins,
  2956. struct rockchip_pin_deferred, head);
  2957. list_del(&cfg->head);
  2958. kfree(cfg);
  2959. }
  2960. mutex_unlock(&bank->deferred_lock);
  2961. }
  2962. return 0;
  2963. }
  2964. static struct rockchip_pin_bank px30_pin_banks[] = {
  2965. PIN_BANK_IOMUX_FLAGS(0, 32, "gpio0", IOMUX_SOURCE_PMU,
  2966. IOMUX_SOURCE_PMU,
  2967. IOMUX_SOURCE_PMU,
  2968. IOMUX_SOURCE_PMU
  2969. ),
  2970. PIN_BANK_IOMUX_FLAGS(1, 32, "gpio1", IOMUX_WIDTH_4BIT,
  2971. IOMUX_WIDTH_4BIT,
  2972. IOMUX_WIDTH_4BIT,
  2973. IOMUX_WIDTH_4BIT
  2974. ),
  2975. PIN_BANK_IOMUX_FLAGS(2, 32, "gpio2", IOMUX_WIDTH_4BIT,
  2976. IOMUX_WIDTH_4BIT,
  2977. IOMUX_WIDTH_4BIT,
  2978. IOMUX_WIDTH_4BIT
  2979. ),
  2980. PIN_BANK_IOMUX_FLAGS(3, 32, "gpio3", IOMUX_WIDTH_4BIT,
  2981. IOMUX_WIDTH_4BIT,
  2982. IOMUX_WIDTH_4BIT,
  2983. IOMUX_WIDTH_4BIT
  2984. ),
  2985. };
  2986. static struct rockchip_pin_ctrl px30_pin_ctrl = {
  2987. .pin_banks = px30_pin_banks,
  2988. .nr_banks = ARRAY_SIZE(px30_pin_banks),
  2989. .label = "PX30-GPIO",
  2990. .type = PX30,
  2991. .grf_mux_offset = 0x0,
  2992. .pmu_mux_offset = 0x0,
  2993. .iomux_routes = px30_mux_route_data,
  2994. .niomux_routes = ARRAY_SIZE(px30_mux_route_data),
  2995. .pull_calc_reg = px30_calc_pull_reg_and_bit,
  2996. .drv_calc_reg = px30_calc_drv_reg_and_bit,
  2997. .schmitt_calc_reg = px30_calc_schmitt_reg_and_bit,
  2998. };
  2999. static struct rockchip_pin_bank rv1108_pin_banks[] = {
  3000. PIN_BANK_IOMUX_FLAGS(0, 32, "gpio0", IOMUX_SOURCE_PMU,
  3001. IOMUX_SOURCE_PMU,
  3002. IOMUX_SOURCE_PMU,
  3003. IOMUX_SOURCE_PMU),
  3004. PIN_BANK_IOMUX_FLAGS(1, 32, "gpio1", 0, 0, 0, 0),
  3005. PIN_BANK_IOMUX_FLAGS(2, 32, "gpio2", 0, 0, 0, 0),
  3006. PIN_BANK_IOMUX_FLAGS(3, 32, "gpio3", 0, 0, 0, 0),
  3007. };
  3008. static struct rockchip_pin_ctrl rv1108_pin_ctrl = {
  3009. .pin_banks = rv1108_pin_banks,
  3010. .nr_banks = ARRAY_SIZE(rv1108_pin_banks),
  3011. .label = "RV1108-GPIO",
  3012. .type = RV1108,
  3013. .grf_mux_offset = 0x10,
  3014. .pmu_mux_offset = 0x0,
  3015. .iomux_recalced = rv1108_mux_recalced_data,
  3016. .niomux_recalced = ARRAY_SIZE(rv1108_mux_recalced_data),
  3017. .pull_calc_reg = rv1108_calc_pull_reg_and_bit,
  3018. .drv_calc_reg = rv1108_calc_drv_reg_and_bit,
  3019. .schmitt_calc_reg = rv1108_calc_schmitt_reg_and_bit,
  3020. };
  3021. static struct rockchip_pin_bank rv1126_pin_banks[] = {
  3022. PIN_BANK_IOMUX_FLAGS(0, 32, "gpio0",
  3023. IOMUX_WIDTH_4BIT | IOMUX_SOURCE_PMU,
  3024. IOMUX_WIDTH_4BIT | IOMUX_SOURCE_PMU,
  3025. IOMUX_WIDTH_4BIT | IOMUX_L_SOURCE_PMU,
  3026. IOMUX_WIDTH_4BIT),
  3027. PIN_BANK_IOMUX_FLAGS_OFFSET(1, 32, "gpio1",
  3028. IOMUX_WIDTH_4BIT,
  3029. IOMUX_WIDTH_4BIT,
  3030. IOMUX_WIDTH_4BIT,
  3031. IOMUX_WIDTH_4BIT,
  3032. 0x10010, 0x10018, 0x10020, 0x10028),
  3033. PIN_BANK_IOMUX_FLAGS(2, 32, "gpio2",
  3034. IOMUX_WIDTH_4BIT,
  3035. IOMUX_WIDTH_4BIT,
  3036. IOMUX_WIDTH_4BIT,
  3037. IOMUX_WIDTH_4BIT),
  3038. PIN_BANK_IOMUX_FLAGS(3, 32, "gpio3",
  3039. IOMUX_WIDTH_4BIT,
  3040. IOMUX_WIDTH_4BIT,
  3041. IOMUX_WIDTH_4BIT,
  3042. IOMUX_WIDTH_4BIT),
  3043. PIN_BANK_IOMUX_FLAGS(4, 2, "gpio4",
  3044. IOMUX_WIDTH_4BIT, 0, 0, 0),
  3045. };
  3046. static struct rockchip_pin_ctrl rv1126_pin_ctrl = {
  3047. .pin_banks = rv1126_pin_banks,
  3048. .nr_banks = ARRAY_SIZE(rv1126_pin_banks),
  3049. .label = "RV1126-GPIO",
  3050. .type = RV1126,
  3051. .grf_mux_offset = 0x10004, /* mux offset from GPIO0_D0 */
  3052. .pmu_mux_offset = 0x0,
  3053. .iomux_routes = rv1126_mux_route_data,
  3054. .niomux_routes = ARRAY_SIZE(rv1126_mux_route_data),
  3055. .iomux_recalced = rv1126_mux_recalced_data,
  3056. .niomux_recalced = ARRAY_SIZE(rv1126_mux_recalced_data),
  3057. .pull_calc_reg = rv1126_calc_pull_reg_and_bit,
  3058. .drv_calc_reg = rv1126_calc_drv_reg_and_bit,
  3059. .schmitt_calc_reg = rv1126_calc_schmitt_reg_and_bit,
  3060. };
  3061. static struct rockchip_pin_bank rk2928_pin_banks[] = {
  3062. PIN_BANK(0, 32, "gpio0"),
  3063. PIN_BANK(1, 32, "gpio1"),
  3064. PIN_BANK(2, 32, "gpio2"),
  3065. PIN_BANK(3, 32, "gpio3"),
  3066. };
  3067. static struct rockchip_pin_ctrl rk2928_pin_ctrl = {
  3068. .pin_banks = rk2928_pin_banks,
  3069. .nr_banks = ARRAY_SIZE(rk2928_pin_banks),
  3070. .label = "RK2928-GPIO",
  3071. .type = RK2928,
  3072. .grf_mux_offset = 0xa8,
  3073. .pull_calc_reg = rk2928_calc_pull_reg_and_bit,
  3074. };
  3075. static struct rockchip_pin_bank rk3036_pin_banks[] = {
  3076. PIN_BANK(0, 32, "gpio0"),
  3077. PIN_BANK(1, 32, "gpio1"),
  3078. PIN_BANK(2, 32, "gpio2"),
  3079. };
  3080. static struct rockchip_pin_ctrl rk3036_pin_ctrl = {
  3081. .pin_banks = rk3036_pin_banks,
  3082. .nr_banks = ARRAY_SIZE(rk3036_pin_banks),
  3083. .label = "RK3036-GPIO",
  3084. .type = RK2928,
  3085. .grf_mux_offset = 0xa8,
  3086. .pull_calc_reg = rk2928_calc_pull_reg_and_bit,
  3087. };
  3088. static struct rockchip_pin_bank rk3066a_pin_banks[] = {
  3089. PIN_BANK(0, 32, "gpio0"),
  3090. PIN_BANK(1, 32, "gpio1"),
  3091. PIN_BANK(2, 32, "gpio2"),
  3092. PIN_BANK(3, 32, "gpio3"),
  3093. PIN_BANK(4, 32, "gpio4"),
  3094. PIN_BANK(6, 16, "gpio6"),
  3095. };
  3096. static struct rockchip_pin_ctrl rk3066a_pin_ctrl = {
  3097. .pin_banks = rk3066a_pin_banks,
  3098. .nr_banks = ARRAY_SIZE(rk3066a_pin_banks),
  3099. .label = "RK3066a-GPIO",
  3100. .type = RK2928,
  3101. .grf_mux_offset = 0xa8,
  3102. .pull_calc_reg = rk2928_calc_pull_reg_and_bit,
  3103. };
  3104. static struct rockchip_pin_bank rk3066b_pin_banks[] = {
  3105. PIN_BANK(0, 32, "gpio0"),
  3106. PIN_BANK(1, 32, "gpio1"),
  3107. PIN_BANK(2, 32, "gpio2"),
  3108. PIN_BANK(3, 32, "gpio3"),
  3109. };
  3110. static struct rockchip_pin_ctrl rk3066b_pin_ctrl = {
  3111. .pin_banks = rk3066b_pin_banks,
  3112. .nr_banks = ARRAY_SIZE(rk3066b_pin_banks),
  3113. .label = "RK3066b-GPIO",
  3114. .type = RK3066B,
  3115. .grf_mux_offset = 0x60,
  3116. };
  3117. static struct rockchip_pin_bank rk3128_pin_banks[] = {
  3118. PIN_BANK(0, 32, "gpio0"),
  3119. PIN_BANK(1, 32, "gpio1"),
  3120. PIN_BANK(2, 32, "gpio2"),
  3121. PIN_BANK(3, 32, "gpio3"),
  3122. };
  3123. static struct rockchip_pin_ctrl rk3128_pin_ctrl = {
  3124. .pin_banks = rk3128_pin_banks,
  3125. .nr_banks = ARRAY_SIZE(rk3128_pin_banks),
  3126. .label = "RK3128-GPIO",
  3127. .type = RK3128,
  3128. .grf_mux_offset = 0xa8,
  3129. .iomux_recalced = rk3128_mux_recalced_data,
  3130. .niomux_recalced = ARRAY_SIZE(rk3128_mux_recalced_data),
  3131. .iomux_routes = rk3128_mux_route_data,
  3132. .niomux_routes = ARRAY_SIZE(rk3128_mux_route_data),
  3133. .pull_calc_reg = rk3128_calc_pull_reg_and_bit,
  3134. };
  3135. static struct rockchip_pin_bank rk3188_pin_banks[] = {
  3136. PIN_BANK_IOMUX_FLAGS(0, 32, "gpio0", IOMUX_GPIO_ONLY, 0, 0, 0),
  3137. PIN_BANK(1, 32, "gpio1"),
  3138. PIN_BANK(2, 32, "gpio2"),
  3139. PIN_BANK(3, 32, "gpio3"),
  3140. };
  3141. static struct rockchip_pin_ctrl rk3188_pin_ctrl = {
  3142. .pin_banks = rk3188_pin_banks,
  3143. .nr_banks = ARRAY_SIZE(rk3188_pin_banks),
  3144. .label = "RK3188-GPIO",
  3145. .type = RK3188,
  3146. .grf_mux_offset = 0x60,
  3147. .iomux_routes = rk3188_mux_route_data,
  3148. .niomux_routes = ARRAY_SIZE(rk3188_mux_route_data),
  3149. .pull_calc_reg = rk3188_calc_pull_reg_and_bit,
  3150. };
  3151. static struct rockchip_pin_bank rk3228_pin_banks[] = {
  3152. PIN_BANK(0, 32, "gpio0"),
  3153. PIN_BANK(1, 32, "gpio1"),
  3154. PIN_BANK(2, 32, "gpio2"),
  3155. PIN_BANK(3, 32, "gpio3"),
  3156. };
  3157. static struct rockchip_pin_ctrl rk3228_pin_ctrl = {
  3158. .pin_banks = rk3228_pin_banks,
  3159. .nr_banks = ARRAY_SIZE(rk3228_pin_banks),
  3160. .label = "RK3228-GPIO",
  3161. .type = RK3288,
  3162. .grf_mux_offset = 0x0,
  3163. .iomux_routes = rk3228_mux_route_data,
  3164. .niomux_routes = ARRAY_SIZE(rk3228_mux_route_data),
  3165. .pull_calc_reg = rk3228_calc_pull_reg_and_bit,
  3166. .drv_calc_reg = rk3228_calc_drv_reg_and_bit,
  3167. };
  3168. static struct rockchip_pin_bank rk3288_pin_banks[] = {
  3169. PIN_BANK_IOMUX_FLAGS(0, 24, "gpio0", IOMUX_SOURCE_PMU,
  3170. IOMUX_SOURCE_PMU,
  3171. IOMUX_SOURCE_PMU,
  3172. IOMUX_UNROUTED
  3173. ),
  3174. PIN_BANK_IOMUX_FLAGS(1, 32, "gpio1", IOMUX_UNROUTED,
  3175. IOMUX_UNROUTED,
  3176. IOMUX_UNROUTED,
  3177. 0
  3178. ),
  3179. PIN_BANK_IOMUX_FLAGS(2, 32, "gpio2", 0, 0, 0, IOMUX_UNROUTED),
  3180. PIN_BANK_IOMUX_FLAGS(3, 32, "gpio3", 0, 0, 0, IOMUX_WIDTH_4BIT),
  3181. PIN_BANK_IOMUX_FLAGS(4, 32, "gpio4", IOMUX_WIDTH_4BIT,
  3182. IOMUX_WIDTH_4BIT,
  3183. 0,
  3184. 0
  3185. ),
  3186. PIN_BANK_IOMUX_FLAGS(5, 32, "gpio5", IOMUX_UNROUTED,
  3187. 0,
  3188. 0,
  3189. IOMUX_UNROUTED
  3190. ),
  3191. PIN_BANK_IOMUX_FLAGS(6, 32, "gpio6", 0, 0, 0, IOMUX_UNROUTED),
  3192. PIN_BANK_IOMUX_FLAGS(7, 32, "gpio7", 0,
  3193. 0,
  3194. IOMUX_WIDTH_4BIT,
  3195. IOMUX_UNROUTED
  3196. ),
  3197. PIN_BANK(8, 16, "gpio8"),
  3198. };
  3199. static struct rockchip_pin_ctrl rk3288_pin_ctrl = {
  3200. .pin_banks = rk3288_pin_banks,
  3201. .nr_banks = ARRAY_SIZE(rk3288_pin_banks),
  3202. .label = "RK3288-GPIO",
  3203. .type = RK3288,
  3204. .grf_mux_offset = 0x0,
  3205. .pmu_mux_offset = 0x84,
  3206. .iomux_routes = rk3288_mux_route_data,
  3207. .niomux_routes = ARRAY_SIZE(rk3288_mux_route_data),
  3208. .pull_calc_reg = rk3288_calc_pull_reg_and_bit,
  3209. .drv_calc_reg = rk3288_calc_drv_reg_and_bit,
  3210. };
  3211. static struct rockchip_pin_bank rk3308_pin_banks[] = {
  3212. PIN_BANK_IOMUX_FLAGS(0, 32, "gpio0", IOMUX_WIDTH_2BIT,
  3213. IOMUX_WIDTH_2BIT,
  3214. IOMUX_WIDTH_2BIT,
  3215. IOMUX_WIDTH_2BIT),
  3216. PIN_BANK_IOMUX_FLAGS(1, 32, "gpio1", IOMUX_WIDTH_2BIT,
  3217. IOMUX_WIDTH_2BIT,
  3218. IOMUX_WIDTH_2BIT,
  3219. IOMUX_WIDTH_2BIT),
  3220. PIN_BANK_IOMUX_FLAGS(2, 32, "gpio2", IOMUX_WIDTH_2BIT,
  3221. IOMUX_WIDTH_2BIT,
  3222. IOMUX_WIDTH_2BIT,
  3223. IOMUX_WIDTH_2BIT),
  3224. PIN_BANK_IOMUX_FLAGS(3, 32, "gpio3", IOMUX_WIDTH_2BIT,
  3225. IOMUX_WIDTH_2BIT,
  3226. IOMUX_WIDTH_2BIT,
  3227. IOMUX_WIDTH_2BIT),
  3228. PIN_BANK_IOMUX_FLAGS(4, 32, "gpio4", IOMUX_WIDTH_2BIT,
  3229. IOMUX_WIDTH_2BIT,
  3230. IOMUX_WIDTH_2BIT,
  3231. IOMUX_WIDTH_2BIT),
  3232. };
  3233. static struct rockchip_pin_ctrl rk3308_pin_ctrl = {
  3234. .pin_banks = rk3308_pin_banks,
  3235. .nr_banks = ARRAY_SIZE(rk3308_pin_banks),
  3236. .label = "RK3308-GPIO",
  3237. .type = RK3308,
  3238. .grf_mux_offset = 0x0,
  3239. .iomux_recalced = rk3308_mux_recalced_data,
  3240. .niomux_recalced = ARRAY_SIZE(rk3308_mux_recalced_data),
  3241. .iomux_routes = rk3308_mux_route_data,
  3242. .niomux_routes = ARRAY_SIZE(rk3308_mux_route_data),
  3243. .pull_calc_reg = rk3308_calc_pull_reg_and_bit,
  3244. .drv_calc_reg = rk3308_calc_drv_reg_and_bit,
  3245. .schmitt_calc_reg = rk3308_calc_schmitt_reg_and_bit,
  3246. };
  3247. static struct rockchip_pin_bank rk3328_pin_banks[] = {
  3248. PIN_BANK_IOMUX_FLAGS(0, 32, "gpio0", 0, 0, 0, 0),
  3249. PIN_BANK_IOMUX_FLAGS(1, 32, "gpio1", 0, 0, 0, 0),
  3250. PIN_BANK_IOMUX_FLAGS(2, 32, "gpio2", 0,
  3251. IOMUX_WIDTH_3BIT,
  3252. IOMUX_WIDTH_3BIT,
  3253. 0),
  3254. PIN_BANK_IOMUX_FLAGS(3, 32, "gpio3",
  3255. IOMUX_WIDTH_3BIT,
  3256. IOMUX_WIDTH_3BIT,
  3257. 0,
  3258. 0),
  3259. };
  3260. static struct rockchip_pin_ctrl rk3328_pin_ctrl = {
  3261. .pin_banks = rk3328_pin_banks,
  3262. .nr_banks = ARRAY_SIZE(rk3328_pin_banks),
  3263. .label = "RK3328-GPIO",
  3264. .type = RK3288,
  3265. .grf_mux_offset = 0x0,
  3266. .iomux_recalced = rk3328_mux_recalced_data,
  3267. .niomux_recalced = ARRAY_SIZE(rk3328_mux_recalced_data),
  3268. .iomux_routes = rk3328_mux_route_data,
  3269. .niomux_routes = ARRAY_SIZE(rk3328_mux_route_data),
  3270. .pull_calc_reg = rk3228_calc_pull_reg_and_bit,
  3271. .drv_calc_reg = rk3228_calc_drv_reg_and_bit,
  3272. .schmitt_calc_reg = rk3328_calc_schmitt_reg_and_bit,
  3273. };
  3274. static struct rockchip_pin_bank rk3368_pin_banks[] = {
  3275. PIN_BANK_IOMUX_FLAGS(0, 32, "gpio0", IOMUX_SOURCE_PMU,
  3276. IOMUX_SOURCE_PMU,
  3277. IOMUX_SOURCE_PMU,
  3278. IOMUX_SOURCE_PMU
  3279. ),
  3280. PIN_BANK(1, 32, "gpio1"),
  3281. PIN_BANK(2, 32, "gpio2"),
  3282. PIN_BANK(3, 32, "gpio3"),
  3283. };
  3284. static struct rockchip_pin_ctrl rk3368_pin_ctrl = {
  3285. .pin_banks = rk3368_pin_banks,
  3286. .nr_banks = ARRAY_SIZE(rk3368_pin_banks),
  3287. .label = "RK3368-GPIO",
  3288. .type = RK3368,
  3289. .grf_mux_offset = 0x0,
  3290. .pmu_mux_offset = 0x0,
  3291. .pull_calc_reg = rk3368_calc_pull_reg_and_bit,
  3292. .drv_calc_reg = rk3368_calc_drv_reg_and_bit,
  3293. };
  3294. static struct rockchip_pin_bank rk3399_pin_banks[] = {
  3295. PIN_BANK_IOMUX_FLAGS_DRV_FLAGS_OFFSET_PULL_FLAGS(0, 32, "gpio0",
  3296. IOMUX_SOURCE_PMU,
  3297. IOMUX_SOURCE_PMU,
  3298. IOMUX_SOURCE_PMU,
  3299. IOMUX_SOURCE_PMU,
  3300. DRV_TYPE_IO_1V8_ONLY,
  3301. DRV_TYPE_IO_1V8_ONLY,
  3302. DRV_TYPE_IO_DEFAULT,
  3303. DRV_TYPE_IO_DEFAULT,
  3304. 0x80,
  3305. 0x88,
  3306. -1,
  3307. -1,
  3308. PULL_TYPE_IO_1V8_ONLY,
  3309. PULL_TYPE_IO_1V8_ONLY,
  3310. PULL_TYPE_IO_DEFAULT,
  3311. PULL_TYPE_IO_DEFAULT
  3312. ),
  3313. PIN_BANK_IOMUX_DRV_FLAGS_OFFSET(1, 32, "gpio1", IOMUX_SOURCE_PMU,
  3314. IOMUX_SOURCE_PMU,
  3315. IOMUX_SOURCE_PMU,
  3316. IOMUX_SOURCE_PMU,
  3317. DRV_TYPE_IO_1V8_OR_3V0,
  3318. DRV_TYPE_IO_1V8_OR_3V0,
  3319. DRV_TYPE_IO_1V8_OR_3V0,
  3320. DRV_TYPE_IO_1V8_OR_3V0,
  3321. 0xa0,
  3322. 0xa8,
  3323. 0xb0,
  3324. 0xb8
  3325. ),
  3326. PIN_BANK_DRV_FLAGS_PULL_FLAGS(2, 32, "gpio2", DRV_TYPE_IO_1V8_OR_3V0,
  3327. DRV_TYPE_IO_1V8_OR_3V0,
  3328. DRV_TYPE_IO_1V8_ONLY,
  3329. DRV_TYPE_IO_1V8_ONLY,
  3330. PULL_TYPE_IO_DEFAULT,
  3331. PULL_TYPE_IO_DEFAULT,
  3332. PULL_TYPE_IO_1V8_ONLY,
  3333. PULL_TYPE_IO_1V8_ONLY
  3334. ),
  3335. PIN_BANK_DRV_FLAGS(3, 32, "gpio3", DRV_TYPE_IO_3V3_ONLY,
  3336. DRV_TYPE_IO_3V3_ONLY,
  3337. DRV_TYPE_IO_3V3_ONLY,
  3338. DRV_TYPE_IO_1V8_OR_3V0
  3339. ),
  3340. PIN_BANK_DRV_FLAGS(4, 32, "gpio4", DRV_TYPE_IO_1V8_OR_3V0,
  3341. DRV_TYPE_IO_1V8_3V0_AUTO,
  3342. DRV_TYPE_IO_1V8_OR_3V0,
  3343. DRV_TYPE_IO_1V8_OR_3V0
  3344. ),
  3345. };
  3346. static struct rockchip_pin_ctrl rk3399_pin_ctrl = {
  3347. .pin_banks = rk3399_pin_banks,
  3348. .nr_banks = ARRAY_SIZE(rk3399_pin_banks),
  3349. .label = "RK3399-GPIO",
  3350. .type = RK3399,
  3351. .grf_mux_offset = 0xe000,
  3352. .pmu_mux_offset = 0x0,
  3353. .grf_drv_offset = 0xe100,
  3354. .pmu_drv_offset = 0x80,
  3355. .iomux_routes = rk3399_mux_route_data,
  3356. .niomux_routes = ARRAY_SIZE(rk3399_mux_route_data),
  3357. .pull_calc_reg = rk3399_calc_pull_reg_and_bit,
  3358. .drv_calc_reg = rk3399_calc_drv_reg_and_bit,
  3359. };
  3360. static struct rockchip_pin_bank rk3568_pin_banks[] = {
  3361. PIN_BANK_IOMUX_FLAGS(0, 32, "gpio0", IOMUX_SOURCE_PMU | IOMUX_WIDTH_4BIT,
  3362. IOMUX_SOURCE_PMU | IOMUX_WIDTH_4BIT,
  3363. IOMUX_SOURCE_PMU | IOMUX_WIDTH_4BIT,
  3364. IOMUX_SOURCE_PMU | IOMUX_WIDTH_4BIT),
  3365. PIN_BANK_IOMUX_FLAGS(1, 32, "gpio1", IOMUX_WIDTH_4BIT,
  3366. IOMUX_WIDTH_4BIT,
  3367. IOMUX_WIDTH_4BIT,
  3368. IOMUX_WIDTH_4BIT),
  3369. PIN_BANK_IOMUX_FLAGS(2, 32, "gpio2", IOMUX_WIDTH_4BIT,
  3370. IOMUX_WIDTH_4BIT,
  3371. IOMUX_WIDTH_4BIT,
  3372. IOMUX_WIDTH_4BIT),
  3373. PIN_BANK_IOMUX_FLAGS(3, 32, "gpio3", IOMUX_WIDTH_4BIT,
  3374. IOMUX_WIDTH_4BIT,
  3375. IOMUX_WIDTH_4BIT,
  3376. IOMUX_WIDTH_4BIT),
  3377. PIN_BANK_IOMUX_FLAGS(4, 32, "gpio4", IOMUX_WIDTH_4BIT,
  3378. IOMUX_WIDTH_4BIT,
  3379. IOMUX_WIDTH_4BIT,
  3380. IOMUX_WIDTH_4BIT),
  3381. };
  3382. static struct rockchip_pin_ctrl rk3568_pin_ctrl = {
  3383. .pin_banks = rk3568_pin_banks,
  3384. .nr_banks = ARRAY_SIZE(rk3568_pin_banks),
  3385. .label = "RK3568-GPIO",
  3386. .type = RK3568,
  3387. .grf_mux_offset = 0x0,
  3388. .pmu_mux_offset = 0x0,
  3389. .grf_drv_offset = 0x0200,
  3390. .pmu_drv_offset = 0x0070,
  3391. .iomux_routes = rk3568_mux_route_data,
  3392. .niomux_routes = ARRAY_SIZE(rk3568_mux_route_data),
  3393. .pull_calc_reg = rk3568_calc_pull_reg_and_bit,
  3394. .drv_calc_reg = rk3568_calc_drv_reg_and_bit,
  3395. .schmitt_calc_reg = rk3568_calc_schmitt_reg_and_bit,
  3396. };
  3397. static struct rockchip_pin_bank rk3588_pin_banks[] = {
  3398. RK3588_PIN_BANK_FLAGS(0, 32, "gpio0",
  3399. IOMUX_WIDTH_4BIT, PULL_TYPE_IO_1V8_ONLY),
  3400. RK3588_PIN_BANK_FLAGS(1, 32, "gpio1",
  3401. IOMUX_WIDTH_4BIT, PULL_TYPE_IO_1V8_ONLY),
  3402. RK3588_PIN_BANK_FLAGS(2, 32, "gpio2",
  3403. IOMUX_WIDTH_4BIT, PULL_TYPE_IO_1V8_ONLY),
  3404. RK3588_PIN_BANK_FLAGS(3, 32, "gpio3",
  3405. IOMUX_WIDTH_4BIT, PULL_TYPE_IO_1V8_ONLY),
  3406. RK3588_PIN_BANK_FLAGS(4, 32, "gpio4",
  3407. IOMUX_WIDTH_4BIT, PULL_TYPE_IO_1V8_ONLY),
  3408. };
  3409. static struct rockchip_pin_ctrl rk3588_pin_ctrl = {
  3410. .pin_banks = rk3588_pin_banks,
  3411. .nr_banks = ARRAY_SIZE(rk3588_pin_banks),
  3412. .label = "RK3588-GPIO",
  3413. .type = RK3588,
  3414. .pull_calc_reg = rk3588_calc_pull_reg_and_bit,
  3415. .drv_calc_reg = rk3588_calc_drv_reg_and_bit,
  3416. .schmitt_calc_reg = rk3588_calc_schmitt_reg_and_bit,
  3417. };
  3418. static const struct of_device_id rockchip_pinctrl_dt_match[] = {
  3419. { .compatible = "rockchip,px30-pinctrl",
  3420. .data = &px30_pin_ctrl },
  3421. { .compatible = "rockchip,rv1108-pinctrl",
  3422. .data = &rv1108_pin_ctrl },
  3423. { .compatible = "rockchip,rv1126-pinctrl",
  3424. .data = &rv1126_pin_ctrl },
  3425. { .compatible = "rockchip,rk2928-pinctrl",
  3426. .data = &rk2928_pin_ctrl },
  3427. { .compatible = "rockchip,rk3036-pinctrl",
  3428. .data = &rk3036_pin_ctrl },
  3429. { .compatible = "rockchip,rk3066a-pinctrl",
  3430. .data = &rk3066a_pin_ctrl },
  3431. { .compatible = "rockchip,rk3066b-pinctrl",
  3432. .data = &rk3066b_pin_ctrl },
  3433. { .compatible = "rockchip,rk3128-pinctrl",
  3434. .data = (void *)&rk3128_pin_ctrl },
  3435. { .compatible = "rockchip,rk3188-pinctrl",
  3436. .data = &rk3188_pin_ctrl },
  3437. { .compatible = "rockchip,rk3228-pinctrl",
  3438. .data = &rk3228_pin_ctrl },
  3439. { .compatible = "rockchip,rk3288-pinctrl",
  3440. .data = &rk3288_pin_ctrl },
  3441. { .compatible = "rockchip,rk3308-pinctrl",
  3442. .data = &rk3308_pin_ctrl },
  3443. { .compatible = "rockchip,rk3328-pinctrl",
  3444. .data = &rk3328_pin_ctrl },
  3445. { .compatible = "rockchip,rk3368-pinctrl",
  3446. .data = &rk3368_pin_ctrl },
  3447. { .compatible = "rockchip,rk3399-pinctrl",
  3448. .data = &rk3399_pin_ctrl },
  3449. { .compatible = "rockchip,rk3568-pinctrl",
  3450. .data = &rk3568_pin_ctrl },
  3451. { .compatible = "rockchip,rk3588-pinctrl",
  3452. .data = &rk3588_pin_ctrl },
  3453. {},
  3454. };
  3455. static struct platform_driver rockchip_pinctrl_driver = {
  3456. .probe = rockchip_pinctrl_probe,
  3457. .remove = rockchip_pinctrl_remove,
  3458. .driver = {
  3459. .name = "rockchip-pinctrl",
  3460. .pm = &rockchip_pinctrl_dev_pm_ops,
  3461. .of_match_table = rockchip_pinctrl_dt_match,
  3462. },
  3463. };
  3464. static int __init rockchip_pinctrl_drv_register(void)
  3465. {
  3466. return platform_driver_register(&rockchip_pinctrl_driver);
  3467. }
  3468. postcore_initcall(rockchip_pinctrl_drv_register);
  3469. static void __exit rockchip_pinctrl_drv_unregister(void)
  3470. {
  3471. platform_driver_unregister(&rockchip_pinctrl_driver);
  3472. }
  3473. module_exit(rockchip_pinctrl_drv_unregister);
  3474. MODULE_DESCRIPTION("ROCKCHIP Pin Controller Driver");
  3475. MODULE_LICENSE("GPL");
  3476. MODULE_ALIAS("platform:pinctrl-rockchip");
  3477. MODULE_DEVICE_TABLE(of, rockchip_pinctrl_dt_match);