0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <linux/iio/iio.h>
0010 #include <linux/iio/sysfs.h>
0011 #include <linux/iio/timer/stm32-timer-trigger.h>
0012 #include <linux/iio/trigger.h>
0013 #include <linux/mfd/stm32-timers.h>
0014 #include <linux/mod_devicetable.h>
0015 #include <linux/module.h>
0016 #include <linux/platform_device.h>
0017 #include <linux/property.h>
0018
0019 #define MAX_TRIGGERS 7
0020 #define MAX_VALIDS 5
0021
0022
0023 static const void *triggers_table[][MAX_TRIGGERS] = {
0024 { TIM1_TRGO, TIM1_TRGO2, TIM1_CH1, TIM1_CH2, TIM1_CH3, TIM1_CH4,},
0025 { TIM2_TRGO, TIM2_CH1, TIM2_CH2, TIM2_CH3, TIM2_CH4,},
0026 { TIM3_TRGO, TIM3_CH1, TIM3_CH2, TIM3_CH3, TIM3_CH4,},
0027 { TIM4_TRGO, TIM4_CH1, TIM4_CH2, TIM4_CH3, TIM4_CH4,},
0028 { TIM5_TRGO, TIM5_CH1, TIM5_CH2, TIM5_CH3, TIM5_CH4,},
0029 { TIM6_TRGO,},
0030 { TIM7_TRGO,},
0031 { TIM8_TRGO, TIM8_TRGO2, TIM8_CH1, TIM8_CH2, TIM8_CH3, TIM8_CH4,},
0032 { TIM9_TRGO, TIM9_CH1, TIM9_CH2,},
0033 { TIM10_OC1,},
0034 { TIM11_OC1,},
0035 { TIM12_TRGO, TIM12_CH1, TIM12_CH2,},
0036 { TIM13_OC1,},
0037 { TIM14_OC1,},
0038 { TIM15_TRGO,},
0039 { TIM16_OC1,},
0040 { TIM17_OC1,},
0041 };
0042
0043
0044 static const void *valids_table[][MAX_VALIDS] = {
0045 { TIM5_TRGO, TIM2_TRGO, TIM3_TRGO, TIM4_TRGO,},
0046 { TIM1_TRGO, TIM8_TRGO, TIM3_TRGO, TIM4_TRGO,},
0047 { TIM1_TRGO, TIM2_TRGO, TIM5_TRGO, TIM4_TRGO,},
0048 { TIM1_TRGO, TIM2_TRGO, TIM3_TRGO, TIM8_TRGO,},
0049 { TIM2_TRGO, TIM3_TRGO, TIM4_TRGO, TIM8_TRGO,},
0050 { },
0051 { },
0052 { TIM1_TRGO, TIM2_TRGO, TIM4_TRGO, TIM5_TRGO,},
0053 { TIM2_TRGO, TIM3_TRGO, TIM10_OC1, TIM11_OC1,},
0054 { },
0055 { },
0056 { TIM4_TRGO, TIM5_TRGO, TIM13_OC1, TIM14_OC1,},
0057 };
0058
0059 static const void *stm32h7_valids_table[][MAX_VALIDS] = {
0060 { TIM15_TRGO, TIM2_TRGO, TIM3_TRGO, TIM4_TRGO,},
0061 { TIM1_TRGO, TIM8_TRGO, TIM3_TRGO, TIM4_TRGO,},
0062 { TIM1_TRGO, TIM2_TRGO, TIM15_TRGO, TIM4_TRGO,},
0063 { TIM1_TRGO, TIM2_TRGO, TIM3_TRGO, TIM8_TRGO,},
0064 { TIM1_TRGO, TIM8_TRGO, TIM3_TRGO, TIM4_TRGO,},
0065 { },
0066 { },
0067 { TIM1_TRGO, TIM2_TRGO, TIM4_TRGO, TIM5_TRGO,},
0068 { },
0069 { },
0070 { },
0071 { TIM4_TRGO, TIM5_TRGO, TIM13_OC1, TIM14_OC1,},
0072 { },
0073 { },
0074 { TIM1_TRGO, TIM3_TRGO, TIM16_OC1, TIM17_OC1,},
0075 { },
0076 { },
0077 };
0078
0079 struct stm32_timer_trigger_regs {
0080 u32 cr1;
0081 u32 cr2;
0082 u32 psc;
0083 u32 arr;
0084 u32 cnt;
0085 u32 smcr;
0086 };
0087
0088 struct stm32_timer_trigger {
0089 struct device *dev;
0090 struct regmap *regmap;
0091 struct clk *clk;
0092 bool enabled;
0093 u32 max_arr;
0094 const void *triggers;
0095 const void *valids;
0096 bool has_trgo2;
0097 struct mutex lock;
0098 struct list_head tr_list;
0099 struct stm32_timer_trigger_regs bak;
0100 };
0101
0102 struct stm32_timer_trigger_cfg {
0103 const void *(*valids_table)[MAX_VALIDS];
0104 const unsigned int num_valids_table;
0105 };
0106
0107 static bool stm32_timer_is_trgo2_name(const char *name)
0108 {
0109 return !!strstr(name, "trgo2");
0110 }
0111
0112 static bool stm32_timer_is_trgo_name(const char *name)
0113 {
0114 return (!!strstr(name, "trgo") && !strstr(name, "trgo2"));
0115 }
0116
0117 static int stm32_timer_start(struct stm32_timer_trigger *priv,
0118 struct iio_trigger *trig,
0119 unsigned int frequency)
0120 {
0121 unsigned long long prd, div;
0122 int prescaler = 0;
0123 u32 ccer;
0124
0125
0126 div = (unsigned long long)clk_get_rate(priv->clk);
0127
0128 do_div(div, frequency);
0129
0130 prd = div;
0131
0132
0133
0134
0135
0136 while (div > priv->max_arr) {
0137 prescaler++;
0138 div = prd;
0139 do_div(div, (prescaler + 1));
0140 }
0141 prd = div;
0142
0143 if (prescaler > MAX_TIM_PSC) {
0144 dev_err(priv->dev, "prescaler exceeds the maximum value\n");
0145 return -EINVAL;
0146 }
0147
0148
0149 regmap_read(priv->regmap, TIM_CCER, &ccer);
0150 if (ccer & TIM_CCER_CCXE)
0151 return -EBUSY;
0152
0153 mutex_lock(&priv->lock);
0154 if (!priv->enabled) {
0155 priv->enabled = true;
0156 clk_enable(priv->clk);
0157 }
0158
0159 regmap_write(priv->regmap, TIM_PSC, prescaler);
0160 regmap_write(priv->regmap, TIM_ARR, prd - 1);
0161 regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, TIM_CR1_ARPE);
0162
0163
0164 if (stm32_timer_is_trgo2_name(trig->name))
0165 regmap_update_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS2,
0166 0x2 << TIM_CR2_MMS2_SHIFT);
0167 else
0168 regmap_update_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS,
0169 0x2 << TIM_CR2_MMS_SHIFT);
0170
0171
0172 regmap_update_bits(priv->regmap, TIM_EGR, TIM_EGR_UG, TIM_EGR_UG);
0173
0174
0175 regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN, TIM_CR1_CEN);
0176 mutex_unlock(&priv->lock);
0177
0178 return 0;
0179 }
0180
0181 static void stm32_timer_stop(struct stm32_timer_trigger *priv,
0182 struct iio_trigger *trig)
0183 {
0184 u32 ccer;
0185
0186 regmap_read(priv->regmap, TIM_CCER, &ccer);
0187 if (ccer & TIM_CCER_CCXE)
0188 return;
0189
0190 mutex_lock(&priv->lock);
0191
0192 regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, 0);
0193 regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN, 0);
0194 regmap_write(priv->regmap, TIM_PSC, 0);
0195 regmap_write(priv->regmap, TIM_ARR, 0);
0196
0197
0198 if (stm32_timer_is_trgo2_name(trig->name))
0199 regmap_update_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS2, 0);
0200 else
0201 regmap_update_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS, 0);
0202
0203
0204 regmap_update_bits(priv->regmap, TIM_EGR, TIM_EGR_UG, TIM_EGR_UG);
0205
0206 if (priv->enabled) {
0207 priv->enabled = false;
0208 clk_disable(priv->clk);
0209 }
0210 mutex_unlock(&priv->lock);
0211 }
0212
0213 static ssize_t stm32_tt_store_frequency(struct device *dev,
0214 struct device_attribute *attr,
0215 const char *buf, size_t len)
0216 {
0217 struct iio_trigger *trig = to_iio_trigger(dev);
0218 struct stm32_timer_trigger *priv = iio_trigger_get_drvdata(trig);
0219 unsigned int freq;
0220 int ret;
0221
0222 ret = kstrtouint(buf, 10, &freq);
0223 if (ret)
0224 return ret;
0225
0226 if (freq == 0) {
0227 stm32_timer_stop(priv, trig);
0228 } else {
0229 ret = stm32_timer_start(priv, trig, freq);
0230 if (ret)
0231 return ret;
0232 }
0233
0234 return len;
0235 }
0236
0237 static ssize_t stm32_tt_read_frequency(struct device *dev,
0238 struct device_attribute *attr, char *buf)
0239 {
0240 struct iio_trigger *trig = to_iio_trigger(dev);
0241 struct stm32_timer_trigger *priv = iio_trigger_get_drvdata(trig);
0242 u32 psc, arr, cr1;
0243 unsigned long long freq = 0;
0244
0245 regmap_read(priv->regmap, TIM_CR1, &cr1);
0246 regmap_read(priv->regmap, TIM_PSC, &psc);
0247 regmap_read(priv->regmap, TIM_ARR, &arr);
0248
0249 if (cr1 & TIM_CR1_CEN) {
0250 freq = (unsigned long long)clk_get_rate(priv->clk);
0251 do_div(freq, psc + 1);
0252 do_div(freq, arr + 1);
0253 }
0254
0255 return sprintf(buf, "%d\n", (unsigned int)freq);
0256 }
0257
0258 static IIO_DEV_ATTR_SAMP_FREQ(0660,
0259 stm32_tt_read_frequency,
0260 stm32_tt_store_frequency);
0261
0262 #define MASTER_MODE_MAX 7
0263 #define MASTER_MODE2_MAX 15
0264
0265 static char *master_mode_table[] = {
0266 "reset",
0267 "enable",
0268 "update",
0269 "compare_pulse",
0270 "OC1REF",
0271 "OC2REF",
0272 "OC3REF",
0273 "OC4REF",
0274
0275 "OC5REF",
0276 "OC6REF",
0277 "compare_pulse_OC4REF",
0278 "compare_pulse_OC6REF",
0279 "compare_pulse_OC4REF_r_or_OC6REF_r",
0280 "compare_pulse_OC4REF_r_or_OC6REF_f",
0281 "compare_pulse_OC5REF_r_or_OC6REF_r",
0282 "compare_pulse_OC5REF_r_or_OC6REF_f",
0283 };
0284
0285 static ssize_t stm32_tt_show_master_mode(struct device *dev,
0286 struct device_attribute *attr,
0287 char *buf)
0288 {
0289 struct stm32_timer_trigger *priv = dev_get_drvdata(dev);
0290 struct iio_trigger *trig = to_iio_trigger(dev);
0291 u32 cr2;
0292
0293 regmap_read(priv->regmap, TIM_CR2, &cr2);
0294
0295 if (stm32_timer_is_trgo2_name(trig->name))
0296 cr2 = (cr2 & TIM_CR2_MMS2) >> TIM_CR2_MMS2_SHIFT;
0297 else
0298 cr2 = (cr2 & TIM_CR2_MMS) >> TIM_CR2_MMS_SHIFT;
0299
0300 return sysfs_emit(buf, "%s\n", master_mode_table[cr2]);
0301 }
0302
0303 static ssize_t stm32_tt_store_master_mode(struct device *dev,
0304 struct device_attribute *attr,
0305 const char *buf, size_t len)
0306 {
0307 struct stm32_timer_trigger *priv = dev_get_drvdata(dev);
0308 struct iio_trigger *trig = to_iio_trigger(dev);
0309 u32 mask, shift, master_mode_max;
0310 int i;
0311
0312 if (stm32_timer_is_trgo2_name(trig->name)) {
0313 mask = TIM_CR2_MMS2;
0314 shift = TIM_CR2_MMS2_SHIFT;
0315 master_mode_max = MASTER_MODE2_MAX;
0316 } else {
0317 mask = TIM_CR2_MMS;
0318 shift = TIM_CR2_MMS_SHIFT;
0319 master_mode_max = MASTER_MODE_MAX;
0320 }
0321
0322 for (i = 0; i <= master_mode_max; i++) {
0323 if (!strncmp(master_mode_table[i], buf,
0324 strlen(master_mode_table[i]))) {
0325 mutex_lock(&priv->lock);
0326 if (!priv->enabled) {
0327
0328 priv->enabled = true;
0329 clk_enable(priv->clk);
0330 }
0331 regmap_update_bits(priv->regmap, TIM_CR2, mask,
0332 i << shift);
0333 mutex_unlock(&priv->lock);
0334 return len;
0335 }
0336 }
0337
0338 return -EINVAL;
0339 }
0340
0341 static ssize_t stm32_tt_show_master_mode_avail(struct device *dev,
0342 struct device_attribute *attr,
0343 char *buf)
0344 {
0345 struct iio_trigger *trig = to_iio_trigger(dev);
0346 unsigned int i, master_mode_max;
0347 size_t len = 0;
0348
0349 if (stm32_timer_is_trgo2_name(trig->name))
0350 master_mode_max = MASTER_MODE2_MAX;
0351 else
0352 master_mode_max = MASTER_MODE_MAX;
0353
0354 for (i = 0; i <= master_mode_max; i++)
0355 len += scnprintf(buf + len, PAGE_SIZE - len,
0356 "%s ", master_mode_table[i]);
0357
0358
0359 buf[len - 1] = '\n';
0360
0361 return len;
0362 }
0363
0364 static IIO_DEVICE_ATTR(master_mode_available, 0444,
0365 stm32_tt_show_master_mode_avail, NULL, 0);
0366
0367 static IIO_DEVICE_ATTR(master_mode, 0660,
0368 stm32_tt_show_master_mode,
0369 stm32_tt_store_master_mode,
0370 0);
0371
0372 static struct attribute *stm32_trigger_attrs[] = {
0373 &iio_dev_attr_sampling_frequency.dev_attr.attr,
0374 &iio_dev_attr_master_mode.dev_attr.attr,
0375 &iio_dev_attr_master_mode_available.dev_attr.attr,
0376 NULL,
0377 };
0378
0379 static const struct attribute_group stm32_trigger_attr_group = {
0380 .attrs = stm32_trigger_attrs,
0381 };
0382
0383 static const struct attribute_group *stm32_trigger_attr_groups[] = {
0384 &stm32_trigger_attr_group,
0385 NULL,
0386 };
0387
0388 static const struct iio_trigger_ops timer_trigger_ops = {
0389 };
0390
0391 static void stm32_unregister_iio_triggers(struct stm32_timer_trigger *priv)
0392 {
0393 struct iio_trigger *tr;
0394
0395 list_for_each_entry(tr, &priv->tr_list, alloc_list)
0396 iio_trigger_unregister(tr);
0397 }
0398
0399 static int stm32_register_iio_triggers(struct stm32_timer_trigger *priv)
0400 {
0401 int ret;
0402 const char * const *cur = priv->triggers;
0403
0404 INIT_LIST_HEAD(&priv->tr_list);
0405
0406 while (cur && *cur) {
0407 struct iio_trigger *trig;
0408 bool cur_is_trgo = stm32_timer_is_trgo_name(*cur);
0409 bool cur_is_trgo2 = stm32_timer_is_trgo2_name(*cur);
0410
0411 if (cur_is_trgo2 && !priv->has_trgo2) {
0412 cur++;
0413 continue;
0414 }
0415
0416 trig = devm_iio_trigger_alloc(priv->dev, "%s", *cur);
0417 if (!trig)
0418 return -ENOMEM;
0419
0420 trig->dev.parent = priv->dev->parent;
0421 trig->ops = &timer_trigger_ops;
0422
0423
0424
0425
0426
0427 if (cur_is_trgo || cur_is_trgo2)
0428 trig->dev.groups = stm32_trigger_attr_groups;
0429
0430 iio_trigger_set_drvdata(trig, priv);
0431
0432 ret = iio_trigger_register(trig);
0433 if (ret) {
0434 stm32_unregister_iio_triggers(priv);
0435 return ret;
0436 }
0437
0438 list_add_tail(&trig->alloc_list, &priv->tr_list);
0439 cur++;
0440 }
0441
0442 return 0;
0443 }
0444
0445 static int stm32_counter_read_raw(struct iio_dev *indio_dev,
0446 struct iio_chan_spec const *chan,
0447 int *val, int *val2, long mask)
0448 {
0449 struct stm32_timer_trigger *priv = iio_priv(indio_dev);
0450 u32 dat;
0451
0452 switch (mask) {
0453 case IIO_CHAN_INFO_RAW:
0454 regmap_read(priv->regmap, TIM_CNT, &dat);
0455 *val = dat;
0456 return IIO_VAL_INT;
0457
0458 case IIO_CHAN_INFO_ENABLE:
0459 regmap_read(priv->regmap, TIM_CR1, &dat);
0460 *val = (dat & TIM_CR1_CEN) ? 1 : 0;
0461 return IIO_VAL_INT;
0462
0463 case IIO_CHAN_INFO_SCALE:
0464 regmap_read(priv->regmap, TIM_SMCR, &dat);
0465 dat &= TIM_SMCR_SMS;
0466
0467 *val = 1;
0468 *val2 = 0;
0469
0470
0471 if (dat == 3)
0472 *val2 = 2;
0473
0474 return IIO_VAL_FRACTIONAL_LOG2;
0475 }
0476
0477 return -EINVAL;
0478 }
0479
0480 static int stm32_counter_write_raw(struct iio_dev *indio_dev,
0481 struct iio_chan_spec const *chan,
0482 int val, int val2, long mask)
0483 {
0484 struct stm32_timer_trigger *priv = iio_priv(indio_dev);
0485
0486 switch (mask) {
0487 case IIO_CHAN_INFO_RAW:
0488 return regmap_write(priv->regmap, TIM_CNT, val);
0489
0490 case IIO_CHAN_INFO_SCALE:
0491
0492 return -EINVAL;
0493
0494 case IIO_CHAN_INFO_ENABLE:
0495 mutex_lock(&priv->lock);
0496 if (val) {
0497 if (!priv->enabled) {
0498 priv->enabled = true;
0499 clk_enable(priv->clk);
0500 }
0501 regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN,
0502 TIM_CR1_CEN);
0503 } else {
0504 regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN,
0505 0);
0506 if (priv->enabled) {
0507 priv->enabled = false;
0508 clk_disable(priv->clk);
0509 }
0510 }
0511 mutex_unlock(&priv->lock);
0512 return 0;
0513 }
0514
0515 return -EINVAL;
0516 }
0517
0518 static int stm32_counter_validate_trigger(struct iio_dev *indio_dev,
0519 struct iio_trigger *trig)
0520 {
0521 struct stm32_timer_trigger *priv = iio_priv(indio_dev);
0522 const char * const *cur = priv->valids;
0523 unsigned int i = 0;
0524
0525 if (!is_stm32_timer_trigger(trig))
0526 return -EINVAL;
0527
0528 while (cur && *cur) {
0529 if (!strncmp(trig->name, *cur, strlen(trig->name))) {
0530 regmap_update_bits(priv->regmap,
0531 TIM_SMCR, TIM_SMCR_TS,
0532 i << TIM_SMCR_TS_SHIFT);
0533 return 0;
0534 }
0535 cur++;
0536 i++;
0537 }
0538
0539 return -EINVAL;
0540 }
0541
0542 static const struct iio_info stm32_trigger_info = {
0543 .validate_trigger = stm32_counter_validate_trigger,
0544 .read_raw = stm32_counter_read_raw,
0545 .write_raw = stm32_counter_write_raw
0546 };
0547
0548 static const char *const stm32_trigger_modes[] = {
0549 "trigger",
0550 };
0551
0552 static int stm32_set_trigger_mode(struct iio_dev *indio_dev,
0553 const struct iio_chan_spec *chan,
0554 unsigned int mode)
0555 {
0556 struct stm32_timer_trigger *priv = iio_priv(indio_dev);
0557
0558 regmap_update_bits(priv->regmap, TIM_SMCR, TIM_SMCR_SMS, TIM_SMCR_SMS);
0559
0560 return 0;
0561 }
0562
0563 static int stm32_get_trigger_mode(struct iio_dev *indio_dev,
0564 const struct iio_chan_spec *chan)
0565 {
0566 struct stm32_timer_trigger *priv = iio_priv(indio_dev);
0567 u32 smcr;
0568
0569 regmap_read(priv->regmap, TIM_SMCR, &smcr);
0570
0571 return (smcr & TIM_SMCR_SMS) == TIM_SMCR_SMS ? 0 : -EINVAL;
0572 }
0573
0574 static const struct iio_enum stm32_trigger_mode_enum = {
0575 .items = stm32_trigger_modes,
0576 .num_items = ARRAY_SIZE(stm32_trigger_modes),
0577 .set = stm32_set_trigger_mode,
0578 .get = stm32_get_trigger_mode
0579 };
0580
0581 static const char *const stm32_enable_modes[] = {
0582 "always",
0583 "gated",
0584 "triggered",
0585 };
0586
0587 static int stm32_enable_mode2sms(int mode)
0588 {
0589 switch (mode) {
0590 case 0:
0591 return 0;
0592 case 1:
0593 return 5;
0594 case 2:
0595 return 6;
0596 }
0597
0598 return -EINVAL;
0599 }
0600
0601 static int stm32_set_enable_mode(struct iio_dev *indio_dev,
0602 const struct iio_chan_spec *chan,
0603 unsigned int mode)
0604 {
0605 struct stm32_timer_trigger *priv = iio_priv(indio_dev);
0606 int sms = stm32_enable_mode2sms(mode);
0607
0608 if (sms < 0)
0609 return sms;
0610
0611
0612
0613
0614 mutex_lock(&priv->lock);
0615 if (sms == 6 && !priv->enabled) {
0616 clk_enable(priv->clk);
0617 priv->enabled = true;
0618 }
0619 mutex_unlock(&priv->lock);
0620
0621 regmap_update_bits(priv->regmap, TIM_SMCR, TIM_SMCR_SMS, sms);
0622
0623 return 0;
0624 }
0625
0626 static int stm32_sms2enable_mode(int mode)
0627 {
0628 switch (mode) {
0629 case 0:
0630 return 0;
0631 case 5:
0632 return 1;
0633 case 6:
0634 return 2;
0635 }
0636
0637 return -EINVAL;
0638 }
0639
0640 static int stm32_get_enable_mode(struct iio_dev *indio_dev,
0641 const struct iio_chan_spec *chan)
0642 {
0643 struct stm32_timer_trigger *priv = iio_priv(indio_dev);
0644 u32 smcr;
0645
0646 regmap_read(priv->regmap, TIM_SMCR, &smcr);
0647 smcr &= TIM_SMCR_SMS;
0648
0649 return stm32_sms2enable_mode(smcr);
0650 }
0651
0652 static const struct iio_enum stm32_enable_mode_enum = {
0653 .items = stm32_enable_modes,
0654 .num_items = ARRAY_SIZE(stm32_enable_modes),
0655 .set = stm32_set_enable_mode,
0656 .get = stm32_get_enable_mode
0657 };
0658
0659 static ssize_t stm32_count_get_preset(struct iio_dev *indio_dev,
0660 uintptr_t private,
0661 const struct iio_chan_spec *chan,
0662 char *buf)
0663 {
0664 struct stm32_timer_trigger *priv = iio_priv(indio_dev);
0665 u32 arr;
0666
0667 regmap_read(priv->regmap, TIM_ARR, &arr);
0668
0669 return snprintf(buf, PAGE_SIZE, "%u\n", arr);
0670 }
0671
0672 static ssize_t stm32_count_set_preset(struct iio_dev *indio_dev,
0673 uintptr_t private,
0674 const struct iio_chan_spec *chan,
0675 const char *buf, size_t len)
0676 {
0677 struct stm32_timer_trigger *priv = iio_priv(indio_dev);
0678 unsigned int preset;
0679 int ret;
0680
0681 ret = kstrtouint(buf, 0, &preset);
0682 if (ret)
0683 return ret;
0684
0685
0686 regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_ARPE, 0);
0687 regmap_write(priv->regmap, TIM_ARR, preset);
0688
0689 return len;
0690 }
0691
0692 static const struct iio_chan_spec_ext_info stm32_trigger_count_info[] = {
0693 {
0694 .name = "preset",
0695 .shared = IIO_SEPARATE,
0696 .read = stm32_count_get_preset,
0697 .write = stm32_count_set_preset
0698 },
0699 IIO_ENUM("enable_mode", IIO_SEPARATE, &stm32_enable_mode_enum),
0700 IIO_ENUM_AVAILABLE("enable_mode", IIO_SHARED_BY_TYPE, &stm32_enable_mode_enum),
0701 IIO_ENUM("trigger_mode", IIO_SEPARATE, &stm32_trigger_mode_enum),
0702 IIO_ENUM_AVAILABLE("trigger_mode", IIO_SHARED_BY_TYPE, &stm32_trigger_mode_enum),
0703 {}
0704 };
0705
0706 static const struct iio_chan_spec stm32_trigger_channel = {
0707 .type = IIO_COUNT,
0708 .channel = 0,
0709 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |
0710 BIT(IIO_CHAN_INFO_ENABLE) |
0711 BIT(IIO_CHAN_INFO_SCALE),
0712 .ext_info = stm32_trigger_count_info,
0713 .indexed = 1
0714 };
0715
0716 static struct stm32_timer_trigger *stm32_setup_counter_device(struct device *dev)
0717 {
0718 struct iio_dev *indio_dev;
0719 int ret;
0720
0721 indio_dev = devm_iio_device_alloc(dev,
0722 sizeof(struct stm32_timer_trigger));
0723 if (!indio_dev)
0724 return NULL;
0725
0726 indio_dev->name = dev_name(dev);
0727 indio_dev->info = &stm32_trigger_info;
0728 indio_dev->modes = INDIO_HARDWARE_TRIGGERED;
0729 indio_dev->num_channels = 1;
0730 indio_dev->channels = &stm32_trigger_channel;
0731
0732 ret = devm_iio_device_register(dev, indio_dev);
0733 if (ret)
0734 return NULL;
0735
0736 return iio_priv(indio_dev);
0737 }
0738
0739
0740
0741
0742
0743
0744
0745
0746 bool is_stm32_timer_trigger(struct iio_trigger *trig)
0747 {
0748 return (trig->ops == &timer_trigger_ops);
0749 }
0750 EXPORT_SYMBOL(is_stm32_timer_trigger);
0751
0752 static void stm32_timer_detect_trgo2(struct stm32_timer_trigger *priv)
0753 {
0754 u32 val;
0755
0756
0757
0758
0759
0760 regmap_update_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS2, TIM_CR2_MMS2);
0761 regmap_read(priv->regmap, TIM_CR2, &val);
0762 regmap_update_bits(priv->regmap, TIM_CR2, TIM_CR2_MMS2, 0);
0763 priv->has_trgo2 = !!val;
0764 }
0765
0766 static int stm32_timer_trigger_probe(struct platform_device *pdev)
0767 {
0768 struct device *dev = &pdev->dev;
0769 struct stm32_timer_trigger *priv;
0770 struct stm32_timers *ddata = dev_get_drvdata(pdev->dev.parent);
0771 const struct stm32_timer_trigger_cfg *cfg;
0772 unsigned int index;
0773 int ret;
0774
0775 ret = device_property_read_u32(dev, "reg", &index);
0776 if (ret)
0777 return ret;
0778
0779 cfg = device_get_match_data(dev);
0780
0781 if (index >= ARRAY_SIZE(triggers_table) ||
0782 index >= cfg->num_valids_table)
0783 return -EINVAL;
0784
0785
0786 if (*cfg->valids_table[index])
0787 priv = stm32_setup_counter_device(dev);
0788 else
0789 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
0790
0791 if (!priv)
0792 return -ENOMEM;
0793
0794 priv->dev = dev;
0795 priv->regmap = ddata->regmap;
0796 priv->clk = ddata->clk;
0797 priv->max_arr = ddata->max_arr;
0798 priv->triggers = triggers_table[index];
0799 priv->valids = cfg->valids_table[index];
0800 stm32_timer_detect_trgo2(priv);
0801 mutex_init(&priv->lock);
0802
0803 ret = stm32_register_iio_triggers(priv);
0804 if (ret)
0805 return ret;
0806
0807 platform_set_drvdata(pdev, priv);
0808
0809 return 0;
0810 }
0811
0812 static int stm32_timer_trigger_remove(struct platform_device *pdev)
0813 {
0814 struct stm32_timer_trigger *priv = platform_get_drvdata(pdev);
0815 u32 val;
0816
0817
0818 stm32_unregister_iio_triggers(priv);
0819
0820
0821 regmap_read(priv->regmap, TIM_CCER, &val);
0822 if (!(val & TIM_CCER_CCXE))
0823 regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN, 0);
0824
0825 if (priv->enabled)
0826 clk_disable(priv->clk);
0827
0828 return 0;
0829 }
0830
0831 static int stm32_timer_trigger_suspend(struct device *dev)
0832 {
0833 struct stm32_timer_trigger *priv = dev_get_drvdata(dev);
0834
0835
0836 if (priv->enabled) {
0837
0838 regmap_read(priv->regmap, TIM_CR1, &priv->bak.cr1);
0839 regmap_read(priv->regmap, TIM_CR2, &priv->bak.cr2);
0840 regmap_read(priv->regmap, TIM_PSC, &priv->bak.psc);
0841 regmap_read(priv->regmap, TIM_ARR, &priv->bak.arr);
0842 regmap_read(priv->regmap, TIM_CNT, &priv->bak.cnt);
0843 regmap_read(priv->regmap, TIM_SMCR, &priv->bak.smcr);
0844
0845
0846 regmap_update_bits(priv->regmap, TIM_CR1, TIM_CR1_CEN, 0);
0847 clk_disable(priv->clk);
0848 }
0849
0850 return 0;
0851 }
0852
0853 static int stm32_timer_trigger_resume(struct device *dev)
0854 {
0855 struct stm32_timer_trigger *priv = dev_get_drvdata(dev);
0856 int ret;
0857
0858 if (priv->enabled) {
0859 ret = clk_enable(priv->clk);
0860 if (ret)
0861 return ret;
0862
0863
0864 regmap_write(priv->regmap, TIM_SMCR, priv->bak.smcr);
0865 regmap_write(priv->regmap, TIM_CR2, priv->bak.cr2);
0866
0867
0868 regmap_write(priv->regmap, TIM_PSC, priv->bak.psc);
0869 regmap_write(priv->regmap, TIM_ARR, priv->bak.arr);
0870 regmap_write(priv->regmap, TIM_CNT, priv->bak.cnt);
0871
0872
0873 regmap_write(priv->regmap, TIM_CR1, priv->bak.cr1);
0874 }
0875
0876 return 0;
0877 }
0878
0879 static DEFINE_SIMPLE_DEV_PM_OPS(stm32_timer_trigger_pm_ops,
0880 stm32_timer_trigger_suspend,
0881 stm32_timer_trigger_resume);
0882
0883 static const struct stm32_timer_trigger_cfg stm32_timer_trg_cfg = {
0884 .valids_table = valids_table,
0885 .num_valids_table = ARRAY_SIZE(valids_table),
0886 };
0887
0888 static const struct stm32_timer_trigger_cfg stm32h7_timer_trg_cfg = {
0889 .valids_table = stm32h7_valids_table,
0890 .num_valids_table = ARRAY_SIZE(stm32h7_valids_table),
0891 };
0892
0893 static const struct of_device_id stm32_trig_of_match[] = {
0894 {
0895 .compatible = "st,stm32-timer-trigger",
0896 .data = (void *)&stm32_timer_trg_cfg,
0897 }, {
0898 .compatible = "st,stm32h7-timer-trigger",
0899 .data = (void *)&stm32h7_timer_trg_cfg,
0900 },
0901 { },
0902 };
0903 MODULE_DEVICE_TABLE(of, stm32_trig_of_match);
0904
0905 static struct platform_driver stm32_timer_trigger_driver = {
0906 .probe = stm32_timer_trigger_probe,
0907 .remove = stm32_timer_trigger_remove,
0908 .driver = {
0909 .name = "stm32-timer-trigger",
0910 .of_match_table = stm32_trig_of_match,
0911 .pm = pm_sleep_ptr(&stm32_timer_trigger_pm_ops),
0912 },
0913 };
0914 module_platform_driver(stm32_timer_trigger_driver);
0915
0916 MODULE_ALIAS("platform:stm32-timer-trigger");
0917 MODULE_DESCRIPTION("STMicroelectronics STM32 Timer Trigger driver");
0918 MODULE_LICENSE("GPL v2");