stm32-timer-trigger.c 23 KB

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