]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/iio/adc/stm32-adc.c
Merge branch 'x86-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[karo-tx-linux.git] / drivers / iio / adc / stm32-adc.c
1 /*
2  * This file is part of STM32 ADC driver
3  *
4  * Copyright (C) 2016, STMicroelectronics - All Rights Reserved
5  * Author: Fabrice Gasnier <fabrice.gasnier@st.com>.
6  *
7  * License type: GPLv2
8  *
9  * This program is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU General Public License version 2 as published by
11  * the Free Software Foundation.
12  *
13  * This program is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15  * or FITNESS FOR A PARTICULAR PURPOSE.
16  * See the GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License along with
19  * this program. If not, see <http://www.gnu.org/licenses/>.
20  */
21
22 #include <linux/clk.h>
23 #include <linux/delay.h>
24 #include <linux/iio/iio.h>
25 #include <linux/interrupt.h>
26 #include <linux/io.h>
27 #include <linux/module.h>
28 #include <linux/platform_device.h>
29 #include <linux/of.h>
30
31 #include "stm32-adc-core.h"
32
33 /* STM32F4 - Registers for each ADC instance */
34 #define STM32F4_ADC_SR                  0x00
35 #define STM32F4_ADC_CR1                 0x04
36 #define STM32F4_ADC_CR2                 0x08
37 #define STM32F4_ADC_SMPR1               0x0C
38 #define STM32F4_ADC_SMPR2               0x10
39 #define STM32F4_ADC_HTR                 0x24
40 #define STM32F4_ADC_LTR                 0x28
41 #define STM32F4_ADC_SQR1                0x2C
42 #define STM32F4_ADC_SQR2                0x30
43 #define STM32F4_ADC_SQR3                0x34
44 #define STM32F4_ADC_JSQR                0x38
45 #define STM32F4_ADC_JDR1                0x3C
46 #define STM32F4_ADC_JDR2                0x40
47 #define STM32F4_ADC_JDR3                0x44
48 #define STM32F4_ADC_JDR4                0x48
49 #define STM32F4_ADC_DR                  0x4C
50
51 /* STM32F4_ADC_SR - bit fields */
52 #define STM32F4_STRT                    BIT(4)
53 #define STM32F4_EOC                     BIT(1)
54
55 /* STM32F4_ADC_CR1 - bit fields */
56 #define STM32F4_SCAN                    BIT(8)
57 #define STM32F4_EOCIE                   BIT(5)
58
59 /* STM32F4_ADC_CR2 - bit fields */
60 #define STM32F4_SWSTART                 BIT(30)
61 #define STM32F4_EXTEN_MASK              GENMASK(29, 28)
62 #define STM32F4_EOCS                    BIT(10)
63 #define STM32F4_ADON                    BIT(0)
64
65 /* STM32F4_ADC_SQR1 - bit fields */
66 #define STM32F4_L_SHIFT                 20
67 #define STM32F4_L_MASK                  GENMASK(23, 20)
68
69 /* STM32F4_ADC_SQR3 - bit fields */
70 #define STM32F4_SQ1_SHIFT               0
71 #define STM32F4_SQ1_MASK                GENMASK(4, 0)
72
73 #define STM32_ADC_TIMEOUT_US            100000
74 #define STM32_ADC_TIMEOUT       (msecs_to_jiffies(STM32_ADC_TIMEOUT_US / 1000))
75
76 /**
77  * struct stm32_adc - private data of each ADC IIO instance
78  * @common:             reference to ADC block common data
79  * @offset:             ADC instance register offset in ADC block
80  * @completion:         end of single conversion completion
81  * @buffer:             data buffer
82  * @clk:                clock for this adc instance
83  * @irq:                interrupt for this adc instance
84  * @lock:               spinlock
85  */
86 struct stm32_adc {
87         struct stm32_adc_common *common;
88         u32                     offset;
89         struct completion       completion;
90         u16                     *buffer;
91         struct clk              *clk;
92         int                     irq;
93         spinlock_t              lock;           /* interrupt lock */
94 };
95
96 /**
97  * struct stm32_adc_chan_spec - specification of stm32 adc channel
98  * @type:       IIO channel type
99  * @channel:    channel number (single ended)
100  * @name:       channel name (single ended)
101  */
102 struct stm32_adc_chan_spec {
103         enum iio_chan_type      type;
104         int                     channel;
105         const char              *name;
106 };
107
108 /* Input definitions common for all STM32F4 instances */
109 static const struct stm32_adc_chan_spec stm32f4_adc123_channels[] = {
110         { IIO_VOLTAGE, 0, "in0" },
111         { IIO_VOLTAGE, 1, "in1" },
112         { IIO_VOLTAGE, 2, "in2" },
113         { IIO_VOLTAGE, 3, "in3" },
114         { IIO_VOLTAGE, 4, "in4" },
115         { IIO_VOLTAGE, 5, "in5" },
116         { IIO_VOLTAGE, 6, "in6" },
117         { IIO_VOLTAGE, 7, "in7" },
118         { IIO_VOLTAGE, 8, "in8" },
119         { IIO_VOLTAGE, 9, "in9" },
120         { IIO_VOLTAGE, 10, "in10" },
121         { IIO_VOLTAGE, 11, "in11" },
122         { IIO_VOLTAGE, 12, "in12" },
123         { IIO_VOLTAGE, 13, "in13" },
124         { IIO_VOLTAGE, 14, "in14" },
125         { IIO_VOLTAGE, 15, "in15" },
126 };
127
128 /**
129  * STM32 ADC registers access routines
130  * @adc: stm32 adc instance
131  * @reg: reg offset in adc instance
132  *
133  * Note: All instances share same base, with 0x0, 0x100 or 0x200 offset resp.
134  * for adc1, adc2 and adc3.
135  */
136 static u32 stm32_adc_readl(struct stm32_adc *adc, u32 reg)
137 {
138         return readl_relaxed(adc->common->base + adc->offset + reg);
139 }
140
141 static u16 stm32_adc_readw(struct stm32_adc *adc, u32 reg)
142 {
143         return readw_relaxed(adc->common->base + adc->offset + reg);
144 }
145
146 static void stm32_adc_writel(struct stm32_adc *adc, u32 reg, u32 val)
147 {
148         writel_relaxed(val, adc->common->base + adc->offset + reg);
149 }
150
151 static void stm32_adc_set_bits(struct stm32_adc *adc, u32 reg, u32 bits)
152 {
153         unsigned long flags;
154
155         spin_lock_irqsave(&adc->lock, flags);
156         stm32_adc_writel(adc, reg, stm32_adc_readl(adc, reg) | bits);
157         spin_unlock_irqrestore(&adc->lock, flags);
158 }
159
160 static void stm32_adc_clr_bits(struct stm32_adc *adc, u32 reg, u32 bits)
161 {
162         unsigned long flags;
163
164         spin_lock_irqsave(&adc->lock, flags);
165         stm32_adc_writel(adc, reg, stm32_adc_readl(adc, reg) & ~bits);
166         spin_unlock_irqrestore(&adc->lock, flags);
167 }
168
169 /**
170  * stm32_adc_conv_irq_enable() - Enable end of conversion interrupt
171  * @adc: stm32 adc instance
172  */
173 static void stm32_adc_conv_irq_enable(struct stm32_adc *adc)
174 {
175         stm32_adc_set_bits(adc, STM32F4_ADC_CR1, STM32F4_EOCIE);
176 };
177
178 /**
179  * stm32_adc_conv_irq_disable() - Disable end of conversion interrupt
180  * @adc: stm32 adc instance
181  */
182 static void stm32_adc_conv_irq_disable(struct stm32_adc *adc)
183 {
184         stm32_adc_clr_bits(adc, STM32F4_ADC_CR1, STM32F4_EOCIE);
185 }
186
187 /**
188  * stm32_adc_start_conv() - Start conversions for regular channels.
189  * @adc: stm32 adc instance
190  */
191 static void stm32_adc_start_conv(struct stm32_adc *adc)
192 {
193         stm32_adc_set_bits(adc, STM32F4_ADC_CR1, STM32F4_SCAN);
194         stm32_adc_set_bits(adc, STM32F4_ADC_CR2, STM32F4_EOCS | STM32F4_ADON);
195
196         /* Wait for Power-up time (tSTAB from datasheet) */
197         usleep_range(2, 3);
198
199         /* Software start ? (e.g. trigger detection disabled ?) */
200         if (!(stm32_adc_readl(adc, STM32F4_ADC_CR2) & STM32F4_EXTEN_MASK))
201                 stm32_adc_set_bits(adc, STM32F4_ADC_CR2, STM32F4_SWSTART);
202 }
203
204 static void stm32_adc_stop_conv(struct stm32_adc *adc)
205 {
206         stm32_adc_clr_bits(adc, STM32F4_ADC_CR2, STM32F4_EXTEN_MASK);
207         stm32_adc_clr_bits(adc, STM32F4_ADC_SR, STM32F4_STRT);
208
209         stm32_adc_clr_bits(adc, STM32F4_ADC_CR1, STM32F4_SCAN);
210         stm32_adc_clr_bits(adc, STM32F4_ADC_CR2, STM32F4_ADON);
211 }
212
213 /**
214  * stm32_adc_single_conv() - Performs a single conversion
215  * @indio_dev: IIO device
216  * @chan: IIO channel
217  * @res: conversion result
218  *
219  * The function performs a single conversion on a given channel:
220  * - Program sequencer with one channel (e.g. in SQ1 with len = 1)
221  * - Use SW trigger
222  * - Start conversion, then wait for interrupt completion.
223  */
224 static int stm32_adc_single_conv(struct iio_dev *indio_dev,
225                                  const struct iio_chan_spec *chan,
226                                  int *res)
227 {
228         struct stm32_adc *adc = iio_priv(indio_dev);
229         long timeout;
230         u32 val;
231         u16 result;
232         int ret;
233
234         reinit_completion(&adc->completion);
235
236         adc->buffer = &result;
237
238         /* Program chan number in regular sequence */
239         val = stm32_adc_readl(adc, STM32F4_ADC_SQR3);
240         val &= ~STM32F4_SQ1_MASK;
241         val |= chan->channel << STM32F4_SQ1_SHIFT;
242         stm32_adc_writel(adc, STM32F4_ADC_SQR3, val);
243
244         /* Set regular sequence len (0 for 1 conversion) */
245         stm32_adc_clr_bits(adc, STM32F4_ADC_SQR1, STM32F4_L_MASK);
246
247         /* Trigger detection disabled (conversion can be launched in SW) */
248         stm32_adc_clr_bits(adc, STM32F4_ADC_CR2, STM32F4_EXTEN_MASK);
249
250         stm32_adc_conv_irq_enable(adc);
251
252         stm32_adc_start_conv(adc);
253
254         timeout = wait_for_completion_interruptible_timeout(
255                                         &adc->completion, STM32_ADC_TIMEOUT);
256         if (timeout == 0) {
257                 ret = -ETIMEDOUT;
258         } else if (timeout < 0) {
259                 ret = timeout;
260         } else {
261                 *res = result;
262                 ret = IIO_VAL_INT;
263         }
264
265         stm32_adc_stop_conv(adc);
266
267         stm32_adc_conv_irq_disable(adc);
268
269         return ret;
270 }
271
272 static int stm32_adc_read_raw(struct iio_dev *indio_dev,
273                               struct iio_chan_spec const *chan,
274                               int *val, int *val2, long mask)
275 {
276         struct stm32_adc *adc = iio_priv(indio_dev);
277         int ret;
278
279         switch (mask) {
280         case IIO_CHAN_INFO_RAW:
281                 ret = iio_device_claim_direct_mode(indio_dev);
282                 if (ret)
283                         return ret;
284                 if (chan->type == IIO_VOLTAGE)
285                         ret = stm32_adc_single_conv(indio_dev, chan, val);
286                 else
287                         ret = -EINVAL;
288                 iio_device_release_direct_mode(indio_dev);
289                 return ret;
290
291         case IIO_CHAN_INFO_SCALE:
292                 *val = adc->common->vref_mv;
293                 *val2 = chan->scan_type.realbits;
294                 return IIO_VAL_FRACTIONAL_LOG2;
295
296         default:
297                 return -EINVAL;
298         }
299 }
300
301 static irqreturn_t stm32_adc_isr(int irq, void *data)
302 {
303         struct stm32_adc *adc = data;
304         u32 status = stm32_adc_readl(adc, STM32F4_ADC_SR);
305
306         if (status & STM32F4_EOC) {
307                 *adc->buffer = stm32_adc_readw(adc, STM32F4_ADC_DR);
308                 complete(&adc->completion);
309                 return IRQ_HANDLED;
310         }
311
312         return IRQ_NONE;
313 }
314
315 static int stm32_adc_of_xlate(struct iio_dev *indio_dev,
316                               const struct of_phandle_args *iiospec)
317 {
318         int i;
319
320         for (i = 0; i < indio_dev->num_channels; i++)
321                 if (indio_dev->channels[i].channel == iiospec->args[0])
322                         return i;
323
324         return -EINVAL;
325 }
326
327 /**
328  * stm32_adc_debugfs_reg_access - read or write register value
329  *
330  * To read a value from an ADC register:
331  *   echo [ADC reg offset] > direct_reg_access
332  *   cat direct_reg_access
333  *
334  * To write a value in a ADC register:
335  *   echo [ADC_reg_offset] [value] > direct_reg_access
336  */
337 static int stm32_adc_debugfs_reg_access(struct iio_dev *indio_dev,
338                                         unsigned reg, unsigned writeval,
339                                         unsigned *readval)
340 {
341         struct stm32_adc *adc = iio_priv(indio_dev);
342
343         if (!readval)
344                 stm32_adc_writel(adc, reg, writeval);
345         else
346                 *readval = stm32_adc_readl(adc, reg);
347
348         return 0;
349 }
350
351 static const struct iio_info stm32_adc_iio_info = {
352         .read_raw = stm32_adc_read_raw,
353         .debugfs_reg_access = stm32_adc_debugfs_reg_access,
354         .of_xlate = stm32_adc_of_xlate,
355         .driver_module = THIS_MODULE,
356 };
357
358 static void stm32_adc_chan_init_one(struct iio_dev *indio_dev,
359                                     struct iio_chan_spec *chan,
360                                     const struct stm32_adc_chan_spec *channel,
361                                     int scan_index)
362 {
363         chan->type = channel->type;
364         chan->channel = channel->channel;
365         chan->datasheet_name = channel->name;
366         chan->scan_index = scan_index;
367         chan->indexed = 1;
368         chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
369         chan->info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE);
370         chan->scan_type.sign = 'u';
371         chan->scan_type.realbits = 12;
372         chan->scan_type.storagebits = 16;
373 }
374
375 static int stm32_adc_chan_of_init(struct iio_dev *indio_dev)
376 {
377         struct device_node *node = indio_dev->dev.of_node;
378         struct property *prop;
379         const __be32 *cur;
380         struct iio_chan_spec *channels;
381         int scan_index = 0, num_channels;
382         u32 val;
383
384         num_channels = of_property_count_u32_elems(node, "st,adc-channels");
385         if (num_channels < 0 ||
386             num_channels >= ARRAY_SIZE(stm32f4_adc123_channels)) {
387                 dev_err(&indio_dev->dev, "Bad st,adc-channels?\n");
388                 return num_channels < 0 ? num_channels : -EINVAL;
389         }
390
391         channels = devm_kcalloc(&indio_dev->dev, num_channels,
392                                 sizeof(struct iio_chan_spec), GFP_KERNEL);
393         if (!channels)
394                 return -ENOMEM;
395
396         of_property_for_each_u32(node, "st,adc-channels", prop, cur, val) {
397                 if (val >= ARRAY_SIZE(stm32f4_adc123_channels)) {
398                         dev_err(&indio_dev->dev, "Invalid channel %d\n", val);
399                         return -EINVAL;
400                 }
401                 stm32_adc_chan_init_one(indio_dev, &channels[scan_index],
402                                         &stm32f4_adc123_channels[val],
403                                         scan_index);
404                 scan_index++;
405         }
406
407         indio_dev->num_channels = scan_index;
408         indio_dev->channels = channels;
409
410         return 0;
411 }
412
413 static int stm32_adc_probe(struct platform_device *pdev)
414 {
415         struct iio_dev *indio_dev;
416         struct stm32_adc *adc;
417         int ret;
418
419         if (!pdev->dev.of_node)
420                 return -ENODEV;
421
422         indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*adc));
423         if (!indio_dev)
424                 return -ENOMEM;
425
426         adc = iio_priv(indio_dev);
427         adc->common = dev_get_drvdata(pdev->dev.parent);
428         spin_lock_init(&adc->lock);
429         init_completion(&adc->completion);
430
431         indio_dev->name = dev_name(&pdev->dev);
432         indio_dev->dev.parent = &pdev->dev;
433         indio_dev->dev.of_node = pdev->dev.of_node;
434         indio_dev->info = &stm32_adc_iio_info;
435         indio_dev->modes = INDIO_DIRECT_MODE;
436
437         platform_set_drvdata(pdev, adc);
438
439         ret = of_property_read_u32(pdev->dev.of_node, "reg", &adc->offset);
440         if (ret != 0) {
441                 dev_err(&pdev->dev, "missing reg property\n");
442                 return -EINVAL;
443         }
444
445         adc->irq = platform_get_irq(pdev, 0);
446         if (adc->irq < 0) {
447                 dev_err(&pdev->dev, "failed to get irq\n");
448                 return adc->irq;
449         }
450
451         ret = devm_request_irq(&pdev->dev, adc->irq, stm32_adc_isr,
452                                0, pdev->name, adc);
453         if (ret) {
454                 dev_err(&pdev->dev, "failed to request IRQ\n");
455                 return ret;
456         }
457
458         adc->clk = devm_clk_get(&pdev->dev, NULL);
459         if (IS_ERR(adc->clk)) {
460                 dev_err(&pdev->dev, "Can't get clock\n");
461                 return PTR_ERR(adc->clk);
462         }
463
464         ret = clk_prepare_enable(adc->clk);
465         if (ret < 0) {
466                 dev_err(&pdev->dev, "clk enable failed\n");
467                 return ret;
468         }
469
470         ret = stm32_adc_chan_of_init(indio_dev);
471         if (ret < 0)
472                 goto err_clk_disable;
473
474         ret = iio_device_register(indio_dev);
475         if (ret) {
476                 dev_err(&pdev->dev, "iio dev register failed\n");
477                 goto err_clk_disable;
478         }
479
480         return 0;
481
482 err_clk_disable:
483         clk_disable_unprepare(adc->clk);
484
485         return ret;
486 }
487
488 static int stm32_adc_remove(struct platform_device *pdev)
489 {
490         struct stm32_adc *adc = platform_get_drvdata(pdev);
491         struct iio_dev *indio_dev = iio_priv_to_dev(adc);
492
493         iio_device_unregister(indio_dev);
494         clk_disable_unprepare(adc->clk);
495
496         return 0;
497 }
498
499 static const struct of_device_id stm32_adc_of_match[] = {
500         { .compatible = "st,stm32f4-adc" },
501         {},
502 };
503 MODULE_DEVICE_TABLE(of, stm32_adc_of_match);
504
505 static struct platform_driver stm32_adc_driver = {
506         .probe = stm32_adc_probe,
507         .remove = stm32_adc_remove,
508         .driver = {
509                 .name = "stm32-adc",
510                 .of_match_table = stm32_adc_of_match,
511         },
512 };
513 module_platform_driver(stm32_adc_driver);
514
515 MODULE_AUTHOR("Fabrice Gasnier <fabrice.gasnier@st.com>");
516 MODULE_DESCRIPTION("STMicroelectronics STM32 ADC IIO driver");
517 MODULE_LICENSE("GPL v2");
518 MODULE_ALIAS("platform:stm32-adc");