i2c-stm32f7.c 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989
  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 <cedric.madianga@gmail.com>
  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/interrupt.h>
  22. #include <linux/io.h>
  23. #include <linux/iopoll.h>
  24. #include <linux/module.h>
  25. #include <linux/of.h>
  26. #include <linux/of_address.h>
  27. #include <linux/of_platform.h>
  28. #include <linux/platform_device.h>
  29. #include <linux/reset.h>
  30. #include <linux/slab.h>
  31. #include "i2c-stm32.h"
  32. /* STM32F7 I2C registers */
  33. #define STM32F7_I2C_CR1 0x00
  34. #define STM32F7_I2C_CR2 0x04
  35. #define STM32F7_I2C_OAR1 0x08
  36. #define STM32F7_I2C_OAR2 0x0C
  37. #define STM32F7_I2C_PECR 0x20
  38. #define STM32F7_I2C_TIMINGR 0x10
  39. #define STM32F7_I2C_ISR 0x18
  40. #define STM32F7_I2C_ICR 0x1C
  41. #define STM32F7_I2C_RXDR 0x24
  42. #define STM32F7_I2C_TXDR 0x28
  43. /* STM32F7 I2C control 1 */
  44. #define STM32F7_I2C_CR1_PECEN BIT(23)
  45. #define STM32F7_I2C_CR1_SBC BIT(16)
  46. #define STM32F7_I2C_CR1_RXDMAEN BIT(15)
  47. #define STM32F7_I2C_CR1_TXDMAEN BIT(14)
  48. #define STM32F7_I2C_CR1_ANFOFF BIT(12)
  49. #define STM32F7_I2C_CR1_DNF_MASK GENMASK(11, 8)
  50. #define STM32F7_I2C_CR1_DNF(n) (((n) & 0xf) << 8)
  51. #define STM32F7_I2C_CR1_ERRIE BIT(7)
  52. #define STM32F7_I2C_CR1_TCIE BIT(6)
  53. #define STM32F7_I2C_CR1_STOPIE BIT(5)
  54. #define STM32F7_I2C_CR1_NACKIE BIT(4)
  55. #define STM32F7_I2C_CR1_ADDRIE BIT(3)
  56. #define STM32F7_I2C_CR1_RXIE BIT(2)
  57. #define STM32F7_I2C_CR1_TXIE BIT(1)
  58. #define STM32F7_I2C_CR1_PE BIT(0)
  59. #define STM32F7_I2C_ALL_IRQ_MASK (STM32F7_I2C_CR1_ERRIE \
  60. | STM32F7_I2C_CR1_TCIE \
  61. | STM32F7_I2C_CR1_STOPIE \
  62. | STM32F7_I2C_CR1_NACKIE \
  63. | STM32F7_I2C_CR1_RXIE \
  64. | STM32F7_I2C_CR1_TXIE)
  65. #define STM32F7_I2C_XFER_IRQ_MASK (STM32F7_I2C_CR1_TCIE \
  66. | STM32F7_I2C_CR1_STOPIE \
  67. | STM32F7_I2C_CR1_NACKIE \
  68. | STM32F7_I2C_CR1_RXIE \
  69. | STM32F7_I2C_CR1_TXIE)
  70. /* STM32F7 I2C control 2 */
  71. #define STM32F7_I2C_CR2_PECBYTE BIT(26)
  72. #define STM32F7_I2C_CR2_RELOAD BIT(24)
  73. #define STM32F7_I2C_CR2_NBYTES_MASK GENMASK(23, 16)
  74. #define STM32F7_I2C_CR2_NBYTES(n) (((n) & 0xff) << 16)
  75. #define STM32F7_I2C_CR2_NACK BIT(15)
  76. #define STM32F7_I2C_CR2_STOP BIT(14)
  77. #define STM32F7_I2C_CR2_START BIT(13)
  78. #define STM32F7_I2C_CR2_HEAD10R BIT(12)
  79. #define STM32F7_I2C_CR2_ADD10 BIT(11)
  80. #define STM32F7_I2C_CR2_RD_WRN BIT(10)
  81. #define STM32F7_I2C_CR2_SADD10_MASK GENMASK(9, 0)
  82. #define STM32F7_I2C_CR2_SADD10(n) (((n) & \
  83. STM32F7_I2C_CR2_SADD10_MASK))
  84. #define STM32F7_I2C_CR2_SADD7_MASK GENMASK(7, 1)
  85. #define STM32F7_I2C_CR2_SADD7(n) (((n) & 0x7f) << 1)
  86. /* STM32F7 I2C Own Address 1 */
  87. #define STM32F7_I2C_OAR1_OA1EN BIT(15)
  88. #define STM32F7_I2C_OAR1_OA1MODE BIT(10)
  89. #define STM32F7_I2C_OAR1_OA1_10_MASK GENMASK(9, 0)
  90. #define STM32F7_I2C_OAR1_OA1_10(n) (((n) & \
  91. STM32F7_I2C_OAR1_OA1_10_MASK))
  92. #define STM32F7_I2C_OAR1_OA1_7_MASK GENMASK(7, 1)
  93. #define STM32F7_I2C_OAR1_OA1_7(n) (((n) & 0x7f) << 1)
  94. #define STM32F7_I2C_OAR1_MASK (STM32F7_I2C_OAR1_OA1_7_MASK \
  95. | STM32F7_I2C_OAR1_OA1_10_MASK \
  96. | STM32F7_I2C_OAR1_OA1EN \
  97. | STM32F7_I2C_OAR1_OA1MODE)
  98. /* STM32F7 I2C Own Address 2 */
  99. #define STM32F7_I2C_OAR2_OA2EN BIT(15)
  100. #define STM32F7_I2C_OAR2_OA2MSK_MASK GENMASK(10, 8)
  101. #define STM32F7_I2C_OAR2_OA2MSK(n) (((n) & 0x7) << 8)
  102. #define STM32F7_I2C_OAR2_OA2_7_MASK GENMASK(7, 1)
  103. #define STM32F7_I2C_OAR2_OA2_7(n) (((n) & 0x7f) << 1)
  104. #define STM32F7_I2C_OAR2_MASK (STM32F7_I2C_OAR2_OA2MSK_MASK \
  105. | STM32F7_I2C_OAR2_OA2_7_MASK \
  106. | STM32F7_I2C_OAR2_OA2EN)
  107. /* STM32F7 I2C Interrupt Status */
  108. #define STM32F7_I2C_ISR_ADDCODE_MASK GENMASK(23, 17)
  109. #define STM32F7_I2C_ISR_ADDCODE_GET(n) \
  110. (((n) & STM32F7_I2C_ISR_ADDCODE_MASK) >> 17)
  111. #define STM32F7_I2C_ISR_DIR BIT(16)
  112. #define STM32F7_I2C_ISR_BUSY BIT(15)
  113. #define STM32F7_I2C_ISR_PECERR BIT(11)
  114. #define STM32F7_I2C_ISR_ARLO BIT(9)
  115. #define STM32F7_I2C_ISR_BERR BIT(8)
  116. #define STM32F7_I2C_ISR_TCR BIT(7)
  117. #define STM32F7_I2C_ISR_TC BIT(6)
  118. #define STM32F7_I2C_ISR_STOPF BIT(5)
  119. #define STM32F7_I2C_ISR_NACKF BIT(4)
  120. #define STM32F7_I2C_ISR_ADDR BIT(3)
  121. #define STM32F7_I2C_ISR_RXNE BIT(2)
  122. #define STM32F7_I2C_ISR_TXIS BIT(1)
  123. #define STM32F7_I2C_ISR_TXE BIT(0)
  124. /* STM32F7 I2C Interrupt Clear */
  125. #define STM32F7_I2C_ICR_PECCF BIT(11)
  126. #define STM32F7_I2C_ICR_ARLOCF BIT(9)
  127. #define STM32F7_I2C_ICR_BERRCF BIT(8)
  128. #define STM32F7_I2C_ICR_STOPCF BIT(5)
  129. #define STM32F7_I2C_ICR_NACKCF BIT(4)
  130. #define STM32F7_I2C_ICR_ADDRCF BIT(3)
  131. /* STM32F7 I2C Timing */
  132. #define STM32F7_I2C_TIMINGR_PRESC(n) (((n) & 0xf) << 28)
  133. #define STM32F7_I2C_TIMINGR_SCLDEL(n) (((n) & 0xf) << 20)
  134. #define STM32F7_I2C_TIMINGR_SDADEL(n) (((n) & 0xf) << 16)
  135. #define STM32F7_I2C_TIMINGR_SCLH(n) (((n) & 0xff) << 8)
  136. #define STM32F7_I2C_TIMINGR_SCLL(n) ((n) & 0xff)
  137. #define STM32F7_I2C_MAX_LEN 0xff
  138. #define STM32F7_I2C_DMA_LEN_MIN 0x16
  139. #define STM32F7_I2C_MAX_SLAVE 0x2
  140. #define STM32F7_I2C_DNF_DEFAULT 0
  141. #define STM32F7_I2C_DNF_MAX 15
  142. #define STM32F7_I2C_ANALOG_FILTER_ENABLE 1
  143. #define STM32F7_I2C_ANALOG_FILTER_DELAY_MIN 50 /* ns */
  144. #define STM32F7_I2C_ANALOG_FILTER_DELAY_MAX 260 /* ns */
  145. #define STM32F7_I2C_RISE_TIME_DEFAULT 25 /* ns */
  146. #define STM32F7_I2C_FALL_TIME_DEFAULT 10 /* ns */
  147. #define STM32F7_PRESC_MAX BIT(4)
  148. #define STM32F7_SCLDEL_MAX BIT(4)
  149. #define STM32F7_SDADEL_MAX BIT(4)
  150. #define STM32F7_SCLH_MAX BIT(8)
  151. #define STM32F7_SCLL_MAX BIT(8)
  152. /**
  153. * struct stm32f7_i2c_spec - private i2c specification timing
  154. * @rate: I2C bus speed (Hz)
  155. * @rate_min: 80% of I2C bus speed (Hz)
  156. * @rate_max: 100% of I2C bus speed (Hz)
  157. * @fall_max: Max fall time of both SDA and SCL signals (ns)
  158. * @rise_max: Max rise time of both SDA and SCL signals (ns)
  159. * @hddat_min: Min data hold time (ns)
  160. * @vddat_max: Max data valid time (ns)
  161. * @sudat_min: Min data setup time (ns)
  162. * @l_min: Min low period of the SCL clock (ns)
  163. * @h_min: Min high period of the SCL clock (ns)
  164. */
  165. struct stm32f7_i2c_spec {
  166. u32 rate;
  167. u32 rate_min;
  168. u32 rate_max;
  169. u32 fall_max;
  170. u32 rise_max;
  171. u32 hddat_min;
  172. u32 vddat_max;
  173. u32 sudat_min;
  174. u32 l_min;
  175. u32 h_min;
  176. };
  177. /**
  178. * struct stm32f7_i2c_setup - private I2C timing setup parameters
  179. * @speed: I2C speed mode (standard, Fast Plus)
  180. * @speed_freq: I2C speed frequency (Hz)
  181. * @clock_src: I2C clock source frequency (Hz)
  182. * @rise_time: Rise time (ns)
  183. * @fall_time: Fall time (ns)
  184. * @dnf: Digital filter coefficient (0-16)
  185. * @analog_filter: Analog filter delay (On/Off)
  186. */
  187. struct stm32f7_i2c_setup {
  188. enum stm32_i2c_speed speed;
  189. u32 speed_freq;
  190. u32 clock_src;
  191. u32 rise_time;
  192. u32 fall_time;
  193. u8 dnf;
  194. bool analog_filter;
  195. };
  196. /**
  197. * struct stm32f7_i2c_timings - private I2C output parameters
  198. * @node: List entry
  199. * @presc: Prescaler value
  200. * @scldel: Data setup time
  201. * @sdadel: Data hold time
  202. * @sclh: SCL high period (master mode)
  203. * @scll: SCL low period (master mode)
  204. */
  205. struct stm32f7_i2c_timings {
  206. struct list_head node;
  207. u8 presc;
  208. u8 scldel;
  209. u8 sdadel;
  210. u8 sclh;
  211. u8 scll;
  212. };
  213. /**
  214. * struct stm32f7_i2c_msg - client specific data
  215. * @addr: 8-bit or 10-bit slave addr, including r/w bit
  216. * @count: number of bytes to be transferred
  217. * @buf: data buffer
  218. * @result: result of the transfer
  219. * @stop: last I2C msg to be sent, i.e. STOP to be generated
  220. * @smbus: boolean to know if the I2C IP is used in SMBus mode
  221. * @size: type of SMBus protocol
  222. * @read_write: direction of SMBus protocol
  223. * SMBus block read and SMBus block write - block read process call protocols
  224. * @smbus_buf: buffer to be used for SMBus protocol transfer. It will
  225. * contain a maximum of 32 bytes of data + byte command + byte count + PEC
  226. * This buffer has to be 32-bit aligned to be compliant with memory address
  227. * register in DMA mode.
  228. */
  229. struct stm32f7_i2c_msg {
  230. u16 addr;
  231. u32 count;
  232. u8 *buf;
  233. int result;
  234. bool stop;
  235. bool smbus;
  236. int size;
  237. char read_write;
  238. u8 smbus_buf[I2C_SMBUS_BLOCK_MAX + 3] __aligned(4);
  239. };
  240. /**
  241. * struct stm32f7_i2c_dev - private data of the controller
  242. * @adap: I2C adapter for this controller
  243. * @dev: device for this controller
  244. * @base: virtual memory area
  245. * @complete: completion of I2C message
  246. * @clk: hw i2c clock
  247. * @speed: I2C clock frequency of the controller. Standard, Fast or Fast+
  248. * @msg: Pointer to data to be written
  249. * @msg_num: number of I2C messages to be executed
  250. * @msg_id: message identifiant
  251. * @f7_msg: customized i2c msg for driver usage
  252. * @setup: I2C timing input setup
  253. * @timing: I2C computed timings
  254. * @slave: list of slave devices registered on the I2C bus
  255. * @slave_running: slave device currently used
  256. * @slave_dir: transfer direction for the current slave device
  257. * @master_mode: boolean to know in which mode the I2C is running (master or
  258. * slave)
  259. * @dma: dma data
  260. * @use_dma: boolean to know if dma is used in the current transfer
  261. */
  262. struct stm32f7_i2c_dev {
  263. struct i2c_adapter adap;
  264. struct device *dev;
  265. void __iomem *base;
  266. struct completion complete;
  267. struct clk *clk;
  268. int speed;
  269. struct i2c_msg *msg;
  270. unsigned int msg_num;
  271. unsigned int msg_id;
  272. struct stm32f7_i2c_msg f7_msg;
  273. struct stm32f7_i2c_setup setup;
  274. struct stm32f7_i2c_timings timing;
  275. struct i2c_client *slave[STM32F7_I2C_MAX_SLAVE];
  276. struct i2c_client *slave_running;
  277. u32 slave_dir;
  278. bool master_mode;
  279. struct stm32_i2c_dma *dma;
  280. bool use_dma;
  281. };
  282. /*
  283. * All these values are coming from I2C Specification, Version 6.0, 4th of
  284. * April 2014.
  285. *
  286. * Table10. Characteristics of the SDA and SCL bus lines for Standard, Fast,
  287. * and Fast-mode Plus I2C-bus devices
  288. */
  289. static struct stm32f7_i2c_spec i2c_specs[] = {
  290. [STM32_I2C_SPEED_STANDARD] = {
  291. .rate = 100000,
  292. .rate_min = 80000,
  293. .rate_max = 100000,
  294. .fall_max = 300,
  295. .rise_max = 1000,
  296. .hddat_min = 0,
  297. .vddat_max = 3450,
  298. .sudat_min = 250,
  299. .l_min = 4700,
  300. .h_min = 4000,
  301. },
  302. [STM32_I2C_SPEED_FAST] = {
  303. .rate = 400000,
  304. .rate_min = 320000,
  305. .rate_max = 400000,
  306. .fall_max = 300,
  307. .rise_max = 300,
  308. .hddat_min = 0,
  309. .vddat_max = 900,
  310. .sudat_min = 100,
  311. .l_min = 1300,
  312. .h_min = 600,
  313. },
  314. [STM32_I2C_SPEED_FAST_PLUS] = {
  315. .rate = 1000000,
  316. .rate_min = 800000,
  317. .rate_max = 1000000,
  318. .fall_max = 100,
  319. .rise_max = 120,
  320. .hddat_min = 0,
  321. .vddat_max = 450,
  322. .sudat_min = 50,
  323. .l_min = 500,
  324. .h_min = 260,
  325. },
  326. };
  327. static const struct stm32f7_i2c_setup stm32f7_setup = {
  328. .rise_time = STM32F7_I2C_RISE_TIME_DEFAULT,
  329. .fall_time = STM32F7_I2C_FALL_TIME_DEFAULT,
  330. .dnf = STM32F7_I2C_DNF_DEFAULT,
  331. .analog_filter = STM32F7_I2C_ANALOG_FILTER_ENABLE,
  332. };
  333. static inline void stm32f7_i2c_set_bits(void __iomem *reg, u32 mask)
  334. {
  335. writel_relaxed(readl_relaxed(reg) | mask, reg);
  336. }
  337. static inline void stm32f7_i2c_clr_bits(void __iomem *reg, u32 mask)
  338. {
  339. writel_relaxed(readl_relaxed(reg) & ~mask, reg);
  340. }
  341. static void stm32f7_i2c_disable_irq(struct stm32f7_i2c_dev *i2c_dev, u32 mask)
  342. {
  343. stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1, mask);
  344. }
  345. static int stm32f7_i2c_compute_timing(struct stm32f7_i2c_dev *i2c_dev,
  346. struct stm32f7_i2c_setup *setup,
  347. struct stm32f7_i2c_timings *output)
  348. {
  349. u32 p_prev = STM32F7_PRESC_MAX;
  350. u32 i2cclk = DIV_ROUND_CLOSEST(NSEC_PER_SEC,
  351. setup->clock_src);
  352. u32 i2cbus = DIV_ROUND_CLOSEST(NSEC_PER_SEC,
  353. setup->speed_freq);
  354. u32 clk_error_prev = i2cbus;
  355. u32 tsync;
  356. u32 af_delay_min, af_delay_max;
  357. u32 dnf_delay;
  358. u32 clk_min, clk_max;
  359. int sdadel_min, sdadel_max;
  360. int scldel_min;
  361. struct stm32f7_i2c_timings *v, *_v, *s;
  362. struct list_head solutions;
  363. u16 p, l, a, h;
  364. int ret = 0;
  365. if (setup->speed >= STM32_I2C_SPEED_END) {
  366. dev_err(i2c_dev->dev, "speed out of bound {%d/%d}\n",
  367. setup->speed, STM32_I2C_SPEED_END - 1);
  368. return -EINVAL;
  369. }
  370. if ((setup->rise_time > i2c_specs[setup->speed].rise_max) ||
  371. (setup->fall_time > i2c_specs[setup->speed].fall_max)) {
  372. dev_err(i2c_dev->dev,
  373. "timings out of bound Rise{%d>%d}/Fall{%d>%d}\n",
  374. setup->rise_time, i2c_specs[setup->speed].rise_max,
  375. setup->fall_time, i2c_specs[setup->speed].fall_max);
  376. return -EINVAL;
  377. }
  378. if (setup->dnf > STM32F7_I2C_DNF_MAX) {
  379. dev_err(i2c_dev->dev,
  380. "DNF out of bound %d/%d\n",
  381. setup->dnf, STM32F7_I2C_DNF_MAX);
  382. return -EINVAL;
  383. }
  384. if (setup->speed_freq > i2c_specs[setup->speed].rate) {
  385. dev_err(i2c_dev->dev, "ERROR: Freq {%d/%d}\n",
  386. setup->speed_freq, i2c_specs[setup->speed].rate);
  387. return -EINVAL;
  388. }
  389. /* Analog and Digital Filters */
  390. af_delay_min =
  391. (setup->analog_filter ?
  392. STM32F7_I2C_ANALOG_FILTER_DELAY_MIN : 0);
  393. af_delay_max =
  394. (setup->analog_filter ?
  395. STM32F7_I2C_ANALOG_FILTER_DELAY_MAX : 0);
  396. dnf_delay = setup->dnf * i2cclk;
  397. sdadel_min = i2c_specs[setup->speed].hddat_min + setup->fall_time -
  398. af_delay_min - (setup->dnf + 3) * i2cclk;
  399. sdadel_max = i2c_specs[setup->speed].vddat_max - setup->rise_time -
  400. af_delay_max - (setup->dnf + 4) * i2cclk;
  401. scldel_min = setup->rise_time + i2c_specs[setup->speed].sudat_min;
  402. if (sdadel_min < 0)
  403. sdadel_min = 0;
  404. if (sdadel_max < 0)
  405. sdadel_max = 0;
  406. dev_dbg(i2c_dev->dev, "SDADEL(min/max): %i/%i, SCLDEL(Min): %i\n",
  407. sdadel_min, sdadel_max, scldel_min);
  408. INIT_LIST_HEAD(&solutions);
  409. /* Compute possible values for PRESC, SCLDEL and SDADEL */
  410. for (p = 0; p < STM32F7_PRESC_MAX; p++) {
  411. for (l = 0; l < STM32F7_SCLDEL_MAX; l++) {
  412. u32 scldel = (l + 1) * (p + 1) * i2cclk;
  413. if (scldel < scldel_min)
  414. continue;
  415. for (a = 0; a < STM32F7_SDADEL_MAX; a++) {
  416. u32 sdadel = (a * (p + 1) + 1) * i2cclk;
  417. if (((sdadel >= sdadel_min) &&
  418. (sdadel <= sdadel_max)) &&
  419. (p != p_prev)) {
  420. v = kmalloc(sizeof(*v), GFP_KERNEL);
  421. if (!v) {
  422. ret = -ENOMEM;
  423. goto exit;
  424. }
  425. v->presc = p;
  426. v->scldel = l;
  427. v->sdadel = a;
  428. p_prev = p;
  429. list_add_tail(&v->node,
  430. &solutions);
  431. }
  432. }
  433. }
  434. }
  435. if (list_empty(&solutions)) {
  436. dev_err(i2c_dev->dev, "no Prescaler solution\n");
  437. ret = -EPERM;
  438. goto exit;
  439. }
  440. tsync = af_delay_min + dnf_delay + (2 * i2cclk);
  441. s = NULL;
  442. clk_max = NSEC_PER_SEC / i2c_specs[setup->speed].rate_min;
  443. clk_min = NSEC_PER_SEC / i2c_specs[setup->speed].rate_max;
  444. /*
  445. * Among Prescaler possibilities discovered above figures out SCL Low
  446. * and High Period. Provided:
  447. * - SCL Low Period has to be higher than SCL Clock Low Period
  448. * defined by I2C Specification. I2C Clock has to be lower than
  449. * (SCL Low Period - Analog/Digital filters) / 4.
  450. * - SCL High Period has to be lower than SCL Clock High Period
  451. * defined by I2C Specification
  452. * - I2C Clock has to be lower than SCL High Period
  453. */
  454. list_for_each_entry(v, &solutions, node) {
  455. u32 prescaler = (v->presc + 1) * i2cclk;
  456. for (l = 0; l < STM32F7_SCLL_MAX; l++) {
  457. u32 tscl_l = (l + 1) * prescaler + tsync;
  458. if ((tscl_l < i2c_specs[setup->speed].l_min) ||
  459. (i2cclk >=
  460. ((tscl_l - af_delay_min - dnf_delay) / 4))) {
  461. continue;
  462. }
  463. for (h = 0; h < STM32F7_SCLH_MAX; h++) {
  464. u32 tscl_h = (h + 1) * prescaler + tsync;
  465. u32 tscl = tscl_l + tscl_h +
  466. setup->rise_time + setup->fall_time;
  467. if ((tscl >= clk_min) && (tscl <= clk_max) &&
  468. (tscl_h >= i2c_specs[setup->speed].h_min) &&
  469. (i2cclk < tscl_h)) {
  470. int clk_error = tscl - i2cbus;
  471. if (clk_error < 0)
  472. clk_error = -clk_error;
  473. if (clk_error < clk_error_prev) {
  474. clk_error_prev = clk_error;
  475. v->scll = l;
  476. v->sclh = h;
  477. s = v;
  478. }
  479. }
  480. }
  481. }
  482. }
  483. if (!s) {
  484. dev_err(i2c_dev->dev, "no solution at all\n");
  485. ret = -EPERM;
  486. goto exit;
  487. }
  488. output->presc = s->presc;
  489. output->scldel = s->scldel;
  490. output->sdadel = s->sdadel;
  491. output->scll = s->scll;
  492. output->sclh = s->sclh;
  493. dev_dbg(i2c_dev->dev,
  494. "Presc: %i, scldel: %i, sdadel: %i, scll: %i, sclh: %i\n",
  495. output->presc,
  496. output->scldel, output->sdadel,
  497. output->scll, output->sclh);
  498. exit:
  499. /* Release list and memory */
  500. list_for_each_entry_safe(v, _v, &solutions, node) {
  501. list_del(&v->node);
  502. kfree(v);
  503. }
  504. return ret;
  505. }
  506. static int stm32f7_i2c_setup_timing(struct stm32f7_i2c_dev *i2c_dev,
  507. struct stm32f7_i2c_setup *setup)
  508. {
  509. int ret = 0;
  510. setup->speed = i2c_dev->speed;
  511. setup->speed_freq = i2c_specs[setup->speed].rate;
  512. setup->clock_src = clk_get_rate(i2c_dev->clk);
  513. if (!setup->clock_src) {
  514. dev_err(i2c_dev->dev, "clock rate is 0\n");
  515. return -EINVAL;
  516. }
  517. do {
  518. ret = stm32f7_i2c_compute_timing(i2c_dev, setup,
  519. &i2c_dev->timing);
  520. if (ret) {
  521. dev_err(i2c_dev->dev,
  522. "failed to compute I2C timings.\n");
  523. if (i2c_dev->speed > STM32_I2C_SPEED_STANDARD) {
  524. i2c_dev->speed--;
  525. setup->speed = i2c_dev->speed;
  526. setup->speed_freq =
  527. i2c_specs[setup->speed].rate;
  528. dev_warn(i2c_dev->dev,
  529. "downgrade I2C Speed Freq to (%i)\n",
  530. i2c_specs[setup->speed].rate);
  531. } else {
  532. break;
  533. }
  534. }
  535. } while (ret);
  536. if (ret) {
  537. dev_err(i2c_dev->dev, "Impossible to compute I2C timings.\n");
  538. return ret;
  539. }
  540. dev_dbg(i2c_dev->dev, "I2C Speed(%i), Freq(%i), Clk Source(%i)\n",
  541. setup->speed, setup->speed_freq, setup->clock_src);
  542. dev_dbg(i2c_dev->dev, "I2C Rise(%i) and Fall(%i) Time\n",
  543. setup->rise_time, setup->fall_time);
  544. dev_dbg(i2c_dev->dev, "I2C Analog Filter(%s), DNF(%i)\n",
  545. (setup->analog_filter ? "On" : "Off"), setup->dnf);
  546. return 0;
  547. }
  548. static void stm32f7_i2c_disable_dma_req(struct stm32f7_i2c_dev *i2c_dev)
  549. {
  550. void __iomem *base = i2c_dev->base;
  551. u32 mask = STM32F7_I2C_CR1_RXDMAEN | STM32F7_I2C_CR1_TXDMAEN;
  552. stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR1, mask);
  553. }
  554. static void stm32f7_i2c_dma_callback(void *arg)
  555. {
  556. struct stm32f7_i2c_dev *i2c_dev = (struct stm32f7_i2c_dev *)arg;
  557. struct stm32_i2c_dma *dma = i2c_dev->dma;
  558. struct device *dev = dma->chan_using->device->dev;
  559. stm32f7_i2c_disable_dma_req(i2c_dev);
  560. dma_unmap_single(dev, dma->dma_buf, dma->dma_len, dma->dma_data_dir);
  561. complete(&dma->dma_complete);
  562. }
  563. static void stm32f7_i2c_hw_config(struct stm32f7_i2c_dev *i2c_dev)
  564. {
  565. struct stm32f7_i2c_timings *t = &i2c_dev->timing;
  566. u32 timing = 0;
  567. /* Timing settings */
  568. timing |= STM32F7_I2C_TIMINGR_PRESC(t->presc);
  569. timing |= STM32F7_I2C_TIMINGR_SCLDEL(t->scldel);
  570. timing |= STM32F7_I2C_TIMINGR_SDADEL(t->sdadel);
  571. timing |= STM32F7_I2C_TIMINGR_SCLH(t->sclh);
  572. timing |= STM32F7_I2C_TIMINGR_SCLL(t->scll);
  573. writel_relaxed(timing, i2c_dev->base + STM32F7_I2C_TIMINGR);
  574. /* Enable I2C */
  575. if (i2c_dev->setup.analog_filter)
  576. stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
  577. STM32F7_I2C_CR1_ANFOFF);
  578. else
  579. stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
  580. STM32F7_I2C_CR1_ANFOFF);
  581. /* Program the Digital Filter */
  582. stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
  583. STM32F7_I2C_CR1_DNF_MASK);
  584. stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
  585. STM32F7_I2C_CR1_DNF(i2c_dev->setup.dnf));
  586. stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
  587. STM32F7_I2C_CR1_PE);
  588. }
  589. static void stm32f7_i2c_write_tx_data(struct stm32f7_i2c_dev *i2c_dev)
  590. {
  591. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  592. void __iomem *base = i2c_dev->base;
  593. if (f7_msg->count) {
  594. writeb_relaxed(*f7_msg->buf++, base + STM32F7_I2C_TXDR);
  595. f7_msg->count--;
  596. }
  597. }
  598. static void stm32f7_i2c_read_rx_data(struct stm32f7_i2c_dev *i2c_dev)
  599. {
  600. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  601. void __iomem *base = i2c_dev->base;
  602. if (f7_msg->count) {
  603. *f7_msg->buf++ = readb_relaxed(base + STM32F7_I2C_RXDR);
  604. f7_msg->count--;
  605. } else {
  606. /* Flush RX buffer has no data is expected */
  607. readb_relaxed(base + STM32F7_I2C_RXDR);
  608. }
  609. }
  610. static void stm32f7_i2c_reload(struct stm32f7_i2c_dev *i2c_dev)
  611. {
  612. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  613. u32 cr2;
  614. if (i2c_dev->use_dma)
  615. f7_msg->count -= STM32F7_I2C_MAX_LEN;
  616. cr2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR2);
  617. cr2 &= ~STM32F7_I2C_CR2_NBYTES_MASK;
  618. if (f7_msg->count > STM32F7_I2C_MAX_LEN) {
  619. cr2 |= STM32F7_I2C_CR2_NBYTES(STM32F7_I2C_MAX_LEN);
  620. } else {
  621. cr2 &= ~STM32F7_I2C_CR2_RELOAD;
  622. cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
  623. }
  624. writel_relaxed(cr2, i2c_dev->base + STM32F7_I2C_CR2);
  625. }
  626. static void stm32f7_i2c_smbus_reload(struct stm32f7_i2c_dev *i2c_dev)
  627. {
  628. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  629. u32 cr2;
  630. u8 *val;
  631. /*
  632. * For I2C_SMBUS_BLOCK_DATA && I2C_SMBUS_BLOCK_PROC_CALL, the first
  633. * data received inform us how many data will follow.
  634. */
  635. stm32f7_i2c_read_rx_data(i2c_dev);
  636. /*
  637. * Update NBYTES with the value read to continue the transfer
  638. */
  639. val = f7_msg->buf - sizeof(u8);
  640. f7_msg->count = *val;
  641. cr2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR2);
  642. cr2 &= ~(STM32F7_I2C_CR2_NBYTES_MASK | STM32F7_I2C_CR2_RELOAD);
  643. cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
  644. writel_relaxed(cr2, i2c_dev->base + STM32F7_I2C_CR2);
  645. }
  646. static int stm32f7_i2c_release_bus(struct i2c_adapter *i2c_adap)
  647. {
  648. struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(i2c_adap);
  649. dev_info(i2c_dev->dev, "Trying to recover bus\n");
  650. stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
  651. STM32F7_I2C_CR1_PE);
  652. stm32f7_i2c_hw_config(i2c_dev);
  653. return 0;
  654. }
  655. static int stm32f7_i2c_wait_free_bus(struct stm32f7_i2c_dev *i2c_dev)
  656. {
  657. u32 status;
  658. int ret;
  659. ret = readl_relaxed_poll_timeout(i2c_dev->base + STM32F7_I2C_ISR,
  660. status,
  661. !(status & STM32F7_I2C_ISR_BUSY),
  662. 10, 1000);
  663. if (!ret)
  664. return 0;
  665. dev_info(i2c_dev->dev, "bus busy\n");
  666. ret = stm32f7_i2c_release_bus(&i2c_dev->adap);
  667. if (ret) {
  668. dev_err(i2c_dev->dev, "Failed to recover the bus (%d)\n", ret);
  669. return ret;
  670. }
  671. return -EBUSY;
  672. }
  673. static void stm32f7_i2c_xfer_msg(struct stm32f7_i2c_dev *i2c_dev,
  674. struct i2c_msg *msg)
  675. {
  676. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  677. void __iomem *base = i2c_dev->base;
  678. u32 cr1, cr2;
  679. int ret;
  680. f7_msg->addr = msg->addr;
  681. f7_msg->buf = msg->buf;
  682. f7_msg->count = msg->len;
  683. f7_msg->result = 0;
  684. f7_msg->stop = (i2c_dev->msg_id >= i2c_dev->msg_num - 1);
  685. reinit_completion(&i2c_dev->complete);
  686. cr1 = readl_relaxed(base + STM32F7_I2C_CR1);
  687. cr2 = readl_relaxed(base + STM32F7_I2C_CR2);
  688. /* Set transfer direction */
  689. cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
  690. if (msg->flags & I2C_M_RD)
  691. cr2 |= STM32F7_I2C_CR2_RD_WRN;
  692. /* Set slave address */
  693. cr2 &= ~(STM32F7_I2C_CR2_HEAD10R | STM32F7_I2C_CR2_ADD10);
  694. if (msg->flags & I2C_M_TEN) {
  695. cr2 &= ~STM32F7_I2C_CR2_SADD10_MASK;
  696. cr2 |= STM32F7_I2C_CR2_SADD10(f7_msg->addr);
  697. cr2 |= STM32F7_I2C_CR2_ADD10;
  698. } else {
  699. cr2 &= ~STM32F7_I2C_CR2_SADD7_MASK;
  700. cr2 |= STM32F7_I2C_CR2_SADD7(f7_msg->addr);
  701. }
  702. /* Set nb bytes to transfer and reload if needed */
  703. cr2 &= ~(STM32F7_I2C_CR2_NBYTES_MASK | STM32F7_I2C_CR2_RELOAD);
  704. if (f7_msg->count > STM32F7_I2C_MAX_LEN) {
  705. cr2 |= STM32F7_I2C_CR2_NBYTES(STM32F7_I2C_MAX_LEN);
  706. cr2 |= STM32F7_I2C_CR2_RELOAD;
  707. } else {
  708. cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
  709. }
  710. /* Enable NACK, STOP, error and transfer complete interrupts */
  711. cr1 |= STM32F7_I2C_CR1_ERRIE | STM32F7_I2C_CR1_TCIE |
  712. STM32F7_I2C_CR1_STOPIE | STM32F7_I2C_CR1_NACKIE;
  713. /* Clear DMA req and TX/RX interrupt */
  714. cr1 &= ~(STM32F7_I2C_CR1_RXIE | STM32F7_I2C_CR1_TXIE |
  715. STM32F7_I2C_CR1_RXDMAEN | STM32F7_I2C_CR1_TXDMAEN);
  716. /* Configure DMA or enable RX/TX interrupt */
  717. i2c_dev->use_dma = false;
  718. if (i2c_dev->dma && f7_msg->count >= STM32F7_I2C_DMA_LEN_MIN) {
  719. ret = stm32_i2c_prep_dma_xfer(i2c_dev->dev, i2c_dev->dma,
  720. msg->flags & I2C_M_RD,
  721. f7_msg->count, f7_msg->buf,
  722. stm32f7_i2c_dma_callback,
  723. i2c_dev);
  724. if (!ret)
  725. i2c_dev->use_dma = true;
  726. else
  727. dev_warn(i2c_dev->dev, "can't use DMA\n");
  728. }
  729. if (!i2c_dev->use_dma) {
  730. if (msg->flags & I2C_M_RD)
  731. cr1 |= STM32F7_I2C_CR1_RXIE;
  732. else
  733. cr1 |= STM32F7_I2C_CR1_TXIE;
  734. } else {
  735. if (msg->flags & I2C_M_RD)
  736. cr1 |= STM32F7_I2C_CR1_RXDMAEN;
  737. else
  738. cr1 |= STM32F7_I2C_CR1_TXDMAEN;
  739. }
  740. /* Configure Start/Repeated Start */
  741. cr2 |= STM32F7_I2C_CR2_START;
  742. i2c_dev->master_mode = true;
  743. /* Write configurations registers */
  744. writel_relaxed(cr1, base + STM32F7_I2C_CR1);
  745. writel_relaxed(cr2, base + STM32F7_I2C_CR2);
  746. }
  747. static int stm32f7_i2c_smbus_xfer_msg(struct stm32f7_i2c_dev *i2c_dev,
  748. unsigned short flags, u8 command,
  749. union i2c_smbus_data *data)
  750. {
  751. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  752. struct device *dev = i2c_dev->dev;
  753. void __iomem *base = i2c_dev->base;
  754. u32 cr1, cr2;
  755. int i, ret;
  756. f7_msg->result = 0;
  757. reinit_completion(&i2c_dev->complete);
  758. cr2 = readl_relaxed(base + STM32F7_I2C_CR2);
  759. cr1 = readl_relaxed(base + STM32F7_I2C_CR1);
  760. /* Set transfer direction */
  761. cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
  762. if (f7_msg->read_write)
  763. cr2 |= STM32F7_I2C_CR2_RD_WRN;
  764. /* Set slave address */
  765. cr2 &= ~(STM32F7_I2C_CR2_ADD10 | STM32F7_I2C_CR2_SADD7_MASK);
  766. cr2 |= STM32F7_I2C_CR2_SADD7(f7_msg->addr);
  767. f7_msg->smbus_buf[0] = command;
  768. switch (f7_msg->size) {
  769. case I2C_SMBUS_QUICK:
  770. f7_msg->stop = true;
  771. f7_msg->count = 0;
  772. break;
  773. case I2C_SMBUS_BYTE:
  774. f7_msg->stop = true;
  775. f7_msg->count = 1;
  776. break;
  777. case I2C_SMBUS_BYTE_DATA:
  778. if (f7_msg->read_write) {
  779. f7_msg->stop = false;
  780. f7_msg->count = 1;
  781. cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
  782. } else {
  783. f7_msg->stop = true;
  784. f7_msg->count = 2;
  785. f7_msg->smbus_buf[1] = data->byte;
  786. }
  787. break;
  788. case I2C_SMBUS_WORD_DATA:
  789. if (f7_msg->read_write) {
  790. f7_msg->stop = false;
  791. f7_msg->count = 1;
  792. cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
  793. } else {
  794. f7_msg->stop = true;
  795. f7_msg->count = 3;
  796. f7_msg->smbus_buf[1] = data->word & 0xff;
  797. f7_msg->smbus_buf[2] = data->word >> 8;
  798. }
  799. break;
  800. case I2C_SMBUS_BLOCK_DATA:
  801. if (f7_msg->read_write) {
  802. f7_msg->stop = false;
  803. f7_msg->count = 1;
  804. cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
  805. } else {
  806. f7_msg->stop = true;
  807. if (data->block[0] > I2C_SMBUS_BLOCK_MAX ||
  808. !data->block[0]) {
  809. dev_err(dev, "Invalid block write size %d\n",
  810. data->block[0]);
  811. return -EINVAL;
  812. }
  813. f7_msg->count = data->block[0] + 2;
  814. for (i = 1; i < f7_msg->count; i++)
  815. f7_msg->smbus_buf[i] = data->block[i - 1];
  816. }
  817. break;
  818. case I2C_SMBUS_PROC_CALL:
  819. f7_msg->stop = false;
  820. f7_msg->count = 3;
  821. f7_msg->smbus_buf[1] = data->word & 0xff;
  822. f7_msg->smbus_buf[2] = data->word >> 8;
  823. cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
  824. f7_msg->read_write = I2C_SMBUS_READ;
  825. break;
  826. case I2C_SMBUS_BLOCK_PROC_CALL:
  827. f7_msg->stop = false;
  828. if (data->block[0] > I2C_SMBUS_BLOCK_MAX - 1) {
  829. dev_err(dev, "Invalid block write size %d\n",
  830. data->block[0]);
  831. return -EINVAL;
  832. }
  833. f7_msg->count = data->block[0] + 2;
  834. for (i = 1; i < f7_msg->count; i++)
  835. f7_msg->smbus_buf[i] = data->block[i - 1];
  836. cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
  837. f7_msg->read_write = I2C_SMBUS_READ;
  838. break;
  839. default:
  840. dev_err(dev, "Unsupported smbus protocol %d\n", f7_msg->size);
  841. return -EOPNOTSUPP;
  842. }
  843. f7_msg->buf = f7_msg->smbus_buf;
  844. /* Configure PEC */
  845. if ((flags & I2C_CLIENT_PEC) && f7_msg->size != I2C_SMBUS_QUICK) {
  846. cr1 |= STM32F7_I2C_CR1_PECEN;
  847. cr2 |= STM32F7_I2C_CR2_PECBYTE;
  848. if (!f7_msg->read_write)
  849. f7_msg->count++;
  850. } else {
  851. cr1 &= ~STM32F7_I2C_CR1_PECEN;
  852. cr2 &= ~STM32F7_I2C_CR2_PECBYTE;
  853. }
  854. /* Set number of bytes to be transferred */
  855. cr2 &= ~(STM32F7_I2C_CR2_NBYTES_MASK | STM32F7_I2C_CR2_RELOAD);
  856. cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
  857. /* Enable NACK, STOP, error and transfer complete interrupts */
  858. cr1 |= STM32F7_I2C_CR1_ERRIE | STM32F7_I2C_CR1_TCIE |
  859. STM32F7_I2C_CR1_STOPIE | STM32F7_I2C_CR1_NACKIE;
  860. /* Clear DMA req and TX/RX interrupt */
  861. cr1 &= ~(STM32F7_I2C_CR1_RXIE | STM32F7_I2C_CR1_TXIE |
  862. STM32F7_I2C_CR1_RXDMAEN | STM32F7_I2C_CR1_TXDMAEN);
  863. /* Configure DMA or enable RX/TX interrupt */
  864. i2c_dev->use_dma = false;
  865. if (i2c_dev->dma && f7_msg->count >= STM32F7_I2C_DMA_LEN_MIN) {
  866. ret = stm32_i2c_prep_dma_xfer(i2c_dev->dev, i2c_dev->dma,
  867. cr2 & STM32F7_I2C_CR2_RD_WRN,
  868. f7_msg->count, f7_msg->buf,
  869. stm32f7_i2c_dma_callback,
  870. i2c_dev);
  871. if (!ret)
  872. i2c_dev->use_dma = true;
  873. else
  874. dev_warn(i2c_dev->dev, "can't use DMA\n");
  875. }
  876. if (!i2c_dev->use_dma) {
  877. if (cr2 & STM32F7_I2C_CR2_RD_WRN)
  878. cr1 |= STM32F7_I2C_CR1_RXIE;
  879. else
  880. cr1 |= STM32F7_I2C_CR1_TXIE;
  881. } else {
  882. if (cr2 & STM32F7_I2C_CR2_RD_WRN)
  883. cr1 |= STM32F7_I2C_CR1_RXDMAEN;
  884. else
  885. cr1 |= STM32F7_I2C_CR1_TXDMAEN;
  886. }
  887. /* Set Start bit */
  888. cr2 |= STM32F7_I2C_CR2_START;
  889. i2c_dev->master_mode = true;
  890. /* Write configurations registers */
  891. writel_relaxed(cr1, base + STM32F7_I2C_CR1);
  892. writel_relaxed(cr2, base + STM32F7_I2C_CR2);
  893. return 0;
  894. }
  895. static void stm32f7_i2c_smbus_rep_start(struct stm32f7_i2c_dev *i2c_dev)
  896. {
  897. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  898. void __iomem *base = i2c_dev->base;
  899. u32 cr1, cr2;
  900. int ret;
  901. cr2 = readl_relaxed(base + STM32F7_I2C_CR2);
  902. cr1 = readl_relaxed(base + STM32F7_I2C_CR1);
  903. /* Set transfer direction */
  904. cr2 |= STM32F7_I2C_CR2_RD_WRN;
  905. switch (f7_msg->size) {
  906. case I2C_SMBUS_BYTE_DATA:
  907. f7_msg->count = 1;
  908. break;
  909. case I2C_SMBUS_WORD_DATA:
  910. case I2C_SMBUS_PROC_CALL:
  911. f7_msg->count = 2;
  912. break;
  913. case I2C_SMBUS_BLOCK_DATA:
  914. case I2C_SMBUS_BLOCK_PROC_CALL:
  915. f7_msg->count = 1;
  916. cr2 |= STM32F7_I2C_CR2_RELOAD;
  917. break;
  918. }
  919. f7_msg->buf = f7_msg->smbus_buf;
  920. f7_msg->stop = true;
  921. /* Add one byte for PEC if needed */
  922. if (cr1 & STM32F7_I2C_CR1_PECEN)
  923. f7_msg->count++;
  924. /* Set number of bytes to be transferred */
  925. cr2 &= ~(STM32F7_I2C_CR2_NBYTES_MASK);
  926. cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
  927. /*
  928. * Configure RX/TX interrupt:
  929. */
  930. cr1 &= ~(STM32F7_I2C_CR1_RXIE | STM32F7_I2C_CR1_TXIE);
  931. cr1 |= STM32F7_I2C_CR1_RXIE;
  932. /*
  933. * Configure DMA or enable RX/TX interrupt:
  934. * For I2C_SMBUS_BLOCK_DATA and I2C_SMBUS_BLOCK_PROC_CALL we don't use
  935. * dma as we don't know in advance how many data will be received
  936. */
  937. cr1 &= ~(STM32F7_I2C_CR1_RXIE | STM32F7_I2C_CR1_TXIE |
  938. STM32F7_I2C_CR1_RXDMAEN | STM32F7_I2C_CR1_TXDMAEN);
  939. i2c_dev->use_dma = false;
  940. if (i2c_dev->dma && f7_msg->count >= STM32F7_I2C_DMA_LEN_MIN &&
  941. f7_msg->size != I2C_SMBUS_BLOCK_DATA &&
  942. f7_msg->size != I2C_SMBUS_BLOCK_PROC_CALL) {
  943. ret = stm32_i2c_prep_dma_xfer(i2c_dev->dev, i2c_dev->dma,
  944. cr2 & STM32F7_I2C_CR2_RD_WRN,
  945. f7_msg->count, f7_msg->buf,
  946. stm32f7_i2c_dma_callback,
  947. i2c_dev);
  948. if (!ret)
  949. i2c_dev->use_dma = true;
  950. else
  951. dev_warn(i2c_dev->dev, "can't use DMA\n");
  952. }
  953. if (!i2c_dev->use_dma)
  954. cr1 |= STM32F7_I2C_CR1_RXIE;
  955. else
  956. cr1 |= STM32F7_I2C_CR1_RXDMAEN;
  957. /* Configure Repeated Start */
  958. cr2 |= STM32F7_I2C_CR2_START;
  959. /* Write configurations registers */
  960. writel_relaxed(cr1, base + STM32F7_I2C_CR1);
  961. writel_relaxed(cr2, base + STM32F7_I2C_CR2);
  962. }
  963. static int stm32f7_i2c_smbus_check_pec(struct stm32f7_i2c_dev *i2c_dev)
  964. {
  965. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  966. u8 count, internal_pec, received_pec;
  967. internal_pec = readl_relaxed(i2c_dev->base + STM32F7_I2C_PECR);
  968. switch (f7_msg->size) {
  969. case I2C_SMBUS_BYTE:
  970. case I2C_SMBUS_BYTE_DATA:
  971. received_pec = f7_msg->smbus_buf[1];
  972. break;
  973. case I2C_SMBUS_WORD_DATA:
  974. case I2C_SMBUS_PROC_CALL:
  975. received_pec = f7_msg->smbus_buf[2];
  976. break;
  977. case I2C_SMBUS_BLOCK_DATA:
  978. case I2C_SMBUS_BLOCK_PROC_CALL:
  979. count = f7_msg->smbus_buf[0];
  980. received_pec = f7_msg->smbus_buf[count];
  981. break;
  982. default:
  983. dev_err(i2c_dev->dev, "Unsupported smbus protocol for PEC\n");
  984. return -EINVAL;
  985. }
  986. if (internal_pec != received_pec) {
  987. dev_err(i2c_dev->dev, "Bad PEC 0x%02x vs. 0x%02x\n",
  988. internal_pec, received_pec);
  989. return -EBADMSG;
  990. }
  991. return 0;
  992. }
  993. static bool stm32f7_i2c_is_addr_match(struct i2c_client *slave, u32 addcode)
  994. {
  995. u32 addr;
  996. if (!slave)
  997. return false;
  998. if (slave->flags & I2C_CLIENT_TEN) {
  999. /*
  1000. * For 10-bit addr, addcode = 11110XY with
  1001. * X = Bit 9 of slave address
  1002. * Y = Bit 8 of slave address
  1003. */
  1004. addr = slave->addr >> 8;
  1005. addr |= 0x78;
  1006. if (addr == addcode)
  1007. return true;
  1008. } else {
  1009. addr = slave->addr & 0x7f;
  1010. if (addr == addcode)
  1011. return true;
  1012. }
  1013. return false;
  1014. }
  1015. static void stm32f7_i2c_slave_start(struct stm32f7_i2c_dev *i2c_dev)
  1016. {
  1017. struct i2c_client *slave = i2c_dev->slave_running;
  1018. void __iomem *base = i2c_dev->base;
  1019. u32 mask;
  1020. u8 value = 0;
  1021. if (i2c_dev->slave_dir) {
  1022. /* Notify i2c slave that new read transfer is starting */
  1023. i2c_slave_event(slave, I2C_SLAVE_READ_REQUESTED, &value);
  1024. /*
  1025. * Disable slave TX config in case of I2C combined message
  1026. * (I2C Write followed by I2C Read)
  1027. */
  1028. mask = STM32F7_I2C_CR2_RELOAD;
  1029. stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR2, mask);
  1030. mask = STM32F7_I2C_CR1_SBC | STM32F7_I2C_CR1_RXIE |
  1031. STM32F7_I2C_CR1_TCIE;
  1032. stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR1, mask);
  1033. /* Enable TX empty, STOP, NACK interrupts */
  1034. mask = STM32F7_I2C_CR1_STOPIE | STM32F7_I2C_CR1_NACKIE |
  1035. STM32F7_I2C_CR1_TXIE;
  1036. stm32f7_i2c_set_bits(base + STM32F7_I2C_CR1, mask);
  1037. /* Write 1st data byte */
  1038. writel_relaxed(value, base + STM32F7_I2C_TXDR);
  1039. } else {
  1040. /* Notify i2c slave that new write transfer is starting */
  1041. i2c_slave_event(slave, I2C_SLAVE_WRITE_REQUESTED, &value);
  1042. /* Set reload mode to be able to ACK/NACK each received byte */
  1043. mask = STM32F7_I2C_CR2_RELOAD;
  1044. stm32f7_i2c_set_bits(base + STM32F7_I2C_CR2, mask);
  1045. /*
  1046. * Set STOP, NACK, RX empty and transfer complete interrupts.*
  1047. * Set Slave Byte Control to be able to ACK/NACK each data
  1048. * byte received
  1049. */
  1050. mask = STM32F7_I2C_CR1_STOPIE | STM32F7_I2C_CR1_NACKIE |
  1051. STM32F7_I2C_CR1_SBC | STM32F7_I2C_CR1_RXIE |
  1052. STM32F7_I2C_CR1_TCIE;
  1053. stm32f7_i2c_set_bits(base + STM32F7_I2C_CR1, mask);
  1054. }
  1055. }
  1056. static void stm32f7_i2c_slave_addr(struct stm32f7_i2c_dev *i2c_dev)
  1057. {
  1058. void __iomem *base = i2c_dev->base;
  1059. u32 isr, addcode, dir, mask;
  1060. int i;
  1061. isr = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
  1062. addcode = STM32F7_I2C_ISR_ADDCODE_GET(isr);
  1063. dir = isr & STM32F7_I2C_ISR_DIR;
  1064. for (i = 0; i < STM32F7_I2C_MAX_SLAVE; i++) {
  1065. if (stm32f7_i2c_is_addr_match(i2c_dev->slave[i], addcode)) {
  1066. i2c_dev->slave_running = i2c_dev->slave[i];
  1067. i2c_dev->slave_dir = dir;
  1068. /* Start I2C slave processing */
  1069. stm32f7_i2c_slave_start(i2c_dev);
  1070. /* Clear ADDR flag */
  1071. mask = STM32F7_I2C_ICR_ADDRCF;
  1072. writel_relaxed(mask, base + STM32F7_I2C_ICR);
  1073. break;
  1074. }
  1075. }
  1076. }
  1077. static int stm32f7_i2c_get_slave_id(struct stm32f7_i2c_dev *i2c_dev,
  1078. struct i2c_client *slave, int *id)
  1079. {
  1080. int i;
  1081. for (i = 0; i < STM32F7_I2C_MAX_SLAVE; i++) {
  1082. if (i2c_dev->slave[i] == slave) {
  1083. *id = i;
  1084. return 0;
  1085. }
  1086. }
  1087. dev_err(i2c_dev->dev, "Slave 0x%x not registered\n", slave->addr);
  1088. return -ENODEV;
  1089. }
  1090. static int stm32f7_i2c_get_free_slave_id(struct stm32f7_i2c_dev *i2c_dev,
  1091. struct i2c_client *slave, int *id)
  1092. {
  1093. struct device *dev = i2c_dev->dev;
  1094. int i;
  1095. /*
  1096. * slave[0] supports 7-bit and 10-bit slave address
  1097. * slave[1] supports 7-bit slave address only
  1098. */
  1099. for (i = STM32F7_I2C_MAX_SLAVE - 1; i >= 0; i--) {
  1100. if (i == 1 && (slave->flags & I2C_CLIENT_TEN))
  1101. continue;
  1102. if (!i2c_dev->slave[i]) {
  1103. *id = i;
  1104. return 0;
  1105. }
  1106. }
  1107. dev_err(dev, "Slave 0x%x could not be registered\n", slave->addr);
  1108. return -EINVAL;
  1109. }
  1110. static bool stm32f7_i2c_is_slave_registered(struct stm32f7_i2c_dev *i2c_dev)
  1111. {
  1112. int i;
  1113. for (i = 0; i < STM32F7_I2C_MAX_SLAVE; i++) {
  1114. if (i2c_dev->slave[i])
  1115. return true;
  1116. }
  1117. return false;
  1118. }
  1119. static bool stm32f7_i2c_is_slave_busy(struct stm32f7_i2c_dev *i2c_dev)
  1120. {
  1121. int i, busy;
  1122. busy = 0;
  1123. for (i = 0; i < STM32F7_I2C_MAX_SLAVE; i++) {
  1124. if (i2c_dev->slave[i])
  1125. busy++;
  1126. }
  1127. return i == busy;
  1128. }
  1129. static irqreturn_t stm32f7_i2c_slave_isr_event(struct stm32f7_i2c_dev *i2c_dev)
  1130. {
  1131. void __iomem *base = i2c_dev->base;
  1132. u32 cr2, status, mask;
  1133. u8 val;
  1134. int ret;
  1135. status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
  1136. /* Slave transmitter mode */
  1137. if (status & STM32F7_I2C_ISR_TXIS) {
  1138. i2c_slave_event(i2c_dev->slave_running,
  1139. I2C_SLAVE_READ_PROCESSED,
  1140. &val);
  1141. /* Write data byte */
  1142. writel_relaxed(val, base + STM32F7_I2C_TXDR);
  1143. }
  1144. /* Transfer Complete Reload for Slave receiver mode */
  1145. if (status & STM32F7_I2C_ISR_TCR || status & STM32F7_I2C_ISR_RXNE) {
  1146. /*
  1147. * Read data byte then set NBYTES to receive next byte or NACK
  1148. * the current received byte
  1149. */
  1150. val = readb_relaxed(i2c_dev->base + STM32F7_I2C_RXDR);
  1151. ret = i2c_slave_event(i2c_dev->slave_running,
  1152. I2C_SLAVE_WRITE_RECEIVED,
  1153. &val);
  1154. if (!ret) {
  1155. cr2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR2);
  1156. cr2 |= STM32F7_I2C_CR2_NBYTES(1);
  1157. writel_relaxed(cr2, i2c_dev->base + STM32F7_I2C_CR2);
  1158. } else {
  1159. mask = STM32F7_I2C_CR2_NACK;
  1160. stm32f7_i2c_set_bits(base + STM32F7_I2C_CR2, mask);
  1161. }
  1162. }
  1163. /* NACK received */
  1164. if (status & STM32F7_I2C_ISR_NACKF) {
  1165. dev_dbg(i2c_dev->dev, "<%s>: Receive NACK\n", __func__);
  1166. writel_relaxed(STM32F7_I2C_ICR_NACKCF, base + STM32F7_I2C_ICR);
  1167. }
  1168. /* STOP received */
  1169. if (status & STM32F7_I2C_ISR_STOPF) {
  1170. /* Disable interrupts */
  1171. stm32f7_i2c_disable_irq(i2c_dev, STM32F7_I2C_XFER_IRQ_MASK);
  1172. if (i2c_dev->slave_dir) {
  1173. /*
  1174. * Flush TX buffer in order to not used the byte in
  1175. * TXDR for the next transfer
  1176. */
  1177. mask = STM32F7_I2C_ISR_TXE;
  1178. stm32f7_i2c_set_bits(base + STM32F7_I2C_ISR, mask);
  1179. }
  1180. /* Clear STOP flag */
  1181. writel_relaxed(STM32F7_I2C_ICR_STOPCF, base + STM32F7_I2C_ICR);
  1182. /* Notify i2c slave that a STOP flag has been detected */
  1183. i2c_slave_event(i2c_dev->slave_running, I2C_SLAVE_STOP, &val);
  1184. i2c_dev->slave_running = NULL;
  1185. }
  1186. /* Address match received */
  1187. if (status & STM32F7_I2C_ISR_ADDR)
  1188. stm32f7_i2c_slave_addr(i2c_dev);
  1189. return IRQ_HANDLED;
  1190. }
  1191. static irqreturn_t stm32f7_i2c_isr_event(int irq, void *data)
  1192. {
  1193. struct stm32f7_i2c_dev *i2c_dev = data;
  1194. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  1195. void __iomem *base = i2c_dev->base;
  1196. u32 status, mask;
  1197. int ret = IRQ_HANDLED;
  1198. /* Check if the interrupt if for a slave device */
  1199. if (!i2c_dev->master_mode) {
  1200. ret = stm32f7_i2c_slave_isr_event(i2c_dev);
  1201. return ret;
  1202. }
  1203. status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
  1204. /* Tx empty */
  1205. if (status & STM32F7_I2C_ISR_TXIS)
  1206. stm32f7_i2c_write_tx_data(i2c_dev);
  1207. /* RX not empty */
  1208. if (status & STM32F7_I2C_ISR_RXNE)
  1209. stm32f7_i2c_read_rx_data(i2c_dev);
  1210. /* NACK received */
  1211. if (status & STM32F7_I2C_ISR_NACKF) {
  1212. dev_dbg(i2c_dev->dev, "<%s>: Receive NACK\n", __func__);
  1213. writel_relaxed(STM32F7_I2C_ICR_NACKCF, base + STM32F7_I2C_ICR);
  1214. f7_msg->result = -ENXIO;
  1215. }
  1216. /* STOP detection flag */
  1217. if (status & STM32F7_I2C_ISR_STOPF) {
  1218. /* Disable interrupts */
  1219. if (stm32f7_i2c_is_slave_registered(i2c_dev))
  1220. mask = STM32F7_I2C_XFER_IRQ_MASK;
  1221. else
  1222. mask = STM32F7_I2C_ALL_IRQ_MASK;
  1223. stm32f7_i2c_disable_irq(i2c_dev, mask);
  1224. /* Clear STOP flag */
  1225. writel_relaxed(STM32F7_I2C_ICR_STOPCF, base + STM32F7_I2C_ICR);
  1226. if (i2c_dev->use_dma) {
  1227. ret = IRQ_WAKE_THREAD;
  1228. } else {
  1229. i2c_dev->master_mode = false;
  1230. complete(&i2c_dev->complete);
  1231. }
  1232. }
  1233. /* Transfer complete */
  1234. if (status & STM32F7_I2C_ISR_TC) {
  1235. if (f7_msg->stop) {
  1236. mask = STM32F7_I2C_CR2_STOP;
  1237. stm32f7_i2c_set_bits(base + STM32F7_I2C_CR2, mask);
  1238. } else if (i2c_dev->use_dma) {
  1239. ret = IRQ_WAKE_THREAD;
  1240. } else if (f7_msg->smbus) {
  1241. stm32f7_i2c_smbus_rep_start(i2c_dev);
  1242. } else {
  1243. i2c_dev->msg_id++;
  1244. i2c_dev->msg++;
  1245. stm32f7_i2c_xfer_msg(i2c_dev, i2c_dev->msg);
  1246. }
  1247. }
  1248. if (status & STM32F7_I2C_ISR_TCR) {
  1249. if (f7_msg->smbus)
  1250. stm32f7_i2c_smbus_reload(i2c_dev);
  1251. else
  1252. stm32f7_i2c_reload(i2c_dev);
  1253. }
  1254. return ret;
  1255. }
  1256. static irqreturn_t stm32f7_i2c_isr_event_thread(int irq, void *data)
  1257. {
  1258. struct stm32f7_i2c_dev *i2c_dev = data;
  1259. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  1260. struct stm32_i2c_dma *dma = i2c_dev->dma;
  1261. u32 status;
  1262. int ret;
  1263. /*
  1264. * Wait for dma transfer completion before sending next message or
  1265. * notity the end of xfer to the client
  1266. */
  1267. ret = wait_for_completion_timeout(&i2c_dev->dma->dma_complete, HZ);
  1268. if (!ret) {
  1269. dev_dbg(i2c_dev->dev, "<%s>: Timed out\n", __func__);
  1270. stm32f7_i2c_disable_dma_req(i2c_dev);
  1271. dmaengine_terminate_all(dma->chan_using);
  1272. f7_msg->result = -ETIMEDOUT;
  1273. }
  1274. status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
  1275. if (status & STM32F7_I2C_ISR_TC) {
  1276. if (f7_msg->smbus) {
  1277. stm32f7_i2c_smbus_rep_start(i2c_dev);
  1278. } else {
  1279. i2c_dev->msg_id++;
  1280. i2c_dev->msg++;
  1281. stm32f7_i2c_xfer_msg(i2c_dev, i2c_dev->msg);
  1282. }
  1283. } else {
  1284. i2c_dev->master_mode = false;
  1285. complete(&i2c_dev->complete);
  1286. }
  1287. return IRQ_HANDLED;
  1288. }
  1289. static irqreturn_t stm32f7_i2c_isr_error(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. void __iomem *base = i2c_dev->base;
  1294. struct device *dev = i2c_dev->dev;
  1295. struct stm32_i2c_dma *dma = i2c_dev->dma;
  1296. u32 status;
  1297. status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
  1298. /* Bus error */
  1299. if (status & STM32F7_I2C_ISR_BERR) {
  1300. dev_err(dev, "<%s>: Bus error\n", __func__);
  1301. writel_relaxed(STM32F7_I2C_ICR_BERRCF, base + STM32F7_I2C_ICR);
  1302. stm32f7_i2c_release_bus(&i2c_dev->adap);
  1303. f7_msg->result = -EIO;
  1304. }
  1305. /* Arbitration loss */
  1306. if (status & STM32F7_I2C_ISR_ARLO) {
  1307. dev_dbg(dev, "<%s>: Arbitration loss\n", __func__);
  1308. writel_relaxed(STM32F7_I2C_ICR_ARLOCF, base + STM32F7_I2C_ICR);
  1309. f7_msg->result = -EAGAIN;
  1310. }
  1311. if (status & STM32F7_I2C_ISR_PECERR) {
  1312. dev_err(dev, "<%s>: PEC error in reception\n", __func__);
  1313. writel_relaxed(STM32F7_I2C_ICR_PECCF, base + STM32F7_I2C_ICR);
  1314. f7_msg->result = -EINVAL;
  1315. }
  1316. if (!i2c_dev->slave_running) {
  1317. u32 mask;
  1318. /* Disable interrupts */
  1319. if (stm32f7_i2c_is_slave_registered(i2c_dev))
  1320. mask = STM32F7_I2C_XFER_IRQ_MASK;
  1321. else
  1322. mask = STM32F7_I2C_ALL_IRQ_MASK;
  1323. stm32f7_i2c_disable_irq(i2c_dev, mask);
  1324. }
  1325. /* Disable dma */
  1326. if (i2c_dev->use_dma) {
  1327. stm32f7_i2c_disable_dma_req(i2c_dev);
  1328. dmaengine_terminate_all(dma->chan_using);
  1329. }
  1330. i2c_dev->master_mode = false;
  1331. complete(&i2c_dev->complete);
  1332. return IRQ_HANDLED;
  1333. }
  1334. static int stm32f7_i2c_xfer(struct i2c_adapter *i2c_adap,
  1335. struct i2c_msg msgs[], int num)
  1336. {
  1337. struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(i2c_adap);
  1338. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  1339. struct stm32_i2c_dma *dma = i2c_dev->dma;
  1340. unsigned long time_left;
  1341. int ret;
  1342. i2c_dev->msg = msgs;
  1343. i2c_dev->msg_num = num;
  1344. i2c_dev->msg_id = 0;
  1345. f7_msg->smbus = false;
  1346. ret = clk_enable(i2c_dev->clk);
  1347. if (ret) {
  1348. dev_err(i2c_dev->dev, "Failed to enable clock\n");
  1349. return ret;
  1350. }
  1351. ret = stm32f7_i2c_wait_free_bus(i2c_dev);
  1352. if (ret)
  1353. goto clk_free;
  1354. stm32f7_i2c_xfer_msg(i2c_dev, msgs);
  1355. time_left = wait_for_completion_timeout(&i2c_dev->complete,
  1356. i2c_dev->adap.timeout);
  1357. ret = f7_msg->result;
  1358. if (!time_left) {
  1359. dev_dbg(i2c_dev->dev, "Access to slave 0x%x timed out\n",
  1360. i2c_dev->msg->addr);
  1361. if (i2c_dev->use_dma)
  1362. dmaengine_terminate_all(dma->chan_using);
  1363. ret = -ETIMEDOUT;
  1364. }
  1365. clk_free:
  1366. clk_disable(i2c_dev->clk);
  1367. return (ret < 0) ? ret : num;
  1368. }
  1369. static int stm32f7_i2c_smbus_xfer(struct i2c_adapter *adapter, u16 addr,
  1370. unsigned short flags, char read_write,
  1371. u8 command, int size,
  1372. union i2c_smbus_data *data)
  1373. {
  1374. struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(adapter);
  1375. struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
  1376. struct stm32_i2c_dma *dma = i2c_dev->dma;
  1377. struct device *dev = i2c_dev->dev;
  1378. unsigned long timeout;
  1379. int i, ret;
  1380. f7_msg->addr = addr;
  1381. f7_msg->size = size;
  1382. f7_msg->read_write = read_write;
  1383. f7_msg->smbus = true;
  1384. ret = clk_enable(i2c_dev->clk);
  1385. if (ret) {
  1386. dev_err(i2c_dev->dev, "Failed to enable clock\n");
  1387. return ret;
  1388. }
  1389. ret = stm32f7_i2c_wait_free_bus(i2c_dev);
  1390. if (ret)
  1391. goto clk_free;
  1392. ret = stm32f7_i2c_smbus_xfer_msg(i2c_dev, flags, command, data);
  1393. if (ret)
  1394. goto clk_free;
  1395. timeout = wait_for_completion_timeout(&i2c_dev->complete,
  1396. i2c_dev->adap.timeout);
  1397. ret = f7_msg->result;
  1398. if (ret)
  1399. goto clk_free;
  1400. if (!timeout) {
  1401. dev_dbg(dev, "Access to slave 0x%x timed out\n", f7_msg->addr);
  1402. if (i2c_dev->use_dma)
  1403. dmaengine_terminate_all(dma->chan_using);
  1404. ret = -ETIMEDOUT;
  1405. goto clk_free;
  1406. }
  1407. /* Check PEC */
  1408. if ((flags & I2C_CLIENT_PEC) && size != I2C_SMBUS_QUICK && read_write) {
  1409. ret = stm32f7_i2c_smbus_check_pec(i2c_dev);
  1410. if (ret)
  1411. goto clk_free;
  1412. }
  1413. if (read_write && size != I2C_SMBUS_QUICK) {
  1414. switch (size) {
  1415. case I2C_SMBUS_BYTE:
  1416. case I2C_SMBUS_BYTE_DATA:
  1417. data->byte = f7_msg->smbus_buf[0];
  1418. break;
  1419. case I2C_SMBUS_WORD_DATA:
  1420. case I2C_SMBUS_PROC_CALL:
  1421. data->word = f7_msg->smbus_buf[0] |
  1422. (f7_msg->smbus_buf[1] << 8);
  1423. break;
  1424. case I2C_SMBUS_BLOCK_DATA:
  1425. case I2C_SMBUS_BLOCK_PROC_CALL:
  1426. for (i = 0; i <= f7_msg->smbus_buf[0]; i++)
  1427. data->block[i] = f7_msg->smbus_buf[i];
  1428. break;
  1429. default:
  1430. dev_err(dev, "Unsupported smbus transaction\n");
  1431. ret = -EINVAL;
  1432. }
  1433. }
  1434. clk_free:
  1435. clk_disable(i2c_dev->clk);
  1436. return ret;
  1437. }
  1438. static int stm32f7_i2c_reg_slave(struct i2c_client *slave)
  1439. {
  1440. struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(slave->adapter);
  1441. void __iomem *base = i2c_dev->base;
  1442. struct device *dev = i2c_dev->dev;
  1443. u32 oar1, oar2, mask;
  1444. int id, ret;
  1445. if (slave->flags & I2C_CLIENT_PEC) {
  1446. dev_err(dev, "SMBus PEC not supported in slave mode\n");
  1447. return -EINVAL;
  1448. }
  1449. if (stm32f7_i2c_is_slave_busy(i2c_dev)) {
  1450. dev_err(dev, "Too much slave registered\n");
  1451. return -EBUSY;
  1452. }
  1453. ret = stm32f7_i2c_get_free_slave_id(i2c_dev, slave, &id);
  1454. if (ret)
  1455. return ret;
  1456. if (!(stm32f7_i2c_is_slave_registered(i2c_dev))) {
  1457. ret = clk_enable(i2c_dev->clk);
  1458. if (ret) {
  1459. dev_err(dev, "Failed to enable clock\n");
  1460. return ret;
  1461. }
  1462. }
  1463. if (id == 0) {
  1464. /* Configure Own Address 1 */
  1465. oar1 = readl_relaxed(i2c_dev->base + STM32F7_I2C_OAR1);
  1466. oar1 &= ~STM32F7_I2C_OAR1_MASK;
  1467. if (slave->flags & I2C_CLIENT_TEN) {
  1468. oar1 |= STM32F7_I2C_OAR1_OA1_10(slave->addr);
  1469. oar1 |= STM32F7_I2C_OAR1_OA1MODE;
  1470. } else {
  1471. oar1 |= STM32F7_I2C_OAR1_OA1_7(slave->addr);
  1472. }
  1473. oar1 |= STM32F7_I2C_OAR1_OA1EN;
  1474. i2c_dev->slave[id] = slave;
  1475. writel_relaxed(oar1, i2c_dev->base + STM32F7_I2C_OAR1);
  1476. } else if (id == 1) {
  1477. /* Configure Own Address 2 */
  1478. oar2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_OAR2);
  1479. oar2 &= ~STM32F7_I2C_OAR2_MASK;
  1480. if (slave->flags & I2C_CLIENT_TEN) {
  1481. ret = -EOPNOTSUPP;
  1482. goto exit;
  1483. }
  1484. oar2 |= STM32F7_I2C_OAR2_OA2_7(slave->addr);
  1485. oar2 |= STM32F7_I2C_OAR2_OA2EN;
  1486. i2c_dev->slave[id] = slave;
  1487. writel_relaxed(oar2, i2c_dev->base + STM32F7_I2C_OAR2);
  1488. } else {
  1489. ret = -ENODEV;
  1490. goto exit;
  1491. }
  1492. /* Enable ACK */
  1493. stm32f7_i2c_clr_bits(base + STM32F7_I2C_CR2, STM32F7_I2C_CR2_NACK);
  1494. /* Enable Address match interrupt, error interrupt and enable I2C */
  1495. mask = STM32F7_I2C_CR1_ADDRIE | STM32F7_I2C_CR1_ERRIE |
  1496. STM32F7_I2C_CR1_PE;
  1497. stm32f7_i2c_set_bits(base + STM32F7_I2C_CR1, mask);
  1498. return 0;
  1499. exit:
  1500. if (!(stm32f7_i2c_is_slave_registered(i2c_dev)))
  1501. clk_disable(i2c_dev->clk);
  1502. return ret;
  1503. }
  1504. static int stm32f7_i2c_unreg_slave(struct i2c_client *slave)
  1505. {
  1506. struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(slave->adapter);
  1507. void __iomem *base = i2c_dev->base;
  1508. u32 mask;
  1509. int id, ret;
  1510. ret = stm32f7_i2c_get_slave_id(i2c_dev, slave, &id);
  1511. if (ret)
  1512. return ret;
  1513. WARN_ON(!i2c_dev->slave[id]);
  1514. if (id == 0) {
  1515. mask = STM32F7_I2C_OAR1_OA1EN;
  1516. stm32f7_i2c_clr_bits(base + STM32F7_I2C_OAR1, mask);
  1517. } else {
  1518. mask = STM32F7_I2C_OAR2_OA2EN;
  1519. stm32f7_i2c_clr_bits(base + STM32F7_I2C_OAR2, mask);
  1520. }
  1521. i2c_dev->slave[id] = NULL;
  1522. if (!(stm32f7_i2c_is_slave_registered(i2c_dev))) {
  1523. stm32f7_i2c_disable_irq(i2c_dev, STM32F7_I2C_ALL_IRQ_MASK);
  1524. clk_disable(i2c_dev->clk);
  1525. }
  1526. return 0;
  1527. }
  1528. static u32 stm32f7_i2c_func(struct i2c_adapter *adap)
  1529. {
  1530. return I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR | I2C_FUNC_SLAVE |
  1531. I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
  1532. I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
  1533. I2C_FUNC_SMBUS_BLOCK_DATA | I2C_FUNC_SMBUS_BLOCK_PROC_CALL |
  1534. I2C_FUNC_SMBUS_PROC_CALL | I2C_FUNC_SMBUS_PEC;
  1535. }
  1536. static struct i2c_algorithm stm32f7_i2c_algo = {
  1537. .master_xfer = stm32f7_i2c_xfer,
  1538. .smbus_xfer = stm32f7_i2c_smbus_xfer,
  1539. .functionality = stm32f7_i2c_func,
  1540. .reg_slave = stm32f7_i2c_reg_slave,
  1541. .unreg_slave = stm32f7_i2c_unreg_slave,
  1542. };
  1543. static int stm32f7_i2c_probe(struct platform_device *pdev)
  1544. {
  1545. struct stm32f7_i2c_dev *i2c_dev;
  1546. const struct stm32f7_i2c_setup *setup;
  1547. struct resource *res;
  1548. u32 clk_rate, rise_time, fall_time;
  1549. struct i2c_adapter *adap;
  1550. struct reset_control *rst;
  1551. dma_addr_t phy_addr;
  1552. int irq_error, irq_event, ret;
  1553. i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL);
  1554. if (!i2c_dev)
  1555. return -ENOMEM;
  1556. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  1557. i2c_dev->base = devm_ioremap_resource(&pdev->dev, res);
  1558. if (IS_ERR(i2c_dev->base))
  1559. return PTR_ERR(i2c_dev->base);
  1560. phy_addr = (dma_addr_t)res->start;
  1561. irq_event = platform_get_irq(pdev, 0);
  1562. if (irq_event <= 0) {
  1563. if (irq_event != -EPROBE_DEFER)
  1564. dev_err(&pdev->dev, "Failed to get IRQ event: %d\n",
  1565. irq_event);
  1566. return irq_event ? : -ENOENT;
  1567. }
  1568. irq_error = platform_get_irq(pdev, 1);
  1569. if (irq_error <= 0) {
  1570. if (irq_error != -EPROBE_DEFER)
  1571. dev_err(&pdev->dev, "Failed to get IRQ error: %d\n",
  1572. irq_error);
  1573. return irq_error ? : -ENOENT;
  1574. }
  1575. i2c_dev->clk = devm_clk_get(&pdev->dev, NULL);
  1576. if (IS_ERR(i2c_dev->clk)) {
  1577. dev_err(&pdev->dev, "Error: Missing controller clock\n");
  1578. return PTR_ERR(i2c_dev->clk);
  1579. }
  1580. ret = clk_prepare_enable(i2c_dev->clk);
  1581. if (ret) {
  1582. dev_err(&pdev->dev, "Failed to prepare_enable clock\n");
  1583. return ret;
  1584. }
  1585. i2c_dev->speed = STM32_I2C_SPEED_STANDARD;
  1586. ret = device_property_read_u32(&pdev->dev, "clock-frequency",
  1587. &clk_rate);
  1588. if (!ret && clk_rate >= 1000000)
  1589. i2c_dev->speed = STM32_I2C_SPEED_FAST_PLUS;
  1590. else if (!ret && clk_rate >= 400000)
  1591. i2c_dev->speed = STM32_I2C_SPEED_FAST;
  1592. else if (!ret && clk_rate >= 100000)
  1593. i2c_dev->speed = STM32_I2C_SPEED_STANDARD;
  1594. rst = devm_reset_control_get(&pdev->dev, NULL);
  1595. if (IS_ERR(rst)) {
  1596. dev_err(&pdev->dev, "Error: Missing controller reset\n");
  1597. ret = PTR_ERR(rst);
  1598. goto clk_free;
  1599. }
  1600. reset_control_assert(rst);
  1601. udelay(2);
  1602. reset_control_deassert(rst);
  1603. i2c_dev->dev = &pdev->dev;
  1604. ret = devm_request_threaded_irq(&pdev->dev, irq_event,
  1605. stm32f7_i2c_isr_event,
  1606. stm32f7_i2c_isr_event_thread,
  1607. IRQF_ONESHOT,
  1608. pdev->name, i2c_dev);
  1609. if (ret) {
  1610. dev_err(&pdev->dev, "Failed to request irq event %i\n",
  1611. irq_event);
  1612. goto clk_free;
  1613. }
  1614. ret = devm_request_irq(&pdev->dev, irq_error, stm32f7_i2c_isr_error, 0,
  1615. pdev->name, i2c_dev);
  1616. if (ret) {
  1617. dev_err(&pdev->dev, "Failed to request irq error %i\n",
  1618. irq_error);
  1619. goto clk_free;
  1620. }
  1621. setup = of_device_get_match_data(&pdev->dev);
  1622. if (!setup) {
  1623. dev_err(&pdev->dev, "Can't get device data\n");
  1624. ret = -ENODEV;
  1625. goto clk_free;
  1626. }
  1627. i2c_dev->setup = *setup;
  1628. ret = device_property_read_u32(i2c_dev->dev, "i2c-scl-rising-time-ns",
  1629. &rise_time);
  1630. if (!ret)
  1631. i2c_dev->setup.rise_time = rise_time;
  1632. ret = device_property_read_u32(i2c_dev->dev, "i2c-scl-falling-time-ns",
  1633. &fall_time);
  1634. if (!ret)
  1635. i2c_dev->setup.fall_time = fall_time;
  1636. ret = stm32f7_i2c_setup_timing(i2c_dev, &i2c_dev->setup);
  1637. if (ret)
  1638. goto clk_free;
  1639. stm32f7_i2c_hw_config(i2c_dev);
  1640. adap = &i2c_dev->adap;
  1641. i2c_set_adapdata(adap, i2c_dev);
  1642. snprintf(adap->name, sizeof(adap->name), "STM32F7 I2C(%pa)",
  1643. &res->start);
  1644. adap->owner = THIS_MODULE;
  1645. adap->timeout = 2 * HZ;
  1646. adap->retries = 3;
  1647. adap->algo = &stm32f7_i2c_algo;
  1648. adap->dev.parent = &pdev->dev;
  1649. adap->dev.of_node = pdev->dev.of_node;
  1650. init_completion(&i2c_dev->complete);
  1651. /* Init DMA config if supported */
  1652. i2c_dev->dma = stm32_i2c_dma_request(i2c_dev->dev, phy_addr,
  1653. STM32F7_I2C_TXDR,
  1654. STM32F7_I2C_RXDR);
  1655. if (PTR_ERR(i2c_dev->dma) == -ENODEV)
  1656. i2c_dev->dma = NULL;
  1657. else if (IS_ERR(i2c_dev->dma)) {
  1658. ret = PTR_ERR(i2c_dev->dma);
  1659. if (ret != -EPROBE_DEFER)
  1660. dev_err(&pdev->dev,
  1661. "Failed to request dma error %i\n", ret);
  1662. goto clk_free;
  1663. }
  1664. ret = i2c_add_adapter(adap);
  1665. if (ret)
  1666. goto clk_free;
  1667. platform_set_drvdata(pdev, i2c_dev);
  1668. clk_disable(i2c_dev->clk);
  1669. dev_info(i2c_dev->dev, "STM32F7 I2C-%d bus adapter\n", adap->nr);
  1670. return 0;
  1671. clk_free:
  1672. clk_disable_unprepare(i2c_dev->clk);
  1673. return ret;
  1674. }
  1675. static int stm32f7_i2c_remove(struct platform_device *pdev)
  1676. {
  1677. struct stm32f7_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
  1678. if (i2c_dev->dma) {
  1679. stm32_i2c_dma_free(i2c_dev->dma);
  1680. i2c_dev->dma = NULL;
  1681. }
  1682. i2c_del_adapter(&i2c_dev->adap);
  1683. clk_unprepare(i2c_dev->clk);
  1684. return 0;
  1685. }
  1686. static const struct of_device_id stm32f7_i2c_match[] = {
  1687. { .compatible = "st,stm32f7-i2c", .data = &stm32f7_setup},
  1688. {},
  1689. };
  1690. MODULE_DEVICE_TABLE(of, stm32f7_i2c_match);
  1691. static struct platform_driver stm32f7_i2c_driver = {
  1692. .driver = {
  1693. .name = "stm32f7-i2c",
  1694. .of_match_table = stm32f7_i2c_match,
  1695. },
  1696. .probe = stm32f7_i2c_probe,
  1697. .remove = stm32f7_i2c_remove,
  1698. };
  1699. module_platform_driver(stm32f7_i2c_driver);
  1700. MODULE_AUTHOR("M'boumba Cedric Madianga <cedric.madianga@gmail.com>");
  1701. MODULE_DESCRIPTION("STMicroelectronics STM32F7 I2C driver");
  1702. MODULE_LICENSE("GPL v2");