1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright (C) STMicroelectronics 2016
5 * Author: Benjamin Gaignard <benjamin.gaignard@st.com>
9 #include <linux/iio/iio.h>
10 #include <linux/iio/sysfs.h>
11 #include <linux/iio/timer/stm32-timer-trigger.h>
12 #include <linux/iio/trigger.h>
13 #include <linux/mfd/stm32-timers.h>
14 #include <linux/module.h>
15 #include <linux/platform_device.h>
16 #include <linux/of_device.h>
18 #define MAX_TRIGGERS 7
21 /* List the triggers created by each timer */
22 static const void *triggers_table
[][MAX_TRIGGERS
] = {
23 { TIM1_TRGO
, TIM1_TRGO2
, TIM1_CH1
, TIM1_CH2
, TIM1_CH3
, TIM1_CH4
,},
24 { TIM2_TRGO
, TIM2_CH1
, TIM2_CH2
, TIM2_CH3
, TIM2_CH4
,},
25 { TIM3_TRGO
, TIM3_CH1
, TIM3_CH2
, TIM3_CH3
, TIM3_CH4
,},
26 { TIM4_TRGO
, TIM4_CH1
, TIM4_CH2
, TIM4_CH3
, TIM4_CH4
,},
27 { TIM5_TRGO
, TIM5_CH1
, TIM5_CH2
, TIM5_CH3
, TIM5_CH4
,},
30 { TIM8_TRGO
, TIM8_TRGO2
, TIM8_CH1
, TIM8_CH2
, TIM8_CH3
, TIM8_CH4
,},
31 { TIM9_TRGO
, TIM9_CH1
, TIM9_CH2
,},
34 { TIM12_TRGO
, TIM12_CH1
, TIM12_CH2
,},
42 /* List the triggers accepted by each timer */
43 static const void *valids_table
[][MAX_VALIDS
] = {
44 { TIM5_TRGO
, TIM2_TRGO
, TIM3_TRGO
, TIM4_TRGO
,},
45 { TIM1_TRGO
, TIM8_TRGO
, TIM3_TRGO
, TIM4_TRGO
,},
46 { TIM1_TRGO
, TIM2_TRGO
, TIM5_TRGO
, TIM4_TRGO
,},
47 { TIM1_TRGO
, TIM2_TRGO
, TIM3_TRGO
, TIM8_TRGO
,},
48 { TIM2_TRGO
, TIM3_TRGO
, TIM4_TRGO
, TIM8_TRGO
,},
51 { TIM1_TRGO
, TIM2_TRGO
, TIM4_TRGO
, TIM5_TRGO
,},
52 { TIM2_TRGO
, TIM3_TRGO
, TIM10_OC1
, TIM11_OC1
,},
55 { TIM4_TRGO
, TIM5_TRGO
, TIM13_OC1
, TIM14_OC1
,},
58 static const void *stm32h7_valids_table
[][MAX_VALIDS
] = {
59 { TIM15_TRGO
, TIM2_TRGO
, TIM3_TRGO
, TIM4_TRGO
,},
60 { TIM1_TRGO
, TIM8_TRGO
, TIM3_TRGO
, TIM4_TRGO
,},
61 { TIM1_TRGO
, TIM2_TRGO
, TIM15_TRGO
, TIM4_TRGO
,},
62 { TIM1_TRGO
, TIM2_TRGO
, TIM3_TRGO
, TIM8_TRGO
,},
63 { TIM1_TRGO
, TIM8_TRGO
, TIM3_TRGO
, TIM4_TRGO
,},
66 { TIM1_TRGO
, TIM2_TRGO
, TIM4_TRGO
, TIM5_TRGO
,},
70 { TIM4_TRGO
, TIM5_TRGO
, TIM13_OC1
, TIM14_OC1
,},
73 { TIM1_TRGO
, TIM3_TRGO
, TIM16_OC1
, TIM17_OC1
,},
78 struct stm32_timer_trigger_regs
{
87 struct stm32_timer_trigger
{
89 struct regmap
*regmap
;
96 struct mutex lock
; /* concurrent sysfs configuration */
97 struct list_head tr_list
;
98 struct stm32_timer_trigger_regs bak
;
101 struct stm32_timer_trigger_cfg
{
102 const void *(*valids_table
)[MAX_VALIDS
];
103 const unsigned int num_valids_table
;
106 static bool stm32_timer_is_trgo2_name(const char *name
)
108 return !!strstr(name
, "trgo2");
111 static bool stm32_timer_is_trgo_name(const char *name
)
113 return (!!strstr(name
, "trgo") && !strstr(name
, "trgo2"));
116 static int stm32_timer_start(struct stm32_timer_trigger
*priv
,
117 struct iio_trigger
*trig
,
118 unsigned int frequency
)
120 unsigned long long prd
, div
;
124 /* Period and prescaler values depends of clock rate */
125 div
= (unsigned long long)clk_get_rate(priv
->clk
);
127 do_div(div
, frequency
);
132 * Increase prescaler value until we get a result that fit
133 * with auto reload register maximum value.
135 while (div
> priv
->max_arr
) {
138 do_div(div
, (prescaler
+ 1));
142 if (prescaler
> MAX_TIM_PSC
) {
143 dev_err(priv
->dev
, "prescaler exceeds the maximum value\n");
147 /* Check if nobody else use the timer */
148 regmap_read(priv
->regmap
, TIM_CCER
, &ccer
);
149 if (ccer
& TIM_CCER_CCXE
)
152 mutex_lock(&priv
->lock
);
153 if (!priv
->enabled
) {
154 priv
->enabled
= true;
155 clk_enable(priv
->clk
);
158 regmap_write(priv
->regmap
, TIM_PSC
, prescaler
);
159 regmap_write(priv
->regmap
, TIM_ARR
, prd
- 1);
160 regmap_update_bits(priv
->regmap
, TIM_CR1
, TIM_CR1_ARPE
, TIM_CR1_ARPE
);
162 /* Force master mode to update mode */
163 if (stm32_timer_is_trgo2_name(trig
->name
))
164 regmap_update_bits(priv
->regmap
, TIM_CR2
, TIM_CR2_MMS2
,
165 0x2 << TIM_CR2_MMS2_SHIFT
);
167 regmap_update_bits(priv
->regmap
, TIM_CR2
, TIM_CR2_MMS
,
168 0x2 << TIM_CR2_MMS_SHIFT
);
170 /* Make sure that registers are updated */
171 regmap_update_bits(priv
->regmap
, TIM_EGR
, TIM_EGR_UG
, TIM_EGR_UG
);
173 /* Enable controller */
174 regmap_update_bits(priv
->regmap
, TIM_CR1
, TIM_CR1_CEN
, TIM_CR1_CEN
);
175 mutex_unlock(&priv
->lock
);
180 static void stm32_timer_stop(struct stm32_timer_trigger
*priv
,
181 struct iio_trigger
*trig
)
185 regmap_read(priv
->regmap
, TIM_CCER
, &ccer
);
186 if (ccer
& TIM_CCER_CCXE
)
189 mutex_lock(&priv
->lock
);
191 regmap_update_bits(priv
->regmap
, TIM_CR1
, TIM_CR1_ARPE
, 0);
192 regmap_update_bits(priv
->regmap
, TIM_CR1
, TIM_CR1_CEN
, 0);
193 regmap_write(priv
->regmap
, TIM_PSC
, 0);
194 regmap_write(priv
->regmap
, TIM_ARR
, 0);
196 /* Force disable master mode */
197 if (stm32_timer_is_trgo2_name(trig
->name
))
198 regmap_update_bits(priv
->regmap
, TIM_CR2
, TIM_CR2_MMS2
, 0);
200 regmap_update_bits(priv
->regmap
, TIM_CR2
, TIM_CR2_MMS
, 0);
202 /* Make sure that registers are updated */
203 regmap_update_bits(priv
->regmap
, TIM_EGR
, TIM_EGR_UG
, TIM_EGR_UG
);
206 priv
->enabled
= false;
207 clk_disable(priv
->clk
);
209 mutex_unlock(&priv
->lock
);
212 static ssize_t
stm32_tt_store_frequency(struct device
*dev
,
213 struct device_attribute
*attr
,
214 const char *buf
, size_t len
)
216 struct iio_trigger
*trig
= to_iio_trigger(dev
);
217 struct stm32_timer_trigger
*priv
= iio_trigger_get_drvdata(trig
);
221 ret
= kstrtouint(buf
, 10, &freq
);
226 stm32_timer_stop(priv
, trig
);
228 ret
= stm32_timer_start(priv
, trig
, freq
);
236 static ssize_t
stm32_tt_read_frequency(struct device
*dev
,
237 struct device_attribute
*attr
, char *buf
)
239 struct iio_trigger
*trig
= to_iio_trigger(dev
);
240 struct stm32_timer_trigger
*priv
= iio_trigger_get_drvdata(trig
);
242 unsigned long long freq
= 0;
244 regmap_read(priv
->regmap
, TIM_CR1
, &cr1
);
245 regmap_read(priv
->regmap
, TIM_PSC
, &psc
);
246 regmap_read(priv
->regmap
, TIM_ARR
, &arr
);
248 if (cr1
& TIM_CR1_CEN
) {
249 freq
= (unsigned long long)clk_get_rate(priv
->clk
);
250 do_div(freq
, psc
+ 1);
251 do_div(freq
, arr
+ 1);
254 return sprintf(buf
, "%d\n", (unsigned int)freq
);
257 static IIO_DEV_ATTR_SAMP_FREQ(0660,
258 stm32_tt_read_frequency
,
259 stm32_tt_store_frequency
);
261 #define MASTER_MODE_MAX 7
262 #define MASTER_MODE2_MAX 15
264 static char *master_mode_table
[] = {
273 /* Master mode selection 2 only */
276 "compare_pulse_OC4REF",
277 "compare_pulse_OC6REF",
278 "compare_pulse_OC4REF_r_or_OC6REF_r",
279 "compare_pulse_OC4REF_r_or_OC6REF_f",
280 "compare_pulse_OC5REF_r_or_OC6REF_r",
281 "compare_pulse_OC5REF_r_or_OC6REF_f",
284 static ssize_t
stm32_tt_show_master_mode(struct device
*dev
,
285 struct device_attribute
*attr
,
288 struct stm32_timer_trigger
*priv
= dev_get_drvdata(dev
);
289 struct iio_trigger
*trig
= to_iio_trigger(dev
);
292 regmap_read(priv
->regmap
, TIM_CR2
, &cr2
);
294 if (stm32_timer_is_trgo2_name(trig
->name
))
295 cr2
= (cr2
& TIM_CR2_MMS2
) >> TIM_CR2_MMS2_SHIFT
;
297 cr2
= (cr2
& TIM_CR2_MMS
) >> TIM_CR2_MMS_SHIFT
;
299 return snprintf(buf
, PAGE_SIZE
, "%s\n", master_mode_table
[cr2
]);
302 static ssize_t
stm32_tt_store_master_mode(struct device
*dev
,
303 struct device_attribute
*attr
,
304 const char *buf
, size_t len
)
306 struct stm32_timer_trigger
*priv
= dev_get_drvdata(dev
);
307 struct iio_trigger
*trig
= to_iio_trigger(dev
);
308 u32 mask
, shift
, master_mode_max
;
311 if (stm32_timer_is_trgo2_name(trig
->name
)) {
313 shift
= TIM_CR2_MMS2_SHIFT
;
314 master_mode_max
= MASTER_MODE2_MAX
;
317 shift
= TIM_CR2_MMS_SHIFT
;
318 master_mode_max
= MASTER_MODE_MAX
;
321 for (i
= 0; i
<= master_mode_max
; i
++) {
322 if (!strncmp(master_mode_table
[i
], buf
,
323 strlen(master_mode_table
[i
]))) {
324 mutex_lock(&priv
->lock
);
325 if (!priv
->enabled
) {
326 /* Clock should be enabled first */
327 priv
->enabled
= true;
328 clk_enable(priv
->clk
);
330 regmap_update_bits(priv
->regmap
, TIM_CR2
, mask
,
332 mutex_unlock(&priv
->lock
);
340 static ssize_t
stm32_tt_show_master_mode_avail(struct device
*dev
,
341 struct device_attribute
*attr
,
344 struct iio_trigger
*trig
= to_iio_trigger(dev
);
345 unsigned int i
, master_mode_max
;
348 if (stm32_timer_is_trgo2_name(trig
->name
))
349 master_mode_max
= MASTER_MODE2_MAX
;
351 master_mode_max
= MASTER_MODE_MAX
;
353 for (i
= 0; i
<= master_mode_max
; i
++)
354 len
+= scnprintf(buf
+ len
, PAGE_SIZE
- len
,
355 "%s ", master_mode_table
[i
]);
357 /* replace trailing space by newline */
363 static IIO_DEVICE_ATTR(master_mode_available
, 0444,
364 stm32_tt_show_master_mode_avail
, NULL
, 0);
366 static IIO_DEVICE_ATTR(master_mode
, 0660,
367 stm32_tt_show_master_mode
,
368 stm32_tt_store_master_mode
,
371 static struct attribute
*stm32_trigger_attrs
[] = {
372 &iio_dev_attr_sampling_frequency
.dev_attr
.attr
,
373 &iio_dev_attr_master_mode
.dev_attr
.attr
,
374 &iio_dev_attr_master_mode_available
.dev_attr
.attr
,
378 static const struct attribute_group stm32_trigger_attr_group
= {
379 .attrs
= stm32_trigger_attrs
,
382 static const struct attribute_group
*stm32_trigger_attr_groups
[] = {
383 &stm32_trigger_attr_group
,
387 static const struct iio_trigger_ops timer_trigger_ops
= {
390 static void stm32_unregister_iio_triggers(struct stm32_timer_trigger
*priv
)
392 struct iio_trigger
*tr
;
394 list_for_each_entry(tr
, &priv
->tr_list
, alloc_list
)
395 iio_trigger_unregister(tr
);
398 static int stm32_register_iio_triggers(struct stm32_timer_trigger
*priv
)
401 const char * const *cur
= priv
->triggers
;
403 INIT_LIST_HEAD(&priv
->tr_list
);
405 while (cur
&& *cur
) {
406 struct iio_trigger
*trig
;
407 bool cur_is_trgo
= stm32_timer_is_trgo_name(*cur
);
408 bool cur_is_trgo2
= stm32_timer_is_trgo2_name(*cur
);
410 if (cur_is_trgo2
&& !priv
->has_trgo2
) {
415 trig
= devm_iio_trigger_alloc(priv
->dev
, "%s", *cur
);
419 trig
->dev
.parent
= priv
->dev
->parent
;
420 trig
->ops
= &timer_trigger_ops
;
423 * sampling frequency and master mode attributes
424 * should only be available on trgo/trgo2 triggers
426 if (cur_is_trgo
|| cur_is_trgo2
)
427 trig
->dev
.groups
= stm32_trigger_attr_groups
;
429 iio_trigger_set_drvdata(trig
, priv
);
431 ret
= iio_trigger_register(trig
);
433 stm32_unregister_iio_triggers(priv
);
437 list_add_tail(&trig
->alloc_list
, &priv
->tr_list
);
444 static int stm32_counter_read_raw(struct iio_dev
*indio_dev
,
445 struct iio_chan_spec
const *chan
,
446 int *val
, int *val2
, long mask
)
448 struct stm32_timer_trigger
*priv
= iio_priv(indio_dev
);
452 case IIO_CHAN_INFO_RAW
:
453 regmap_read(priv
->regmap
, TIM_CNT
, &dat
);
457 case IIO_CHAN_INFO_ENABLE
:
458 regmap_read(priv
->regmap
, TIM_CR1
, &dat
);
459 *val
= (dat
& TIM_CR1_CEN
) ? 1 : 0;
462 case IIO_CHAN_INFO_SCALE
:
463 regmap_read(priv
->regmap
, TIM_SMCR
, &dat
);
469 /* in quadrature case scale = 0.25 */
473 return IIO_VAL_FRACTIONAL_LOG2
;
479 static int stm32_counter_write_raw(struct iio_dev
*indio_dev
,
480 struct iio_chan_spec
const *chan
,
481 int val
, int val2
, long mask
)
483 struct stm32_timer_trigger
*priv
= iio_priv(indio_dev
);
486 case IIO_CHAN_INFO_RAW
:
487 return regmap_write(priv
->regmap
, TIM_CNT
, val
);
489 case IIO_CHAN_INFO_SCALE
:
493 case IIO_CHAN_INFO_ENABLE
:
494 mutex_lock(&priv
->lock
);
496 if (!priv
->enabled
) {
497 priv
->enabled
= true;
498 clk_enable(priv
->clk
);
500 regmap_update_bits(priv
->regmap
, TIM_CR1
, TIM_CR1_CEN
,
503 regmap_update_bits(priv
->regmap
, TIM_CR1
, TIM_CR1_CEN
,
506 priv
->enabled
= false;
507 clk_disable(priv
->clk
);
510 mutex_unlock(&priv
->lock
);
517 static int stm32_counter_validate_trigger(struct iio_dev
*indio_dev
,
518 struct iio_trigger
*trig
)
520 struct stm32_timer_trigger
*priv
= iio_priv(indio_dev
);
521 const char * const *cur
= priv
->valids
;
524 if (!is_stm32_timer_trigger(trig
))
527 while (cur
&& *cur
) {
528 if (!strncmp(trig
->name
, *cur
, strlen(trig
->name
))) {
529 regmap_update_bits(priv
->regmap
,
530 TIM_SMCR
, TIM_SMCR_TS
,
531 i
<< TIM_SMCR_TS_SHIFT
);
541 static const struct iio_info stm32_trigger_info
= {
542 .validate_trigger
= stm32_counter_validate_trigger
,
543 .read_raw
= stm32_counter_read_raw
,
544 .write_raw
= stm32_counter_write_raw
547 static const char *const stm32_trigger_modes
[] = {
551 static int stm32_set_trigger_mode(struct iio_dev
*indio_dev
,
552 const struct iio_chan_spec
*chan
,
555 struct stm32_timer_trigger
*priv
= iio_priv(indio_dev
);
557 regmap_update_bits(priv
->regmap
, TIM_SMCR
, TIM_SMCR_SMS
, TIM_SMCR_SMS
);
562 static int stm32_get_trigger_mode(struct iio_dev
*indio_dev
,
563 const struct iio_chan_spec
*chan
)
565 struct stm32_timer_trigger
*priv
= iio_priv(indio_dev
);
568 regmap_read(priv
->regmap
, TIM_SMCR
, &smcr
);
570 return (smcr
& TIM_SMCR_SMS
) == TIM_SMCR_SMS
? 0 : -EINVAL
;
573 static const struct iio_enum stm32_trigger_mode_enum
= {
574 .items
= stm32_trigger_modes
,
575 .num_items
= ARRAY_SIZE(stm32_trigger_modes
),
576 .set
= stm32_set_trigger_mode
,
577 .get
= stm32_get_trigger_mode
580 static const char *const stm32_enable_modes
[] = {
586 static int stm32_enable_mode2sms(int mode
)
600 static int stm32_set_enable_mode(struct iio_dev
*indio_dev
,
601 const struct iio_chan_spec
*chan
,
604 struct stm32_timer_trigger
*priv
= iio_priv(indio_dev
);
605 int sms
= stm32_enable_mode2sms(mode
);
610 * Triggered mode sets CEN bit automatically by hardware. So, first
611 * enable counter clock, so it can use it. Keeps it in sync with CEN.
613 mutex_lock(&priv
->lock
);
614 if (sms
== 6 && !priv
->enabled
) {
615 clk_enable(priv
->clk
);
616 priv
->enabled
= true;
618 mutex_unlock(&priv
->lock
);
620 regmap_update_bits(priv
->regmap
, TIM_SMCR
, TIM_SMCR_SMS
, sms
);
625 static int stm32_sms2enable_mode(int mode
)
639 static int stm32_get_enable_mode(struct iio_dev
*indio_dev
,
640 const struct iio_chan_spec
*chan
)
642 struct stm32_timer_trigger
*priv
= iio_priv(indio_dev
);
645 regmap_read(priv
->regmap
, TIM_SMCR
, &smcr
);
646 smcr
&= TIM_SMCR_SMS
;
648 return stm32_sms2enable_mode(smcr
);
651 static const struct iio_enum stm32_enable_mode_enum
= {
652 .items
= stm32_enable_modes
,
653 .num_items
= ARRAY_SIZE(stm32_enable_modes
),
654 .set
= stm32_set_enable_mode
,
655 .get
= stm32_get_enable_mode
658 static ssize_t
stm32_count_get_preset(struct iio_dev
*indio_dev
,
660 const struct iio_chan_spec
*chan
,
663 struct stm32_timer_trigger
*priv
= iio_priv(indio_dev
);
666 regmap_read(priv
->regmap
, TIM_ARR
, &arr
);
668 return snprintf(buf
, PAGE_SIZE
, "%u\n", arr
);
671 static ssize_t
stm32_count_set_preset(struct iio_dev
*indio_dev
,
673 const struct iio_chan_spec
*chan
,
674 const char *buf
, size_t len
)
676 struct stm32_timer_trigger
*priv
= iio_priv(indio_dev
);
680 ret
= kstrtouint(buf
, 0, &preset
);
684 /* TIMx_ARR register shouldn't be buffered (ARPE=0) */
685 regmap_update_bits(priv
->regmap
, TIM_CR1
, TIM_CR1_ARPE
, 0);
686 regmap_write(priv
->regmap
, TIM_ARR
, preset
);
691 static const struct iio_chan_spec_ext_info stm32_trigger_count_info
[] = {
694 .shared
= IIO_SEPARATE
,
695 .read
= stm32_count_get_preset
,
696 .write
= stm32_count_set_preset
698 IIO_ENUM("enable_mode", IIO_SEPARATE
, &stm32_enable_mode_enum
),
699 IIO_ENUM_AVAILABLE("enable_mode", &stm32_enable_mode_enum
),
700 IIO_ENUM("trigger_mode", IIO_SEPARATE
, &stm32_trigger_mode_enum
),
701 IIO_ENUM_AVAILABLE("trigger_mode", &stm32_trigger_mode_enum
),
705 static const struct iio_chan_spec stm32_trigger_channel
= {
708 .info_mask_separate
= BIT(IIO_CHAN_INFO_RAW
) |
709 BIT(IIO_CHAN_INFO_ENABLE
) |
710 BIT(IIO_CHAN_INFO_SCALE
),
711 .ext_info
= stm32_trigger_count_info
,
715 static struct stm32_timer_trigger
*stm32_setup_counter_device(struct device
*dev
)
717 struct iio_dev
*indio_dev
;
720 indio_dev
= devm_iio_device_alloc(dev
,
721 sizeof(struct stm32_timer_trigger
));
725 indio_dev
->name
= dev_name(dev
);
726 indio_dev
->info
= &stm32_trigger_info
;
727 indio_dev
->modes
= INDIO_HARDWARE_TRIGGERED
;
728 indio_dev
->num_channels
= 1;
729 indio_dev
->channels
= &stm32_trigger_channel
;
731 ret
= devm_iio_device_register(dev
, indio_dev
);
735 return iio_priv(indio_dev
);
739 * is_stm32_timer_trigger
740 * @trig: trigger to be checked
742 * return true if the trigger is a valid stm32 iio timer trigger
743 * either return false
745 bool is_stm32_timer_trigger(struct iio_trigger
*trig
)
747 return (trig
->ops
== &timer_trigger_ops
);
749 EXPORT_SYMBOL(is_stm32_timer_trigger
);
751 static void stm32_timer_detect_trgo2(struct stm32_timer_trigger
*priv
)
756 * Master mode selection 2 bits can only be written and read back when
759 regmap_update_bits(priv
->regmap
, TIM_CR2
, TIM_CR2_MMS2
, TIM_CR2_MMS2
);
760 regmap_read(priv
->regmap
, TIM_CR2
, &val
);
761 regmap_update_bits(priv
->regmap
, TIM_CR2
, TIM_CR2_MMS2
, 0);
762 priv
->has_trgo2
= !!val
;
765 static int stm32_timer_trigger_probe(struct platform_device
*pdev
)
767 struct device
*dev
= &pdev
->dev
;
768 struct stm32_timer_trigger
*priv
;
769 struct stm32_timers
*ddata
= dev_get_drvdata(pdev
->dev
.parent
);
770 const struct stm32_timer_trigger_cfg
*cfg
;
774 if (of_property_read_u32(dev
->of_node
, "reg", &index
))
777 cfg
= (const struct stm32_timer_trigger_cfg
*)
778 of_match_device(dev
->driver
->of_match_table
, dev
)->data
;
780 if (index
>= ARRAY_SIZE(triggers_table
) ||
781 index
>= cfg
->num_valids_table
)
784 /* Create an IIO device only if we have triggers to be validated */
785 if (*cfg
->valids_table
[index
])
786 priv
= stm32_setup_counter_device(dev
);
788 priv
= devm_kzalloc(dev
, sizeof(*priv
), GFP_KERNEL
);
794 priv
->regmap
= ddata
->regmap
;
795 priv
->clk
= ddata
->clk
;
796 priv
->max_arr
= ddata
->max_arr
;
797 priv
->triggers
= triggers_table
[index
];
798 priv
->valids
= cfg
->valids_table
[index
];
799 stm32_timer_detect_trgo2(priv
);
800 mutex_init(&priv
->lock
);
802 ret
= stm32_register_iio_triggers(priv
);
806 platform_set_drvdata(pdev
, priv
);
811 static int stm32_timer_trigger_remove(struct platform_device
*pdev
)
813 struct stm32_timer_trigger
*priv
= platform_get_drvdata(pdev
);
816 /* Unregister triggers before everything can be safely turned off */
817 stm32_unregister_iio_triggers(priv
);
819 /* Check if nobody else use the timer, then disable it */
820 regmap_read(priv
->regmap
, TIM_CCER
, &val
);
821 if (!(val
& TIM_CCER_CCXE
))
822 regmap_update_bits(priv
->regmap
, TIM_CR1
, TIM_CR1_CEN
, 0);
825 clk_disable(priv
->clk
);
830 static int __maybe_unused
stm32_timer_trigger_suspend(struct device
*dev
)
832 struct stm32_timer_trigger
*priv
= dev_get_drvdata(dev
);
834 /* Only take care of enabled timer: don't disturb other MFD child */
836 /* Backup registers that may get lost in low power mode */
837 regmap_read(priv
->regmap
, TIM_CR1
, &priv
->bak
.cr1
);
838 regmap_read(priv
->regmap
, TIM_CR2
, &priv
->bak
.cr2
);
839 regmap_read(priv
->regmap
, TIM_PSC
, &priv
->bak
.psc
);
840 regmap_read(priv
->regmap
, TIM_ARR
, &priv
->bak
.arr
);
841 regmap_read(priv
->regmap
, TIM_CNT
, &priv
->bak
.cnt
);
842 regmap_read(priv
->regmap
, TIM_SMCR
, &priv
->bak
.smcr
);
844 /* Disable the timer */
845 regmap_update_bits(priv
->regmap
, TIM_CR1
, TIM_CR1_CEN
, 0);
846 clk_disable(priv
->clk
);
852 static int __maybe_unused
stm32_timer_trigger_resume(struct device
*dev
)
854 struct stm32_timer_trigger
*priv
= dev_get_drvdata(dev
);
858 ret
= clk_enable(priv
->clk
);
862 /* restore master/slave modes */
863 regmap_write(priv
->regmap
, TIM_SMCR
, priv
->bak
.smcr
);
864 regmap_write(priv
->regmap
, TIM_CR2
, priv
->bak
.cr2
);
866 /* restore sampling_frequency (trgo / trgo2 triggers) */
867 regmap_write(priv
->regmap
, TIM_PSC
, priv
->bak
.psc
);
868 regmap_write(priv
->regmap
, TIM_ARR
, priv
->bak
.arr
);
869 regmap_write(priv
->regmap
, TIM_CNT
, priv
->bak
.cnt
);
871 /* Also re-enables the timer */
872 regmap_write(priv
->regmap
, TIM_CR1
, priv
->bak
.cr1
);
878 static SIMPLE_DEV_PM_OPS(stm32_timer_trigger_pm_ops
,
879 stm32_timer_trigger_suspend
,
880 stm32_timer_trigger_resume
);
882 static const struct stm32_timer_trigger_cfg stm32_timer_trg_cfg
= {
883 .valids_table
= valids_table
,
884 .num_valids_table
= ARRAY_SIZE(valids_table
),
887 static const struct stm32_timer_trigger_cfg stm32h7_timer_trg_cfg
= {
888 .valids_table
= stm32h7_valids_table
,
889 .num_valids_table
= ARRAY_SIZE(stm32h7_valids_table
),
892 static const struct of_device_id stm32_trig_of_match
[] = {
894 .compatible
= "st,stm32-timer-trigger",
895 .data
= (void *)&stm32_timer_trg_cfg
,
897 .compatible
= "st,stm32h7-timer-trigger",
898 .data
= (void *)&stm32h7_timer_trg_cfg
,
902 MODULE_DEVICE_TABLE(of
, stm32_trig_of_match
);
904 static struct platform_driver stm32_timer_trigger_driver
= {
905 .probe
= stm32_timer_trigger_probe
,
906 .remove
= stm32_timer_trigger_remove
,
908 .name
= "stm32-timer-trigger",
909 .of_match_table
= stm32_trig_of_match
,
910 .pm
= &stm32_timer_trigger_pm_ops
,
913 module_platform_driver(stm32_timer_trigger_driver
);
915 MODULE_ALIAS("platform: stm32-timer-trigger");
916 MODULE_DESCRIPTION("STMicroelectronics STM32 Timer Trigger driver");
917 MODULE_LICENSE("GPL v2");