• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/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>
17 
18 #define MAX_TRIGGERS 7
19 #define MAX_VALIDS 5
20 
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,},
28 	{ TIM6_TRGO,},
29 	{ TIM7_TRGO,},
30 	{ TIM8_TRGO, TIM8_TRGO2, TIM8_CH1, TIM8_CH2, TIM8_CH3, TIM8_CH4,},
31 	{ TIM9_TRGO, TIM9_CH1, TIM9_CH2,},
32 	{ TIM10_OC1,},
33 	{ TIM11_OC1,},
34 	{ TIM12_TRGO, TIM12_CH1, TIM12_CH2,},
35 	{ TIM13_OC1,},
36 	{ TIM14_OC1,},
37 	{ TIM15_TRGO,},
38 	{ TIM16_OC1,},
39 	{ TIM17_OC1,},
40 };
41 
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,},
49 	{ }, /* timer 6 */
50 	{ }, /* timer 7 */
51 	{ TIM1_TRGO, TIM2_TRGO, TIM4_TRGO, TIM5_TRGO,},
52 	{ TIM2_TRGO, TIM3_TRGO, TIM10_OC1, TIM11_OC1,},
53 	{ }, /* timer 10 */
54 	{ }, /* timer 11 */
55 	{ TIM4_TRGO, TIM5_TRGO, TIM13_OC1, TIM14_OC1,},
56 };
57 
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,},
64 	{ }, /* timer 6 */
65 	{ }, /* timer 7 */
66 	{ TIM1_TRGO, TIM2_TRGO, TIM4_TRGO, TIM5_TRGO,},
67 	{ }, /* timer 9 */
68 	{ }, /* timer 10 */
69 	{ }, /* timer 11 */
70 	{ TIM4_TRGO, TIM5_TRGO, TIM13_OC1, TIM14_OC1,},
71 	{ }, /* timer 13 */
72 	{ }, /* timer 14 */
73 	{ TIM1_TRGO, TIM3_TRGO, TIM16_OC1, TIM17_OC1,},
74 	{ }, /* timer 16 */
75 	{ }, /* timer 17 */
76 };
77 
78 struct stm32_timer_trigger_regs {
79 	u32 cr1;
80 	u32 cr2;
81 	u32 psc;
82 	u32 arr;
83 	u32 cnt;
84 	u32 smcr;
85 };
86 
87 struct stm32_timer_trigger {
88 	struct device *dev;
89 	struct regmap *regmap;
90 	struct clk *clk;
91 	bool enabled;
92 	u32 max_arr;
93 	const void *triggers;
94 	const void *valids;
95 	bool has_trgo2;
96 	struct mutex lock; /* concurrent sysfs configuration */
97 	struct list_head tr_list;
98 	struct stm32_timer_trigger_regs bak;
99 };
100 
101 struct stm32_timer_trigger_cfg {
102 	const void *(*valids_table)[MAX_VALIDS];
103 	const unsigned int num_valids_table;
104 };
105 
stm32_timer_is_trgo2_name(const char * name)106 static bool stm32_timer_is_trgo2_name(const char *name)
107 {
108 	return !!strstr(name, "trgo2");
109 }
110 
stm32_timer_is_trgo_name(const char * name)111 static bool stm32_timer_is_trgo_name(const char *name)
112 {
113 	return (!!strstr(name, "trgo") && !strstr(name, "trgo2"));
114 }
115 
stm32_timer_start(struct stm32_timer_trigger * priv,struct iio_trigger * trig,unsigned int frequency)116 static int stm32_timer_start(struct stm32_timer_trigger *priv,
117 			     struct iio_trigger *trig,
118 			     unsigned int frequency)
119 {
120 	unsigned long long prd, div;
121 	int prescaler = 0;
122 	u32 ccer;
123 
124 	/* Period and prescaler values depends of clock rate */
125 	div = (unsigned long long)clk_get_rate(priv->clk);
126 
127 	do_div(div, frequency);
128 
129 	prd = div;
130 
131 	/*
132 	 * Increase prescaler value until we get a result that fit
133 	 * with auto reload register maximum value.
134 	 */
135 	while (div > priv->max_arr) {
136 		prescaler++;
137 		div = prd;
138 		do_div(div, (prescaler + 1));
139 	}
140 	prd = div;
141 
142 	if (prescaler > MAX_TIM_PSC) {
143 		dev_err(priv->dev, "prescaler exceeds the maximum value\n");
144 		return -EINVAL;
145 	}
146 
147 	/* Check if nobody else use the timer */
148 	regmap_read(priv->regmap, TIM_CCER, &ccer);
149 	if (ccer & TIM_CCER_CCXE)
150 		return -EBUSY;
151 
152 	mutex_lock(&priv->lock);
153 	if (!priv->enabled) {
154 		priv->enabled = true;
155 		clk_enable(priv->clk);
156 	}
157 
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);
161 
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);
166 	else
167 		regmap_update_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS,
168 				   0x2 << TIM_CR2_MMS_SHIFT);
169 
170 	/* Make sure that registers are updated */
171 	regmap_update_bits(priv->regmap, TIM_EGR, TIM_EGR_UG, TIM_EGR_UG);
172 
173 	/* Enable controller */
174 	regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN, TIM_CR1_CEN);
175 	mutex_unlock(&priv->lock);
176 
177 	return 0;
178 }
179 
stm32_timer_stop(struct stm32_timer_trigger * priv,struct iio_trigger * trig)180 static void stm32_timer_stop(struct stm32_timer_trigger *priv,
181 			     struct iio_trigger *trig)
182 {
183 	u32 ccer;
184 
185 	regmap_read(priv->regmap, TIM_CCER, &ccer);
186 	if (ccer & TIM_CCER_CCXE)
187 		return;
188 
189 	mutex_lock(&priv->lock);
190 	/* Stop timer */
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);
195 
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);
199 	else
200 		regmap_update_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS, 0);
201 
202 	/* Make sure that registers are updated */
203 	regmap_update_bits(priv->regmap, TIM_EGR, TIM_EGR_UG, TIM_EGR_UG);
204 
205 	if (priv->enabled) {
206 		priv->enabled = false;
207 		clk_disable(priv->clk);
208 	}
209 	mutex_unlock(&priv->lock);
210 }
211 
stm32_tt_store_frequency(struct device * dev,struct device_attribute * attr,const char * buf,size_t len)212 static ssize_t stm32_tt_store_frequency(struct device *dev,
213 					struct device_attribute *attr,
214 					const char *buf, size_t len)
215 {
216 	struct iio_trigger *trig = to_iio_trigger(dev);
217 	struct stm32_timer_trigger *priv = iio_trigger_get_drvdata(trig);
218 	unsigned int freq;
219 	int ret;
220 
221 	ret = kstrtouint(buf, 10, &freq);
222 	if (ret)
223 		return ret;
224 
225 	if (freq == 0) {
226 		stm32_timer_stop(priv, trig);
227 	} else {
228 		ret = stm32_timer_start(priv, trig, freq);
229 		if (ret)
230 			return ret;
231 	}
232 
233 	return len;
234 }
235 
stm32_tt_read_frequency(struct device * dev,struct device_attribute * attr,char * buf)236 static ssize_t stm32_tt_read_frequency(struct device *dev,
237 				       struct device_attribute *attr, char *buf)
238 {
239 	struct iio_trigger *trig = to_iio_trigger(dev);
240 	struct stm32_timer_trigger *priv = iio_trigger_get_drvdata(trig);
241 	u32 psc, arr, cr1;
242 	unsigned long long freq = 0;
243 
244 	regmap_read(priv->regmap, TIM_CR1, &cr1);
245 	regmap_read(priv->regmap, TIM_PSC, &psc);
246 	regmap_read(priv->regmap, TIM_ARR, &arr);
247 
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);
252 	}
253 
254 	return sprintf(buf, "%d\n", (unsigned int)freq);
255 }
256 
257 static IIO_DEV_ATTR_SAMP_FREQ(0660,
258 			      stm32_tt_read_frequency,
259 			      stm32_tt_store_frequency);
260 
261 #define MASTER_MODE_MAX		7
262 #define MASTER_MODE2_MAX	15
263 
264 static char *master_mode_table[] = {
265 	"reset",
266 	"enable",
267 	"update",
268 	"compare_pulse",
269 	"OC1REF",
270 	"OC2REF",
271 	"OC3REF",
272 	"OC4REF",
273 	/* Master mode selection 2 only */
274 	"OC5REF",
275 	"OC6REF",
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",
282 };
283 
stm32_tt_show_master_mode(struct device * dev,struct device_attribute * attr,char * buf)284 static ssize_t stm32_tt_show_master_mode(struct device *dev,
285 					 struct device_attribute *attr,
286 					 char *buf)
287 {
288 	struct stm32_timer_trigger *priv = dev_get_drvdata(dev);
289 	struct iio_trigger *trig = to_iio_trigger(dev);
290 	u32 cr2;
291 
292 	regmap_read(priv->regmap, TIM_CR2, &cr2);
293 
294 	if (stm32_timer_is_trgo2_name(trig->name))
295 		cr2 = (cr2 & TIM_CR2_MMS2) >> TIM_CR2_MMS2_SHIFT;
296 	else
297 		cr2 = (cr2 & TIM_CR2_MMS) >> TIM_CR2_MMS_SHIFT;
298 
299 	return snprintf(buf, PAGE_SIZE, "%s\n", master_mode_table[cr2]);
300 }
301 
stm32_tt_store_master_mode(struct device * dev,struct device_attribute * attr,const char * buf,size_t len)302 static ssize_t stm32_tt_store_master_mode(struct device *dev,
303 					  struct device_attribute *attr,
304 					  const char *buf, size_t len)
305 {
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;
309 	int i;
310 
311 	if (stm32_timer_is_trgo2_name(trig->name)) {
312 		mask = TIM_CR2_MMS2;
313 		shift = TIM_CR2_MMS2_SHIFT;
314 		master_mode_max = MASTER_MODE2_MAX;
315 	} else {
316 		mask = TIM_CR2_MMS;
317 		shift = TIM_CR2_MMS_SHIFT;
318 		master_mode_max = MASTER_MODE_MAX;
319 	}
320 
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);
329 			}
330 			regmap_update_bits(priv->regmap, TIM_CR2, mask,
331 					   i << shift);
332 			mutex_unlock(&priv->lock);
333 			return len;
334 		}
335 	}
336 
337 	return -EINVAL;
338 }
339 
stm32_tt_show_master_mode_avail(struct device * dev,struct device_attribute * attr,char * buf)340 static ssize_t stm32_tt_show_master_mode_avail(struct device *dev,
341 					       struct device_attribute *attr,
342 					       char *buf)
343 {
344 	struct iio_trigger *trig = to_iio_trigger(dev);
345 	unsigned int i, master_mode_max;
346 	size_t len = 0;
347 
348 	if (stm32_timer_is_trgo2_name(trig->name))
349 		master_mode_max = MASTER_MODE2_MAX;
350 	else
351 		master_mode_max = MASTER_MODE_MAX;
352 
353 	for (i = 0; i <= master_mode_max; i++)
354 		len += scnprintf(buf + len, PAGE_SIZE - len,
355 			"%s ", master_mode_table[i]);
356 
357 	/* replace trailing space by newline */
358 	buf[len - 1] = '\n';
359 
360 	return len;
361 }
362 
363 static IIO_DEVICE_ATTR(master_mode_available, 0444,
364 		       stm32_tt_show_master_mode_avail, NULL, 0);
365 
366 static IIO_DEVICE_ATTR(master_mode, 0660,
367 		       stm32_tt_show_master_mode,
368 		       stm32_tt_store_master_mode,
369 		       0);
370 
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,
375 	NULL,
376 };
377 
378 static const struct attribute_group stm32_trigger_attr_group = {
379 	.attrs = stm32_trigger_attrs,
380 };
381 
382 static const struct attribute_group *stm32_trigger_attr_groups[] = {
383 	&stm32_trigger_attr_group,
384 	NULL,
385 };
386 
387 static const struct iio_trigger_ops timer_trigger_ops = {
388 };
389 
stm32_unregister_iio_triggers(struct stm32_timer_trigger * priv)390 static void stm32_unregister_iio_triggers(struct stm32_timer_trigger *priv)
391 {
392 	struct iio_trigger *tr;
393 
394 	list_for_each_entry(tr, &priv->tr_list, alloc_list)
395 		iio_trigger_unregister(tr);
396 }
397 
stm32_register_iio_triggers(struct stm32_timer_trigger * priv)398 static int stm32_register_iio_triggers(struct stm32_timer_trigger *priv)
399 {
400 	int ret;
401 	const char * const *cur = priv->triggers;
402 
403 	INIT_LIST_HEAD(&priv->tr_list);
404 
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);
409 
410 		if (cur_is_trgo2 && !priv->has_trgo2) {
411 			cur++;
412 			continue;
413 		}
414 
415 		trig = devm_iio_trigger_alloc(priv->dev, "%s", *cur);
416 		if  (!trig)
417 			return -ENOMEM;
418 
419 		trig->dev.parent = priv->dev->parent;
420 		trig->ops = &timer_trigger_ops;
421 
422 		/*
423 		 * sampling frequency and master mode attributes
424 		 * should only be available on trgo/trgo2 triggers
425 		 */
426 		if (cur_is_trgo || cur_is_trgo2)
427 			trig->dev.groups = stm32_trigger_attr_groups;
428 
429 		iio_trigger_set_drvdata(trig, priv);
430 
431 		ret = iio_trigger_register(trig);
432 		if (ret) {
433 			stm32_unregister_iio_triggers(priv);
434 			return ret;
435 		}
436 
437 		list_add_tail(&trig->alloc_list, &priv->tr_list);
438 		cur++;
439 	}
440 
441 	return 0;
442 }
443 
stm32_counter_read_raw(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,int * val,int * val2,long mask)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)
447 {
448 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
449 	u32 dat;
450 
451 	switch (mask) {
452 	case IIO_CHAN_INFO_RAW:
453 		regmap_read(priv->regmap, TIM_CNT, &dat);
454 		*val = dat;
455 		return IIO_VAL_INT;
456 
457 	case IIO_CHAN_INFO_ENABLE:
458 		regmap_read(priv->regmap, TIM_CR1, &dat);
459 		*val = (dat & TIM_CR1_CEN) ? 1 : 0;
460 		return IIO_VAL_INT;
461 
462 	case IIO_CHAN_INFO_SCALE:
463 		regmap_read(priv->regmap, TIM_SMCR, &dat);
464 		dat &= TIM_SMCR_SMS;
465 
466 		*val = 1;
467 		*val2 = 0;
468 
469 		/* in quadrature case scale = 0.25 */
470 		if (dat == 3)
471 			*val2 = 2;
472 
473 		return IIO_VAL_FRACTIONAL_LOG2;
474 	}
475 
476 	return -EINVAL;
477 }
478 
stm32_counter_write_raw(struct iio_dev * indio_dev,struct iio_chan_spec const * chan,int val,int val2,long mask)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)
482 {
483 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
484 
485 	switch (mask) {
486 	case IIO_CHAN_INFO_RAW:
487 		return regmap_write(priv->regmap, TIM_CNT, val);
488 
489 	case IIO_CHAN_INFO_SCALE:
490 		/* fixed scale */
491 		return -EINVAL;
492 
493 	case IIO_CHAN_INFO_ENABLE:
494 		mutex_lock(&priv->lock);
495 		if (val) {
496 			if (!priv->enabled) {
497 				priv->enabled = true;
498 				clk_enable(priv->clk);
499 			}
500 			regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN,
501 					   TIM_CR1_CEN);
502 		} else {
503 			regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN,
504 					   0);
505 			if (priv->enabled) {
506 				priv->enabled = false;
507 				clk_disable(priv->clk);
508 			}
509 		}
510 		mutex_unlock(&priv->lock);
511 		return 0;
512 	}
513 
514 	return -EINVAL;
515 }
516 
stm32_counter_validate_trigger(struct iio_dev * indio_dev,struct iio_trigger * trig)517 static int stm32_counter_validate_trigger(struct iio_dev *indio_dev,
518 					  struct iio_trigger *trig)
519 {
520 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
521 	const char * const *cur = priv->valids;
522 	unsigned int i = 0;
523 
524 	if (!is_stm32_timer_trigger(trig))
525 		return -EINVAL;
526 
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);
532 			return 0;
533 		}
534 		cur++;
535 		i++;
536 	}
537 
538 	return -EINVAL;
539 }
540 
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
545 };
546 
547 static const char *const stm32_trigger_modes[] = {
548 	"trigger",
549 };
550 
stm32_set_trigger_mode(struct iio_dev * indio_dev,const struct iio_chan_spec * chan,unsigned int mode)551 static int stm32_set_trigger_mode(struct iio_dev *indio_dev,
552 				  const struct iio_chan_spec *chan,
553 				  unsigned int mode)
554 {
555 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
556 
557 	regmap_update_bits(priv->regmap, TIM_SMCR, TIM_SMCR_SMS, TIM_SMCR_SMS);
558 
559 	return 0;
560 }
561 
stm32_get_trigger_mode(struct iio_dev * indio_dev,const struct iio_chan_spec * chan)562 static int stm32_get_trigger_mode(struct iio_dev *indio_dev,
563 				  const struct iio_chan_spec *chan)
564 {
565 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
566 	u32 smcr;
567 
568 	regmap_read(priv->regmap, TIM_SMCR, &smcr);
569 
570 	return (smcr & TIM_SMCR_SMS) == TIM_SMCR_SMS ? 0 : -EINVAL;
571 }
572 
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
578 };
579 
580 static const char *const stm32_enable_modes[] = {
581 	"always",
582 	"gated",
583 	"triggered",
584 };
585 
stm32_enable_mode2sms(int mode)586 static int stm32_enable_mode2sms(int mode)
587 {
588 	switch (mode) {
589 	case 0:
590 		return 0;
591 	case 1:
592 		return 5;
593 	case 2:
594 		return 6;
595 	}
596 
597 	return -EINVAL;
598 }
599 
stm32_set_enable_mode(struct iio_dev * indio_dev,const struct iio_chan_spec * chan,unsigned int mode)600 static int stm32_set_enable_mode(struct iio_dev *indio_dev,
601 				 const struct iio_chan_spec *chan,
602 				 unsigned int mode)
603 {
604 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
605 	int sms = stm32_enable_mode2sms(mode);
606 
607 	if (sms < 0)
608 		return sms;
609 	/*
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.
612 	 */
613 	mutex_lock(&priv->lock);
614 	if (sms == 6 && !priv->enabled) {
615 		clk_enable(priv->clk);
616 		priv->enabled = true;
617 	}
618 	mutex_unlock(&priv->lock);
619 
620 	regmap_update_bits(priv->regmap, TIM_SMCR, TIM_SMCR_SMS, sms);
621 
622 	return 0;
623 }
624 
stm32_sms2enable_mode(int mode)625 static int stm32_sms2enable_mode(int mode)
626 {
627 	switch (mode) {
628 	case 0:
629 		return 0;
630 	case 5:
631 		return 1;
632 	case 6:
633 		return 2;
634 	}
635 
636 	return -EINVAL;
637 }
638 
stm32_get_enable_mode(struct iio_dev * indio_dev,const struct iio_chan_spec * chan)639 static int stm32_get_enable_mode(struct iio_dev *indio_dev,
640 				 const struct iio_chan_spec *chan)
641 {
642 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
643 	u32 smcr;
644 
645 	regmap_read(priv->regmap, TIM_SMCR, &smcr);
646 	smcr &= TIM_SMCR_SMS;
647 
648 	return stm32_sms2enable_mode(smcr);
649 }
650 
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
656 };
657 
stm32_count_get_preset(struct iio_dev * indio_dev,uintptr_t private,const struct iio_chan_spec * chan,char * buf)658 static ssize_t stm32_count_get_preset(struct iio_dev *indio_dev,
659 				      uintptr_t private,
660 				      const struct iio_chan_spec *chan,
661 				      char *buf)
662 {
663 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
664 	u32 arr;
665 
666 	regmap_read(priv->regmap, TIM_ARR, &arr);
667 
668 	return snprintf(buf, PAGE_SIZE, "%u\n", arr);
669 }
670 
stm32_count_set_preset(struct iio_dev * indio_dev,uintptr_t private,const struct iio_chan_spec * chan,const char * buf,size_t len)671 static ssize_t stm32_count_set_preset(struct iio_dev *indio_dev,
672 				      uintptr_t private,
673 				      const struct iio_chan_spec *chan,
674 				      const char *buf, size_t len)
675 {
676 	struct stm32_timer_trigger *priv = iio_priv(indio_dev);
677 	unsigned int preset;
678 	int ret;
679 
680 	ret = kstrtouint(buf, 0, &preset);
681 	if (ret)
682 		return ret;
683 
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);
687 
688 	return len;
689 }
690 
691 static const struct iio_chan_spec_ext_info stm32_trigger_count_info[] = {
692 	{
693 		.name = "preset",
694 		.shared = IIO_SEPARATE,
695 		.read = stm32_count_get_preset,
696 		.write = stm32_count_set_preset
697 	},
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),
702 	{}
703 };
704 
705 static const struct iio_chan_spec stm32_trigger_channel = {
706 	.type = IIO_COUNT,
707 	.channel = 0,
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,
712 	.indexed = 1
713 };
714 
stm32_setup_counter_device(struct device * dev)715 static struct stm32_timer_trigger *stm32_setup_counter_device(struct device *dev)
716 {
717 	struct iio_dev *indio_dev;
718 	int ret;
719 
720 	indio_dev = devm_iio_device_alloc(dev,
721 					  sizeof(struct stm32_timer_trigger));
722 	if (!indio_dev)
723 		return NULL;
724 
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;
730 
731 	ret = devm_iio_device_register(dev, indio_dev);
732 	if (ret)
733 		return NULL;
734 
735 	return iio_priv(indio_dev);
736 }
737 
738 /**
739  * is_stm32_timer_trigger
740  * @trig: trigger to be checked
741  *
742  * return true if the trigger is a valid stm32 iio timer trigger
743  * either return false
744  */
is_stm32_timer_trigger(struct iio_trigger * trig)745 bool is_stm32_timer_trigger(struct iio_trigger *trig)
746 {
747 	return (trig->ops == &timer_trigger_ops);
748 }
749 EXPORT_SYMBOL(is_stm32_timer_trigger);
750 
stm32_timer_detect_trgo2(struct stm32_timer_trigger * priv)751 static void stm32_timer_detect_trgo2(struct stm32_timer_trigger *priv)
752 {
753 	u32 val;
754 
755 	/*
756 	 * Master mode selection 2 bits can only be written and read back when
757 	 * timer supports it.
758 	 */
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;
763 }
764 
stm32_timer_trigger_probe(struct platform_device * pdev)765 static int stm32_timer_trigger_probe(struct platform_device *pdev)
766 {
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;
771 	unsigned int index;
772 	int ret;
773 
774 	if (of_property_read_u32(dev->of_node, "reg", &index))
775 		return -EINVAL;
776 
777 	cfg = (const struct stm32_timer_trigger_cfg *)
778 		of_match_device(dev->driver->of_match_table, dev)->data;
779 
780 	if (index >= ARRAY_SIZE(triggers_table) ||
781 	    index >= cfg->num_valids_table)
782 		return -EINVAL;
783 
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);
787 	else
788 		priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
789 
790 	if (!priv)
791 		return -ENOMEM;
792 
793 	priv->dev = dev;
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);
801 
802 	ret = stm32_register_iio_triggers(priv);
803 	if (ret)
804 		return ret;
805 
806 	platform_set_drvdata(pdev, priv);
807 
808 	return 0;
809 }
810 
stm32_timer_trigger_remove(struct platform_device * pdev)811 static int stm32_timer_trigger_remove(struct platform_device *pdev)
812 {
813 	struct stm32_timer_trigger *priv = platform_get_drvdata(pdev);
814 	u32 val;
815 
816 	/* Unregister triggers before everything can be safely turned off */
817 	stm32_unregister_iio_triggers(priv);
818 
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);
823 
824 	if (priv->enabled)
825 		clk_disable(priv->clk);
826 
827 	return 0;
828 }
829 
stm32_timer_trigger_suspend(struct device * dev)830 static int __maybe_unused stm32_timer_trigger_suspend(struct device *dev)
831 {
832 	struct stm32_timer_trigger *priv = dev_get_drvdata(dev);
833 
834 	/* Only take care of enabled timer: don't disturb other MFD child */
835 	if (priv->enabled) {
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);
843 
844 		/* Disable the timer */
845 		regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN, 0);
846 		clk_disable(priv->clk);
847 	}
848 
849 	return 0;
850 }
851 
stm32_timer_trigger_resume(struct device * dev)852 static int __maybe_unused stm32_timer_trigger_resume(struct device *dev)
853 {
854 	struct stm32_timer_trigger *priv = dev_get_drvdata(dev);
855 	int ret;
856 
857 	if (priv->enabled) {
858 		ret = clk_enable(priv->clk);
859 		if (ret)
860 			return ret;
861 
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);
865 
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);
870 
871 		/* Also re-enables the timer */
872 		regmap_write(priv->regmap, TIM_CR1, priv->bak.cr1);
873 	}
874 
875 	return 0;
876 }
877 
878 static SIMPLE_DEV_PM_OPS(stm32_timer_trigger_pm_ops,
879 			 stm32_timer_trigger_suspend,
880 			 stm32_timer_trigger_resume);
881 
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),
885 };
886 
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),
890 };
891 
892 static const struct of_device_id stm32_trig_of_match[] = {
893 	{
894 		.compatible = "st,stm32-timer-trigger",
895 		.data = (void *)&stm32_timer_trg_cfg,
896 	}, {
897 		.compatible = "st,stm32h7-timer-trigger",
898 		.data = (void *)&stm32h7_timer_trg_cfg,
899 	},
900 	{ /* end node */ },
901 };
902 MODULE_DEVICE_TABLE(of, stm32_trig_of_match);
903 
904 static struct platform_driver stm32_timer_trigger_driver = {
905 	.probe = stm32_timer_trigger_probe,
906 	.remove = stm32_timer_trigger_remove,
907 	.driver = {
908 		.name = "stm32-timer-trigger",
909 		.of_match_table = stm32_trig_of_match,
910 		.pm = &stm32_timer_trigger_pm_ops,
911 	},
912 };
913 module_platform_driver(stm32_timer_trigger_driver);
914 
915 MODULE_ALIAS("platform:stm32-timer-trigger");
916 MODULE_DESCRIPTION("STMicroelectronics STM32 Timer Trigger driver");
917 MODULE_LICENSE("GPL v2");
918