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