pwm-stm32.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) STMicroelectronics 2016
  4. *
  5. * Author: Gerald Baeza <gerald.baeza@st.com>
  6. *
  7. * Inspired by timer-stm32.c from Maxime Coquelin
  8. * pwm-atmel.c from Bo Shen
  9. */
  10. #include <linux/bitfield.h>
  11. #include <linux/mfd/stm32-timers.h>
  12. #include <linux/module.h>
  13. #include <linux/of.h>
  14. #include <linux/pinctrl/consumer.h>
  15. #include <linux/platform_device.h>
  16. #include <linux/pwm.h>
  17. #define CCMR_CHANNEL_SHIFT 8
  18. #define CCMR_CHANNEL_MASK 0xFF
  19. #define MAX_BREAKINPUT 2
  20. struct stm32_breakinput {
  21. u32 index;
  22. u32 level;
  23. u32 filter;
  24. };
  25. struct stm32_pwm {
  26. struct mutex lock; /* protect pwm config/enable */
  27. struct clk *clk;
  28. struct regmap *regmap;
  29. u32 max_arr;
  30. bool have_complementary_output;
  31. struct stm32_breakinput breakinputs[MAX_BREAKINPUT];
  32. unsigned int num_breakinputs;
  33. u32 capture[4] ____cacheline_aligned; /* DMA'able buffer */
  34. };
  35. static inline struct stm32_pwm *to_stm32_pwm_dev(struct pwm_chip *chip)
  36. {
  37. return pwmchip_get_drvdata(chip);
  38. }
  39. static u32 active_channels(struct stm32_pwm *dev)
  40. {
  41. u32 ccer;
  42. regmap_read(dev->regmap, TIM_CCER, &ccer);
  43. return ccer & TIM_CCER_CCXE;
  44. }
  45. #define TIM_CCER_CC12P (TIM_CCER_CC1P | TIM_CCER_CC2P)
  46. #define TIM_CCER_CC12E (TIM_CCER_CC1E | TIM_CCER_CC2E)
  47. #define TIM_CCER_CC34P (TIM_CCER_CC3P | TIM_CCER_CC4P)
  48. #define TIM_CCER_CC34E (TIM_CCER_CC3E | TIM_CCER_CC4E)
  49. /*
  50. * Capture using PWM input mode:
  51. * ___ ___
  52. * TI[1, 2, 3 or 4]: ........._| |________|
  53. * ^0 ^1 ^2
  54. * . . .
  55. * . . XXXXX
  56. * . . XXXXX |
  57. * . XXXXX . |
  58. * XXXXX . . |
  59. * COUNTER: ______XXXXX . . . |_XXX
  60. * start^ . . . ^stop
  61. * . . . .
  62. * v v . v
  63. * v
  64. * CCR1/CCR3: tx..........t0...........t2
  65. * CCR2/CCR4: tx..............t1.........
  66. *
  67. * DMA burst transfer: | |
  68. * v v
  69. * DMA buffer: { t0, tx } { t2, t1 }
  70. * DMA done: ^
  71. *
  72. * 0: IC1/3 snapchot on rising edge: counter value -> CCR1/CCR3
  73. * + DMA transfer CCR[1/3] & CCR[2/4] values (t0, tx: doesn't care)
  74. * 1: IC2/4 snapchot on falling edge: counter value -> CCR2/CCR4
  75. * 2: IC1/3 snapchot on rising edge: counter value -> CCR1/CCR3
  76. * + DMA transfer CCR[1/3] & CCR[2/4] values (t2, t1)
  77. *
  78. * DMA done, compute:
  79. * - Period = t2 - t0
  80. * - Duty cycle = t1 - t0
  81. */
  82. static int stm32_pwm_raw_capture(struct pwm_chip *chip, struct pwm_device *pwm,
  83. unsigned long tmo_ms, u32 *raw_prd,
  84. u32 *raw_dty)
  85. {
  86. struct stm32_pwm *priv = to_stm32_pwm_dev(chip);
  87. struct device *parent = pwmchip_parent(chip)->parent;
  88. enum stm32_timers_dmas dma_id;
  89. u32 ccen, ccr;
  90. int ret;
  91. /* Ensure registers have been updated, enable counter and capture */
  92. regmap_set_bits(priv->regmap, TIM_EGR, TIM_EGR_UG);
  93. regmap_set_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN);
  94. /* Use cc1 or cc3 DMA resp for PWM input channels 1 & 2 or 3 & 4 */
  95. dma_id = pwm->hwpwm < 2 ? STM32_TIMERS_DMA_CH1 : STM32_TIMERS_DMA_CH3;
  96. ccen = pwm->hwpwm < 2 ? TIM_CCER_CC12E : TIM_CCER_CC34E;
  97. ccr = pwm->hwpwm < 2 ? TIM_CCR1 : TIM_CCR3;
  98. regmap_set_bits(priv->regmap, TIM_CCER, ccen);
  99. /*
  100. * Timer DMA burst mode. Request 2 registers, 2 bursts, to get both
  101. * CCR1 & CCR2 (or CCR3 & CCR4) on each capture event.
  102. * We'll get two capture snapchots: { CCR1, CCR2 }, { CCR1, CCR2 }
  103. * or { CCR3, CCR4 }, { CCR3, CCR4 }
  104. */
  105. ret = stm32_timers_dma_burst_read(parent, priv->capture, dma_id, ccr, 2,
  106. 2, tmo_ms);
  107. if (ret)
  108. goto stop;
  109. /* Period: t2 - t0 (take care of counter overflow) */
  110. if (priv->capture[0] <= priv->capture[2])
  111. *raw_prd = priv->capture[2] - priv->capture[0];
  112. else
  113. *raw_prd = priv->max_arr - priv->capture[0] + priv->capture[2];
  114. /* Duty cycle capture requires at least two capture units */
  115. if (pwm->chip->npwm < 2)
  116. *raw_dty = 0;
  117. else if (priv->capture[0] <= priv->capture[3])
  118. *raw_dty = priv->capture[3] - priv->capture[0];
  119. else
  120. *raw_dty = priv->max_arr - priv->capture[0] + priv->capture[3];
  121. if (*raw_dty > *raw_prd) {
  122. /*
  123. * Race beetween PWM input and DMA: it may happen
  124. * falling edge triggers new capture on TI2/4 before DMA
  125. * had a chance to read CCR2/4. It means capture[1]
  126. * contains period + duty_cycle. So, subtract period.
  127. */
  128. *raw_dty -= *raw_prd;
  129. }
  130. stop:
  131. regmap_clear_bits(priv->regmap, TIM_CCER, ccen);
  132. regmap_clear_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN);
  133. return ret;
  134. }
  135. static int stm32_pwm_capture(struct pwm_chip *chip, struct pwm_device *pwm,
  136. struct pwm_capture *result, unsigned long tmo_ms)
  137. {
  138. struct stm32_pwm *priv = to_stm32_pwm_dev(chip);
  139. unsigned long long prd, div, dty;
  140. unsigned long rate;
  141. unsigned int psc = 0, icpsc, scale;
  142. u32 raw_prd = 0, raw_dty = 0;
  143. int ret = 0;
  144. mutex_lock(&priv->lock);
  145. if (active_channels(priv)) {
  146. ret = -EBUSY;
  147. goto unlock;
  148. }
  149. ret = clk_enable(priv->clk);
  150. if (ret) {
  151. dev_err(pwmchip_parent(chip), "failed to enable counter clock\n");
  152. goto unlock;
  153. }
  154. rate = clk_get_rate(priv->clk);
  155. if (!rate) {
  156. ret = -EINVAL;
  157. goto clk_dis;
  158. }
  159. /* prescaler: fit timeout window provided by upper layer */
  160. div = (unsigned long long)rate * (unsigned long long)tmo_ms;
  161. do_div(div, MSEC_PER_SEC);
  162. prd = div;
  163. while ((div > priv->max_arr) && (psc < MAX_TIM_PSC)) {
  164. psc++;
  165. div = prd;
  166. do_div(div, psc + 1);
  167. }
  168. regmap_write(priv->regmap, TIM_ARR, priv->max_arr);
  169. regmap_write(priv->regmap, TIM_PSC, psc);
  170. /* Reset input selector to its default input and disable slave mode */
  171. regmap_write(priv->regmap, TIM_TISEL, 0x0);
  172. regmap_write(priv->regmap, TIM_SMCR, 0x0);
  173. /* Map TI1 or TI2 PWM input to IC1 & IC2 (or TI3/4 to IC3 & IC4) */
  174. regmap_update_bits(priv->regmap,
  175. pwm->hwpwm < 2 ? TIM_CCMR1 : TIM_CCMR2,
  176. TIM_CCMR_CC1S | TIM_CCMR_CC2S, pwm->hwpwm & 0x1 ?
  177. TIM_CCMR_CC1S_TI2 | TIM_CCMR_CC2S_TI2 :
  178. TIM_CCMR_CC1S_TI1 | TIM_CCMR_CC2S_TI1);
  179. /* Capture period on IC1/3 rising edge, duty cycle on IC2/4 falling. */
  180. regmap_update_bits(priv->regmap, TIM_CCER, pwm->hwpwm < 2 ?
  181. TIM_CCER_CC12P : TIM_CCER_CC34P, pwm->hwpwm < 2 ?
  182. TIM_CCER_CC2P : TIM_CCER_CC4P);
  183. ret = stm32_pwm_raw_capture(chip, pwm, tmo_ms, &raw_prd, &raw_dty);
  184. if (ret)
  185. goto stop;
  186. /*
  187. * Got a capture. Try to improve accuracy at high rates:
  188. * - decrease counter clock prescaler, scale up to max rate.
  189. * - use input prescaler, capture once every /2 /4 or /8 edges.
  190. */
  191. if (raw_prd) {
  192. u32 max_arr = priv->max_arr - 0x1000; /* arbitrary margin */
  193. scale = max_arr / min(max_arr, raw_prd);
  194. } else {
  195. scale = priv->max_arr; /* below resolution, use max scale */
  196. }
  197. if (psc && scale > 1) {
  198. /* 2nd measure with new scale */
  199. psc /= scale;
  200. regmap_write(priv->regmap, TIM_PSC, psc);
  201. ret = stm32_pwm_raw_capture(chip, pwm, tmo_ms, &raw_prd,
  202. &raw_dty);
  203. if (ret)
  204. goto stop;
  205. }
  206. /* Compute intermediate period not to exceed timeout at low rates */
  207. prd = (unsigned long long)raw_prd * (psc + 1) * NSEC_PER_SEC;
  208. do_div(prd, rate);
  209. for (icpsc = 0; icpsc < MAX_TIM_ICPSC ; icpsc++) {
  210. /* input prescaler: also keep arbitrary margin */
  211. if (raw_prd >= (priv->max_arr - 0x1000) >> (icpsc + 1))
  212. break;
  213. if (prd >= (tmo_ms * NSEC_PER_MSEC) >> (icpsc + 2))
  214. break;
  215. }
  216. if (!icpsc)
  217. goto done;
  218. /* Last chance to improve period accuracy, using input prescaler */
  219. regmap_update_bits(priv->regmap,
  220. pwm->hwpwm < 2 ? TIM_CCMR1 : TIM_CCMR2,
  221. TIM_CCMR_IC1PSC | TIM_CCMR_IC2PSC,
  222. FIELD_PREP(TIM_CCMR_IC1PSC, icpsc) |
  223. FIELD_PREP(TIM_CCMR_IC2PSC, icpsc));
  224. ret = stm32_pwm_raw_capture(chip, pwm, tmo_ms, &raw_prd, &raw_dty);
  225. if (ret)
  226. goto stop;
  227. if (raw_dty >= (raw_prd >> icpsc)) {
  228. /*
  229. * We may fall here using input prescaler, when input
  230. * capture starts on high side (before falling edge).
  231. * Example with icpsc to capture on each 4 events:
  232. *
  233. * start 1st capture 2nd capture
  234. * v v v
  235. * ___ _____ _____ _____ _____ ____
  236. * TI1..4 |__| |__| |__| |__| |__|
  237. * v v . . . . . v v
  238. * icpsc1/3: . 0 . 1 . 2 . 3 . 0
  239. * icpsc2/4: 0 1 2 3 0
  240. * v v v v
  241. * CCR1/3 ......t0..............................t2
  242. * CCR2/4 ..t1..............................t1'...
  243. * . . .
  244. * Capture0: .<----------------------------->.
  245. * Capture1: .<-------------------------->. .
  246. * . . .
  247. * Period: .<------> . .
  248. * Low side: .<>.
  249. *
  250. * Result:
  251. * - Period = Capture0 / icpsc
  252. * - Duty = Period - Low side = Period - (Capture0 - Capture1)
  253. */
  254. raw_dty = (raw_prd >> icpsc) - (raw_prd - raw_dty);
  255. }
  256. done:
  257. prd = (unsigned long long)raw_prd * (psc + 1) * NSEC_PER_SEC;
  258. result->period = DIV_ROUND_UP_ULL(prd, rate << icpsc);
  259. dty = (unsigned long long)raw_dty * (psc + 1) * NSEC_PER_SEC;
  260. result->duty_cycle = DIV_ROUND_UP_ULL(dty, rate);
  261. stop:
  262. regmap_write(priv->regmap, TIM_CCER, 0);
  263. regmap_write(priv->regmap, pwm->hwpwm < 2 ? TIM_CCMR1 : TIM_CCMR2, 0);
  264. regmap_write(priv->regmap, TIM_PSC, 0);
  265. clk_dis:
  266. clk_disable(priv->clk);
  267. unlock:
  268. mutex_unlock(&priv->lock);
  269. return ret;
  270. }
  271. static int stm32_pwm_config(struct stm32_pwm *priv, unsigned int ch,
  272. u64 duty_ns, u64 period_ns)
  273. {
  274. unsigned long long prd, dty;
  275. unsigned long long prescaler;
  276. u32 ccmr, mask, shift;
  277. /*
  278. * .probe() asserted that clk_get_rate() is not bigger than 1 GHz, so
  279. * the calculations here won't overflow.
  280. * First we need to find the minimal value for prescaler such that
  281. *
  282. * period_ns * clkrate
  283. * ------------------------------ < max_arr + 1
  284. * NSEC_PER_SEC * (prescaler + 1)
  285. *
  286. * This equation is equivalent to
  287. *
  288. * period_ns * clkrate
  289. * ---------------------------- < prescaler + 1
  290. * NSEC_PER_SEC * (max_arr + 1)
  291. *
  292. * Using integer division and knowing that the right hand side is
  293. * integer, this is further equivalent to
  294. *
  295. * (period_ns * clkrate) // (NSEC_PER_SEC * (max_arr + 1)) ≤ prescaler
  296. */
  297. prescaler = mul_u64_u64_div_u64(period_ns, clk_get_rate(priv->clk),
  298. (u64)NSEC_PER_SEC * ((u64)priv->max_arr + 1));
  299. if (prescaler > MAX_TIM_PSC)
  300. return -EINVAL;
  301. prd = mul_u64_u64_div_u64(period_ns, clk_get_rate(priv->clk),
  302. (u64)NSEC_PER_SEC * (prescaler + 1));
  303. if (!prd)
  304. return -EINVAL;
  305. /*
  306. * All channels share the same prescaler and counter so when two
  307. * channels are active at the same time we can't change them
  308. */
  309. if (active_channels(priv) & ~(1 << ch * 4)) {
  310. u32 psc, arr;
  311. regmap_read(priv->regmap, TIM_PSC, &psc);
  312. regmap_read(priv->regmap, TIM_ARR, &arr);
  313. if ((psc != prescaler) || (arr != prd - 1))
  314. return -EBUSY;
  315. }
  316. regmap_write(priv->regmap, TIM_PSC, prescaler);
  317. regmap_write(priv->regmap, TIM_ARR, prd - 1);
  318. regmap_set_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE);
  319. /* Calculate the duty cycles */
  320. dty = mul_u64_u64_div_u64(duty_ns, clk_get_rate(priv->clk),
  321. (u64)NSEC_PER_SEC * (prescaler + 1));
  322. regmap_write(priv->regmap, TIM_CCRx(ch + 1), dty);
  323. /* Configure output mode */
  324. shift = (ch & 0x1) * CCMR_CHANNEL_SHIFT;
  325. ccmr = (TIM_CCMR_PE | TIM_CCMR_M1) << shift;
  326. mask = CCMR_CHANNEL_MASK << shift;
  327. if (ch < 2)
  328. regmap_update_bits(priv->regmap, TIM_CCMR1, mask, ccmr);
  329. else
  330. regmap_update_bits(priv->regmap, TIM_CCMR2, mask, ccmr);
  331. regmap_set_bits(priv->regmap, TIM_BDTR, TIM_BDTR_MOE);
  332. return 0;
  333. }
  334. static int stm32_pwm_set_polarity(struct stm32_pwm *priv, unsigned int ch,
  335. enum pwm_polarity polarity)
  336. {
  337. u32 mask;
  338. mask = TIM_CCER_CCxP(ch + 1);
  339. if (priv->have_complementary_output)
  340. mask |= TIM_CCER_CCxNP(ch + 1);
  341. regmap_update_bits(priv->regmap, TIM_CCER, mask,
  342. polarity == PWM_POLARITY_NORMAL ? 0 : mask);
  343. return 0;
  344. }
  345. static int stm32_pwm_enable(struct stm32_pwm *priv, unsigned int ch)
  346. {
  347. u32 mask;
  348. int ret;
  349. ret = clk_enable(priv->clk);
  350. if (ret)
  351. return ret;
  352. /* Enable channel */
  353. mask = TIM_CCER_CCxE(ch + 1);
  354. if (priv->have_complementary_output)
  355. mask |= TIM_CCER_CCxNE(ch + 1);
  356. regmap_set_bits(priv->regmap, TIM_CCER, mask);
  357. /* Make sure that registers are updated */
  358. regmap_set_bits(priv->regmap, TIM_EGR, TIM_EGR_UG);
  359. /* Enable controller */
  360. regmap_set_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN);
  361. return 0;
  362. }
  363. static void stm32_pwm_disable(struct stm32_pwm *priv, unsigned int ch)
  364. {
  365. u32 mask;
  366. /* Disable channel */
  367. mask = TIM_CCER_CCxE(ch + 1);
  368. if (priv->have_complementary_output)
  369. mask |= TIM_CCER_CCxNE(ch + 1);
  370. regmap_clear_bits(priv->regmap, TIM_CCER, mask);
  371. /* When all channels are disabled, we can disable the controller */
  372. if (!active_channels(priv))
  373. regmap_clear_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN);
  374. clk_disable(priv->clk);
  375. }
  376. static int stm32_pwm_apply(struct pwm_chip *chip, struct pwm_device *pwm,
  377. const struct pwm_state *state)
  378. {
  379. bool enabled;
  380. struct stm32_pwm *priv = to_stm32_pwm_dev(chip);
  381. int ret;
  382. enabled = pwm->state.enabled;
  383. if (!state->enabled) {
  384. if (enabled)
  385. stm32_pwm_disable(priv, pwm->hwpwm);
  386. return 0;
  387. }
  388. if (state->polarity != pwm->state.polarity)
  389. stm32_pwm_set_polarity(priv, pwm->hwpwm, state->polarity);
  390. ret = stm32_pwm_config(priv, pwm->hwpwm,
  391. state->duty_cycle, state->period);
  392. if (ret)
  393. return ret;
  394. if (!enabled && state->enabled)
  395. ret = stm32_pwm_enable(priv, pwm->hwpwm);
  396. return ret;
  397. }
  398. static int stm32_pwm_apply_locked(struct pwm_chip *chip, struct pwm_device *pwm,
  399. const struct pwm_state *state)
  400. {
  401. struct stm32_pwm *priv = to_stm32_pwm_dev(chip);
  402. int ret;
  403. /* protect common prescaler for all active channels */
  404. mutex_lock(&priv->lock);
  405. ret = stm32_pwm_apply(chip, pwm, state);
  406. mutex_unlock(&priv->lock);
  407. return ret;
  408. }
  409. static int stm32_pwm_get_state(struct pwm_chip *chip,
  410. struct pwm_device *pwm, struct pwm_state *state)
  411. {
  412. struct stm32_pwm *priv = to_stm32_pwm_dev(chip);
  413. int ch = pwm->hwpwm;
  414. unsigned long rate;
  415. u32 ccer, psc, arr, ccr;
  416. u64 dty, prd;
  417. int ret;
  418. mutex_lock(&priv->lock);
  419. ret = regmap_read(priv->regmap, TIM_CCER, &ccer);
  420. if (ret)
  421. goto out;
  422. state->enabled = ccer & TIM_CCER_CCxE(ch + 1);
  423. state->polarity = (ccer & TIM_CCER_CCxP(ch + 1)) ?
  424. PWM_POLARITY_INVERSED : PWM_POLARITY_NORMAL;
  425. ret = regmap_read(priv->regmap, TIM_PSC, &psc);
  426. if (ret)
  427. goto out;
  428. ret = regmap_read(priv->regmap, TIM_ARR, &arr);
  429. if (ret)
  430. goto out;
  431. ret = regmap_read(priv->regmap, TIM_CCRx(ch + 1), &ccr);
  432. if (ret)
  433. goto out;
  434. rate = clk_get_rate(priv->clk);
  435. prd = (u64)NSEC_PER_SEC * (psc + 1) * (arr + 1);
  436. state->period = DIV_ROUND_UP_ULL(prd, rate);
  437. dty = (u64)NSEC_PER_SEC * (psc + 1) * ccr;
  438. state->duty_cycle = DIV_ROUND_UP_ULL(dty, rate);
  439. out:
  440. mutex_unlock(&priv->lock);
  441. return ret;
  442. }
  443. static const struct pwm_ops stm32pwm_ops = {
  444. .apply = stm32_pwm_apply_locked,
  445. .get_state = stm32_pwm_get_state,
  446. .capture = IS_ENABLED(CONFIG_DMA_ENGINE) ? stm32_pwm_capture : NULL,
  447. };
  448. static int stm32_pwm_set_breakinput(struct stm32_pwm *priv,
  449. const struct stm32_breakinput *bi)
  450. {
  451. u32 shift = TIM_BDTR_BKF_SHIFT(bi->index);
  452. u32 bke = TIM_BDTR_BKE(bi->index);
  453. u32 bkp = TIM_BDTR_BKP(bi->index);
  454. u32 bkf = TIM_BDTR_BKF(bi->index);
  455. u32 mask = bkf | bkp | bke;
  456. u32 bdtr;
  457. bdtr = (bi->filter & TIM_BDTR_BKF_MASK) << shift | bke;
  458. if (bi->level)
  459. bdtr |= bkp;
  460. regmap_update_bits(priv->regmap, TIM_BDTR, mask, bdtr);
  461. regmap_read(priv->regmap, TIM_BDTR, &bdtr);
  462. return (bdtr & bke) ? 0 : -EINVAL;
  463. }
  464. static int stm32_pwm_apply_breakinputs(struct stm32_pwm *priv)
  465. {
  466. unsigned int i;
  467. int ret;
  468. for (i = 0; i < priv->num_breakinputs; i++) {
  469. ret = stm32_pwm_set_breakinput(priv, &priv->breakinputs[i]);
  470. if (ret < 0)
  471. return ret;
  472. }
  473. return 0;
  474. }
  475. static int stm32_pwm_probe_breakinputs(struct stm32_pwm *priv,
  476. struct device_node *np)
  477. {
  478. int nb, ret, array_size;
  479. unsigned int i;
  480. nb = of_property_count_elems_of_size(np, "st,breakinput",
  481. sizeof(struct stm32_breakinput));
  482. /*
  483. * Because "st,breakinput" parameter is optional do not make probe
  484. * failed if it doesn't exist.
  485. */
  486. if (nb <= 0)
  487. return 0;
  488. if (nb > MAX_BREAKINPUT)
  489. return -EINVAL;
  490. priv->num_breakinputs = nb;
  491. array_size = nb * sizeof(struct stm32_breakinput) / sizeof(u32);
  492. ret = of_property_read_u32_array(np, "st,breakinput",
  493. (u32 *)priv->breakinputs, array_size);
  494. if (ret)
  495. return ret;
  496. for (i = 0; i < priv->num_breakinputs; i++) {
  497. if (priv->breakinputs[i].index > 1 ||
  498. priv->breakinputs[i].level > 1 ||
  499. priv->breakinputs[i].filter > 15)
  500. return -EINVAL;
  501. }
  502. return stm32_pwm_apply_breakinputs(priv);
  503. }
  504. static void stm32_pwm_detect_complementary(struct stm32_pwm *priv)
  505. {
  506. u32 ccer;
  507. /*
  508. * If complementary bit doesn't exist writing 1 will have no
  509. * effect so we can detect it.
  510. */
  511. regmap_set_bits(priv->regmap, TIM_CCER, TIM_CCER_CC1NE);
  512. regmap_read(priv->regmap, TIM_CCER, &ccer);
  513. regmap_clear_bits(priv->regmap, TIM_CCER, TIM_CCER_CC1NE);
  514. priv->have_complementary_output = (ccer != 0);
  515. }
  516. static unsigned int stm32_pwm_detect_channels(struct regmap *regmap,
  517. unsigned int *num_enabled)
  518. {
  519. u32 ccer, ccer_backup;
  520. /*
  521. * If channels enable bits don't exist writing 1 will have no
  522. * effect so we can detect and count them.
  523. */
  524. regmap_read(regmap, TIM_CCER, &ccer_backup);
  525. regmap_set_bits(regmap, TIM_CCER, TIM_CCER_CCXE);
  526. regmap_read(regmap, TIM_CCER, &ccer);
  527. regmap_write(regmap, TIM_CCER, ccer_backup);
  528. *num_enabled = hweight32(ccer_backup & TIM_CCER_CCXE);
  529. return hweight32(ccer & TIM_CCER_CCXE);
  530. }
  531. static int stm32_pwm_probe(struct platform_device *pdev)
  532. {
  533. struct device *dev = &pdev->dev;
  534. struct device_node *np = dev->of_node;
  535. struct stm32_timers *ddata = dev_get_drvdata(pdev->dev.parent);
  536. struct pwm_chip *chip;
  537. struct stm32_pwm *priv;
  538. unsigned int npwm, num_enabled;
  539. unsigned int i;
  540. int ret;
  541. npwm = stm32_pwm_detect_channels(ddata->regmap, &num_enabled);
  542. chip = devm_pwmchip_alloc(dev, npwm, sizeof(*priv));
  543. if (IS_ERR(chip))
  544. return PTR_ERR(chip);
  545. priv = to_stm32_pwm_dev(chip);
  546. mutex_init(&priv->lock);
  547. priv->regmap = ddata->regmap;
  548. priv->clk = ddata->clk;
  549. priv->max_arr = ddata->max_arr;
  550. if (!priv->regmap || !priv->clk)
  551. return dev_err_probe(dev, -EINVAL, "Failed to get %s\n",
  552. priv->regmap ? "clk" : "regmap");
  553. ret = stm32_pwm_probe_breakinputs(priv, np);
  554. if (ret)
  555. return dev_err_probe(dev, ret,
  556. "Failed to configure breakinputs\n");
  557. stm32_pwm_detect_complementary(priv);
  558. ret = devm_clk_rate_exclusive_get(dev, priv->clk);
  559. if (ret)
  560. return dev_err_probe(dev, ret, "Failed to lock clock\n");
  561. /*
  562. * With the clk running with not more than 1 GHz the calculations in
  563. * .apply() won't overflow.
  564. */
  565. if (clk_get_rate(priv->clk) > 1000000000)
  566. return dev_err_probe(dev, -EINVAL, "Clock freq too high (%lu)\n",
  567. clk_get_rate(priv->clk));
  568. chip->ops = &stm32pwm_ops;
  569. /* Initialize clock refcount to number of enabled PWM channels. */
  570. for (i = 0; i < num_enabled; i++) {
  571. ret = clk_enable(priv->clk);
  572. if (ret)
  573. return ret;
  574. }
  575. ret = devm_pwmchip_add(dev, chip);
  576. if (ret < 0)
  577. return dev_err_probe(dev, ret,
  578. "Failed to register pwmchip\n");
  579. platform_set_drvdata(pdev, chip);
  580. return 0;
  581. }
  582. static int stm32_pwm_suspend(struct device *dev)
  583. {
  584. struct pwm_chip *chip = dev_get_drvdata(dev);
  585. struct stm32_pwm *priv = to_stm32_pwm_dev(chip);
  586. unsigned int i;
  587. u32 ccer, mask;
  588. /* Look for active channels */
  589. ccer = active_channels(priv);
  590. for (i = 0; i < chip->npwm; i++) {
  591. mask = TIM_CCER_CCxE(i + 1);
  592. if (ccer & mask) {
  593. dev_err(dev, "PWM %u still in use by consumer %s\n",
  594. i, chip->pwms[i].label);
  595. return -EBUSY;
  596. }
  597. }
  598. return pinctrl_pm_select_sleep_state(dev);
  599. }
  600. static int stm32_pwm_resume(struct device *dev)
  601. {
  602. struct pwm_chip *chip = dev_get_drvdata(dev);
  603. struct stm32_pwm *priv = to_stm32_pwm_dev(chip);
  604. int ret;
  605. ret = pinctrl_pm_select_default_state(dev);
  606. if (ret)
  607. return ret;
  608. /* restore breakinput registers that may have been lost in low power */
  609. return stm32_pwm_apply_breakinputs(priv);
  610. }
  611. static DEFINE_SIMPLE_DEV_PM_OPS(stm32_pwm_pm_ops, stm32_pwm_suspend, stm32_pwm_resume);
  612. static const struct of_device_id stm32_pwm_of_match[] = {
  613. { .compatible = "st,stm32-pwm", },
  614. { /* end node */ },
  615. };
  616. MODULE_DEVICE_TABLE(of, stm32_pwm_of_match);
  617. static struct platform_driver stm32_pwm_driver = {
  618. .probe = stm32_pwm_probe,
  619. .driver = {
  620. .name = "stm32-pwm",
  621. .of_match_table = stm32_pwm_of_match,
  622. .pm = pm_ptr(&stm32_pwm_pm_ops),
  623. },
  624. };
  625. module_platform_driver(stm32_pwm_driver);
  626. MODULE_ALIAS("platform:stm32-pwm");
  627. MODULE_DESCRIPTION("STMicroelectronics STM32 PWM driver");
  628. MODULE_LICENSE("GPL v2");