i2c-stm32f7.c 65 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Driver for STMicroelectronics STM32F7 I2C controller
  4. *
  5. * This I2C controller is described in the STM32F75xxx and STM32F74xxx Soc
  6. * reference manual.
  7. * Please see below a link to the documentation:
  8. * http://www.st.com/resource/en/reference_manual/dm00124865.pdf
  9. *
  10. * Copyright (C) M'boumba Cedric Madianga 2017
  11. * Copyright (C) STMicroelectronics 2017
  12. * Author: M'boumba Cedric Madianga <[email protected]>
  13. *
  14. * This driver is based on i2c-stm32f4.c
  15. *
  16. */
  17. #include <linux/clk.h>
  18. #include <linux/delay.h>
  19. #include <linux/err.h>
  20. #include <linux/i2c.h>
  21. #include <linux/i2c-smbus.h>
  22. #include <linux/interrupt.h>
  23. #include <linux/io.h>
  24. #include <linux/iopoll.h>
  25. #include <linux/mfd/syscon.h>
  26. #include <linux/module.h>
  27. #include <linux/of.h>
  28. #include <linux/of_address.h>
  29. #include <linux/of_platform.h>
  30. #include <linux/platform_device.h>
  31. #include <linux/pinctrl/consumer.h>
  32. #include <linux/pm_runtime.h>
  33. #include <linux/pm_wakeirq.h>
  34. #include <linux/regmap.h>
  35. #include <linux/reset.h>
  36. #include <linux/slab.h>
  37. #include "i2c-stm32.h"
  38. /* STM32F7 I2C registers */
  39. #define STM32F7_I2C_CR1 0x00
  40. #define STM32F7_I2C_CR2 0x04
  41. #define STM32F7_I2C_OAR1 0x08
  42. #define STM32F7_I2C_OAR2 0x0C
  43. #define STM32F7_I2C_PECR 0x20
  44. #define STM32F7_I2C_TIMINGR 0x10
  45. #define STM32F7_I2C_ISR 0x18
  46. #define STM32F7_I2C_ICR 0x1C
  47. #define STM32F7_I2C_RXDR 0x24
  48. #define STM32F7_I2C_TXDR 0x28
  49. /* STM32F7 I2C control 1 */
  50. #define STM32F7_I2C_CR1_PECEN BIT(23)
  51. #define STM32F7_I2C_CR1_ALERTEN BIT(22)
  52. #define STM32F7_I2C_CR1_SMBHEN BIT(20)
  53. #define STM32F7_I2C_CR1_WUPEN BIT(18)
  54. #define STM32F7_I2C_CR1_SBC BIT(16)
  55. #define STM32F7_I2C_CR1_RXDMAEN BIT(15)
  56. #define STM32F7_I2C_CR1_TXDMAEN BIT(14)
  57. #define STM32F7_I2C_CR1_ANFOFF BIT(12)
  58. #define STM32F7_I2C_CR1_DNF_MASK GENMASK(11, 8)
  59. #define STM32F7_I2C_CR1_DNF(n) (((n) & 0xf) << 8)
  60. #define STM32F7_I2C_CR1_ERRIE BIT(7)
  61. #define STM32F7_I2C_CR1_TCIE BIT(6)
  62. #define STM32F7_I2C_CR1_STOPIE BIT(5)
  63. #define STM32F7_I2C_CR1_NACKIE BIT(4)
  64. #define STM32F7_I2C_CR1_ADDRIE BIT(3)
  65. #define STM32F7_I2C_CR1_RXIE BIT(2)
  66. #define STM32F7_I2C_CR1_TXIE BIT(1)
  67. #define STM32F7_I2C_CR1_PE BIT(0)
  68. #define STM32F7_I2C_ALL_IRQ_MASK (STM32F7_I2C_CR1_ERRIE \
  69. | STM32F7_I2C_CR1_TCIE \
  70. | STM32F7_I2C_CR1_STOPIE \
  71. | STM32F7_I2C_CR1_NACKIE \
  72. | STM32F7_I2C_CR1_RXIE \
  73. | STM32F7_I2C_CR1_TXIE)
  74. #define STM32F7_I2C_XFER_IRQ_MASK (STM32F7_I2C_CR1_TCIE \
  75. | STM32F7_I2C_CR1_STOPIE \
  76. | STM32F7_I2C_CR1_NACKIE \
  77. | STM32F7_I2C_CR1_RXIE \
  78. | STM32F7_I2C_CR1_TXIE)
  79. /* STM32F7 I2C control 2 */
  80. #define STM32F7_I2C_CR2_PECBYTE BIT(26)
  81. #define STM32F7_I2C_CR2_RELOAD BIT(24)
  82. #define STM32F7_I2C_CR2_NBYTES_MASK GENMASK(23, 16)
  83. #define STM32F7_I2C_CR2_NBYTES(n) (((n) & 0xff) << 16)
  84. #define STM32F7_I2C_CR2_NACK BIT(15)
  85. #define STM32F7_I2C_CR2_STOP BIT(14)
  86. #define STM32F7_I2C_CR2_START BIT(13)
  87. #define STM32F7_I2C_CR2_HEAD10R BIT(12)
  88. #define STM32F7_I2C_CR2_ADD10 BIT(11)
  89. #define STM32F7_I2C_CR2_RD_WRN BIT(10)
  90. #define STM32F7_I2C_CR2_SADD10_MASK GENMASK(9, 0)
  91. #define STM32F7_I2C_CR2_SADD10(n) (((n) & \
  92. STM32F7_I2C_CR2_SADD10_MASK))
  93. #define STM32F7_I2C_CR2_SADD7_MASK GENMASK(7, 1)
  94. #define STM32F7_I2C_CR2_SADD7(n) (((n) & 0x7f) << 1)
  95. /* STM32F7 I2C Own Address 1 */
  96. #define STM32F7_I2C_OAR1_OA1EN BIT(15)
  97. #define STM32F7_I2C_OAR1_OA1MODE BIT(10)
  98. #define STM32F7_I2C_OAR1_OA1_10_MASK GENMASK(9, 0)
  99. #define STM32F7_I2C_OAR1_OA1_10(n) (((n) & \
  100. STM32F7_I2C_OAR1_OA1_10_MASK))
  101. #define STM32F7_I2C_OAR1_OA1_7_MASK GENMASK(7, 1)
  102. #define STM32F7_I2C_OAR1_OA1_7(n) (((n) & 0x7f) << 1)
  103. #define STM32F7_I2C_OAR1_MASK (STM32F7_I2C_OAR1_OA1_7_MASK \
  104. | STM32F7_I2C_OAR1_OA1_10_MASK \
  105. | STM32F7_I2C_OAR1_OA1EN \
  106. | STM32F7_I2C_OAR1_OA1MODE)
  107. /* STM32F7 I2C Own Address 2 */
  108. #define STM32F7_I2C_OAR2_OA2EN BIT(15)
  109. #define STM32F7_I2C_OAR2_OA2MSK_MASK GENMASK(10, 8)
  110. #define STM32F7_I2C_OAR2_OA2MSK(n) (((n) & 0x7) << 8)
  111. #define STM32F7_I2C_OAR2_OA2_7_MASK GENMASK(7, 1)
  112. #define STM32F7_I2C_OAR2_OA2_7(n) (((n) & 0x7f) << 1)
  113. #define STM32F7_I2C_OAR2_MASK (STM32F7_I2C_OAR2_OA2MSK_MASK \
  114. | STM32F7_I2C_OAR2_OA2_7_MASK \
  115. | STM32F7_I2C_OAR2_OA2EN)
  116. /* STM32F7 I2C Interrupt Status */
  117. #define STM32F7_I2C_ISR_ADDCODE_MASK GENMASK(23, 17)
  118. #define STM32F7_I2C_ISR_ADDCODE_GET(n) \
  119. (((n) & STM32F7_I2C_ISR_ADDCODE_MASK) >> 17)
  120. #define STM32F7_I2C_ISR_DIR BIT(16)
  121. #define STM32F7_I2C_ISR_BUSY BIT(15)
  122. #define STM32F7_I2C_ISR_ALERT BIT(13)
  123. #define STM32F7_I2C_ISR_PECERR BIT(11)
  124. #define STM32F7_I2C_ISR_ARLO BIT(9)
  125. #define STM32F7_I2C_ISR_BERR BIT(8)
  126. #define STM32F7_I2C_ISR_TCR BIT(7)
  127. #define STM32F7_I2C_ISR_TC BIT(6)
  128. #define STM32F7_I2C_ISR_STOPF BIT(5)
  129. #define STM32F7_I2C_ISR_NACKF BIT(4)
  130. #define STM32F7_I2C_ISR_ADDR BIT(3)
  131. #define STM32F7_I2C_ISR_RXNE BIT(2)
  132. #define STM32F7_I2C_ISR_TXIS BIT(1)
  133. #define STM32F7_I2C_ISR_TXE BIT(0)
  134. /* STM32F7 I2C Interrupt Clear */
  135. #define STM32F7_I2C_ICR_ALERTCF BIT(13)
  136. #define STM32F7_I2C_ICR_PECCF BIT(11)
  137. #define STM32F7_I2C_ICR_ARLOCF BIT(9)
  138. #define STM32F7_I2C_ICR_BERRCF BIT(8)
  139. #define STM32F7_I2C_ICR_STOPCF BIT(5)
  140. #define STM32F7_I2C_ICR_NACKCF BIT(4)
  141. #define STM32F7_I2C_ICR_ADDRCF BIT(3)
  142. /* STM32F7 I2C Timing */
  143. #define STM32F7_I2C_TIMINGR_PRESC(n) (((n) & 0xf) << 28)
  144. #define STM32F7_I2C_TIMINGR_SCLDEL(n) (((n) & 0xf) << 20)
  145. #define STM32F7_I2C_TIMINGR_SDADEL(n) (((n) & 0xf) << 16)
  146. #define STM32F7_I2C_TIMINGR_SCLH(n) (((n) & 0xff) << 8)
  147. #define STM32F7_I2C_TIMINGR_SCLL(n) ((n) & 0xff)
  148. #define STM32F7_I2C_MAX_LEN 0xff
  149. #define STM32F7_I2C_DMA_LEN_MIN 0x16
  150. enum {
  151. STM32F7_SLAVE_HOSTNOTIFY,
  152. STM32F7_SLAVE_7_10_BITS_ADDR,
  153. STM32F7_SLAVE_7_BITS_ADDR,
  154. STM32F7_I2C_MAX_SLAVE
  155. };
  156. #define STM32F7_I2C_DNF_DEFAULT 0
  157. #define STM32F7_I2C_DNF_MAX 15
  158. #define STM32F7_I2C_ANALOG_FILTER_DELAY_MIN 50 /* ns */
  159. #define STM32F7_I2C_ANALOG_FILTER_DELAY_MAX 260 /* ns */
  160. #define STM32F7_I2C_RISE_TIME_DEFAULT 25 /* ns */
  161. #define STM32F7_I2C_FALL_TIME_DEFAULT 10 /* ns */
  162. #define STM32F7_PRESC_MAX BIT(4)
  163. #define STM32F7_SCLDEL_MAX BIT(4)
  164. #define STM32F7_SDADEL_MAX BIT(4)
  165. #define STM32F7_SCLH_MAX BIT(8)
  166. #define STM32F7_SCLL_MAX BIT(8)
  167. #define STM32F7_AUTOSUSPEND_DELAY (HZ / 100)
  168. /**
  169. * struct stm32f7_i2c_regs - i2c f7 registers backup
  170. * @cr1: Control register 1
  171. * @cr2: Control register 2
  172. * @oar1: Own address 1 register
  173. * @oar2: Own address 2 register
  174. * @tmgr: Timing register
  175. */
  176. struct stm32f7_i2c_regs {
  177. u32 cr1;
  178. u32 cr2;
  179. u32 oar1;
  180. u32 oar2;
  181. u32 tmgr;
  182. };
  183. /**
  184. * struct stm32f7_i2c_spec - private i2c specification timing
  185. * @rate: I2C bus speed (Hz)
  186. * @fall_max: Max fall time of both SDA and SCL signals (ns)
  187. * @rise_max: Max rise time of both SDA and SCL signals (ns)
  188. * @hddat_min: Min data hold time (ns)
  189. * @vddat_max: Max data valid time (ns)
  190. * @sudat_min: Min data setup time (ns)
  191. * @l_min: Min low period of the SCL clock (ns)
  192. * @h_min: Min high period of the SCL clock (ns)
  193. */
  194. struct stm32f7_i2c_spec {
  195. u32 rate;
  196. u32 fall_max;
  197. u32 rise_max;
  198. u32 hddat_min;
  199. u32 vddat_max;
  200. u32 sudat_min;
  201. u32 l_min;
  202. u32 h_min;
  203. };
  204. /**
  205. * struct stm32f7_i2c_setup - private I2C timing setup parameters
  206. * @speed_freq: I2C speed frequency (Hz)
  207. * @clock_src: I2C clock source frequency (Hz)
  208. * @rise_time: Rise time (ns)
  209. * @fall_time: Fall time (ns)
  210. * @fmp_clr_offset: Fast Mode Plus clear register offset from set register
  211. */
  212. struct stm32f7_i2c_setup {
  213. u32 speed_freq;
  214. u32 clock_src;
  215. u32 rise_time;
  216. u32 fall_time;
  217. u32 fmp_clr_offset;
  218. };
  219. /**
  220. * struct stm32f7_i2c_timings - private I2C output parameters
  221. * @node: List entry
  222. * @presc: Prescaler value
  223. * @scldel: Data setup time
  224. * @sdadel: Data hold time
  225. * @sclh: SCL high period (master mode)
  226. * @scll: SCL low period (master mode)
  227. */
  228. struct stm32f7_i2c_timings {
  229. struct list_head node;
  230. u8 presc;
  231. u8 scldel;
  232. u8 sdadel;
  233. u8 sclh;
  234. u8 scll;
  235. };
  236. /**
  237. * struct stm32f7_i2c_msg - client specific data
  238. * @addr: 8-bit or 10-bit slave addr, including r/w bit
  239. * @count: number of bytes to be transferred
  240. * @buf: data buffer
  241. * @result: result of the transfer
  242. * @stop: last I2C msg to be sent, i.e. STOP to be generated
  243. * @smbus: boolean to know if the I2C IP is used in SMBus mode
  244. * @size: type of SMBus protocol
  245. * @read_write: direction of SMBus protocol
  246. * SMBus block read and SMBus block write - block read process call protocols
  247. * @smbus_buf: buffer to be used for SMBus protocol transfer. It will
  248. * contain a maximum of 32 bytes of data + byte command + byte count + PEC
  249. * This buffer has to be 32-bit aligned to be compliant with memory address
  250. * register in DMA mode.
  251. */
  252. struct stm32f7_i2c_msg {
  253. u16 addr;
  254. u32 count;
  255. u8 *buf;
  256. int result;
  257. bool stop;
  258. bool smbus;
  259. int size;
  260. char read_write;
  261. u8 smbus_buf[I2C_SMBUS_BLOCK_MAX + 3] __aligned(4);
  262. };
  263. /**
  264. * struct stm32f7_i2c_alert - SMBus alert specific data
  265. * @setup: platform data for the smbus_alert i2c client
  266. * @ara: I2C slave device used to respond to the SMBus Alert with Alert
  267. * Response Address
  268. */
  269. struct stm32f7_i2c_alert {
  270. struct i2c_smbus_alert_setup setup;
  271. struct i2c_client *ara;
  272. };
  273. /**
  274. * struct stm32f7_i2c_dev - private data of the controller
  275. * @adap: I2C adapter for this controller
  276. * @dev: device for this controller
  277. * @base: virtual memory area
  278. * @complete: completion of I2C message
  279. * @clk: hw i2c clock
  280. * @bus_rate: I2C clock frequency of the controller
  281. * @msg: Pointer to data to be written
  282. * @msg_num: number of I2C messages to be executed
  283. * @msg_id: message identifiant
  284. * @f7_msg: customized i2c msg for driver usage
  285. * @setup: I2C timing input setup
  286. * @timing: I2C computed timings
  287. * @slave: list of slave devices registered on the I2C bus
  288. * @slave_running: slave device currently used
  289. * @backup_regs: backup of i2c controller registers (for suspend/resume)
  290. * @slave_dir: transfer direction for the current slave device
  291. * @master_mode: boolean to know in which mode the I2C is running (master or
  292. * slave)
  293. * @dma: dma data
  294. * @use_dma: boolean to know if dma is used in the current transfer
  295. * @regmap: holds SYSCFG phandle for Fast Mode Plus bits
  296. * @fmp_sreg: register address for setting Fast Mode Plus bits
  297. * @fmp_creg: register address for clearing Fast Mode Plus bits
  298. * @fmp_mask: mask for Fast Mode Plus bits in set register
  299. * @wakeup_src: boolean to know if the device is a wakeup source
  300. * @smbus_mode: states that the controller is configured in SMBus mode
  301. * @host_notify_client: SMBus host-notify client
  302. * @analog_filter: boolean to indicate enabling of the analog filter
  303. * @dnf_dt: value of digital filter requested via dt
  304. * @dnf: value of digital filter to apply
  305. * @alert: SMBus alert specific data
  306. */
  307. struct stm32f7_i2c_dev {
  308. struct i2c_adapter adap;
  309. struct device *dev;
  310. void __iomem *base;
  311. struct completion complete;
  312. struct clk *clk;
  313. unsigned int bus_rate;
  314. struct i2c_msg *msg;
  315. unsigned int msg_num;
  316. unsigned int msg_id;
  317. struct stm32f7_i2c_msg f7_msg;
  318. struct stm32f7_i2c_setup setup;
  319. struct stm32f7_i2c_timings timing;
  320. struct i2c_client *slave[STM32F7_I2C_MAX_SLAVE];
  321. struct i2c_client *slave_running;
  322. struct stm32f7_i2c_regs backup_regs;
  323. u32 slave_dir;
  324. bool master_mode;
  325. struct stm32_i2c_dma *dma;
  326. bool use_dma;
  327. struct regmap *regmap;
  328. u32 fmp_sreg;
  329. u32 fmp_creg;
  330. u32 fmp_mask;
  331. bool wakeup_src;
  332. bool smbus_mode;
  333. struct i2c_client *host_notify_client;
  334. bool analog_filter;
  335. u32 dnf_dt;
  336. u32 dnf;
  337. struct stm32f7_i2c_alert *alert;
  338. };
  339. /*
  340. * All these values are coming from I2C Specification, Version 6.0, 4th of
  341. * April 2014.
  342. *
  343. * Table10. Characteristics of the SDA and SCL bus lines for Standard, Fast,
  344. * and Fast-mode Plus I2C-bus devices
  345. */
  346. static struct stm32f7_i2c_spec stm32f7_i2c_specs[] = {
  347. {
  348. .rate = I2C_MAX_STANDARD_MODE_FREQ,
  349. .fall_max = 300,
  350. .rise_max = 1000,
  351. .hddat_min = 0,
  352. .vddat_max = 3450,
  353. .sudat_min = 250,
  354. .l_min = 4700,
  355. .h_min = 4000,
  356. },
  357. {
  358. .rate = I2C_MAX_FAST_MODE_FREQ,
  359. .fall_max = 300,
  360. .rise_max = 300,
  361. .hddat_min = 0,
  362. .vddat_max = 900,
  363. .sudat_min = 100,
  364. .l_min = 1300,
  365. .h_min = 600,
  366. },
  367. {
  368. .rate = I2C_MAX_FAST_MODE_PLUS_FREQ,
  369. .fall_max = 100,
  370. .rise_max = 120,
  371. .hddat_min = 0,
  372. .vddat_max = 450,
  373. .sudat_min = 50,
  374. .l_min = 500,
  375. .h_min = 260,
  376. },
  377. };
  378. static const struct stm32f7_i2c_setup stm32f7_setup = {
  379. .rise_time = STM32F7_I2C_RISE_TIME_DEFAULT,
  380. .fall_time = STM32F7_I2C_FALL_TIME_DEFAULT,
  381. };
  382. static const struct stm32f7_i2c_setup stm32mp15_setup = {
  383. .rise_time = STM32F7_I2C_RISE_TIME_DEFAULT,
  384. .fall_time = STM32F7_I2C_FALL_TIME_DEFAULT,
  385. .fmp_clr_offset = 0x40,
  386. };
  387. static const struct stm32f7_i2c_setup stm32mp13_setup = {
  388. .rise_time = STM32F7_I2C_RISE_TIME_DEFAULT,
  389. .fall_time = STM32F7_I2C_FALL_TIME_DEFAULT,
  390. .fmp_clr_offset = 0x4,
  391. };
  392. static inline void stm32f7_i2c_set_bits(void __iomem *reg, u32 mask)
  393. {
  394. writel_relaxed(readl_relaxed(reg) | mask, reg);
  395. }
  396. static inline void stm32f7_i2c_clr_bits(void __iomem *reg, u32 mask)
  397. {
  398. writel_relaxed(readl_relaxed(reg) & ~mask, reg);
  399. }
  400. static void stm32f7_i2c_disable_irq(struct stm32f7_i2c_dev *i2c_dev, u32 mask)
  401. {
  402. stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1, mask);
  403. }
  404. static struct stm32f7_i2c_spec *stm32f7_get_specs(u32 rate)
  405. {
  406. int i;
  407. for (i = 0; i < ARRAY_SIZE(stm32f7_i2c_specs); i++)
  408. if (rate <= stm32f7_i2c_specs[i].rate)
  409. return &stm32f7_i2c_specs[i];
  410. return ERR_PTR(-EINVAL);
  411. }
  412. #define RATE_MIN(rate) ((rate) * 8 / 10)
  413. static int stm32f7_i2c_compute_timing(struct stm32f7_i2c_dev *i2c_dev,
  414. struct stm32f7_i2c_setup *setup,
  415. struct stm32f7_i2c_timings *output)
  416. {
  417. struct stm32f7_i2c_spec *specs;
  418. u32 p_prev = STM32F7_PRESC_MAX;
  419. u32 i2cclk = DIV_ROUND_CLOSEST(NSEC_PER_SEC,
  420. setup->clock_src);
  421. u32 i2cbus = DIV_ROUND_CLOSEST(NSEC_PER_SEC,
  422. setup->speed_freq);
  423. u32 clk_error_prev = i2cbus;
  424. u32 tsync;
  425. u32 af_delay_min, af_delay_max;
  426. u32 dnf_delay;
  427. u32 clk_min, clk_max;
  428. int sdadel_min, sdadel_max;
  429. int scldel_min;
  430. struct stm32f7_i2c_timings *v, *_v, *s;
  431. struct list_head solutions;
  432. u16 p, l, a, h;
  433. int ret = 0;
  434. specs = stm32f7_get_specs(setup->speed_freq);
  435. if (specs == ERR_PTR(-EINVAL)) {
  436. dev_err(i2c_dev->dev, "speed out of bound {%d}\n",
  437. setup->speed_freq);
  438. return -EINVAL;
  439. }
  440. if ((setup->rise_time > specs->rise_max) ||
  441. (setup->fall_time > specs->fall_max)) {
  442. dev_err(i2c_dev->dev,
  443. "timings out of bound Rise{%d>%d}/Fall{%d>%d}\n",
  444. setup->rise_time, specs->rise_max,
  445. setup->fall_time, specs->fall_max);
  446. return -EINVAL;
  447. }
  448. i2c_dev->dnf = DIV_ROUND_CLOSEST(i2c_dev->dnf_dt, i2cclk);
  449. if (i2c_dev->dnf > STM32F7_I2C_DNF_MAX) {
  450. dev_err(i2c_dev->dev,
  451. "DNF out of bound %d/%d\n",
  452. i2c_dev->dnf * i2cclk, STM32F7_I2C_DNF_MAX * i2cclk);
  453. return -EINVAL;
  454. }
  455. /* Analog and Digital Filters */
  456. af_delay_min =
  457. (i2c_dev->analog_filter ?
  458. STM32F7_I2C_ANALOG_FILTER_DELAY_MIN : 0);
  459. af_delay_max =
  460. (i2c_dev->analog_filter ?
  461. STM32F7_I2C_ANALOG_FILTER_DELAY_MAX : 0);
  462. dnf_delay = i2c_dev->dnf * i2cclk;
  463. sdadel_min = specs->hddat_min + setup->fall_time -
  464. af_delay_min - (i2c_dev->dnf + 3) * i2cclk;
  465. sdadel_max = specs->vddat_max - setup->rise_time -
  466. af_delay_max - (i2c_dev->dnf + 4) * i2cclk;
  467. scldel_min = setup->rise_time + specs->sudat_min;
  468. if (sdadel_min < 0)
  469. sdadel_min = 0;
  470. if (sdadel_max < 0)
  471. sdadel_max = 0;
  472. dev_dbg(i2c_dev->dev, "SDADEL(min/max): %i/%i, SCLDEL(Min): %i\n",
  473. sdadel_min, sdadel_max, scldel_min);
  474. INIT_LIST_HEAD(&solutions);
  475. /* Compute possible values for PRESC, SCLDEL and SDADEL */
  476. for (p = 0; p < STM32F7_PRESC_MAX; p++) {
  477. for (l = 0; l < STM32F7_SCLDEL_MAX; l++) {
  478. u32 scldel = (l + 1) * (p + 1) * i2cclk;
  479. if (scldel < scldel_min)
  480. continue;
  481. for (a = 0; a < STM32F7_SDADEL_MAX; a++) {
  482. u32 sdadel = (a * (p + 1) + 1) * i2cclk;
  483. if (((sdadel >= sdadel_min) &&
  484. (sdadel <= sdadel_max)) &&
  485. (p != p_prev)) {
  486. v = kmalloc(sizeof(*v), GFP_KERNEL);
  487. if (!v) {
  488. ret = -ENOMEM;
  489. goto exit;
  490. }
  491. v->presc = p;
  492. v->scldel = l;
  493. v->sdadel = a;
  494. p_prev = p;
  495. list_add_tail(&v->node,
  496. &solutions);
  497. break;
  498. }
  499. }
  500. if (p_prev == p)
  501. break;
  502. }
  503. }
  504. if (list_empty(&solutions)) {
  505. dev_err(i2c_dev->dev, "no Prescaler solution\n");
  506. ret = -EPERM;
  507. goto exit;
  508. }
  509. tsync = af_delay_min + dnf_delay + (2 * i2cclk);
  510. s = NULL;
  511. clk_max = NSEC_PER_SEC / RATE_MIN(setup->speed_freq);
  512. clk_min = NSEC_PER_SEC / setup->speed_freq;
  513. /*
  514. * Among Prescaler possibilities discovered above figures out SCL Low
  515. * and High Period. Provided:
  516. * - SCL Low Period has to be higher than SCL Clock Low Period
  517. * defined by I2C Specification. I2C Clock has to be lower than
  518. * (SCL Low Period - Analog/Digital filters) / 4.
  519. * - SCL High Period has to be lower than SCL Clock High Period
  520. * defined by I2C Specification
  521. * - I2C Clock has to be lower than SCL High Period
  522. */
  523. list_for_each_entry(v, &solutions, node) {
  524. u32 prescaler = (v->presc + 1) * i2cclk;
  525. for (l = 0; l < STM32F7_SCLL_MAX; l++) {
  526. u32 tscl_l = (l + 1) * prescaler + tsync;
  527. if ((tscl_l < specs->l_min) ||
  528. (i2cclk >=
  529. ((tscl_l - af_delay_min - dnf_delay) / 4))) {
  530. continue;
  531. }
  532. for (h = 0; h < STM32F7_SCLH_MAX; h++) {
  533. u32 tscl_h = (h + 1) * prescaler + tsync;
  534. u32 tscl = tscl_l + tscl_h +
  535. setup->rise_time + setup->fall_time;
  536. if ((tscl >= clk_min) && (tscl <= clk_max) &&
  537. (tscl_h >= specs->h_min) &&
  538. (i2cclk < tscl_h)) {
  539. int clk_error = tscl - i2cbus;
  540. if (clk_error < 0)
  541. clk_error = -clk_error;
  542. if (clk_error < clk_error_prev) {
  543. clk_error_prev = clk_error;
  544. v->scll = l;
  545. v->sclh = h;
  546. s = v;
  547. }
  548. }
  549. }
  550. }
  551. }
  552. if (!s) {
  553. dev_err(i2c_dev->dev, "no solution at all\n");
  554. ret = -EPERM;
  555. goto exit;
  556. }
  557. output->presc = s->presc;
  558. output->scldel = s->scldel;
  559. output->sdadel = s->sdadel;
  560. output->scll = s->scll;
  561. output->sclh = s->sclh;
  562. dev_dbg(i2c_dev->dev,
  563. "Presc: %i, scldel: %i, sdadel: %i, scll: %i, sclh: %i\n",
  564. output->presc,
  565. output->scldel, output->sdadel,
  566. output->scll, output->sclh);
  567. exit:
  568. /* Release list and memory */
  569. list_for_each_entry_safe(v, _v, &solutions, node) {
  570. list_del(&v->node);
  571. kfree(v);
  572. }
  573. return ret;
  574. }
  575. static u32 stm32f7_get_lower_rate(u32 rate)
  576. {
  577. int i = ARRAY_SIZE(stm32f7_i2c_specs);
  578. while (--i)
  579. if (stm32f7_i2c_specs[i].rate < rate)
  580. break;
  581. return stm32f7_i2c_specs[i].rate;
  582. }
  583. static int stm32f7_i2c_setup_timing(struct stm32f7_i2c_dev *i2c_dev,
  584. struct stm32f7_i2c_setup *setup)
  585. {
  586. struct i2c_timings timings, *t = &timings;
  587. int ret = 0;
  588. t->bus_freq_hz = I2C_MAX_STANDARD_MODE_FREQ;
  589. t->scl_rise_ns = i2c_dev->setup.rise_time;
  590. t->scl_fall_ns = i2c_dev->setup.fall_time;
  591. i2c_parse_fw_timings(i2c_dev->dev, t, false);
  592. if (t->bus_freq_hz > I2C_MAX_FAST_MODE_PLUS_FREQ) {
  593. dev_err(i2c_dev->dev, "Invalid bus speed (%i>%i)\n",
  594. t->bus_freq_hz, I2C_MAX_FAST_MODE_PLUS_FREQ);
  595. return -EINVAL;
  596. }
  597. setup->speed_freq = t->bus_freq_hz;
  598. i2c_dev->setup.rise_time = t->scl_rise_ns;
  599. i2c_dev->setup.fall_time = t->scl_fall_ns;
  600. i2c_dev->dnf_dt = t->digital_filter_width_ns;
  601. setup->clock_src = clk_get_rate(i2c_dev->clk);
  602. if (!setup->clock_src) {
  603. dev_err(i2c_dev->dev, "clock rate is 0\n");
  604. return -EINVAL;
  605. }
  606. if (!of_property_read_bool(i2c_dev->dev->of_node, "i2c-digital-filter"))
  607. i2c_dev->dnf_dt = STM32F7_I2C_DNF_DEFAULT;
  608. do {
  609. ret = stm32f7_i2c_compute_timing(i2c_dev, setup,
  610. &i2c_dev->timing);
  611. if (ret) {
  612. dev_err(i2c_dev->dev,
  613. "failed to compute I2C timings.\n");
  614. if (setup->speed_freq <= I2C_MAX_STANDARD_MODE_FREQ)
  615. break;
  616. setup->speed_freq =
  617. stm32f7_get_lower_rate(setup->speed_freq);
  618. dev_warn(i2c_dev->dev,
  619. "downgrade I2C Speed Freq to (%i)\n",
  620. setup->speed_freq);
  621. }
  622. } while (ret);
  623. if (ret) {
  624. dev_err(i2c_dev->dev, "Impossible to compute I2C timings.\n");
  625. return ret;
  626. }
  627. i2c_dev->analog_filter = of_property_read_bool(i2c_dev->dev->of_node,
  628. "i2c-analog-filter");
  629. dev_dbg(i2c_dev->dev, "I2C Speed(%i), Clk Source(%i)\n",
  630. setup->speed_freq, setup->clock_src);
  631. dev_dbg(i2c_dev->dev, "I2C Rise(%i) and Fall(%i) Time\n",
  632. setup->rise_time, setup->fall_time);
  633. dev_dbg(i2c_dev->dev, "I2C Analog Filter(%s), DNF(%i)\n",
  634. (i2c_dev->analog_filter ? "On" : "Off"), i2c_dev->dnf);
  635. i2c_dev->bus_rate = setup->speed_freq;
  636. return 0;
  637. }
  638. static void stm32f7_i2c_disable_dma_req(struct stm32f7_i2c_dev *i2c_dev)
  639. {
  640. void __iomem *base = i2c_dev->base;
  641. u32 mask = STM32F7_I2C_CR1_RXDMAEN | STM32F7_I2C_CR1_TXDMAEN;
  642. stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR1, mask);
  643. }
  644. static void stm32f7_i2c_dma_callback(void *arg)
  645. {
  646. struct stm32f7_i2c_dev *i2c_dev = (struct stm32f7_i2c_dev *)arg;
  647. struct stm32_i2c_dma *dma = i2c_dev->dma;
  648. struct device *dev = dma->chan_using->device->dev;
  649. stm32f7_i2c_disable_dma_req(i2c_dev);
  650. dma_unmap_single(dev, dma->dma_buf, dma->dma_len, dma->dma_data_dir);
  651. complete(&dma->dma_complete);
  652. }
  653. static void stm32f7_i2c_hw_config(struct stm32f7_i2c_dev *i2c_dev)
  654. {
  655. struct stm32f7_i2c_timings *t = &i2c_dev->timing;
  656. u32 timing = 0;
  657. /* Timing settings */
  658. timing |= STM32F7_I2C_TIMINGR_PRESC(t->presc);
  659. timing |= STM32F7_I2C_TIMINGR_SCLDEL(t->scldel);
  660. timing |= STM32F7_I2C_TIMINGR_SDADEL(t->sdadel);
  661. timing |= STM32F7_I2C_TIMINGR_SCLH(t->sclh);
  662. timing |= STM32F7_I2C_TIMINGR_SCLL(t->scll);
  663. writel_relaxed(timing, i2c_dev->base + STM32F7_I2C_TIMINGR);
  664. /* Configure the Analog Filter */
  665. if (i2c_dev->analog_filter)
  666. stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
  667. STM32F7_I2C_CR1_ANFOFF);
  668. else
  669. stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
  670. STM32F7_I2C_CR1_ANFOFF);
  671. /* Program the Digital Filter */
  672. stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
  673. STM32F7_I2C_CR1_DNF_MASK);
  674. stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
  675. STM32F7_I2C_CR1_DNF(i2c_dev->dnf));
  676. stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
  677. STM32F7_I2C_CR1_PE);
  678. }
  679. static void stm32f7_i2c_write_tx_data(struct stm32f7_i2c_dev *i2c_dev)
  680. {
  681. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  682. void __iomem *base = i2c_dev->base;
  683. if (f7_msg->count) {
  684. writeb_relaxed(*f7_msg->buf++, base + STM32F7_I2C_TXDR);
  685. f7_msg->count--;
  686. }
  687. }
  688. static void stm32f7_i2c_read_rx_data(struct stm32f7_i2c_dev *i2c_dev)
  689. {
  690. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  691. void __iomem *base = i2c_dev->base;
  692. if (f7_msg->count) {
  693. *f7_msg->buf++ = readb_relaxed(base + STM32F7_I2C_RXDR);
  694. f7_msg->count--;
  695. } else {
  696. /* Flush RX buffer has no data is expected */
  697. readb_relaxed(base + STM32F7_I2C_RXDR);
  698. }
  699. }
  700. static void stm32f7_i2c_reload(struct stm32f7_i2c_dev *i2c_dev)
  701. {
  702. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  703. u32 cr2;
  704. if (i2c_dev->use_dma)
  705. f7_msg->count -= STM32F7_I2C_MAX_LEN;
  706. cr2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR2);
  707. cr2 &= ~STM32F7_I2C_CR2_NBYTES_MASK;
  708. if (f7_msg->count > STM32F7_I2C_MAX_LEN) {
  709. cr2 |= STM32F7_I2C_CR2_NBYTES(STM32F7_I2C_MAX_LEN);
  710. } else {
  711. cr2 &= ~STM32F7_I2C_CR2_RELOAD;
  712. cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
  713. }
  714. writel_relaxed(cr2, i2c_dev->base + STM32F7_I2C_CR2);
  715. }
  716. static void stm32f7_i2c_smbus_reload(struct stm32f7_i2c_dev *i2c_dev)
  717. {
  718. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  719. u32 cr2;
  720. u8 *val;
  721. /*
  722. * For I2C_SMBUS_BLOCK_DATA && I2C_SMBUS_BLOCK_PROC_CALL, the first
  723. * data received inform us how many data will follow.
  724. */
  725. stm32f7_i2c_read_rx_data(i2c_dev);
  726. /*
  727. * Update NBYTES with the value read to continue the transfer
  728. */
  729. val = f7_msg->buf - sizeof(u8);
  730. f7_msg->count = *val;
  731. cr2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR2);
  732. cr2 &= ~(STM32F7_I2C_CR2_NBYTES_MASK | STM32F7_I2C_CR2_RELOAD);
  733. cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
  734. writel_relaxed(cr2, i2c_dev->base + STM32F7_I2C_CR2);
  735. }
  736. static void stm32f7_i2c_release_bus(struct i2c_adapter *i2c_adap)
  737. {
  738. struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(i2c_adap);
  739. stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
  740. STM32F7_I2C_CR1_PE);
  741. stm32f7_i2c_hw_config(i2c_dev);
  742. }
  743. static int stm32f7_i2c_wait_free_bus(struct stm32f7_i2c_dev *i2c_dev)
  744. {
  745. u32 status;
  746. int ret;
  747. ret = readl_relaxed_poll_timeout(i2c_dev->base + STM32F7_I2C_ISR,
  748. status,
  749. !(status & STM32F7_I2C_ISR_BUSY),
  750. 10, 1000);
  751. if (!ret)
  752. return 0;
  753. stm32f7_i2c_release_bus(&i2c_dev->adap);
  754. return -EBUSY;
  755. }
  756. static void stm32f7_i2c_xfer_msg(struct stm32f7_i2c_dev *i2c_dev,
  757. struct i2c_msg *msg)
  758. {
  759. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  760. void __iomem *base = i2c_dev->base;
  761. u32 cr1, cr2;
  762. int ret;
  763. f7_msg->addr = msg->addr;
  764. f7_msg->buf = msg->buf;
  765. f7_msg->count = msg->len;
  766. f7_msg->result = 0;
  767. f7_msg->stop = (i2c_dev->msg_id >= i2c_dev->msg_num - 1);
  768. reinit_completion(&i2c_dev->complete);
  769. cr1 = readl_relaxed(base + STM32F7_I2C_CR1);
  770. cr2 = readl_relaxed(base + STM32F7_I2C_CR2);
  771. /* Set transfer direction */
  772. cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
  773. if (msg->flags & I2C_M_RD)
  774. cr2 |= STM32F7_I2C_CR2_RD_WRN;
  775. /* Set slave address */
  776. cr2 &= ~(STM32F7_I2C_CR2_HEAD10R | STM32F7_I2C_CR2_ADD10);
  777. if (msg->flags & I2C_M_TEN) {
  778. cr2 &= ~STM32F7_I2C_CR2_SADD10_MASK;
  779. cr2 |= STM32F7_I2C_CR2_SADD10(f7_msg->addr);
  780. cr2 |= STM32F7_I2C_CR2_ADD10;
  781. } else {
  782. cr2 &= ~STM32F7_I2C_CR2_SADD7_MASK;
  783. cr2 |= STM32F7_I2C_CR2_SADD7(f7_msg->addr);
  784. }
  785. /* Set nb bytes to transfer and reload if needed */
  786. cr2 &= ~(STM32F7_I2C_CR2_NBYTES_MASK | STM32F7_I2C_CR2_RELOAD);
  787. if (f7_msg->count > STM32F7_I2C_MAX_LEN) {
  788. cr2 |= STM32F7_I2C_CR2_NBYTES(STM32F7_I2C_MAX_LEN);
  789. cr2 |= STM32F7_I2C_CR2_RELOAD;
  790. } else {
  791. cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
  792. }
  793. /* Enable NACK, STOP, error and transfer complete interrupts */
  794. cr1 |= STM32F7_I2C_CR1_ERRIE | STM32F7_I2C_CR1_TCIE |
  795. STM32F7_I2C_CR1_STOPIE | STM32F7_I2C_CR1_NACKIE;
  796. /* Clear DMA req and TX/RX interrupt */
  797. cr1 &= ~(STM32F7_I2C_CR1_RXIE | STM32F7_I2C_CR1_TXIE |
  798. STM32F7_I2C_CR1_RXDMAEN | STM32F7_I2C_CR1_TXDMAEN);
  799. /* Configure DMA or enable RX/TX interrupt */
  800. i2c_dev->use_dma = false;
  801. if (i2c_dev->dma && f7_msg->count >= STM32F7_I2C_DMA_LEN_MIN) {
  802. ret = stm32_i2c_prep_dma_xfer(i2c_dev->dev, i2c_dev->dma,
  803. msg->flags & I2C_M_RD,
  804. f7_msg->count, f7_msg->buf,
  805. stm32f7_i2c_dma_callback,
  806. i2c_dev);
  807. if (!ret)
  808. i2c_dev->use_dma = true;
  809. else
  810. dev_warn(i2c_dev->dev, "can't use DMA\n");
  811. }
  812. if (!i2c_dev->use_dma) {
  813. if (msg->flags & I2C_M_RD)
  814. cr1 |= STM32F7_I2C_CR1_RXIE;
  815. else
  816. cr1 |= STM32F7_I2C_CR1_TXIE;
  817. } else {
  818. if (msg->flags & I2C_M_RD)
  819. cr1 |= STM32F7_I2C_CR1_RXDMAEN;
  820. else
  821. cr1 |= STM32F7_I2C_CR1_TXDMAEN;
  822. }
  823. /* Configure Start/Repeated Start */
  824. cr2 |= STM32F7_I2C_CR2_START;
  825. i2c_dev->master_mode = true;
  826. /* Write configurations registers */
  827. writel_relaxed(cr1, base + STM32F7_I2C_CR1);
  828. writel_relaxed(cr2, base + STM32F7_I2C_CR2);
  829. }
  830. static int stm32f7_i2c_smbus_xfer_msg(struct stm32f7_i2c_dev *i2c_dev,
  831. unsigned short flags, u8 command,
  832. union i2c_smbus_data *data)
  833. {
  834. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  835. struct device *dev = i2c_dev->dev;
  836. void __iomem *base = i2c_dev->base;
  837. u32 cr1, cr2;
  838. int i, ret;
  839. f7_msg->result = 0;
  840. reinit_completion(&i2c_dev->complete);
  841. cr2 = readl_relaxed(base + STM32F7_I2C_CR2);
  842. cr1 = readl_relaxed(base + STM32F7_I2C_CR1);
  843. /* Set transfer direction */
  844. cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
  845. if (f7_msg->read_write)
  846. cr2 |= STM32F7_I2C_CR2_RD_WRN;
  847. /* Set slave address */
  848. cr2 &= ~(STM32F7_I2C_CR2_ADD10 | STM32F7_I2C_CR2_SADD7_MASK);
  849. cr2 |= STM32F7_I2C_CR2_SADD7(f7_msg->addr);
  850. f7_msg->smbus_buf[0] = command;
  851. switch (f7_msg->size) {
  852. case I2C_SMBUS_QUICK:
  853. f7_msg->stop = true;
  854. f7_msg->count = 0;
  855. break;
  856. case I2C_SMBUS_BYTE:
  857. f7_msg->stop = true;
  858. f7_msg->count = 1;
  859. break;
  860. case I2C_SMBUS_BYTE_DATA:
  861. if (f7_msg->read_write) {
  862. f7_msg->stop = false;
  863. f7_msg->count = 1;
  864. cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
  865. } else {
  866. f7_msg->stop = true;
  867. f7_msg->count = 2;
  868. f7_msg->smbus_buf[1] = data->byte;
  869. }
  870. break;
  871. case I2C_SMBUS_WORD_DATA:
  872. if (f7_msg->read_write) {
  873. f7_msg->stop = false;
  874. f7_msg->count = 1;
  875. cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
  876. } else {
  877. f7_msg->stop = true;
  878. f7_msg->count = 3;
  879. f7_msg->smbus_buf[1] = data->word & 0xff;
  880. f7_msg->smbus_buf[2] = data->word >> 8;
  881. }
  882. break;
  883. case I2C_SMBUS_BLOCK_DATA:
  884. if (f7_msg->read_write) {
  885. f7_msg->stop = false;
  886. f7_msg->count = 1;
  887. cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
  888. } else {
  889. f7_msg->stop = true;
  890. if (data->block[0] > I2C_SMBUS_BLOCK_MAX ||
  891. !data->block[0]) {
  892. dev_err(dev, "Invalid block write size %d\n",
  893. data->block[0]);
  894. return -EINVAL;
  895. }
  896. f7_msg->count = data->block[0] + 2;
  897. for (i = 1; i < f7_msg->count; i++)
  898. f7_msg->smbus_buf[i] = data->block[i - 1];
  899. }
  900. break;
  901. case I2C_SMBUS_PROC_CALL:
  902. f7_msg->stop = false;
  903. f7_msg->count = 3;
  904. f7_msg->smbus_buf[1] = data->word & 0xff;
  905. f7_msg->smbus_buf[2] = data->word >> 8;
  906. cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
  907. f7_msg->read_write = I2C_SMBUS_READ;
  908. break;
  909. case I2C_SMBUS_BLOCK_PROC_CALL:
  910. f7_msg->stop = false;
  911. if (data->block[0] > I2C_SMBUS_BLOCK_MAX - 1) {
  912. dev_err(dev, "Invalid block write size %d\n",
  913. data->block[0]);
  914. return -EINVAL;
  915. }
  916. f7_msg->count = data->block[0] + 2;
  917. for (i = 1; i < f7_msg->count; i++)
  918. f7_msg->smbus_buf[i] = data->block[i - 1];
  919. cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
  920. f7_msg->read_write = I2C_SMBUS_READ;
  921. break;
  922. case I2C_SMBUS_I2C_BLOCK_DATA:
  923. /* Rely on emulated i2c transfer (through master_xfer) */
  924. return -EOPNOTSUPP;
  925. default:
  926. dev_err(dev, "Unsupported smbus protocol %d\n", f7_msg->size);
  927. return -EOPNOTSUPP;
  928. }
  929. f7_msg->buf = f7_msg->smbus_buf;
  930. /* Configure PEC */
  931. if ((flags & I2C_CLIENT_PEC) && f7_msg->size != I2C_SMBUS_QUICK) {
  932. cr1 |= STM32F7_I2C_CR1_PECEN;
  933. if (!f7_msg->read_write) {
  934. cr2 |= STM32F7_I2C_CR2_PECBYTE;
  935. f7_msg->count++;
  936. }
  937. } else {
  938. cr1 &= ~STM32F7_I2C_CR1_PECEN;
  939. cr2 &= ~STM32F7_I2C_CR2_PECBYTE;
  940. }
  941. /* Set number of bytes to be transferred */
  942. cr2 &= ~(STM32F7_I2C_CR2_NBYTES_MASK | STM32F7_I2C_CR2_RELOAD);
  943. cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
  944. /* Enable NACK, STOP, error and transfer complete interrupts */
  945. cr1 |= STM32F7_I2C_CR1_ERRIE | STM32F7_I2C_CR1_TCIE |
  946. STM32F7_I2C_CR1_STOPIE | STM32F7_I2C_CR1_NACKIE;
  947. /* Clear DMA req and TX/RX interrupt */
  948. cr1 &= ~(STM32F7_I2C_CR1_RXIE | STM32F7_I2C_CR1_TXIE |
  949. STM32F7_I2C_CR1_RXDMAEN | STM32F7_I2C_CR1_TXDMAEN);
  950. /* Configure DMA or enable RX/TX interrupt */
  951. i2c_dev->use_dma = false;
  952. if (i2c_dev->dma && f7_msg->count >= STM32F7_I2C_DMA_LEN_MIN) {
  953. ret = stm32_i2c_prep_dma_xfer(i2c_dev->dev, i2c_dev->dma,
  954. cr2 & STM32F7_I2C_CR2_RD_WRN,
  955. f7_msg->count, f7_msg->buf,
  956. stm32f7_i2c_dma_callback,
  957. i2c_dev);
  958. if (!ret)
  959. i2c_dev->use_dma = true;
  960. else
  961. dev_warn(i2c_dev->dev, "can't use DMA\n");
  962. }
  963. if (!i2c_dev->use_dma) {
  964. if (cr2 & STM32F7_I2C_CR2_RD_WRN)
  965. cr1 |= STM32F7_I2C_CR1_RXIE;
  966. else
  967. cr1 |= STM32F7_I2C_CR1_TXIE;
  968. } else {
  969. if (cr2 & STM32F7_I2C_CR2_RD_WRN)
  970. cr1 |= STM32F7_I2C_CR1_RXDMAEN;
  971. else
  972. cr1 |= STM32F7_I2C_CR1_TXDMAEN;
  973. }
  974. /* Set Start bit */
  975. cr2 |= STM32F7_I2C_CR2_START;
  976. i2c_dev->master_mode = true;
  977. /* Write configurations registers */
  978. writel_relaxed(cr1, base + STM32F7_I2C_CR1);
  979. writel_relaxed(cr2, base + STM32F7_I2C_CR2);
  980. return 0;
  981. }
  982. static void stm32f7_i2c_smbus_rep_start(struct stm32f7_i2c_dev *i2c_dev)
  983. {
  984. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  985. void __iomem *base = i2c_dev->base;
  986. u32 cr1, cr2;
  987. int ret;
  988. cr2 = readl_relaxed(base + STM32F7_I2C_CR2);
  989. cr1 = readl_relaxed(base + STM32F7_I2C_CR1);
  990. /* Set transfer direction */
  991. cr2 |= STM32F7_I2C_CR2_RD_WRN;
  992. switch (f7_msg->size) {
  993. case I2C_SMBUS_BYTE_DATA:
  994. f7_msg->count = 1;
  995. break;
  996. case I2C_SMBUS_WORD_DATA:
  997. case I2C_SMBUS_PROC_CALL:
  998. f7_msg->count = 2;
  999. break;
  1000. case I2C_SMBUS_BLOCK_DATA:
  1001. case I2C_SMBUS_BLOCK_PROC_CALL:
  1002. f7_msg->count = 1;
  1003. cr2 |= STM32F7_I2C_CR2_RELOAD;
  1004. break;
  1005. }
  1006. f7_msg->buf = f7_msg->smbus_buf;
  1007. f7_msg->stop = true;
  1008. /* Add one byte for PEC if needed */
  1009. if (cr1 & STM32F7_I2C_CR1_PECEN) {
  1010. cr2 |= STM32F7_I2C_CR2_PECBYTE;
  1011. f7_msg->count++;
  1012. }
  1013. /* Set number of bytes to be transferred */
  1014. cr2 &= ~(STM32F7_I2C_CR2_NBYTES_MASK);
  1015. cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
  1016. /*
  1017. * Configure RX/TX interrupt:
  1018. */
  1019. cr1 &= ~(STM32F7_I2C_CR1_RXIE | STM32F7_I2C_CR1_TXIE);
  1020. cr1 |= STM32F7_I2C_CR1_RXIE;
  1021. /*
  1022. * Configure DMA or enable RX/TX interrupt:
  1023. * For I2C_SMBUS_BLOCK_DATA and I2C_SMBUS_BLOCK_PROC_CALL we don't use
  1024. * dma as we don't know in advance how many data will be received
  1025. */
  1026. cr1 &= ~(STM32F7_I2C_CR1_RXIE | STM32F7_I2C_CR1_TXIE |
  1027. STM32F7_I2C_CR1_RXDMAEN | STM32F7_I2C_CR1_TXDMAEN);
  1028. i2c_dev->use_dma = false;
  1029. if (i2c_dev->dma && f7_msg->count >= STM32F7_I2C_DMA_LEN_MIN &&
  1030. f7_msg->size != I2C_SMBUS_BLOCK_DATA &&
  1031. f7_msg->size != I2C_SMBUS_BLOCK_PROC_CALL) {
  1032. ret = stm32_i2c_prep_dma_xfer(i2c_dev->dev, i2c_dev->dma,
  1033. cr2 & STM32F7_I2C_CR2_RD_WRN,
  1034. f7_msg->count, f7_msg->buf,
  1035. stm32f7_i2c_dma_callback,
  1036. i2c_dev);
  1037. if (!ret)
  1038. i2c_dev->use_dma = true;
  1039. else
  1040. dev_warn(i2c_dev->dev, "can't use DMA\n");
  1041. }
  1042. if (!i2c_dev->use_dma)
  1043. cr1 |= STM32F7_I2C_CR1_RXIE;
  1044. else
  1045. cr1 |= STM32F7_I2C_CR1_RXDMAEN;
  1046. /* Configure Repeated Start */
  1047. cr2 |= STM32F7_I2C_CR2_START;
  1048. /* Write configurations registers */
  1049. writel_relaxed(cr1, base + STM32F7_I2C_CR1);
  1050. writel_relaxed(cr2, base + STM32F7_I2C_CR2);
  1051. }
  1052. static int stm32f7_i2c_smbus_check_pec(struct stm32f7_i2c_dev *i2c_dev)
  1053. {
  1054. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  1055. u8 count, internal_pec, received_pec;
  1056. internal_pec = readl_relaxed(i2c_dev->base + STM32F7_I2C_PECR);
  1057. switch (f7_msg->size) {
  1058. case I2C_SMBUS_BYTE:
  1059. case I2C_SMBUS_BYTE_DATA:
  1060. received_pec = f7_msg->smbus_buf[1];
  1061. break;
  1062. case I2C_SMBUS_WORD_DATA:
  1063. case I2C_SMBUS_PROC_CALL:
  1064. received_pec = f7_msg->smbus_buf[2];
  1065. break;
  1066. case I2C_SMBUS_BLOCK_DATA:
  1067. case I2C_SMBUS_BLOCK_PROC_CALL:
  1068. count = f7_msg->smbus_buf[0];
  1069. received_pec = f7_msg->smbus_buf[count];
  1070. break;
  1071. default:
  1072. dev_err(i2c_dev->dev, "Unsupported smbus protocol for PEC\n");
  1073. return -EINVAL;
  1074. }
  1075. if (internal_pec != received_pec) {
  1076. dev_err(i2c_dev->dev, "Bad PEC 0x%02x vs. 0x%02x\n",
  1077. internal_pec, received_pec);
  1078. return -EBADMSG;
  1079. }
  1080. return 0;
  1081. }
  1082. static bool stm32f7_i2c_is_addr_match(struct i2c_client *slave, u32 addcode)
  1083. {
  1084. u32 addr;
  1085. if (!slave)
  1086. return false;
  1087. if (slave->flags & I2C_CLIENT_TEN) {
  1088. /*
  1089. * For 10-bit addr, addcode = 11110XY with
  1090. * X = Bit 9 of slave address
  1091. * Y = Bit 8 of slave address
  1092. */
  1093. addr = slave->addr >> 8;
  1094. addr |= 0x78;
  1095. if (addr == addcode)
  1096. return true;
  1097. } else {
  1098. addr = slave->addr & 0x7f;
  1099. if (addr == addcode)
  1100. return true;
  1101. }
  1102. return false;
  1103. }
  1104. static void stm32f7_i2c_slave_start(struct stm32f7_i2c_dev *i2c_dev)
  1105. {
  1106. struct i2c_client *slave = i2c_dev->slave_running;
  1107. void __iomem *base = i2c_dev->base;
  1108. u32 mask;
  1109. u8 value = 0;
  1110. if (i2c_dev->slave_dir) {
  1111. /* Notify i2c slave that new read transfer is starting */
  1112. i2c_slave_event(slave, I2C_SLAVE_READ_REQUESTED, &value);
  1113. /*
  1114. * Disable slave TX config in case of I2C combined message
  1115. * (I2C Write followed by I2C Read)
  1116. */
  1117. mask = STM32F7_I2C_CR2_RELOAD;
  1118. stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR2, mask);
  1119. mask = STM32F7_I2C_CR1_SBC | STM32F7_I2C_CR1_RXIE |
  1120. STM32F7_I2C_CR1_TCIE;
  1121. stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR1, mask);
  1122. /* Enable TX empty, STOP, NACK interrupts */
  1123. mask = STM32F7_I2C_CR1_STOPIE | STM32F7_I2C_CR1_NACKIE |
  1124. STM32F7_I2C_CR1_TXIE;
  1125. stm32f7_i2c_set_bits(base + STM32F7_I2C_CR1, mask);
  1126. /* Write 1st data byte */
  1127. writel_relaxed(value, base + STM32F7_I2C_TXDR);
  1128. } else {
  1129. /* Notify i2c slave that new write transfer is starting */
  1130. i2c_slave_event(slave, I2C_SLAVE_WRITE_REQUESTED, &value);
  1131. /* Set reload mode to be able to ACK/NACK each received byte */
  1132. mask = STM32F7_I2C_CR2_RELOAD;
  1133. stm32f7_i2c_set_bits(base + STM32F7_I2C_CR2, mask);
  1134. /*
  1135. * Set STOP, NACK, RX empty and transfer complete interrupts.*
  1136. * Set Slave Byte Control to be able to ACK/NACK each data
  1137. * byte received
  1138. */
  1139. mask = STM32F7_I2C_CR1_STOPIE | STM32F7_I2C_CR1_NACKIE |
  1140. STM32F7_I2C_CR1_SBC | STM32F7_I2C_CR1_RXIE |
  1141. STM32F7_I2C_CR1_TCIE;
  1142. stm32f7_i2c_set_bits(base + STM32F7_I2C_CR1, mask);
  1143. }
  1144. }
  1145. static void stm32f7_i2c_slave_addr(struct stm32f7_i2c_dev *i2c_dev)
  1146. {
  1147. void __iomem *base = i2c_dev->base;
  1148. u32 isr, addcode, dir, mask;
  1149. int i;
  1150. isr = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
  1151. addcode = STM32F7_I2C_ISR_ADDCODE_GET(isr);
  1152. dir = isr & STM32F7_I2C_ISR_DIR;
  1153. for (i = 0; i < STM32F7_I2C_MAX_SLAVE; i++) {
  1154. if (stm32f7_i2c_is_addr_match(i2c_dev->slave[i], addcode)) {
  1155. i2c_dev->slave_running = i2c_dev->slave[i];
  1156. i2c_dev->slave_dir = dir;
  1157. /* Start I2C slave processing */
  1158. stm32f7_i2c_slave_start(i2c_dev);
  1159. /* Clear ADDR flag */
  1160. mask = STM32F7_I2C_ICR_ADDRCF;
  1161. writel_relaxed(mask, base + STM32F7_I2C_ICR);
  1162. break;
  1163. }
  1164. }
  1165. }
  1166. static int stm32f7_i2c_get_slave_id(struct stm32f7_i2c_dev *i2c_dev,
  1167. struct i2c_client *slave, int *id)
  1168. {
  1169. int i;
  1170. for (i = 0; i < STM32F7_I2C_MAX_SLAVE; i++) {
  1171. if (i2c_dev->slave[i] == slave) {
  1172. *id = i;
  1173. return 0;
  1174. }
  1175. }
  1176. dev_err(i2c_dev->dev, "Slave 0x%x not registered\n", slave->addr);
  1177. return -ENODEV;
  1178. }
  1179. static int stm32f7_i2c_get_free_slave_id(struct stm32f7_i2c_dev *i2c_dev,
  1180. struct i2c_client *slave, int *id)
  1181. {
  1182. struct device *dev = i2c_dev->dev;
  1183. int i;
  1184. /*
  1185. * slave[STM32F7_SLAVE_HOSTNOTIFY] support only SMBus Host address (0x8)
  1186. * slave[STM32F7_SLAVE_7_10_BITS_ADDR] supports 7-bit and 10-bit slave address
  1187. * slave[STM32F7_SLAVE_7_BITS_ADDR] supports 7-bit slave address only
  1188. */
  1189. if (i2c_dev->smbus_mode && (slave->addr == 0x08)) {
  1190. if (i2c_dev->slave[STM32F7_SLAVE_HOSTNOTIFY])
  1191. goto fail;
  1192. *id = STM32F7_SLAVE_HOSTNOTIFY;
  1193. return 0;
  1194. }
  1195. for (i = STM32F7_I2C_MAX_SLAVE - 1; i > STM32F7_SLAVE_HOSTNOTIFY; i--) {
  1196. if ((i == STM32F7_SLAVE_7_BITS_ADDR) &&
  1197. (slave->flags & I2C_CLIENT_TEN))
  1198. continue;
  1199. if (!i2c_dev->slave[i]) {
  1200. *id = i;
  1201. return 0;
  1202. }
  1203. }
  1204. fail:
  1205. dev_err(dev, "Slave 0x%x could not be registered\n", slave->addr);
  1206. return -EINVAL;
  1207. }
  1208. static bool stm32f7_i2c_is_slave_registered(struct stm32f7_i2c_dev *i2c_dev)
  1209. {
  1210. int i;
  1211. for (i = 0; i < STM32F7_I2C_MAX_SLAVE; i++) {
  1212. if (i2c_dev->slave[i])
  1213. return true;
  1214. }
  1215. return false;
  1216. }
  1217. static bool stm32f7_i2c_is_slave_busy(struct stm32f7_i2c_dev *i2c_dev)
  1218. {
  1219. int i, busy;
  1220. busy = 0;
  1221. for (i = 0; i < STM32F7_I2C_MAX_SLAVE; i++) {
  1222. if (i2c_dev->slave[i])
  1223. busy++;
  1224. }
  1225. return i == busy;
  1226. }
  1227. static irqreturn_t stm32f7_i2c_slave_isr_event(struct stm32f7_i2c_dev *i2c_dev)
  1228. {
  1229. void __iomem *base = i2c_dev->base;
  1230. u32 cr2, status, mask;
  1231. u8 val;
  1232. int ret;
  1233. status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
  1234. /* Slave transmitter mode */
  1235. if (status & STM32F7_I2C_ISR_TXIS) {
  1236. i2c_slave_event(i2c_dev->slave_running,
  1237. I2C_SLAVE_READ_PROCESSED,
  1238. &val);
  1239. /* Write data byte */
  1240. writel_relaxed(val, base + STM32F7_I2C_TXDR);
  1241. }
  1242. /* Transfer Complete Reload for Slave receiver mode */
  1243. if (status & STM32F7_I2C_ISR_TCR || status & STM32F7_I2C_ISR_RXNE) {
  1244. /*
  1245. * Read data byte then set NBYTES to receive next byte or NACK
  1246. * the current received byte
  1247. */
  1248. val = readb_relaxed(i2c_dev->base + STM32F7_I2C_RXDR);
  1249. ret = i2c_slave_event(i2c_dev->slave_running,
  1250. I2C_SLAVE_WRITE_RECEIVED,
  1251. &val);
  1252. if (!ret) {
  1253. cr2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR2);
  1254. cr2 |= STM32F7_I2C_CR2_NBYTES(1);
  1255. writel_relaxed(cr2, i2c_dev->base + STM32F7_I2C_CR2);
  1256. } else {
  1257. mask = STM32F7_I2C_CR2_NACK;
  1258. stm32f7_i2c_set_bits(base + STM32F7_I2C_CR2, mask);
  1259. }
  1260. }
  1261. /* NACK received */
  1262. if (status & STM32F7_I2C_ISR_NACKF) {
  1263. dev_dbg(i2c_dev->dev, "<%s>: Receive NACK\n", __func__);
  1264. writel_relaxed(STM32F7_I2C_ICR_NACKCF, base + STM32F7_I2C_ICR);
  1265. }
  1266. /* STOP received */
  1267. if (status & STM32F7_I2C_ISR_STOPF) {
  1268. /* Disable interrupts */
  1269. stm32f7_i2c_disable_irq(i2c_dev, STM32F7_I2C_XFER_IRQ_MASK);
  1270. if (i2c_dev->slave_dir) {
  1271. /*
  1272. * Flush TX buffer in order to not used the byte in
  1273. * TXDR for the next transfer
  1274. */
  1275. mask = STM32F7_I2C_ISR_TXE;
  1276. stm32f7_i2c_set_bits(base + STM32F7_I2C_ISR, mask);
  1277. }
  1278. /* Clear STOP flag */
  1279. writel_relaxed(STM32F7_I2C_ICR_STOPCF, base + STM32F7_I2C_ICR);
  1280. /* Notify i2c slave that a STOP flag has been detected */
  1281. i2c_slave_event(i2c_dev->slave_running, I2C_SLAVE_STOP, &val);
  1282. i2c_dev->slave_running = NULL;
  1283. }
  1284. /* Address match received */
  1285. if (status & STM32F7_I2C_ISR_ADDR)
  1286. stm32f7_i2c_slave_addr(i2c_dev);
  1287. return IRQ_HANDLED;
  1288. }
  1289. static irqreturn_t stm32f7_i2c_isr_event(int irq, void *data)
  1290. {
  1291. struct stm32f7_i2c_dev *i2c_dev = data;
  1292. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  1293. struct stm32_i2c_dma *dma = i2c_dev->dma;
  1294. void __iomem *base = i2c_dev->base;
  1295. u32 status, mask;
  1296. int ret = IRQ_HANDLED;
  1297. /* Check if the interrupt if for a slave device */
  1298. if (!i2c_dev->master_mode) {
  1299. ret = stm32f7_i2c_slave_isr_event(i2c_dev);
  1300. return ret;
  1301. }
  1302. status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
  1303. /* Tx empty */
  1304. if (status & STM32F7_I2C_ISR_TXIS)
  1305. stm32f7_i2c_write_tx_data(i2c_dev);
  1306. /* RX not empty */
  1307. if (status & STM32F7_I2C_ISR_RXNE)
  1308. stm32f7_i2c_read_rx_data(i2c_dev);
  1309. /* NACK received */
  1310. if (status & STM32F7_I2C_ISR_NACKF) {
  1311. dev_dbg(i2c_dev->dev, "<%s>: Receive NACK (addr %x)\n",
  1312. __func__, f7_msg->addr);
  1313. writel_relaxed(STM32F7_I2C_ICR_NACKCF, base + STM32F7_I2C_ICR);
  1314. if (i2c_dev->use_dma) {
  1315. stm32f7_i2c_disable_dma_req(i2c_dev);
  1316. dmaengine_terminate_async(dma->chan_using);
  1317. }
  1318. f7_msg->result = -ENXIO;
  1319. }
  1320. /* STOP detection flag */
  1321. if (status & STM32F7_I2C_ISR_STOPF) {
  1322. /* Disable interrupts */
  1323. if (stm32f7_i2c_is_slave_registered(i2c_dev))
  1324. mask = STM32F7_I2C_XFER_IRQ_MASK;
  1325. else
  1326. mask = STM32F7_I2C_ALL_IRQ_MASK;
  1327. stm32f7_i2c_disable_irq(i2c_dev, mask);
  1328. /* Clear STOP flag */
  1329. writel_relaxed(STM32F7_I2C_ICR_STOPCF, base + STM32F7_I2C_ICR);
  1330. if (i2c_dev->use_dma && !f7_msg->result) {
  1331. ret = IRQ_WAKE_THREAD;
  1332. } else {
  1333. i2c_dev->master_mode = false;
  1334. complete(&i2c_dev->complete);
  1335. }
  1336. }
  1337. /* Transfer complete */
  1338. if (status & STM32F7_I2C_ISR_TC) {
  1339. if (f7_msg->stop) {
  1340. mask = STM32F7_I2C_CR2_STOP;
  1341. stm32f7_i2c_set_bits(base + STM32F7_I2C_CR2, mask);
  1342. } else if (i2c_dev->use_dma && !f7_msg->result) {
  1343. ret = IRQ_WAKE_THREAD;
  1344. } else if (f7_msg->smbus) {
  1345. stm32f7_i2c_smbus_rep_start(i2c_dev);
  1346. } else {
  1347. i2c_dev->msg_id++;
  1348. i2c_dev->msg++;
  1349. stm32f7_i2c_xfer_msg(i2c_dev, i2c_dev->msg);
  1350. }
  1351. }
  1352. if (status & STM32F7_I2C_ISR_TCR) {
  1353. if (f7_msg->smbus)
  1354. stm32f7_i2c_smbus_reload(i2c_dev);
  1355. else
  1356. stm32f7_i2c_reload(i2c_dev);
  1357. }
  1358. return ret;
  1359. }
  1360. static irqreturn_t stm32f7_i2c_isr_event_thread(int irq, void *data)
  1361. {
  1362. struct stm32f7_i2c_dev *i2c_dev = data;
  1363. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  1364. struct stm32_i2c_dma *dma = i2c_dev->dma;
  1365. u32 status;
  1366. int ret;
  1367. /*
  1368. * Wait for dma transfer completion before sending next message or
  1369. * notity the end of xfer to the client
  1370. */
  1371. ret = wait_for_completion_timeout(&i2c_dev->dma->dma_complete, HZ);
  1372. if (!ret) {
  1373. dev_dbg(i2c_dev->dev, "<%s>: Timed out\n", __func__);
  1374. stm32f7_i2c_disable_dma_req(i2c_dev);
  1375. dmaengine_terminate_async(dma->chan_using);
  1376. f7_msg->result = -ETIMEDOUT;
  1377. }
  1378. status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
  1379. if (status & STM32F7_I2C_ISR_TC) {
  1380. if (f7_msg->smbus) {
  1381. stm32f7_i2c_smbus_rep_start(i2c_dev);
  1382. } else {
  1383. i2c_dev->msg_id++;
  1384. i2c_dev->msg++;
  1385. stm32f7_i2c_xfer_msg(i2c_dev, i2c_dev->msg);
  1386. }
  1387. } else {
  1388. i2c_dev->master_mode = false;
  1389. complete(&i2c_dev->complete);
  1390. }
  1391. return IRQ_HANDLED;
  1392. }
  1393. static irqreturn_t stm32f7_i2c_isr_error(int irq, void *data)
  1394. {
  1395. struct stm32f7_i2c_dev *i2c_dev = data;
  1396. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  1397. void __iomem *base = i2c_dev->base;
  1398. struct device *dev = i2c_dev->dev;
  1399. struct stm32_i2c_dma *dma = i2c_dev->dma;
  1400. u32 status;
  1401. status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
  1402. /* Bus error */
  1403. if (status & STM32F7_I2C_ISR_BERR) {
  1404. dev_err(dev, "<%s>: Bus error accessing addr 0x%x\n",
  1405. __func__, f7_msg->addr);
  1406. writel_relaxed(STM32F7_I2C_ICR_BERRCF, base + STM32F7_I2C_ICR);
  1407. stm32f7_i2c_release_bus(&i2c_dev->adap);
  1408. f7_msg->result = -EIO;
  1409. }
  1410. /* Arbitration loss */
  1411. if (status & STM32F7_I2C_ISR_ARLO) {
  1412. dev_dbg(dev, "<%s>: Arbitration loss accessing addr 0x%x\n",
  1413. __func__, f7_msg->addr);
  1414. writel_relaxed(STM32F7_I2C_ICR_ARLOCF, base + STM32F7_I2C_ICR);
  1415. f7_msg->result = -EAGAIN;
  1416. }
  1417. if (status & STM32F7_I2C_ISR_PECERR) {
  1418. dev_err(dev, "<%s>: PEC error in reception accessing addr 0x%x\n",
  1419. __func__, f7_msg->addr);
  1420. writel_relaxed(STM32F7_I2C_ICR_PECCF, base + STM32F7_I2C_ICR);
  1421. f7_msg->result = -EINVAL;
  1422. }
  1423. if (status & STM32F7_I2C_ISR_ALERT) {
  1424. dev_dbg(dev, "<%s>: SMBus alert received\n", __func__);
  1425. writel_relaxed(STM32F7_I2C_ICR_ALERTCF, base + STM32F7_I2C_ICR);
  1426. i2c_handle_smbus_alert(i2c_dev->alert->ara);
  1427. return IRQ_HANDLED;
  1428. }
  1429. if (!i2c_dev->slave_running) {
  1430. u32 mask;
  1431. /* Disable interrupts */
  1432. if (stm32f7_i2c_is_slave_registered(i2c_dev))
  1433. mask = STM32F7_I2C_XFER_IRQ_MASK;
  1434. else
  1435. mask = STM32F7_I2C_ALL_IRQ_MASK;
  1436. stm32f7_i2c_disable_irq(i2c_dev, mask);
  1437. }
  1438. /* Disable dma */
  1439. if (i2c_dev->use_dma) {
  1440. stm32f7_i2c_disable_dma_req(i2c_dev);
  1441. dmaengine_terminate_async(dma->chan_using);
  1442. }
  1443. i2c_dev->master_mode = false;
  1444. complete(&i2c_dev->complete);
  1445. return IRQ_HANDLED;
  1446. }
  1447. static int stm32f7_i2c_xfer(struct i2c_adapter *i2c_adap,
  1448. struct i2c_msg msgs[], int num)
  1449. {
  1450. struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(i2c_adap);
  1451. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  1452. struct stm32_i2c_dma *dma = i2c_dev->dma;
  1453. unsigned long time_left;
  1454. int ret;
  1455. i2c_dev->msg = msgs;
  1456. i2c_dev->msg_num = num;
  1457. i2c_dev->msg_id = 0;
  1458. f7_msg->smbus = false;
  1459. ret = pm_runtime_resume_and_get(i2c_dev->dev);
  1460. if (ret < 0)
  1461. return ret;
  1462. ret = stm32f7_i2c_wait_free_bus(i2c_dev);
  1463. if (ret)
  1464. goto pm_free;
  1465. stm32f7_i2c_xfer_msg(i2c_dev, msgs);
  1466. time_left = wait_for_completion_timeout(&i2c_dev->complete,
  1467. i2c_dev->adap.timeout);
  1468. ret = f7_msg->result;
  1469. if (ret) {
  1470. if (i2c_dev->use_dma)
  1471. dmaengine_synchronize(dma->chan_using);
  1472. /*
  1473. * It is possible that some unsent data have already been
  1474. * written into TXDR. To avoid sending old data in a
  1475. * further transfer, flush TXDR in case of any error
  1476. */
  1477. writel_relaxed(STM32F7_I2C_ISR_TXE,
  1478. i2c_dev->base + STM32F7_I2C_ISR);
  1479. goto pm_free;
  1480. }
  1481. if (!time_left) {
  1482. dev_dbg(i2c_dev->dev, "Access to slave 0x%x timed out\n",
  1483. i2c_dev->msg->addr);
  1484. if (i2c_dev->use_dma)
  1485. dmaengine_terminate_sync(dma->chan_using);
  1486. stm32f7_i2c_wait_free_bus(i2c_dev);
  1487. ret = -ETIMEDOUT;
  1488. }
  1489. pm_free:
  1490. pm_runtime_mark_last_busy(i2c_dev->dev);
  1491. pm_runtime_put_autosuspend(i2c_dev->dev);
  1492. return (ret < 0) ? ret : num;
  1493. }
  1494. static int stm32f7_i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr,
  1495. unsigned short flags, char read_write,
  1496. u8 command, int size,
  1497. union i2c_smbus_data *data)
  1498. {
  1499. struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(adapter);
  1500. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  1501. struct stm32_i2c_dma *dma = i2c_dev->dma;
  1502. struct device *dev = i2c_dev->dev;
  1503. unsigned long timeout;
  1504. int i, ret;
  1505. f7_msg->addr = addr;
  1506. f7_msg->size = size;
  1507. f7_msg->read_write = read_write;
  1508. f7_msg->smbus = true;
  1509. ret = pm_runtime_resume_and_get(dev);
  1510. if (ret < 0)
  1511. return ret;
  1512. ret = stm32f7_i2c_wait_free_bus(i2c_dev);
  1513. if (ret)
  1514. goto pm_free;
  1515. ret = stm32f7_i2c_smbus_xfer_msg(i2c_dev, flags, command, data);
  1516. if (ret)
  1517. goto pm_free;
  1518. timeout = wait_for_completion_timeout(&i2c_dev->complete,
  1519. i2c_dev->adap.timeout);
  1520. ret = f7_msg->result;
  1521. if (ret) {
  1522. if (i2c_dev->use_dma)
  1523. dmaengine_synchronize(dma->chan_using);
  1524. /*
  1525. * It is possible that some unsent data have already been
  1526. * written into TXDR. To avoid sending old data in a
  1527. * further transfer, flush TXDR in case of any error
  1528. */
  1529. writel_relaxed(STM32F7_I2C_ISR_TXE,
  1530. i2c_dev->base + STM32F7_I2C_ISR);
  1531. goto pm_free;
  1532. }
  1533. if (!timeout) {
  1534. dev_dbg(dev, "Access to slave 0x%x timed out\n", f7_msg->addr);
  1535. if (i2c_dev->use_dma)
  1536. dmaengine_terminate_sync(dma->chan_using);
  1537. stm32f7_i2c_wait_free_bus(i2c_dev);
  1538. ret = -ETIMEDOUT;
  1539. goto pm_free;
  1540. }
  1541. /* Check PEC */
  1542. if ((flags & I2C_CLIENT_PEC) && size != I2C_SMBUS_QUICK && read_write) {
  1543. ret = stm32f7_i2c_smbus_check_pec(i2c_dev);
  1544. if (ret)
  1545. goto pm_free;
  1546. }
  1547. if (read_write && size != I2C_SMBUS_QUICK) {
  1548. switch (size) {
  1549. case I2C_SMBUS_BYTE:
  1550. case I2C_SMBUS_BYTE_DATA:
  1551. data->byte = f7_msg->smbus_buf[0];
  1552. break;
  1553. case I2C_SMBUS_WORD_DATA:
  1554. case I2C_SMBUS_PROC_CALL:
  1555. data->word = f7_msg->smbus_buf[0] |
  1556. (f7_msg->smbus_buf[1] << 8);
  1557. break;
  1558. case I2C_SMBUS_BLOCK_DATA:
  1559. case I2C_SMBUS_BLOCK_PROC_CALL:
  1560. for (i = 0; i <= f7_msg->smbus_buf[0]; i++)
  1561. data->block[i] = f7_msg->smbus_buf[i];
  1562. break;
  1563. default:
  1564. dev_err(dev, "Unsupported smbus transaction\n");
  1565. ret = -EINVAL;
  1566. }
  1567. }
  1568. pm_free:
  1569. pm_runtime_mark_last_busy(dev);
  1570. pm_runtime_put_autosuspend(dev);
  1571. return ret;
  1572. }
  1573. static void stm32f7_i2c_enable_wakeup(struct stm32f7_i2c_dev *i2c_dev,
  1574. bool enable)
  1575. {
  1576. void __iomem *base = i2c_dev->base;
  1577. u32 mask = STM32F7_I2C_CR1_WUPEN;
  1578. if (!i2c_dev->wakeup_src)
  1579. return;
  1580. if (enable) {
  1581. device_set_wakeup_enable(i2c_dev->dev, true);
  1582. stm32f7_i2c_set_bits(base + STM32F7_I2C_CR1, mask);
  1583. } else {
  1584. device_set_wakeup_enable(i2c_dev->dev, false);
  1585. stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR1, mask);
  1586. }
  1587. }
  1588. static int stm32f7_i2c_reg_slave(struct i2c_client *slave)
  1589. {
  1590. struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(slave->adapter);
  1591. void __iomem *base = i2c_dev->base;
  1592. struct device *dev = i2c_dev->dev;
  1593. u32 oar1, oar2, mask;
  1594. int id, ret;
  1595. if (slave->flags & I2C_CLIENT_PEC) {
  1596. dev_err(dev, "SMBus PEC not supported in slave mode\n");
  1597. return -EINVAL;
  1598. }
  1599. if (stm32f7_i2c_is_slave_busy(i2c_dev)) {
  1600. dev_err(dev, "Too much slave registered\n");
  1601. return -EBUSY;
  1602. }
  1603. ret = stm32f7_i2c_get_free_slave_id(i2c_dev, slave, &id);
  1604. if (ret)
  1605. return ret;
  1606. ret = pm_runtime_resume_and_get(dev);
  1607. if (ret < 0)
  1608. return ret;
  1609. if (!stm32f7_i2c_is_slave_registered(i2c_dev))
  1610. stm32f7_i2c_enable_wakeup(i2c_dev, true);
  1611. switch (id) {
  1612. case 0:
  1613. /* Slave SMBus Host */
  1614. i2c_dev->slave[id] = slave;
  1615. break;
  1616. case 1:
  1617. /* Configure Own Address 1 */
  1618. oar1 = readl_relaxed(i2c_dev->base + STM32F7_I2C_OAR1);
  1619. oar1 &= ~STM32F7_I2C_OAR1_MASK;
  1620. if (slave->flags & I2C_CLIENT_TEN) {
  1621. oar1 |= STM32F7_I2C_OAR1_OA1_10(slave->addr);
  1622. oar1 |= STM32F7_I2C_OAR1_OA1MODE;
  1623. } else {
  1624. oar1 |= STM32F7_I2C_OAR1_OA1_7(slave->addr);
  1625. }
  1626. oar1 |= STM32F7_I2C_OAR1_OA1EN;
  1627. i2c_dev->slave[id] = slave;
  1628. writel_relaxed(oar1, i2c_dev->base + STM32F7_I2C_OAR1);
  1629. break;
  1630. case 2:
  1631. /* Configure Own Address 2 */
  1632. oar2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_OAR2);
  1633. oar2 &= ~STM32F7_I2C_OAR2_MASK;
  1634. if (slave->flags & I2C_CLIENT_TEN) {
  1635. ret = -EOPNOTSUPP;
  1636. goto pm_free;
  1637. }
  1638. oar2 |= STM32F7_I2C_OAR2_OA2_7(slave->addr);
  1639. oar2 |= STM32F7_I2C_OAR2_OA2EN;
  1640. i2c_dev->slave[id] = slave;
  1641. writel_relaxed(oar2, i2c_dev->base + STM32F7_I2C_OAR2);
  1642. break;
  1643. default:
  1644. dev_err(dev, "I2C slave id not supported\n");
  1645. ret = -ENODEV;
  1646. goto pm_free;
  1647. }
  1648. /* Enable ACK */
  1649. stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR2, STM32F7_I2C_CR2_NACK);
  1650. /* Enable Address match interrupt, error interrupt and enable I2C */
  1651. mask = STM32F7_I2C_CR1_ADDRIE | STM32F7_I2C_CR1_ERRIE |
  1652. STM32F7_I2C_CR1_PE;
  1653. stm32f7_i2c_set_bits(base + STM32F7_I2C_CR1, mask);
  1654. ret = 0;
  1655. pm_free:
  1656. if (!stm32f7_i2c_is_slave_registered(i2c_dev))
  1657. stm32f7_i2c_enable_wakeup(i2c_dev, false);
  1658. pm_runtime_mark_last_busy(dev);
  1659. pm_runtime_put_autosuspend(dev);
  1660. return ret;
  1661. }
  1662. static int stm32f7_i2c_unreg_slave(struct i2c_client *slave)
  1663. {
  1664. struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(slave->adapter);
  1665. void __iomem *base = i2c_dev->base;
  1666. u32 mask;
  1667. int id, ret;
  1668. ret = stm32f7_i2c_get_slave_id(i2c_dev, slave, &id);
  1669. if (ret)
  1670. return ret;
  1671. WARN_ON(!i2c_dev->slave[id]);
  1672. ret = pm_runtime_resume_and_get(i2c_dev->dev);
  1673. if (ret < 0)
  1674. return ret;
  1675. if (id == 1) {
  1676. mask = STM32F7_I2C_OAR1_OA1EN;
  1677. stm32f7_i2c_clr_bits(base + STM32F7_I2C_OAR1, mask);
  1678. } else if (id == 2) {
  1679. mask = STM32F7_I2C_OAR2_OA2EN;
  1680. stm32f7_i2c_clr_bits(base + STM32F7_I2C_OAR2, mask);
  1681. }
  1682. i2c_dev->slave[id] = NULL;
  1683. if (!stm32f7_i2c_is_slave_registered(i2c_dev)) {
  1684. stm32f7_i2c_disable_irq(i2c_dev, STM32F7_I2C_ALL_IRQ_MASK);
  1685. stm32f7_i2c_enable_wakeup(i2c_dev, false);
  1686. }
  1687. pm_runtime_mark_last_busy(i2c_dev->dev);
  1688. pm_runtime_put_autosuspend(i2c_dev->dev);
  1689. return 0;
  1690. }
  1691. static int stm32f7_i2c_write_fm_plus_bits(struct stm32f7_i2c_dev *i2c_dev,
  1692. bool enable)
  1693. {
  1694. int ret;
  1695. if (i2c_dev->bus_rate <= I2C_MAX_FAST_MODE_FREQ ||
  1696. IS_ERR_OR_NULL(i2c_dev->regmap))
  1697. /* Optional */
  1698. return 0;
  1699. if (i2c_dev->fmp_sreg == i2c_dev->fmp_creg)
  1700. ret = regmap_update_bits(i2c_dev->regmap,
  1701. i2c_dev->fmp_sreg,
  1702. i2c_dev->fmp_mask,
  1703. enable ? i2c_dev->fmp_mask : 0);
  1704. else
  1705. ret = regmap_write(i2c_dev->regmap,
  1706. enable ? i2c_dev->fmp_sreg :
  1707. i2c_dev->fmp_creg,
  1708. i2c_dev->fmp_mask);
  1709. return ret;
  1710. }
  1711. static int stm32f7_i2c_setup_fm_plus_bits(struct platform_device *pdev,
  1712. struct stm32f7_i2c_dev *i2c_dev)
  1713. {
  1714. struct device_node *np = pdev->dev.of_node;
  1715. int ret;
  1716. i2c_dev->regmap = syscon_regmap_lookup_by_phandle(np, "st,syscfg-fmp");
  1717. if (IS_ERR(i2c_dev->regmap))
  1718. /* Optional */
  1719. return 0;
  1720. ret = of_property_read_u32_index(np, "st,syscfg-fmp", 1,
  1721. &i2c_dev->fmp_sreg);
  1722. if (ret)
  1723. return ret;
  1724. i2c_dev->fmp_creg = i2c_dev->fmp_sreg +
  1725. i2c_dev->setup.fmp_clr_offset;
  1726. return of_property_read_u32_index(np, "st,syscfg-fmp", 2,
  1727. &i2c_dev->fmp_mask);
  1728. }
  1729. static int stm32f7_i2c_enable_smbus_host(struct stm32f7_i2c_dev *i2c_dev)
  1730. {
  1731. struct i2c_adapter *adap = &i2c_dev->adap;
  1732. void __iomem *base = i2c_dev->base;
  1733. struct i2c_client *client;
  1734. client = i2c_new_slave_host_notify_device(adap);
  1735. if (IS_ERR(client))
  1736. return PTR_ERR(client);
  1737. i2c_dev->host_notify_client = client;
  1738. /* Enable SMBus Host address */
  1739. stm32f7_i2c_set_bits(base + STM32F7_I2C_CR1, STM32F7_I2C_CR1_SMBHEN);
  1740. return 0;
  1741. }
  1742. static void stm32f7_i2c_disable_smbus_host(struct stm32f7_i2c_dev *i2c_dev)
  1743. {
  1744. void __iomem *base = i2c_dev->base;
  1745. if (i2c_dev->host_notify_client) {
  1746. /* Disable SMBus Host address */
  1747. stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR1,
  1748. STM32F7_I2C_CR1_SMBHEN);
  1749. i2c_free_slave_host_notify_device(i2c_dev->host_notify_client);
  1750. }
  1751. }
  1752. static int stm32f7_i2c_enable_smbus_alert(struct stm32f7_i2c_dev *i2c_dev)
  1753. {
  1754. struct stm32f7_i2c_alert *alert;
  1755. struct i2c_adapter *adap = &i2c_dev->adap;
  1756. struct device *dev = i2c_dev->dev;
  1757. void __iomem *base = i2c_dev->base;
  1758. alert = devm_kzalloc(dev, sizeof(*alert), GFP_KERNEL);
  1759. if (!alert)
  1760. return -ENOMEM;
  1761. alert->ara = i2c_new_smbus_alert_device(adap, &alert->setup);
  1762. if (IS_ERR(alert->ara))
  1763. return PTR_ERR(alert->ara);
  1764. i2c_dev->alert = alert;
  1765. /* Enable SMBus Alert */
  1766. stm32f7_i2c_set_bits(base + STM32F7_I2C_CR1, STM32F7_I2C_CR1_ALERTEN);
  1767. return 0;
  1768. }
  1769. static void stm32f7_i2c_disable_smbus_alert(struct stm32f7_i2c_dev *i2c_dev)
  1770. {
  1771. struct stm32f7_i2c_alert *alert = i2c_dev->alert;
  1772. void __iomem *base = i2c_dev->base;
  1773. if (alert) {
  1774. /* Disable SMBus Alert */
  1775. stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR1,
  1776. STM32F7_I2C_CR1_ALERTEN);
  1777. i2c_unregister_device(alert->ara);
  1778. }
  1779. }
  1780. static u32 stm32f7_i2c_func(struct i2c_adapter *adap)
  1781. {
  1782. struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(adap);
  1783. u32 func = I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR | I2C_FUNC_SLAVE |
  1784. I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
  1785. I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
  1786. I2C_FUNC_SMBUS_BLOCK_DATA | I2C_FUNC_SMBUS_BLOCK_PROC_CALL |
  1787. I2C_FUNC_SMBUS_PROC_CALL | I2C_FUNC_SMBUS_PEC |
  1788. I2C_FUNC_SMBUS_I2C_BLOCK;
  1789. if (i2c_dev->smbus_mode)
  1790. func |= I2C_FUNC_SMBUS_HOST_NOTIFY;
  1791. return func;
  1792. }
  1793. static const struct i2c_algorithm stm32f7_i2c_algo = {
  1794. .master_xfer = stm32f7_i2c_xfer,
  1795. .smbus_xfer = stm32f7_i2c_smbus_xfer,
  1796. .functionality = stm32f7_i2c_func,
  1797. .reg_slave = stm32f7_i2c_reg_slave,
  1798. .unreg_slave = stm32f7_i2c_unreg_slave,
  1799. };
  1800. static int stm32f7_i2c_probe(struct platform_device *pdev)
  1801. {
  1802. struct stm32f7_i2c_dev *i2c_dev;
  1803. const struct stm32f7_i2c_setup *setup;
  1804. struct resource *res;
  1805. struct i2c_adapter *adap;
  1806. struct reset_control *rst;
  1807. dma_addr_t phy_addr;
  1808. int irq_error, irq_event, ret;
  1809. i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL);
  1810. if (!i2c_dev)
  1811. return -ENOMEM;
  1812. i2c_dev->base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
  1813. if (IS_ERR(i2c_dev->base))
  1814. return PTR_ERR(i2c_dev->base);
  1815. phy_addr = (dma_addr_t)res->start;
  1816. irq_event = platform_get_irq(pdev, 0);
  1817. if (irq_event <= 0)
  1818. return irq_event ? : -ENOENT;
  1819. irq_error = platform_get_irq(pdev, 1);
  1820. if (irq_error <= 0)
  1821. return irq_error ? : -ENOENT;
  1822. i2c_dev->wakeup_src = of_property_read_bool(pdev->dev.of_node,
  1823. "wakeup-source");
  1824. i2c_dev->clk = devm_clk_get(&pdev->dev, NULL);
  1825. if (IS_ERR(i2c_dev->clk))
  1826. return dev_err_probe(&pdev->dev, PTR_ERR(i2c_dev->clk),
  1827. "Failed to get controller clock\n");
  1828. ret = clk_prepare_enable(i2c_dev->clk);
  1829. if (ret) {
  1830. dev_err(&pdev->dev, "Failed to prepare_enable clock\n");
  1831. return ret;
  1832. }
  1833. rst = devm_reset_control_get(&pdev->dev, NULL);
  1834. if (IS_ERR(rst)) {
  1835. ret = dev_err_probe(&pdev->dev, PTR_ERR(rst),
  1836. "Error: Missing reset ctrl\n");
  1837. goto clk_free;
  1838. }
  1839. reset_control_assert(rst);
  1840. udelay(2);
  1841. reset_control_deassert(rst);
  1842. i2c_dev->dev = &pdev->dev;
  1843. ret = devm_request_threaded_irq(&pdev->dev, irq_event,
  1844. stm32f7_i2c_isr_event,
  1845. stm32f7_i2c_isr_event_thread,
  1846. IRQF_ONESHOT,
  1847. pdev->name, i2c_dev);
  1848. if (ret) {
  1849. dev_err(&pdev->dev, "Failed to request irq event %i\n",
  1850. irq_event);
  1851. goto clk_free;
  1852. }
  1853. ret = devm_request_irq(&pdev->dev, irq_error, stm32f7_i2c_isr_error, 0,
  1854. pdev->name, i2c_dev);
  1855. if (ret) {
  1856. dev_err(&pdev->dev, "Failed to request irq error %i\n",
  1857. irq_error);
  1858. goto clk_free;
  1859. }
  1860. setup = of_device_get_match_data(&pdev->dev);
  1861. if (!setup) {
  1862. dev_err(&pdev->dev, "Can't get device data\n");
  1863. ret = -ENODEV;
  1864. goto clk_free;
  1865. }
  1866. i2c_dev->setup = *setup;
  1867. ret = stm32f7_i2c_setup_timing(i2c_dev, &i2c_dev->setup);
  1868. if (ret)
  1869. goto clk_free;
  1870. /* Setup Fast mode plus if necessary */
  1871. if (i2c_dev->bus_rate > I2C_MAX_FAST_MODE_FREQ) {
  1872. ret = stm32f7_i2c_setup_fm_plus_bits(pdev, i2c_dev);
  1873. if (ret)
  1874. goto clk_free;
  1875. ret = stm32f7_i2c_write_fm_plus_bits(i2c_dev, true);
  1876. if (ret)
  1877. goto clk_free;
  1878. }
  1879. adap = &i2c_dev->adap;
  1880. i2c_set_adapdata(adap, i2c_dev);
  1881. snprintf(adap->name, sizeof(adap->name), "STM32F7 I2C(%pa)",
  1882. &res->start);
  1883. adap->owner = THIS_MODULE;
  1884. adap->timeout = 2 * HZ;
  1885. adap->retries = 3;
  1886. adap->algo = &stm32f7_i2c_algo;
  1887. adap->dev.parent = &pdev->dev;
  1888. adap->dev.of_node = pdev->dev.of_node;
  1889. init_completion(&i2c_dev->complete);
  1890. /* Init DMA config if supported */
  1891. i2c_dev->dma = stm32_i2c_dma_request(i2c_dev->dev, phy_addr,
  1892. STM32F7_I2C_TXDR,
  1893. STM32F7_I2C_RXDR);
  1894. if (IS_ERR(i2c_dev->dma)) {
  1895. ret = PTR_ERR(i2c_dev->dma);
  1896. /* DMA support is optional, only report other errors */
  1897. if (ret != -ENODEV)
  1898. goto fmp_clear;
  1899. dev_dbg(i2c_dev->dev, "No DMA option: fallback using interrupts\n");
  1900. i2c_dev->dma = NULL;
  1901. }
  1902. if (i2c_dev->wakeup_src) {
  1903. device_set_wakeup_capable(i2c_dev->dev, true);
  1904. ret = dev_pm_set_wake_irq(i2c_dev->dev, irq_event);
  1905. if (ret) {
  1906. dev_err(i2c_dev->dev, "Failed to set wake up irq\n");
  1907. goto clr_wakeup_capable;
  1908. }
  1909. }
  1910. platform_set_drvdata(pdev, i2c_dev);
  1911. pm_runtime_set_autosuspend_delay(i2c_dev->dev,
  1912. STM32F7_AUTOSUSPEND_DELAY);
  1913. pm_runtime_use_autosuspend(i2c_dev->dev);
  1914. pm_runtime_set_active(i2c_dev->dev);
  1915. pm_runtime_enable(i2c_dev->dev);
  1916. pm_runtime_get_noresume(&pdev->dev);
  1917. stm32f7_i2c_hw_config(i2c_dev);
  1918. i2c_dev->smbus_mode = of_property_read_bool(pdev->dev.of_node, "smbus");
  1919. ret = i2c_add_adapter(adap);
  1920. if (ret)
  1921. goto pm_disable;
  1922. if (i2c_dev->smbus_mode) {
  1923. ret = stm32f7_i2c_enable_smbus_host(i2c_dev);
  1924. if (ret) {
  1925. dev_err(i2c_dev->dev,
  1926. "failed to enable SMBus Host-Notify protocol (%d)\n",
  1927. ret);
  1928. goto i2c_adapter_remove;
  1929. }
  1930. }
  1931. if (of_property_read_bool(pdev->dev.of_node, "smbus-alert")) {
  1932. ret = stm32f7_i2c_enable_smbus_alert(i2c_dev);
  1933. if (ret) {
  1934. dev_err(i2c_dev->dev,
  1935. "failed to enable SMBus alert protocol (%d)\n",
  1936. ret);
  1937. goto i2c_disable_smbus_host;
  1938. }
  1939. }
  1940. dev_info(i2c_dev->dev, "STM32F7 I2C-%d bus adapter\n", adap->nr);
  1941. pm_runtime_mark_last_busy(i2c_dev->dev);
  1942. pm_runtime_put_autosuspend(i2c_dev->dev);
  1943. return 0;
  1944. i2c_disable_smbus_host:
  1945. stm32f7_i2c_disable_smbus_host(i2c_dev);
  1946. i2c_adapter_remove:
  1947. i2c_del_adapter(adap);
  1948. pm_disable:
  1949. pm_runtime_put_noidle(i2c_dev->dev);
  1950. pm_runtime_disable(i2c_dev->dev);
  1951. pm_runtime_set_suspended(i2c_dev->dev);
  1952. pm_runtime_dont_use_autosuspend(i2c_dev->dev);
  1953. if (i2c_dev->wakeup_src)
  1954. dev_pm_clear_wake_irq(i2c_dev->dev);
  1955. clr_wakeup_capable:
  1956. if (i2c_dev->wakeup_src)
  1957. device_set_wakeup_capable(i2c_dev->dev, false);
  1958. if (i2c_dev->dma) {
  1959. stm32_i2c_dma_free(i2c_dev->dma);
  1960. i2c_dev->dma = NULL;
  1961. }
  1962. fmp_clear:
  1963. stm32f7_i2c_write_fm_plus_bits(i2c_dev, false);
  1964. clk_free:
  1965. clk_disable_unprepare(i2c_dev->clk);
  1966. return ret;
  1967. }
  1968. static int stm32f7_i2c_remove(struct platform_device *pdev)
  1969. {
  1970. struct stm32f7_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
  1971. stm32f7_i2c_disable_smbus_alert(i2c_dev);
  1972. stm32f7_i2c_disable_smbus_host(i2c_dev);
  1973. i2c_del_adapter(&i2c_dev->adap);
  1974. pm_runtime_get_sync(i2c_dev->dev);
  1975. if (i2c_dev->wakeup_src) {
  1976. dev_pm_clear_wake_irq(i2c_dev->dev);
  1977. /*
  1978. * enforce that wakeup is disabled and that the device
  1979. * is marked as non wakeup capable
  1980. */
  1981. device_init_wakeup(i2c_dev->dev, false);
  1982. }
  1983. pm_runtime_put_noidle(i2c_dev->dev);
  1984. pm_runtime_disable(i2c_dev->dev);
  1985. pm_runtime_set_suspended(i2c_dev->dev);
  1986. pm_runtime_dont_use_autosuspend(i2c_dev->dev);
  1987. if (i2c_dev->dma) {
  1988. stm32_i2c_dma_free(i2c_dev->dma);
  1989. i2c_dev->dma = NULL;
  1990. }
  1991. stm32f7_i2c_write_fm_plus_bits(i2c_dev, false);
  1992. clk_disable_unprepare(i2c_dev->clk);
  1993. return 0;
  1994. }
  1995. static int __maybe_unused stm32f7_i2c_runtime_suspend(struct device *dev)
  1996. {
  1997. struct stm32f7_i2c_dev *i2c_dev = dev_get_drvdata(dev);
  1998. if (!stm32f7_i2c_is_slave_registered(i2c_dev))
  1999. clk_disable_unprepare(i2c_dev->clk);
  2000. return 0;
  2001. }
  2002. static int __maybe_unused stm32f7_i2c_runtime_resume(struct device *dev)
  2003. {
  2004. struct stm32f7_i2c_dev *i2c_dev = dev_get_drvdata(dev);
  2005. int ret;
  2006. if (!stm32f7_i2c_is_slave_registered(i2c_dev)) {
  2007. ret = clk_prepare_enable(i2c_dev->clk);
  2008. if (ret) {
  2009. dev_err(dev, "failed to prepare_enable clock\n");
  2010. return ret;
  2011. }
  2012. }
  2013. return 0;
  2014. }
  2015. static int __maybe_unused stm32f7_i2c_regs_backup(struct stm32f7_i2c_dev *i2c_dev)
  2016. {
  2017. int ret;
  2018. struct stm32f7_i2c_regs *backup_regs = &i2c_dev->backup_regs;
  2019. ret = pm_runtime_resume_and_get(i2c_dev->dev);
  2020. if (ret < 0)
  2021. return ret;
  2022. backup_regs->cr1 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR1);
  2023. backup_regs->cr2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR2);
  2024. backup_regs->oar1 = readl_relaxed(i2c_dev->base + STM32F7_I2C_OAR1);
  2025. backup_regs->oar2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_OAR2);
  2026. backup_regs->tmgr = readl_relaxed(i2c_dev->base + STM32F7_I2C_TIMINGR);
  2027. stm32f7_i2c_write_fm_plus_bits(i2c_dev, false);
  2028. pm_runtime_put_sync(i2c_dev->dev);
  2029. return ret;
  2030. }
  2031. static int __maybe_unused stm32f7_i2c_regs_restore(struct stm32f7_i2c_dev *i2c_dev)
  2032. {
  2033. u32 cr1;
  2034. int ret;
  2035. struct stm32f7_i2c_regs *backup_regs = &i2c_dev->backup_regs;
  2036. ret = pm_runtime_resume_and_get(i2c_dev->dev);
  2037. if (ret < 0)
  2038. return ret;
  2039. cr1 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR1);
  2040. if (cr1 & STM32F7_I2C_CR1_PE)
  2041. stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
  2042. STM32F7_I2C_CR1_PE);
  2043. writel_relaxed(backup_regs->tmgr, i2c_dev->base + STM32F7_I2C_TIMINGR);
  2044. writel_relaxed(backup_regs->cr1 & ~STM32F7_I2C_CR1_PE,
  2045. i2c_dev->base + STM32F7_I2C_CR1);
  2046. if (backup_regs->cr1 & STM32F7_I2C_CR1_PE)
  2047. stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
  2048. STM32F7_I2C_CR1_PE);
  2049. writel_relaxed(backup_regs->cr2, i2c_dev->base + STM32F7_I2C_CR2);
  2050. writel_relaxed(backup_regs->oar1, i2c_dev->base + STM32F7_I2C_OAR1);
  2051. writel_relaxed(backup_regs->oar2, i2c_dev->base + STM32F7_I2C_OAR2);
  2052. stm32f7_i2c_write_fm_plus_bits(i2c_dev, true);
  2053. pm_runtime_put_sync(i2c_dev->dev);
  2054. return ret;
  2055. }
  2056. static int __maybe_unused stm32f7_i2c_suspend(struct device *dev)
  2057. {
  2058. struct stm32f7_i2c_dev *i2c_dev = dev_get_drvdata(dev);
  2059. int ret;
  2060. i2c_mark_adapter_suspended(&i2c_dev->adap);
  2061. if (!device_may_wakeup(dev) && !device_wakeup_path(dev)) {
  2062. ret = stm32f7_i2c_regs_backup(i2c_dev);
  2063. if (ret < 0) {
  2064. i2c_mark_adapter_resumed(&i2c_dev->adap);
  2065. return ret;
  2066. }
  2067. pinctrl_pm_select_sleep_state(dev);
  2068. pm_runtime_force_suspend(dev);
  2069. }
  2070. return 0;
  2071. }
  2072. static int __maybe_unused stm32f7_i2c_resume(struct device *dev)
  2073. {
  2074. struct stm32f7_i2c_dev *i2c_dev = dev_get_drvdata(dev);
  2075. int ret;
  2076. if (!device_may_wakeup(dev) && !device_wakeup_path(dev)) {
  2077. ret = pm_runtime_force_resume(dev);
  2078. if (ret < 0)
  2079. return ret;
  2080. pinctrl_pm_select_default_state(dev);
  2081. ret = stm32f7_i2c_regs_restore(i2c_dev);
  2082. if (ret < 0)
  2083. return ret;
  2084. }
  2085. i2c_mark_adapter_resumed(&i2c_dev->adap);
  2086. return 0;
  2087. }
  2088. static const struct dev_pm_ops stm32f7_i2c_pm_ops = {
  2089. SET_RUNTIME_PM_OPS(stm32f7_i2c_runtime_suspend,
  2090. stm32f7_i2c_runtime_resume, NULL)
  2091. SET_SYSTEM_SLEEP_PM_OPS(stm32f7_i2c_suspend, stm32f7_i2c_resume)
  2092. };
  2093. static const struct of_device_id stm32f7_i2c_match[] = {
  2094. { .compatible = "st,stm32f7-i2c", .data = &stm32f7_setup},
  2095. { .compatible = "st,stm32mp15-i2c", .data = &stm32mp15_setup},
  2096. { .compatible = "st,stm32mp13-i2c", .data = &stm32mp13_setup},
  2097. {},
  2098. };
  2099. MODULE_DEVICE_TABLE(of, stm32f7_i2c_match);
  2100. static struct platform_driver stm32f7_i2c_driver = {
  2101. .driver = {
  2102. .name = "stm32f7-i2c",
  2103. .of_match_table = stm32f7_i2c_match,
  2104. .pm = &stm32f7_i2c_pm_ops,
  2105. },
  2106. .probe = stm32f7_i2c_probe,
  2107. .remove = stm32f7_i2c_remove,
  2108. };
  2109. module_platform_driver(stm32f7_i2c_driver);
  2110. MODULE_AUTHOR("M'boumba Cedric Madianga <[email protected]>");
  2111. MODULE_DESCRIPTION("STMicroelectronics STM32F7 I2C driver");
  2112. MODULE_LICENSE("GPL v2");