stm32-timer-trigger.c 22 KB

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