xref: /linux/drivers/iio/trigger/stm32-timer-trigger.c (revision 0d5ec7919f3747193f051036b2301734a4b5e1d6)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) STMicroelectronics 2016
4  *
5  * Author: Benjamin Gaignard <benjamin.gaignard@st.com>
6  *
7  */
8 
9 #include <linux/export.h>
10 #include <linux/iio/iio.h>
11 #include <linux/iio/sysfs.h>
12 #include <linux/iio/timer/stm32-timer-trigger.h>
13 #include <linux/iio/trigger.h>
14 #include <linux/mfd/stm32-timers.h>
15 #include <linux/mod_devicetable.h>
16 #include <linux/module.h>
17 #include <linux/platform_device.h>
18 #include <linux/property.h>
19 
20 #define MAX_TRIGGERS 7
21 #define MAX_VALIDS 5
22 
23 /* List the triggers created by each timer */
24 static const void *triggers_table[][MAX_TRIGGERS] = {
25 	{ TIM1_TRGO, TIM1_TRGO2, TIM1_CH1, TIM1_CH2, TIM1_CH3, TIM1_CH4,},
26 	{ TIM2_TRGO, TIM2_CH1, TIM2_CH2, TIM2_CH3, TIM2_CH4,},
27 	{ TIM3_TRGO, TIM3_CH1, TIM3_CH2, TIM3_CH3, TIM3_CH4,},
28 	{ TIM4_TRGO, TIM4_CH1, TIM4_CH2, TIM4_CH3, TIM4_CH4,},
29 	{ TIM5_TRGO, TIM5_CH1, TIM5_CH2, TIM5_CH3, TIM5_CH4,},
30 	{ TIM6_TRGO,},
31 	{ TIM7_TRGO,},
32 	{ TIM8_TRGO, TIM8_TRGO2, TIM8_CH1, TIM8_CH2, TIM8_CH3, TIM8_CH4,},
33 	{ TIM9_TRGO, TIM9_CH1, TIM9_CH2,},
34 	{ TIM10_OC1,},
35 	{ TIM11_OC1,},
36 	{ TIM12_TRGO, TIM12_CH1, TIM12_CH2,},
37 	{ TIM13_OC1,},
38 	{ TIM14_OC1,},
39 	{ TIM15_TRGO,},
40 	{ TIM16_OC1,},
41 	{ TIM17_OC1,},
42 	{ }, /* timer 18 */
43 	{ }, /* timer 19 */
44 	{ TIM20_TRGO, TIM20_TRGO2, TIM20_OC1, TIM20_OC2, TIM20_OC3, },
45 };
46 
47 /* List the triggers accepted by each timer */
48 static const void *valids_table[][MAX_VALIDS] = {
49 	{ TIM5_TRGO, TIM2_TRGO, TIM3_TRGO, TIM4_TRGO,},
50 	{ TIM1_TRGO, TIM8_TRGO, TIM3_TRGO, TIM4_TRGO,},
51 	{ TIM1_TRGO, TIM2_TRGO, TIM5_TRGO, TIM4_TRGO,},
52 	{ TIM1_TRGO, TIM2_TRGO, TIM3_TRGO, TIM8_TRGO,},
53 	{ TIM2_TRGO, TIM3_TRGO, TIM4_TRGO, TIM8_TRGO,},
54 	{ }, /* timer 6 */
55 	{ }, /* timer 7 */
56 	{ TIM1_TRGO, TIM2_TRGO, TIM4_TRGO, TIM5_TRGO,},
57 	{ TIM2_TRGO, TIM3_TRGO, TIM10_OC1, TIM11_OC1,},
58 	{ }, /* timer 10 */
59 	{ }, /* timer 11 */
60 	{ TIM4_TRGO, TIM5_TRGO, TIM13_OC1, TIM14_OC1,},
61 };
62 
63 static const void *stm32h7_valids_table[][MAX_VALIDS] = {
64 	{ TIM15_TRGO, TIM2_TRGO, TIM3_TRGO, TIM4_TRGO,},
65 	{ TIM1_TRGO, TIM8_TRGO, TIM3_TRGO, TIM4_TRGO,},
66 	{ TIM1_TRGO, TIM2_TRGO, TIM15_TRGO, TIM4_TRGO,},
67 	{ TIM1_TRGO, TIM2_TRGO, TIM3_TRGO, TIM8_TRGO,},
68 	{ TIM1_TRGO, TIM8_TRGO, TIM3_TRGO, TIM4_TRGO,},
69 	{ }, /* timer 6 */
70 	{ }, /* timer 7 */
71 	{ TIM1_TRGO, TIM2_TRGO, TIM4_TRGO, TIM5_TRGO,},
72 	{ }, /* timer 9 */
73 	{ }, /* timer 10 */
74 	{ }, /* timer 11 */
75 	{ TIM4_TRGO, TIM5_TRGO, TIM13_OC1, TIM14_OC1,},
76 	{ }, /* timer 13 */
77 	{ }, /* timer 14 */
78 	{ TIM1_TRGO, TIM3_TRGO, TIM16_OC1, TIM17_OC1,},
79 	{ }, /* timer 16 */
80 	{ }, /* timer 17 */
81 };
82 
83 struct stm32_timer_trigger_regs {
84 	u32 cr1;
85 	u32 cr2;
86 	u32 psc;
87 	u32 arr;
88 	u32 cnt;
89 	u32 smcr;
90 };
91 
92 struct stm32_timer_trigger {
93 	struct device *dev;
94 	struct regmap *regmap;
95 	struct clk *clk;
96 	bool enabled;
97 	u32 max_arr;
98 	const void *triggers;
99 	const void *valids;
100 	bool has_trgo2;
101 	struct mutex lock; /* concurrent sysfs configuration */
102 	struct list_head tr_list;
103 	struct stm32_timer_trigger_regs bak;
104 };
105 
106 struct stm32_timer_trigger_cfg {
107 	const void *(*valids_table)[MAX_VALIDS];
108 	const unsigned int num_valids_table;
109 };
110 
stm32_timer_is_trgo2_name(const char * name)111 static bool stm32_timer_is_trgo2_name(const char *name)
112 {
113 	return !!strstr(name, "trgo2");
114 }
115 
stm32_timer_is_trgo_name(const char * name)116 static bool stm32_timer_is_trgo_name(const char *name)
117 {
118 	return (!!strstr(name, "trgo") && !strstr(name, "trgo2"));
119 }
120 
stm32_timer_start(struct stm32_timer_trigger * priv,struct iio_trigger * trig,unsigned int frequency)121 static int stm32_timer_start(struct stm32_timer_trigger *priv,
122 			     struct iio_trigger *trig,
123 			     unsigned int frequency)
124 {
125 	unsigned long long prd, div;
126 	int prescaler = 0, ret;
127 	u32 ccer;
128 
129 	/* Period and prescaler values depends of clock rate */
130 	div = (unsigned long long)clk_get_rate(priv->clk);
131 
132 	do_div(div, frequency);
133 
134 	prd = div;
135 
136 	/*
137 	 * Increase prescaler value until we get a result that fit
138 	 * with auto reload register maximum value.
139 	 */
140 	while (div > priv->max_arr) {
141 		prescaler++;
142 		div = prd;
143 		do_div(div, (prescaler + 1));
144 	}
145 	prd = div;
146 
147 	if (prescaler > MAX_TIM_PSC) {
148 		dev_err(priv->dev, "prescaler exceeds the maximum value\n");
149 		return -EINVAL;
150 	}
151 
152 	/* Check if nobody else use the timer */
153 	regmap_read(priv->regmap, TIM_CCER, &ccer);
154 	if (ccer & TIM_CCER_CCXE)
155 		return -EBUSY;
156 
157 	guard(mutex)(&priv->lock);
158 	if (!priv->enabled) {
159 		priv->enabled = true;
160 		ret = clk_enable(priv->clk);
161 		if (ret)
162 			return ret;
163 	}
164 
165 	regmap_write(priv->regmap, TIM_PSC, prescaler);
166 	regmap_write(priv->regmap, TIM_ARR, prd - 1);
167 	regmap_set_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE);
168 
169 	/* Force master mode to update mode */
170 	if (stm32_timer_is_trgo2_name(trig->name))
171 		regmap_update_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS2,
172 				   0x2 << TIM_CR2_MMS2_SHIFT);
173 	else
174 		regmap_update_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS,
175 				   0x2 << TIM_CR2_MMS_SHIFT);
176 
177 	/* Make sure that registers are updated */
178 	regmap_set_bits(priv->regmap, TIM_EGR, TIM_EGR_UG);
179 
180 	/* Enable controller */
181 	regmap_set_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN);
182 
183 	return 0;
184 }
185 
stm32_timer_stop(struct stm32_timer_trigger * priv,struct iio_trigger * trig)186 static void stm32_timer_stop(struct stm32_timer_trigger *priv,
187 			     struct iio_trigger *trig)
188 {
189 	u32 ccer;
190 
191 	regmap_read(priv->regmap, TIM_CCER, &ccer);
192 	if (ccer & TIM_CCER_CCXE)
193 		return;
194 
195 	mutex_lock(&priv->lock);
196 	/* Stop timer */
197 	regmap_clear_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE);
198 	regmap_clear_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN);
199 	regmap_write(priv->regmap, TIM_PSC, 0);
200 	regmap_write(priv->regmap, TIM_ARR, 0);
201 
202 	/* Force disable master mode */
203 	if (stm32_timer_is_trgo2_name(trig->name))
204 		regmap_clear_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS2);
205 	else
206 		regmap_clear_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS);
207 
208 	/* Make sure that registers are updated */
209 	regmap_set_bits(priv->regmap, TIM_EGR, TIM_EGR_UG);
210 
211 	if (priv->enabled) {
212 		priv->enabled = false;
213 		clk_disable(priv->clk);
214 	}
215 	mutex_unlock(&priv->lock);
216 }
217 
stm32_tt_store_frequency(struct device * dev,struct device_attribute * attr,const char * buf,size_t len)218 static ssize_t stm32_tt_store_frequency(struct device *dev,
219 					struct device_attribute *attr,
220 					const char *buf, size_t len)
221 {
222 	struct iio_trigger *trig = to_iio_trigger(dev);
223 	struct stm32_timer_trigger *priv = iio_trigger_get_drvdata(trig);
224 	unsigned int freq;
225 	int ret;
226 
227 	ret = kstrtouint(buf, 10, &freq);
228 	if (ret)
229 		return ret;
230 
231 	if (freq == 0) {
232 		stm32_timer_stop(priv, trig);
233 	} else {
234 		ret = stm32_timer_start(priv, trig, freq);
235 		if (ret)
236 			return ret;
237 	}
238 
239 	return len;
240 }
241 
stm32_tt_read_frequency(struct device * dev,struct device_attribute * attr,char * buf)242 static ssize_t stm32_tt_read_frequency(struct device *dev,
243 				       struct device_attribute *attr, char *buf)
244 {
245 	struct iio_trigger *trig = to_iio_trigger(dev);
246 	struct stm32_timer_trigger *priv = iio_trigger_get_drvdata(trig);
247 	u32 psc, arr, cr1;
248 	unsigned long long freq = 0;
249 
250 	regmap_read(priv->regmap, TIM_CR1, &cr1);
251 	regmap_read(priv->regmap, TIM_PSC, &psc);
252 	regmap_read(priv->regmap, TIM_ARR, &arr);
253 
254 	if (cr1 & TIM_CR1_CEN) {
255 		freq = (unsigned long long)clk_get_rate(priv->clk);
256 		do_div(freq, psc + 1);
257 		do_div(freq, arr + 1);
258 	}
259 
260 	return sprintf(buf, "%d\n", (unsigned int)freq);
261 }
262 
263 static IIO_DEV_ATTR_SAMP_FREQ(0660,
264 			      stm32_tt_read_frequency,
265 			      stm32_tt_store_frequency);
266 
267 #define MASTER_MODE_MAX		7
268 #define MASTER_MODE2_MAX	15
269 
270 static char *master_mode_table[] = {
271 	"reset",
272 	"enable",
273 	"update",
274 	"compare_pulse",
275 	"OC1REF",
276 	"OC2REF",
277 	"OC3REF",
278 	"OC4REF",
279 	/* Master mode selection 2 only */
280 	"OC5REF",
281 	"OC6REF",
282 	"compare_pulse_OC4REF",
283 	"compare_pulse_OC6REF",
284 	"compare_pulse_OC4REF_r_or_OC6REF_r",
285 	"compare_pulse_OC4REF_r_or_OC6REF_f",
286 	"compare_pulse_OC5REF_r_or_OC6REF_r",
287 	"compare_pulse_OC5REF_r_or_OC6REF_f",
288 };
289 
stm32_tt_show_master_mode(struct device * dev,struct device_attribute * attr,char * buf)290 static ssize_t stm32_tt_show_master_mode(struct device *dev,
291 					 struct device_attribute *attr,
292 					 char *buf)
293 {
294 	struct stm32_timer_trigger *priv = dev_get_drvdata(dev);
295 	struct iio_trigger *trig = to_iio_trigger(dev);
296 	u32 cr2;
297 
298 	regmap_read(priv->regmap, TIM_CR2, &cr2);
299 
300 	if (stm32_timer_is_trgo2_name(trig->name))
301 		cr2 = (cr2 & TIM_CR2_MMS2) >> TIM_CR2_MMS2_SHIFT;
302 	else
303 		cr2 = (cr2 & TIM_CR2_MMS) >> TIM_CR2_MMS_SHIFT;
304 
305 	return sysfs_emit(buf, "%s\n", master_mode_table[cr2]);
306 }
307 
stm32_tt_store_master_mode(struct device * dev,struct device_attribute * attr,const char * buf,size_t len)308 static ssize_t stm32_tt_store_master_mode(struct device *dev,
309 					  struct device_attribute *attr,
310 					  const char *buf, size_t len)
311 {
312 	struct stm32_timer_trigger *priv = dev_get_drvdata(dev);
313 	struct iio_trigger *trig = to_iio_trigger(dev);
314 	u32 mask, shift, master_mode_max;
315 	int i, ret;
316 
317 	if (stm32_timer_is_trgo2_name(trig->name)) {
318 		mask = TIM_CR2_MMS2;
319 		shift = TIM_CR2_MMS2_SHIFT;
320 		master_mode_max = MASTER_MODE2_MAX;
321 	} else {
322 		mask = TIM_CR2_MMS;
323 		shift = TIM_CR2_MMS_SHIFT;
324 		master_mode_max = MASTER_MODE_MAX;
325 	}
326 
327 	for (i = 0; i <= master_mode_max; i++) {
328 		if (!strncmp(master_mode_table[i], buf,
329 			     strlen(master_mode_table[i]))) {
330 			guard(mutex)(&priv->lock);
331 			if (!priv->enabled) {
332 				/* Clock should be enabled first */
333 				priv->enabled = true;
334 				ret = clk_enable(priv->clk);
335 				if (ret)
336 					return ret;
337 			}
338 			regmap_update_bits(priv->regmap, TIM_CR2, mask,
339 					   i << shift);
340 			return len;
341 		}
342 	}
343 
344 	return -EINVAL;
345 }
346 
stm32_tt_show_master_mode_avail(struct device * dev,struct device_attribute * attr,char * buf)347 static ssize_t stm32_tt_show_master_mode_avail(struct device *dev,
348 					       struct device_attribute *attr,
349 					       char *buf)
350 {
351 	struct iio_trigger *trig = to_iio_trigger(dev);
352 	unsigned int i, master_mode_max;
353 	size_t len = 0;
354 
355 	if (stm32_timer_is_trgo2_name(trig->name))
356 		master_mode_max = MASTER_MODE2_MAX;
357 	else
358 		master_mode_max = MASTER_MODE_MAX;
359 
360 	for (i = 0; i <= master_mode_max; i++)
361 		len += scnprintf(buf + len, PAGE_SIZE - len,
362 			"%s ", master_mode_table[i]);
363 
364 	/* replace trailing space by newline */
365 	buf[len - 1] = '\n';
366 
367 	return len;
368 }
369 
370 static IIO_DEVICE_ATTR(master_mode_available, 0444,
371 		       stm32_tt_show_master_mode_avail, NULL, 0);
372 
373 static IIO_DEVICE_ATTR(master_mode, 0660,
374 		       stm32_tt_show_master_mode,
375 		       stm32_tt_store_master_mode,
376 		       0);
377 
378 static struct attribute *stm32_trigger_attrs[] = {
379 	&iio_dev_attr_sampling_frequency.dev_attr.attr,
380 	&iio_dev_attr_master_mode.dev_attr.attr,
381 	&iio_dev_attr_master_mode_available.dev_attr.attr,
382 	NULL,
383 };
384 
385 static const struct attribute_group stm32_trigger_attr_group = {
386 	.attrs = stm32_trigger_attrs,
387 };
388 
389 static const struct attribute_group *stm32_trigger_attr_groups[] = {
390 	&stm32_trigger_attr_group,
391 	NULL,
392 };
393 
394 static const struct iio_trigger_ops timer_trigger_ops = {
395 };
396 
stm32_unregister_iio_triggers(struct stm32_timer_trigger * priv)397 static void stm32_unregister_iio_triggers(struct stm32_timer_trigger *priv)
398 {
399 	struct iio_trigger *tr;
400 
401 	list_for_each_entry(tr, &priv->tr_list, alloc_list)
402 		iio_trigger_unregister(tr);
403 }
404 
stm32_register_iio_triggers(struct stm32_timer_trigger * priv)405 static int stm32_register_iio_triggers(struct stm32_timer_trigger *priv)
406 {
407 	int ret;
408 	const char * const *cur = priv->triggers;
409 
410 	INIT_LIST_HEAD(&priv->tr_list);
411 
412 	while (cur && *cur) {
413 		struct iio_trigger *trig;
414 		bool cur_is_trgo = stm32_timer_is_trgo_name(*cur);
415 		bool cur_is_trgo2 = stm32_timer_is_trgo2_name(*cur);
416 
417 		if (cur_is_trgo2 && !priv->has_trgo2) {
418 			cur++;
419 			continue;
420 		}
421 
422 		trig = devm_iio_trigger_alloc(priv->dev, "%s", *cur);
423 		if  (!trig)
424 			return -ENOMEM;
425 
426 		trig->dev.parent = priv->dev->parent;
427 		trig->ops = &timer_trigger_ops;
428 
429 		/*
430 		 * sampling frequency and master mode attributes
431 		 * should only be available on trgo/trgo2 triggers
432 		 */
433 		if (cur_is_trgo || cur_is_trgo2)
434 			trig->dev.groups = stm32_trigger_attr_groups;
435 
436 		iio_trigger_set_drvdata(trig, priv);
437 
438 		ret = iio_trigger_register(trig);
439 		if (ret) {
440 			stm32_unregister_iio_triggers(priv);
441 			return ret;
442 		}
443 
444 		list_add_tail(&trig->alloc_list, &priv->tr_list);
445 		cur++;
446 	}
447 
448 	return 0;
449 }
450 
stm32_counter_read_raw(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,int * val,int * val2,long mask)451 static int stm32_counter_read_raw(struct iio_dev *indio_dev,
452 				  struct iio_chan_spec const *chan,
453 				  int *val, int *val2, long mask)
454 {
455 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
456 	u32 dat;
457 
458 	switch (mask) {
459 	case IIO_CHAN_INFO_RAW:
460 		regmap_read(priv->regmap, TIM_CNT, &dat);
461 		*val = dat;
462 		return IIO_VAL_INT;
463 
464 	case IIO_CHAN_INFO_ENABLE:
465 		regmap_read(priv->regmap, TIM_CR1, &dat);
466 		*val = (dat & TIM_CR1_CEN) ? 1 : 0;
467 		return IIO_VAL_INT;
468 
469 	case IIO_CHAN_INFO_SCALE:
470 		regmap_read(priv->regmap, TIM_SMCR, &dat);
471 		dat &= TIM_SMCR_SMS;
472 
473 		*val = 1;
474 		*val2 = 0;
475 
476 		/* in quadrature case scale = 0.25 */
477 		if (dat == 3)
478 			*val2 = 2;
479 
480 		return IIO_VAL_FRACTIONAL_LOG2;
481 	}
482 
483 	return -EINVAL;
484 }
485 
stm32_counter_write_raw(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,int val,int val2,long mask)486 static int stm32_counter_write_raw(struct iio_dev *indio_dev,
487 				   struct iio_chan_spec const *chan,
488 				   int val, int val2, long mask)
489 {
490 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
491 	int ret;
492 
493 	switch (mask) {
494 	case IIO_CHAN_INFO_RAW:
495 		return regmap_write(priv->regmap, TIM_CNT, val);
496 
497 	case IIO_CHAN_INFO_SCALE:
498 		/* fixed scale */
499 		return -EINVAL;
500 
501 	case IIO_CHAN_INFO_ENABLE: {
502 		guard(mutex)(&priv->lock);
503 		if (val) {
504 			if (!priv->enabled) {
505 				priv->enabled = true;
506 				ret = clk_enable(priv->clk);
507 				if (ret)
508 					return ret;
509 			}
510 			regmap_set_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN);
511 		} else {
512 			regmap_clear_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN);
513 			if (priv->enabled) {
514 				priv->enabled = false;
515 				clk_disable(priv->clk);
516 			}
517 		}
518 
519 		return 0;
520 	}
521 	default:
522 		return -EINVAL;
523 	}
524 }
525 
stm32_counter_validate_trigger(struct iio_dev * indio_dev,struct iio_trigger * trig)526 static int stm32_counter_validate_trigger(struct iio_dev *indio_dev,
527 					  struct iio_trigger *trig)
528 {
529 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
530 	const char * const *cur = priv->valids;
531 	unsigned int i = 0;
532 
533 	if (!is_stm32_timer_trigger(trig))
534 		return -EINVAL;
535 
536 	while (cur && *cur) {
537 		if (!strncmp(trig->name, *cur, strlen(trig->name))) {
538 			regmap_update_bits(priv->regmap,
539 					   TIM_SMCR, TIM_SMCR_TS,
540 					   i << TIM_SMCR_TS_SHIFT);
541 			return 0;
542 		}
543 		cur++;
544 		i++;
545 	}
546 
547 	return -EINVAL;
548 }
549 
550 static const struct iio_info stm32_trigger_info = {
551 	.validate_trigger = stm32_counter_validate_trigger,
552 	.read_raw = stm32_counter_read_raw,
553 	.write_raw = stm32_counter_write_raw
554 };
555 
556 static const char *const stm32_trigger_modes[] = {
557 	"trigger",
558 };
559 
stm32_set_trigger_mode(struct iio_dev * indio_dev,const struct iio_chan_spec * chan,unsigned int mode)560 static int stm32_set_trigger_mode(struct iio_dev *indio_dev,
561 				  const struct iio_chan_spec *chan,
562 				  unsigned int mode)
563 {
564 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
565 
566 	regmap_set_bits(priv->regmap, TIM_SMCR, TIM_SMCR_SMS);
567 
568 	return 0;
569 }
570 
stm32_get_trigger_mode(struct iio_dev * indio_dev,const struct iio_chan_spec * chan)571 static int stm32_get_trigger_mode(struct iio_dev *indio_dev,
572 				  const struct iio_chan_spec *chan)
573 {
574 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
575 	u32 smcr;
576 
577 	regmap_read(priv->regmap, TIM_SMCR, &smcr);
578 
579 	return (smcr & TIM_SMCR_SMS) == TIM_SMCR_SMS ? 0 : -EINVAL;
580 }
581 
582 static const struct iio_enum stm32_trigger_mode_enum = {
583 	.items = stm32_trigger_modes,
584 	.num_items = ARRAY_SIZE(stm32_trigger_modes),
585 	.set = stm32_set_trigger_mode,
586 	.get = stm32_get_trigger_mode
587 };
588 
589 static const char *const stm32_enable_modes[] = {
590 	"always",
591 	"gated",
592 	"triggered",
593 };
594 
stm32_enable_mode2sms(int mode)595 static int stm32_enable_mode2sms(int mode)
596 {
597 	switch (mode) {
598 	case 0:
599 		return 0;
600 	case 1:
601 		return 5;
602 	case 2:
603 		return 6;
604 	}
605 
606 	return -EINVAL;
607 }
608 
stm32_set_enable_mode(struct iio_dev * indio_dev,const struct iio_chan_spec * chan,unsigned int mode)609 static int stm32_set_enable_mode(struct iio_dev *indio_dev,
610 				 const struct iio_chan_spec *chan,
611 				 unsigned int mode)
612 {
613 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
614 	int sms = stm32_enable_mode2sms(mode);
615 	int ret;
616 
617 	if (sms < 0)
618 		return sms;
619 	/*
620 	 * Triggered mode sets CEN bit automatically by hardware. So, first
621 	 * enable counter clock, so it can use it. Keeps it in sync with CEN.
622 	 */
623 	scoped_guard(mutex, &priv->lock) {
624 		if (sms == 6 && !priv->enabled) {
625 			ret = clk_enable(priv->clk);
626 			if (ret)
627 				return ret;
628 
629 			priv->enabled = true;
630 		}
631 	}
632 
633 	regmap_update_bits(priv->regmap, TIM_SMCR, TIM_SMCR_SMS, sms);
634 
635 	return 0;
636 }
637 
stm32_sms2enable_mode(int mode)638 static int stm32_sms2enable_mode(int mode)
639 {
640 	switch (mode) {
641 	case 0:
642 		return 0;
643 	case 5:
644 		return 1;
645 	case 6:
646 		return 2;
647 	}
648 
649 	return -EINVAL;
650 }
651 
stm32_get_enable_mode(struct iio_dev * indio_dev,const struct iio_chan_spec * chan)652 static int stm32_get_enable_mode(struct iio_dev *indio_dev,
653 				 const struct iio_chan_spec *chan)
654 {
655 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
656 	u32 smcr;
657 
658 	regmap_read(priv->regmap, TIM_SMCR, &smcr);
659 	smcr &= TIM_SMCR_SMS;
660 
661 	return stm32_sms2enable_mode(smcr);
662 }
663 
664 static const struct iio_enum stm32_enable_mode_enum = {
665 	.items = stm32_enable_modes,
666 	.num_items = ARRAY_SIZE(stm32_enable_modes),
667 	.set = stm32_set_enable_mode,
668 	.get = stm32_get_enable_mode
669 };
670 
stm32_count_get_preset(struct iio_dev * indio_dev,uintptr_t private,const struct iio_chan_spec * chan,char * buf)671 static ssize_t stm32_count_get_preset(struct iio_dev *indio_dev,
672 				      uintptr_t private,
673 				      const struct iio_chan_spec *chan,
674 				      char *buf)
675 {
676 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
677 	u32 arr;
678 
679 	regmap_read(priv->regmap, TIM_ARR, &arr);
680 
681 	return snprintf(buf, PAGE_SIZE, "%u\n", arr);
682 }
683 
stm32_count_set_preset(struct iio_dev * indio_dev,uintptr_t private,const struct iio_chan_spec * chan,const char * buf,size_t len)684 static ssize_t stm32_count_set_preset(struct iio_dev *indio_dev,
685 				      uintptr_t private,
686 				      const struct iio_chan_spec *chan,
687 				      const char *buf, size_t len)
688 {
689 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
690 	unsigned int preset;
691 	int ret;
692 
693 	ret = kstrtouint(buf, 0, &preset);
694 	if (ret)
695 		return ret;
696 
697 	/* TIMx_ARR register shouldn't be buffered (ARPE=0) */
698 	regmap_clear_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE);
699 	regmap_write(priv->regmap, TIM_ARR, preset);
700 
701 	return len;
702 }
703 
704 static const struct iio_chan_spec_ext_info stm32_trigger_count_info[] = {
705 	{
706 		.name = "preset",
707 		.shared = IIO_SEPARATE,
708 		.read = stm32_count_get_preset,
709 		.write = stm32_count_set_preset
710 	},
711 	IIO_ENUM("enable_mode", IIO_SEPARATE, &stm32_enable_mode_enum),
712 	IIO_ENUM_AVAILABLE("enable_mode", IIO_SHARED_BY_TYPE, &stm32_enable_mode_enum),
713 	IIO_ENUM("trigger_mode", IIO_SEPARATE, &stm32_trigger_mode_enum),
714 	IIO_ENUM_AVAILABLE("trigger_mode", IIO_SHARED_BY_TYPE, &stm32_trigger_mode_enum),
715 	{ }
716 };
717 
718 static const struct iio_chan_spec stm32_trigger_channel = {
719 	.type = IIO_COUNT,
720 	.channel = 0,
721 	.info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
722 			      BIT(IIO_CHAN_INFO_ENABLE) |
723 			      BIT(IIO_CHAN_INFO_SCALE),
724 	.ext_info = stm32_trigger_count_info,
725 	.indexed = 1
726 };
727 
stm32_setup_counter_device(struct device * dev)728 static struct stm32_timer_trigger *stm32_setup_counter_device(struct device *dev)
729 {
730 	struct iio_dev *indio_dev;
731 	int ret;
732 
733 	indio_dev = devm_iio_device_alloc(dev,
734 					  sizeof(struct stm32_timer_trigger));
735 	if (!indio_dev)
736 		return NULL;
737 
738 	indio_dev->name = dev_name(dev);
739 	indio_dev->info = &stm32_trigger_info;
740 	indio_dev->modes = INDIO_HARDWARE_TRIGGERED;
741 	indio_dev->num_channels = 1;
742 	indio_dev->channels = &stm32_trigger_channel;
743 
744 	ret = devm_iio_device_register(dev, indio_dev);
745 	if (ret)
746 		return NULL;
747 
748 	return iio_priv(indio_dev);
749 }
750 
751 /**
752  * is_stm32_timer_trigger
753  * @trig: trigger to be checked
754  *
755  * return true if the trigger is a valid stm32 iio timer trigger
756  * either return false
757  */
is_stm32_timer_trigger(struct iio_trigger * trig)758 bool is_stm32_timer_trigger(struct iio_trigger *trig)
759 {
760 	return (trig->ops == &timer_trigger_ops);
761 }
762 EXPORT_SYMBOL(is_stm32_timer_trigger);
763 
stm32_timer_detect_trgo2(struct stm32_timer_trigger * priv)764 static void stm32_timer_detect_trgo2(struct stm32_timer_trigger *priv)
765 {
766 	u32 val;
767 
768 	/*
769 	 * Master mode selection 2 bits can only be written and read back when
770 	 * timer supports it.
771 	 */
772 	regmap_set_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS2);
773 	regmap_read(priv->regmap, TIM_CR2, &val);
774 	regmap_clear_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS2);
775 	priv->has_trgo2 = !!val;
776 }
777 
stm32_timer_trigger_probe(struct platform_device * pdev)778 static int stm32_timer_trigger_probe(struct platform_device *pdev)
779 {
780 	struct device *dev = &pdev->dev;
781 	struct stm32_timer_trigger *priv;
782 	struct stm32_timers *ddata = dev_get_drvdata(pdev->dev.parent);
783 	const struct stm32_timer_trigger_cfg *cfg;
784 	unsigned int index;
785 	int ret;
786 
787 	ret = device_property_read_u32(dev, "reg", &index);
788 	if (ret)
789 		return ret;
790 
791 	cfg = device_get_match_data(dev);
792 
793 	if (index >= ARRAY_SIZE(triggers_table) ||
794 	    index >= cfg->num_valids_table)
795 		return -EINVAL;
796 
797 	/* Create an IIO device only if we have triggers to be validated */
798 	if (cfg->valids_table && *cfg->valids_table[index])
799 		priv = stm32_setup_counter_device(dev);
800 	else
801 		priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
802 
803 	if (!priv)
804 		return -ENOMEM;
805 
806 	priv->dev = dev;
807 	priv->regmap = ddata->regmap;
808 	priv->clk = ddata->clk;
809 	priv->max_arr = ddata->max_arr;
810 	priv->triggers = triggers_table[index];
811 	if (cfg->valids_table && *cfg->valids_table[index])
812 		priv->valids = cfg->valids_table[index];
813 	stm32_timer_detect_trgo2(priv);
814 	mutex_init(&priv->lock);
815 
816 	ret = stm32_register_iio_triggers(priv);
817 	if (ret)
818 		return ret;
819 
820 	platform_set_drvdata(pdev, priv);
821 
822 	return 0;
823 }
824 
stm32_timer_trigger_remove(struct platform_device * pdev)825 static void stm32_timer_trigger_remove(struct platform_device *pdev)
826 {
827 	struct stm32_timer_trigger *priv = platform_get_drvdata(pdev);
828 	u32 val;
829 
830 	/* Unregister triggers before everything can be safely turned off */
831 	stm32_unregister_iio_triggers(priv);
832 
833 	/* Check if nobody else use the timer, then disable it */
834 	regmap_read(priv->regmap, TIM_CCER, &val);
835 	if (!(val & TIM_CCER_CCXE))
836 		regmap_clear_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN);
837 
838 	if (priv->enabled)
839 		clk_disable(priv->clk);
840 }
841 
stm32_timer_trigger_suspend(struct device * dev)842 static int stm32_timer_trigger_suspend(struct device *dev)
843 {
844 	struct stm32_timer_trigger *priv = dev_get_drvdata(dev);
845 
846 	/* Only take care of enabled timer: don't disturb other MFD child */
847 	if (priv->enabled) {
848 		/* Backup registers that may get lost in low power mode */
849 		regmap_read(priv->regmap, TIM_CR1, &priv->bak.cr1);
850 		regmap_read(priv->regmap, TIM_CR2, &priv->bak.cr2);
851 		regmap_read(priv->regmap, TIM_PSC, &priv->bak.psc);
852 		regmap_read(priv->regmap, TIM_ARR, &priv->bak.arr);
853 		regmap_read(priv->regmap, TIM_CNT, &priv->bak.cnt);
854 		regmap_read(priv->regmap, TIM_SMCR, &priv->bak.smcr);
855 
856 		/* Disable the timer */
857 		regmap_clear_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN);
858 		clk_disable(priv->clk);
859 	}
860 
861 	return 0;
862 }
863 
stm32_timer_trigger_resume(struct device * dev)864 static int stm32_timer_trigger_resume(struct device *dev)
865 {
866 	struct stm32_timer_trigger *priv = dev_get_drvdata(dev);
867 	int ret;
868 
869 	if (priv->enabled) {
870 		ret = clk_enable(priv->clk);
871 		if (ret)
872 			return ret;
873 
874 		/* restore master/slave modes */
875 		regmap_write(priv->regmap, TIM_SMCR, priv->bak.smcr);
876 		regmap_write(priv->regmap, TIM_CR2, priv->bak.cr2);
877 
878 		/* restore sampling_frequency (trgo / trgo2 triggers) */
879 		regmap_write(priv->regmap, TIM_PSC, priv->bak.psc);
880 		regmap_write(priv->regmap, TIM_ARR, priv->bak.arr);
881 		regmap_write(priv->regmap, TIM_CNT, priv->bak.cnt);
882 
883 		/* Also re-enables the timer */
884 		regmap_write(priv->regmap, TIM_CR1, priv->bak.cr1);
885 	}
886 
887 	return 0;
888 }
889 
890 static DEFINE_SIMPLE_DEV_PM_OPS(stm32_timer_trigger_pm_ops,
891 				stm32_timer_trigger_suspend,
892 				stm32_timer_trigger_resume);
893 
894 static const struct stm32_timer_trigger_cfg stm32_timer_trg_cfg = {
895 	.valids_table = valids_table,
896 	.num_valids_table = ARRAY_SIZE(valids_table),
897 };
898 
899 static const struct stm32_timer_trigger_cfg stm32h7_timer_trg_cfg = {
900 	.valids_table = stm32h7_valids_table,
901 	.num_valids_table = ARRAY_SIZE(stm32h7_valids_table),
902 };
903 
904 static const struct stm32_timer_trigger_cfg stm32mp25_timer_trg_cfg = {
905 	/*
906 	 * valids_table not used: counter framework is now superseding the deprecated IIO
907 	 * counter interface (IIO_COUNT), so don't support it. num_valids_table is only
908 	 * kept here to register the IIO HW triggers. valids_table should be moved at some
909 	 * point to the stm32-timer-cnt driver instead.
910 	 */
911 	.num_valids_table = ARRAY_SIZE(triggers_table),
912 };
913 
914 static const struct of_device_id stm32_trig_of_match[] = {
915 	{
916 		.compatible = "st,stm32-timer-trigger",
917 		.data = (void *)&stm32_timer_trg_cfg,
918 	}, {
919 		.compatible = "st,stm32h7-timer-trigger",
920 		.data = (void *)&stm32h7_timer_trg_cfg,
921 	}, {
922 		.compatible = "st,stm32mp25-timer-trigger",
923 		.data = (void *)&stm32mp25_timer_trg_cfg,
924 	},
925 	{ }
926 };
927 MODULE_DEVICE_TABLE(of, stm32_trig_of_match);
928 
929 static struct platform_driver stm32_timer_trigger_driver = {
930 	.probe = stm32_timer_trigger_probe,
931 	.remove = stm32_timer_trigger_remove,
932 	.driver = {
933 		.name = "stm32-timer-trigger",
934 		.of_match_table = stm32_trig_of_match,
935 		.pm = pm_sleep_ptr(&stm32_timer_trigger_pm_ops),
936 	},
937 };
938 module_platform_driver(stm32_timer_trigger_driver);
939 
940 MODULE_ALIAS("platform:stm32-timer-trigger");
941 MODULE_DESCRIPTION("STMicroelectronics STM32 Timer Trigger driver");
942 MODULE_LICENSE("GPL v2");
943