cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

at91_adc.c (39731B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * Driver for the ADC present in the Atmel AT91 evaluation boards.
      4 *
      5 * Copyright 2011 Free Electrons
      6 */
      7
      8#include <linux/bitmap.h>
      9#include <linux/bitops.h>
     10#include <linux/clk.h>
     11#include <linux/err.h>
     12#include <linux/io.h>
     13#include <linux/input.h>
     14#include <linux/interrupt.h>
     15#include <linux/jiffies.h>
     16#include <linux/kernel.h>
     17#include <linux/module.h>
     18#include <linux/of.h>
     19#include <linux/of_device.h>
     20#include <linux/platform_device.h>
     21#include <linux/sched.h>
     22#include <linux/slab.h>
     23#include <linux/wait.h>
     24
     25#include <linux/iio/iio.h>
     26#include <linux/iio/buffer.h>
     27#include <linux/iio/trigger.h>
     28#include <linux/iio/trigger_consumer.h>
     29#include <linux/iio/triggered_buffer.h>
     30#include <linux/pinctrl/consumer.h>
     31
     32/* Registers */
     33#define AT91_ADC_CR		0x00		/* Control Register */
     34#define		AT91_ADC_SWRST		(1 << 0)	/* Software Reset */
     35#define		AT91_ADC_START		(1 << 1)	/* Start Conversion */
     36
     37#define AT91_ADC_MR		0x04		/* Mode Register */
     38#define		AT91_ADC_TSAMOD		(3 << 0)	/* ADC mode */
     39#define		AT91_ADC_TSAMOD_ADC_ONLY_MODE		(0 << 0)	/* ADC Mode */
     40#define		AT91_ADC_TSAMOD_TS_ONLY_MODE		(1 << 0)	/* Touch Screen Only Mode */
     41#define		AT91_ADC_TRGEN		(1 << 0)	/* Trigger Enable */
     42#define		AT91_ADC_TRGSEL		(7 << 1)	/* Trigger Selection */
     43#define			AT91_ADC_TRGSEL_TC0		(0 << 1)
     44#define			AT91_ADC_TRGSEL_TC1		(1 << 1)
     45#define			AT91_ADC_TRGSEL_TC2		(2 << 1)
     46#define			AT91_ADC_TRGSEL_EXTERNAL	(6 << 1)
     47#define		AT91_ADC_LOWRES		(1 << 4)	/* Low Resolution */
     48#define		AT91_ADC_SLEEP		(1 << 5)	/* Sleep Mode */
     49#define		AT91_ADC_PENDET		(1 << 6)	/* Pen contact detection enable */
     50#define		AT91_ADC_PRESCAL_9260	(0x3f << 8)	/* Prescalar Rate Selection */
     51#define		AT91_ADC_PRESCAL_9G45	(0xff << 8)
     52#define			AT91_ADC_PRESCAL_(x)	((x) << 8)
     53#define		AT91_ADC_STARTUP_9260	(0x1f << 16)	/* Startup Up Time */
     54#define		AT91_ADC_STARTUP_9G45	(0x7f << 16)
     55#define		AT91_ADC_STARTUP_9X5	(0xf << 16)
     56#define			AT91_ADC_STARTUP_(x)	((x) << 16)
     57#define		AT91_ADC_SHTIM		(0xf  << 24)	/* Sample & Hold Time */
     58#define			AT91_ADC_SHTIM_(x)	((x) << 24)
     59#define		AT91_ADC_PENDBC		(0x0f << 28)	/* Pen Debounce time */
     60#define			AT91_ADC_PENDBC_(x)	((x) << 28)
     61
     62#define AT91_ADC_TSR		0x0C
     63#define		AT91_ADC_TSR_SHTIM	(0xf  << 24)	/* Sample & Hold Time */
     64#define			AT91_ADC_TSR_SHTIM_(x)	((x) << 24)
     65
     66#define AT91_ADC_CHER		0x10		/* Channel Enable Register */
     67#define AT91_ADC_CHDR		0x14		/* Channel Disable Register */
     68#define AT91_ADC_CHSR		0x18		/* Channel Status Register */
     69#define		AT91_ADC_CH(n)		(1 << (n))	/* Channel Number */
     70
     71#define AT91_ADC_SR		0x1C		/* Status Register */
     72#define		AT91_ADC_EOC(n)		(1 << (n))	/* End of Conversion on Channel N */
     73#define		AT91_ADC_OVRE(n)	(1 << ((n) + 8))/* Overrun Error on Channel N */
     74#define		AT91_ADC_DRDY		(1 << 16)	/* Data Ready */
     75#define		AT91_ADC_GOVRE		(1 << 17)	/* General Overrun Error */
     76#define		AT91_ADC_ENDRX		(1 << 18)	/* End of RX Buffer */
     77#define		AT91_ADC_RXFUFF		(1 << 19)	/* RX Buffer Full */
     78
     79#define AT91_ADC_SR_9X5		0x30		/* Status Register for 9x5 */
     80#define		AT91_ADC_SR_DRDY_9X5	(1 << 24)	/* Data Ready */
     81
     82#define AT91_ADC_LCDR		0x20		/* Last Converted Data Register */
     83#define		AT91_ADC_LDATA		(0x3ff)
     84
     85#define AT91_ADC_IER		0x24		/* Interrupt Enable Register */
     86#define AT91_ADC_IDR		0x28		/* Interrupt Disable Register */
     87#define AT91_ADC_IMR		0x2C		/* Interrupt Mask Register */
     88#define		AT91RL_ADC_IER_PEN	(1 << 20)
     89#define		AT91RL_ADC_IER_NOPEN	(1 << 21)
     90#define		AT91_ADC_IER_PEN	(1 << 29)
     91#define		AT91_ADC_IER_NOPEN	(1 << 30)
     92#define		AT91_ADC_IER_XRDY	(1 << 20)
     93#define		AT91_ADC_IER_YRDY	(1 << 21)
     94#define		AT91_ADC_IER_PRDY	(1 << 22)
     95#define		AT91_ADC_ISR_PENS	(1 << 31)
     96
     97#define AT91_ADC_CHR(n)		(0x30 + ((n) * 4))	/* Channel Data Register N */
     98#define		AT91_ADC_DATA		(0x3ff)
     99
    100#define AT91_ADC_CDR0_9X5	(0x50)			/* Channel Data Register 0 for 9X5 */
    101
    102#define AT91_ADC_ACR		0x94	/* Analog Control Register */
    103#define		AT91_ADC_ACR_PENDETSENS	(0x3 << 0)	/* pull-up resistor */
    104
    105#define AT91_ADC_TSMR		0xB0
    106#define		AT91_ADC_TSMR_TSMODE	(3 << 0)	/* Touch Screen Mode */
    107#define			AT91_ADC_TSMR_TSMODE_NONE		(0 << 0)
    108#define			AT91_ADC_TSMR_TSMODE_4WIRE_NO_PRESS	(1 << 0)
    109#define			AT91_ADC_TSMR_TSMODE_4WIRE_PRESS	(2 << 0)
    110#define			AT91_ADC_TSMR_TSMODE_5WIRE		(3 << 0)
    111#define		AT91_ADC_TSMR_TSAV	(3 << 4)	/* Averages samples */
    112#define			AT91_ADC_TSMR_TSAV_(x)		((x) << 4)
    113#define		AT91_ADC_TSMR_SCTIM	(0x0f << 16)	/* Switch closure time */
    114#define			AT91_ADC_TSMR_SCTIM_(x)		((x) << 16)
    115#define		AT91_ADC_TSMR_PENDBC	(0x0f << 28)	/* Pen Debounce time */
    116#define			AT91_ADC_TSMR_PENDBC_(x)	((x) << 28)
    117#define		AT91_ADC_TSMR_NOTSDMA	(1 << 22)	/* No Touchscreen DMA */
    118#define		AT91_ADC_TSMR_PENDET_DIS	(0 << 24)	/* Pen contact detection disable */
    119#define		AT91_ADC_TSMR_PENDET_ENA	(1 << 24)	/* Pen contact detection enable */
    120
    121#define AT91_ADC_TSXPOSR	0xB4
    122#define AT91_ADC_TSYPOSR	0xB8
    123#define AT91_ADC_TSPRESSR	0xBC
    124
    125#define AT91_ADC_TRGR_9260	AT91_ADC_MR
    126#define AT91_ADC_TRGR_9G45	0x08
    127#define AT91_ADC_TRGR_9X5	0xC0
    128
    129/* Trigger Register bit field */
    130#define		AT91_ADC_TRGR_TRGPER	(0xffff << 16)
    131#define			AT91_ADC_TRGR_TRGPER_(x)	((x) << 16)
    132#define		AT91_ADC_TRGR_TRGMOD	(0x7 << 0)
    133#define			AT91_ADC_TRGR_NONE		(0 << 0)
    134#define			AT91_ADC_TRGR_MOD_PERIOD_TRIG	(5 << 0)
    135
    136#define AT91_ADC_CHAN(st, ch) \
    137	(st->registers->channel_base + (ch * 4))
    138#define at91_adc_readl(st, reg) \
    139	(readl_relaxed(st->reg_base + reg))
    140#define at91_adc_writel(st, reg, val) \
    141	(writel_relaxed(val, st->reg_base + reg))
    142
    143#define DRIVER_NAME		"at91_adc"
    144#define MAX_POS_BITS		12
    145
    146#define TOUCH_SAMPLE_PERIOD_US		2000	/* 2ms */
    147#define TOUCH_PEN_DETECT_DEBOUNCE_US	200
    148
    149#define MAX_RLPOS_BITS         10
    150#define TOUCH_SAMPLE_PERIOD_US_RL      10000   /* 10ms, the SoC can't keep up with 2ms */
    151#define TOUCH_SHTIM                    0xa
    152#define TOUCH_SCTIM_US		10		/* 10us for the Touchscreen Switches Closure Time */
    153
    154enum atmel_adc_ts_type {
    155	ATMEL_ADC_TOUCHSCREEN_NONE = 0,
    156	ATMEL_ADC_TOUCHSCREEN_4WIRE = 4,
    157	ATMEL_ADC_TOUCHSCREEN_5WIRE = 5,
    158};
    159
    160/**
    161 * struct at91_adc_trigger - description of triggers
    162 * @name:		name of the trigger advertised to the user
    163 * @value:		value to set in the ADC's trigger setup register
    164 *			to enable the trigger
    165 * @is_external:	Does the trigger rely on an external pin?
    166 */
    167struct at91_adc_trigger {
    168	const char	*name;
    169	u8		value;
    170	bool		is_external;
    171};
    172
    173/**
    174 * struct at91_adc_reg_desc - Various informations relative to registers
    175 * @channel_base:	Base offset for the channel data registers
    176 * @drdy_mask:		Mask of the DRDY field in the relevant registers
    177 *			(Interruptions registers mostly)
    178 * @status_register:	Offset of the Interrupt Status Register
    179 * @trigger_register:	Offset of the Trigger setup register
    180 * @mr_prescal_mask:	Mask of the PRESCAL field in the adc MR register
    181 * @mr_startup_mask:	Mask of the STARTUP field in the adc MR register
    182 */
    183struct at91_adc_reg_desc {
    184	u8	channel_base;
    185	u32	drdy_mask;
    186	u8	status_register;
    187	u8	trigger_register;
    188	u32	mr_prescal_mask;
    189	u32	mr_startup_mask;
    190};
    191
    192struct at91_adc_caps {
    193	bool	has_ts;		/* Support touch screen */
    194	bool	has_tsmr;	/* only at91sam9x5, sama5d3 have TSMR reg */
    195	/*
    196	 * Numbers of sampling data will be averaged. Can be 0~3.
    197	 * Hardware can average (2 ^ ts_filter_average) sample data.
    198	 */
    199	u8	ts_filter_average;
    200	/* Pen Detection input pull-up resistor, can be 0~3 */
    201	u8	ts_pen_detect_sensitivity;
    202
    203	/* startup time calculate function */
    204	u32 (*calc_startup_ticks)(u32 startup_time, u32 adc_clk_khz);
    205
    206	u8	num_channels;
    207
    208	u8	low_res_bits;
    209	u8	high_res_bits;
    210	u32	trigger_number;
    211	const struct at91_adc_trigger *triggers;
    212	struct at91_adc_reg_desc registers;
    213};
    214
    215struct at91_adc_state {
    216	struct clk		*adc_clk;
    217	u16			*buffer;
    218	unsigned long		channels_mask;
    219	struct clk		*clk;
    220	bool			done;
    221	int			irq;
    222	u16			last_value;
    223	int			chnb;
    224	struct mutex		lock;
    225	u8			num_channels;
    226	void __iomem		*reg_base;
    227	const struct at91_adc_reg_desc *registers;
    228	u32			startup_time;
    229	u8			sample_hold_time;
    230	bool			sleep_mode;
    231	struct iio_trigger	**trig;
    232	bool			use_external;
    233	u32			vref_mv;
    234	u32			res;		/* resolution used for convertions */
    235	wait_queue_head_t	wq_data_avail;
    236	const struct at91_adc_caps	*caps;
    237
    238	/*
    239	 * Following ADC channels are shared by touchscreen:
    240	 *
    241	 * CH0 -- Touch screen XP/UL
    242	 * CH1 -- Touch screen XM/UR
    243	 * CH2 -- Touch screen YP/LL
    244	 * CH3 -- Touch screen YM/Sense
    245	 * CH4 -- Touch screen LR(5-wire only)
    246	 *
    247	 * The bitfields below represents the reserved channel in the
    248	 * touchscreen mode.
    249	 */
    250#define CHAN_MASK_TOUCHSCREEN_4WIRE	(0xf << 0)
    251#define CHAN_MASK_TOUCHSCREEN_5WIRE	(0x1f << 0)
    252	enum atmel_adc_ts_type	touchscreen_type;
    253	struct input_dev	*ts_input;
    254
    255	u16			ts_sample_period_val;
    256	u32			ts_pressure_threshold;
    257	u16			ts_pendbc;
    258
    259	bool			ts_bufferedmeasure;
    260	u32			ts_prev_absx;
    261	u32			ts_prev_absy;
    262};
    263
    264static irqreturn_t at91_adc_trigger_handler(int irq, void *p)
    265{
    266	struct iio_poll_func *pf = p;
    267	struct iio_dev *idev = pf->indio_dev;
    268	struct at91_adc_state *st = iio_priv(idev);
    269	struct iio_chan_spec const *chan;
    270	int i, j = 0;
    271
    272	for (i = 0; i < idev->masklength; i++) {
    273		if (!test_bit(i, idev->active_scan_mask))
    274			continue;
    275		chan = idev->channels + i;
    276		st->buffer[j] = at91_adc_readl(st, AT91_ADC_CHAN(st, chan->channel));
    277		j++;
    278	}
    279
    280	iio_push_to_buffers_with_timestamp(idev, st->buffer, pf->timestamp);
    281
    282	iio_trigger_notify_done(idev->trig);
    283
    284	/* Needed to ACK the DRDY interruption */
    285	at91_adc_readl(st, AT91_ADC_LCDR);
    286
    287	enable_irq(st->irq);
    288
    289	return IRQ_HANDLED;
    290}
    291
    292/* Handler for classic adc channel eoc trigger */
    293static void handle_adc_eoc_trigger(int irq, struct iio_dev *idev)
    294{
    295	struct at91_adc_state *st = iio_priv(idev);
    296
    297	if (iio_buffer_enabled(idev)) {
    298		disable_irq_nosync(irq);
    299		iio_trigger_poll(idev->trig);
    300	} else {
    301		st->last_value = at91_adc_readl(st, AT91_ADC_CHAN(st, st->chnb));
    302		/* Needed to ACK the DRDY interruption */
    303		at91_adc_readl(st, AT91_ADC_LCDR);
    304		st->done = true;
    305		wake_up_interruptible(&st->wq_data_avail);
    306	}
    307}
    308
    309static int at91_ts_sample(struct iio_dev *idev)
    310{
    311	struct at91_adc_state *st = iio_priv(idev);
    312	unsigned int xscale, yscale, reg, z1, z2;
    313	unsigned int x, y, pres, xpos, ypos;
    314	unsigned int rxp = 1;
    315	unsigned int factor = 1000;
    316
    317	unsigned int xyz_mask_bits = st->res;
    318	unsigned int xyz_mask = (1 << xyz_mask_bits) - 1;
    319
    320	/* calculate position */
    321	/* x position = (x / xscale) * max, max = 2^MAX_POS_BITS - 1 */
    322	reg = at91_adc_readl(st, AT91_ADC_TSXPOSR);
    323	xpos = reg & xyz_mask;
    324	x = (xpos << MAX_POS_BITS) - xpos;
    325	xscale = (reg >> 16) & xyz_mask;
    326	if (xscale == 0) {
    327		dev_err(&idev->dev, "Error: xscale == 0!\n");
    328		return -1;
    329	}
    330	x /= xscale;
    331
    332	/* y position = (y / yscale) * max, max = 2^MAX_POS_BITS - 1 */
    333	reg = at91_adc_readl(st, AT91_ADC_TSYPOSR);
    334	ypos = reg & xyz_mask;
    335	y = (ypos << MAX_POS_BITS) - ypos;
    336	yscale = (reg >> 16) & xyz_mask;
    337	if (yscale == 0) {
    338		dev_err(&idev->dev, "Error: yscale == 0!\n");
    339		return -1;
    340	}
    341	y /= yscale;
    342
    343	/* calculate the pressure */
    344	reg = at91_adc_readl(st, AT91_ADC_TSPRESSR);
    345	z1 = reg & xyz_mask;
    346	z2 = (reg >> 16) & xyz_mask;
    347
    348	if (z1 != 0)
    349		pres = rxp * (x * factor / 1024) * (z2 * factor / z1 - factor)
    350			/ factor;
    351	else
    352		pres = st->ts_pressure_threshold;	/* no pen contacted */
    353
    354	dev_dbg(&idev->dev, "xpos = %d, xscale = %d, ypos = %d, yscale = %d, z1 = %d, z2 = %d, press = %d\n",
    355				xpos, xscale, ypos, yscale, z1, z2, pres);
    356
    357	if (pres < st->ts_pressure_threshold) {
    358		dev_dbg(&idev->dev, "x = %d, y = %d, pressure = %d\n",
    359					x, y, pres / factor);
    360		input_report_abs(st->ts_input, ABS_X, x);
    361		input_report_abs(st->ts_input, ABS_Y, y);
    362		input_report_abs(st->ts_input, ABS_PRESSURE, pres);
    363		input_report_key(st->ts_input, BTN_TOUCH, 1);
    364		input_sync(st->ts_input);
    365	} else {
    366		dev_dbg(&idev->dev, "pressure too low: not reporting\n");
    367	}
    368
    369	return 0;
    370}
    371
    372static irqreturn_t at91_adc_rl_interrupt(int irq, void *private)
    373{
    374	struct iio_dev *idev = private;
    375	struct at91_adc_state *st = iio_priv(idev);
    376	u32 status = at91_adc_readl(st, st->registers->status_register);
    377	unsigned int reg;
    378
    379	status &= at91_adc_readl(st, AT91_ADC_IMR);
    380	if (status & GENMASK(st->num_channels - 1, 0))
    381		handle_adc_eoc_trigger(irq, idev);
    382
    383	if (status & AT91RL_ADC_IER_PEN) {
    384		/* Disabling pen debounce is required to get a NOPEN irq */
    385		reg = at91_adc_readl(st, AT91_ADC_MR);
    386		reg &= ~AT91_ADC_PENDBC;
    387		at91_adc_writel(st, AT91_ADC_MR, reg);
    388
    389		at91_adc_writel(st, AT91_ADC_IDR, AT91RL_ADC_IER_PEN);
    390		at91_adc_writel(st, AT91_ADC_IER, AT91RL_ADC_IER_NOPEN
    391				| AT91_ADC_EOC(3));
    392		/* Set up period trigger for sampling */
    393		at91_adc_writel(st, st->registers->trigger_register,
    394			AT91_ADC_TRGR_MOD_PERIOD_TRIG |
    395			AT91_ADC_TRGR_TRGPER_(st->ts_sample_period_val));
    396	} else if (status & AT91RL_ADC_IER_NOPEN) {
    397		reg = at91_adc_readl(st, AT91_ADC_MR);
    398		reg |= AT91_ADC_PENDBC_(st->ts_pendbc) & AT91_ADC_PENDBC;
    399		at91_adc_writel(st, AT91_ADC_MR, reg);
    400		at91_adc_writel(st, st->registers->trigger_register,
    401			AT91_ADC_TRGR_NONE);
    402
    403		at91_adc_writel(st, AT91_ADC_IDR, AT91RL_ADC_IER_NOPEN
    404				| AT91_ADC_EOC(3));
    405		at91_adc_writel(st, AT91_ADC_IER, AT91RL_ADC_IER_PEN);
    406		st->ts_bufferedmeasure = false;
    407		input_report_key(st->ts_input, BTN_TOUCH, 0);
    408		input_sync(st->ts_input);
    409	} else if (status & AT91_ADC_EOC(3) && st->ts_input) {
    410		/* Conversion finished and we've a touchscreen */
    411		if (st->ts_bufferedmeasure) {
    412			/*
    413			 * Last measurement is always discarded, since it can
    414			 * be erroneous.
    415			 * Always report previous measurement
    416			 */
    417			input_report_abs(st->ts_input, ABS_X, st->ts_prev_absx);
    418			input_report_abs(st->ts_input, ABS_Y, st->ts_prev_absy);
    419			input_report_key(st->ts_input, BTN_TOUCH, 1);
    420			input_sync(st->ts_input);
    421		} else
    422			st->ts_bufferedmeasure = true;
    423
    424		/* Now make new measurement */
    425		st->ts_prev_absx = at91_adc_readl(st, AT91_ADC_CHAN(st, 3))
    426				   << MAX_RLPOS_BITS;
    427		st->ts_prev_absx /= at91_adc_readl(st, AT91_ADC_CHAN(st, 2));
    428
    429		st->ts_prev_absy = at91_adc_readl(st, AT91_ADC_CHAN(st, 1))
    430				   << MAX_RLPOS_BITS;
    431		st->ts_prev_absy /= at91_adc_readl(st, AT91_ADC_CHAN(st, 0));
    432	}
    433
    434	return IRQ_HANDLED;
    435}
    436
    437static irqreturn_t at91_adc_9x5_interrupt(int irq, void *private)
    438{
    439	struct iio_dev *idev = private;
    440	struct at91_adc_state *st = iio_priv(idev);
    441	u32 status = at91_adc_readl(st, st->registers->status_register);
    442	const uint32_t ts_data_irq_mask =
    443		AT91_ADC_IER_XRDY |
    444		AT91_ADC_IER_YRDY |
    445		AT91_ADC_IER_PRDY;
    446
    447	if (status & GENMASK(st->num_channels - 1, 0))
    448		handle_adc_eoc_trigger(irq, idev);
    449
    450	if (status & AT91_ADC_IER_PEN) {
    451		at91_adc_writel(st, AT91_ADC_IDR, AT91_ADC_IER_PEN);
    452		at91_adc_writel(st, AT91_ADC_IER, AT91_ADC_IER_NOPEN |
    453			ts_data_irq_mask);
    454		/* Set up period trigger for sampling */
    455		at91_adc_writel(st, st->registers->trigger_register,
    456			AT91_ADC_TRGR_MOD_PERIOD_TRIG |
    457			AT91_ADC_TRGR_TRGPER_(st->ts_sample_period_val));
    458	} else if (status & AT91_ADC_IER_NOPEN) {
    459		at91_adc_writel(st, st->registers->trigger_register, 0);
    460		at91_adc_writel(st, AT91_ADC_IDR, AT91_ADC_IER_NOPEN |
    461			ts_data_irq_mask);
    462		at91_adc_writel(st, AT91_ADC_IER, AT91_ADC_IER_PEN);
    463
    464		input_report_key(st->ts_input, BTN_TOUCH, 0);
    465		input_sync(st->ts_input);
    466	} else if ((status & ts_data_irq_mask) == ts_data_irq_mask) {
    467		/* Now all touchscreen data is ready */
    468
    469		if (status & AT91_ADC_ISR_PENS) {
    470			/* validate data by pen contact */
    471			at91_ts_sample(idev);
    472		} else {
    473			/* triggered by event that is no pen contact, just read
    474			 * them to clean the interrupt and discard all.
    475			 */
    476			at91_adc_readl(st, AT91_ADC_TSXPOSR);
    477			at91_adc_readl(st, AT91_ADC_TSYPOSR);
    478			at91_adc_readl(st, AT91_ADC_TSPRESSR);
    479		}
    480	}
    481
    482	return IRQ_HANDLED;
    483}
    484
    485static int at91_adc_channel_init(struct iio_dev *idev)
    486{
    487	struct at91_adc_state *st = iio_priv(idev);
    488	struct iio_chan_spec *chan_array, *timestamp;
    489	int bit, idx = 0;
    490	unsigned long rsvd_mask = 0;
    491
    492	/* If touchscreen is enable, then reserve the adc channels */
    493	if (st->touchscreen_type == ATMEL_ADC_TOUCHSCREEN_4WIRE)
    494		rsvd_mask = CHAN_MASK_TOUCHSCREEN_4WIRE;
    495	else if (st->touchscreen_type == ATMEL_ADC_TOUCHSCREEN_5WIRE)
    496		rsvd_mask = CHAN_MASK_TOUCHSCREEN_5WIRE;
    497
    498	/* set up the channel mask to reserve touchscreen channels */
    499	st->channels_mask &= ~rsvd_mask;
    500
    501	idev->num_channels = bitmap_weight(&st->channels_mask,
    502					   st->num_channels) + 1;
    503
    504	chan_array = devm_kzalloc(&idev->dev,
    505				  ((idev->num_channels + 1) *
    506					sizeof(struct iio_chan_spec)),
    507				  GFP_KERNEL);
    508
    509	if (!chan_array)
    510		return -ENOMEM;
    511
    512	for_each_set_bit(bit, &st->channels_mask, st->num_channels) {
    513		struct iio_chan_spec *chan = chan_array + idx;
    514
    515		chan->type = IIO_VOLTAGE;
    516		chan->indexed = 1;
    517		chan->channel = bit;
    518		chan->scan_index = idx;
    519		chan->scan_type.sign = 'u';
    520		chan->scan_type.realbits = st->res;
    521		chan->scan_type.storagebits = 16;
    522		chan->info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE);
    523		chan->info_mask_separate = BIT(IIO_CHAN_INFO_RAW);
    524		idx++;
    525	}
    526	timestamp = chan_array + idx;
    527
    528	timestamp->type = IIO_TIMESTAMP;
    529	timestamp->channel = -1;
    530	timestamp->scan_index = idx;
    531	timestamp->scan_type.sign = 's';
    532	timestamp->scan_type.realbits = 64;
    533	timestamp->scan_type.storagebits = 64;
    534
    535	idev->channels = chan_array;
    536	return idev->num_channels;
    537}
    538
    539static int at91_adc_get_trigger_value_by_name(struct iio_dev *idev,
    540					     const struct at91_adc_trigger *triggers,
    541					     const char *trigger_name)
    542{
    543	struct at91_adc_state *st = iio_priv(idev);
    544	int i;
    545
    546	for (i = 0; i < st->caps->trigger_number; i++) {
    547		char *name = kasprintf(GFP_KERNEL,
    548				"%s-dev%d-%s",
    549				idev->name,
    550				iio_device_id(idev),
    551				triggers[i].name);
    552		if (!name)
    553			return -ENOMEM;
    554
    555		if (strcmp(trigger_name, name) == 0) {
    556			kfree(name);
    557			if (triggers[i].value == 0)
    558				return -EINVAL;
    559			return triggers[i].value;
    560		}
    561
    562		kfree(name);
    563	}
    564
    565	return -EINVAL;
    566}
    567
    568static int at91_adc_configure_trigger(struct iio_trigger *trig, bool state)
    569{
    570	struct iio_dev *idev = iio_trigger_get_drvdata(trig);
    571	struct at91_adc_state *st = iio_priv(idev);
    572	const struct at91_adc_reg_desc *reg = st->registers;
    573	u32 status = at91_adc_readl(st, reg->trigger_register);
    574	int value;
    575	u8 bit;
    576
    577	value = at91_adc_get_trigger_value_by_name(idev,
    578						   st->caps->triggers,
    579						   idev->trig->name);
    580	if (value < 0)
    581		return value;
    582
    583	if (state) {
    584		st->buffer = kmalloc(idev->scan_bytes, GFP_KERNEL);
    585		if (st->buffer == NULL)
    586			return -ENOMEM;
    587
    588		at91_adc_writel(st, reg->trigger_register,
    589				status | value);
    590
    591		for_each_set_bit(bit, idev->active_scan_mask,
    592				 st->num_channels) {
    593			struct iio_chan_spec const *chan = idev->channels + bit;
    594			at91_adc_writel(st, AT91_ADC_CHER,
    595					AT91_ADC_CH(chan->channel));
    596		}
    597
    598		at91_adc_writel(st, AT91_ADC_IER, reg->drdy_mask);
    599
    600	} else {
    601		at91_adc_writel(st, AT91_ADC_IDR, reg->drdy_mask);
    602
    603		at91_adc_writel(st, reg->trigger_register,
    604				status & ~value);
    605
    606		for_each_set_bit(bit, idev->active_scan_mask,
    607				 st->num_channels) {
    608			struct iio_chan_spec const *chan = idev->channels + bit;
    609			at91_adc_writel(st, AT91_ADC_CHDR,
    610					AT91_ADC_CH(chan->channel));
    611		}
    612		kfree(st->buffer);
    613	}
    614
    615	return 0;
    616}
    617
    618static const struct iio_trigger_ops at91_adc_trigger_ops = {
    619	.set_trigger_state = &at91_adc_configure_trigger,
    620};
    621
    622static struct iio_trigger *at91_adc_allocate_trigger(struct iio_dev *idev,
    623						     const struct at91_adc_trigger *trigger)
    624{
    625	struct iio_trigger *trig;
    626	int ret;
    627
    628	trig = iio_trigger_alloc(idev->dev.parent, "%s-dev%d-%s", idev->name,
    629				 iio_device_id(idev), trigger->name);
    630	if (trig == NULL)
    631		return NULL;
    632
    633	iio_trigger_set_drvdata(trig, idev);
    634	trig->ops = &at91_adc_trigger_ops;
    635
    636	ret = iio_trigger_register(trig);
    637	if (ret)
    638		return NULL;
    639
    640	return trig;
    641}
    642
    643static int at91_adc_trigger_init(struct iio_dev *idev)
    644{
    645	struct at91_adc_state *st = iio_priv(idev);
    646	int i, ret;
    647
    648	st->trig = devm_kcalloc(&idev->dev,
    649				st->caps->trigger_number, sizeof(*st->trig),
    650				GFP_KERNEL);
    651
    652	if (st->trig == NULL) {
    653		ret = -ENOMEM;
    654		goto error_ret;
    655	}
    656
    657	for (i = 0; i < st->caps->trigger_number; i++) {
    658		if (st->caps->triggers[i].is_external && !(st->use_external))
    659			continue;
    660
    661		st->trig[i] = at91_adc_allocate_trigger(idev,
    662							st->caps->triggers + i);
    663		if (st->trig[i] == NULL) {
    664			dev_err(&idev->dev,
    665				"Could not allocate trigger %d\n", i);
    666			ret = -ENOMEM;
    667			goto error_trigger;
    668		}
    669	}
    670
    671	return 0;
    672
    673error_trigger:
    674	for (i--; i >= 0; i--) {
    675		iio_trigger_unregister(st->trig[i]);
    676		iio_trigger_free(st->trig[i]);
    677	}
    678error_ret:
    679	return ret;
    680}
    681
    682static void at91_adc_trigger_remove(struct iio_dev *idev)
    683{
    684	struct at91_adc_state *st = iio_priv(idev);
    685	int i;
    686
    687	for (i = 0; i < st->caps->trigger_number; i++) {
    688		iio_trigger_unregister(st->trig[i]);
    689		iio_trigger_free(st->trig[i]);
    690	}
    691}
    692
    693static int at91_adc_buffer_init(struct iio_dev *idev)
    694{
    695	return iio_triggered_buffer_setup(idev, &iio_pollfunc_store_time,
    696		&at91_adc_trigger_handler, NULL);
    697}
    698
    699static void at91_adc_buffer_remove(struct iio_dev *idev)
    700{
    701	iio_triggered_buffer_cleanup(idev);
    702}
    703
    704static int at91_adc_read_raw(struct iio_dev *idev,
    705			     struct iio_chan_spec const *chan,
    706			     int *val, int *val2, long mask)
    707{
    708	struct at91_adc_state *st = iio_priv(idev);
    709	int ret;
    710
    711	switch (mask) {
    712	case IIO_CHAN_INFO_RAW:
    713		mutex_lock(&st->lock);
    714
    715		st->chnb = chan->channel;
    716		at91_adc_writel(st, AT91_ADC_CHER,
    717				AT91_ADC_CH(chan->channel));
    718		at91_adc_writel(st, AT91_ADC_IER, BIT(chan->channel));
    719		at91_adc_writel(st, AT91_ADC_CR, AT91_ADC_START);
    720
    721		ret = wait_event_interruptible_timeout(st->wq_data_avail,
    722						       st->done,
    723						       msecs_to_jiffies(1000));
    724
    725		/* Disable interrupts, regardless if adc conversion was
    726		 * successful or not
    727		 */
    728		at91_adc_writel(st, AT91_ADC_CHDR,
    729				AT91_ADC_CH(chan->channel));
    730		at91_adc_writel(st, AT91_ADC_IDR, BIT(chan->channel));
    731
    732		if (ret > 0) {
    733			/* a valid conversion took place */
    734			*val = st->last_value;
    735			st->last_value = 0;
    736			st->done = false;
    737			ret = IIO_VAL_INT;
    738		} else if (ret == 0) {
    739			/* conversion timeout */
    740			dev_err(&idev->dev, "ADC Channel %d timeout.\n",
    741				chan->channel);
    742			ret = -ETIMEDOUT;
    743		}
    744
    745		mutex_unlock(&st->lock);
    746		return ret;
    747
    748	case IIO_CHAN_INFO_SCALE:
    749		*val = st->vref_mv;
    750		*val2 = chan->scan_type.realbits;
    751		return IIO_VAL_FRACTIONAL_LOG2;
    752	default:
    753		break;
    754	}
    755	return -EINVAL;
    756}
    757
    758
    759static u32 calc_startup_ticks_9260(u32 startup_time, u32 adc_clk_khz)
    760{
    761	/*
    762	 * Number of ticks needed to cover the startup time of the ADC
    763	 * as defined in the electrical characteristics of the board,
    764	 * divided by 8. The formula thus is :
    765	 *   Startup Time = (ticks + 1) * 8 / ADC Clock
    766	 */
    767	return round_up((startup_time * adc_clk_khz / 1000) - 1, 8) / 8;
    768}
    769
    770static u32 calc_startup_ticks_9x5(u32 startup_time, u32 adc_clk_khz)
    771{
    772	/*
    773	 * For sama5d3x and at91sam9x5, the formula changes to:
    774	 * Startup Time = <lookup_table_value> / ADC Clock
    775	 */
    776	static const int startup_lookup[] = {
    777		0,   8,   16,  24,
    778		64,  80,  96,  112,
    779		512, 576, 640, 704,
    780		768, 832, 896, 960
    781		};
    782	int i, size = ARRAY_SIZE(startup_lookup);
    783	unsigned int ticks;
    784
    785	ticks = startup_time * adc_clk_khz / 1000;
    786	for (i = 0; i < size; i++)
    787		if (ticks < startup_lookup[i])
    788			break;
    789
    790	ticks = i;
    791	if (ticks == size)
    792		/* Reach the end of lookup table */
    793		ticks = size - 1;
    794
    795	return ticks;
    796}
    797
    798static int at91_adc_probe_dt_ts(struct device_node *node,
    799	struct at91_adc_state *st, struct device *dev)
    800{
    801	int ret;
    802	u32 prop;
    803
    804	ret = of_property_read_u32(node, "atmel,adc-ts-wires", &prop);
    805	if (ret) {
    806		dev_info(dev, "ADC Touch screen is disabled.\n");
    807		return 0;
    808	}
    809
    810	switch (prop) {
    811	case 4:
    812	case 5:
    813		st->touchscreen_type = prop;
    814		break;
    815	default:
    816		dev_err(dev, "Unsupported number of touchscreen wires (%d). Should be 4 or 5.\n", prop);
    817		return -EINVAL;
    818	}
    819
    820	if (!st->caps->has_tsmr)
    821		return 0;
    822	prop = 0;
    823	of_property_read_u32(node, "atmel,adc-ts-pressure-threshold", &prop);
    824	st->ts_pressure_threshold = prop;
    825	if (st->ts_pressure_threshold) {
    826		return 0;
    827	} else {
    828		dev_err(dev, "Invalid pressure threshold for the touchscreen\n");
    829		return -EINVAL;
    830	}
    831}
    832
    833static const struct iio_info at91_adc_info = {
    834	.read_raw = &at91_adc_read_raw,
    835};
    836
    837/* Touchscreen related functions */
    838static int atmel_ts_open(struct input_dev *dev)
    839{
    840	struct at91_adc_state *st = input_get_drvdata(dev);
    841
    842	if (st->caps->has_tsmr)
    843		at91_adc_writel(st, AT91_ADC_IER, AT91_ADC_IER_PEN);
    844	else
    845		at91_adc_writel(st, AT91_ADC_IER, AT91RL_ADC_IER_PEN);
    846	return 0;
    847}
    848
    849static void atmel_ts_close(struct input_dev *dev)
    850{
    851	struct at91_adc_state *st = input_get_drvdata(dev);
    852
    853	if (st->caps->has_tsmr)
    854		at91_adc_writel(st, AT91_ADC_IDR, AT91_ADC_IER_PEN);
    855	else
    856		at91_adc_writel(st, AT91_ADC_IDR, AT91RL_ADC_IER_PEN);
    857}
    858
    859static int at91_ts_hw_init(struct iio_dev *idev, u32 adc_clk_khz)
    860{
    861	struct at91_adc_state *st = iio_priv(idev);
    862	u32 reg = 0;
    863	u32 tssctim = 0;
    864	int i = 0;
    865
    866	/* a Pen Detect Debounce Time is necessary for the ADC Touch to avoid
    867	 * pen detect noise.
    868	 * The formula is : Pen Detect Debounce Time = (2 ^ pendbc) / ADCClock
    869	 */
    870	st->ts_pendbc = round_up(TOUCH_PEN_DETECT_DEBOUNCE_US * adc_clk_khz /
    871				 1000, 1);
    872
    873	while (st->ts_pendbc >> ++i)
    874		;	/* Empty! Find the shift offset */
    875	if (abs(st->ts_pendbc - (1 << i)) < abs(st->ts_pendbc - (1 << (i - 1))))
    876		st->ts_pendbc = i;
    877	else
    878		st->ts_pendbc = i - 1;
    879
    880	if (!st->caps->has_tsmr) {
    881		reg = at91_adc_readl(st, AT91_ADC_MR);
    882		reg |= AT91_ADC_TSAMOD_TS_ONLY_MODE | AT91_ADC_PENDET;
    883
    884		reg |= AT91_ADC_PENDBC_(st->ts_pendbc) & AT91_ADC_PENDBC;
    885		at91_adc_writel(st, AT91_ADC_MR, reg);
    886
    887		reg = AT91_ADC_TSR_SHTIM_(TOUCH_SHTIM) & AT91_ADC_TSR_SHTIM;
    888		at91_adc_writel(st, AT91_ADC_TSR, reg);
    889
    890		st->ts_sample_period_val = round_up((TOUCH_SAMPLE_PERIOD_US_RL *
    891						    adc_clk_khz / 1000) - 1, 1);
    892
    893		return 0;
    894	}
    895
    896	/* Touchscreen Switches Closure time needed for allowing the value to
    897	 * stabilize.
    898	 * Switch Closure Time = (TSSCTIM * 4) ADCClock periods
    899	 */
    900	tssctim = DIV_ROUND_UP(TOUCH_SCTIM_US * adc_clk_khz / 1000, 4);
    901	dev_dbg(&idev->dev, "adc_clk at: %d KHz, tssctim at: %d\n",
    902		adc_clk_khz, tssctim);
    903
    904	if (st->touchscreen_type == ATMEL_ADC_TOUCHSCREEN_4WIRE)
    905		reg = AT91_ADC_TSMR_TSMODE_4WIRE_PRESS;
    906	else
    907		reg = AT91_ADC_TSMR_TSMODE_5WIRE;
    908
    909	reg |= AT91_ADC_TSMR_SCTIM_(tssctim) & AT91_ADC_TSMR_SCTIM;
    910	reg |= AT91_ADC_TSMR_TSAV_(st->caps->ts_filter_average)
    911	       & AT91_ADC_TSMR_TSAV;
    912	reg |= AT91_ADC_TSMR_PENDBC_(st->ts_pendbc) & AT91_ADC_TSMR_PENDBC;
    913	reg |= AT91_ADC_TSMR_NOTSDMA;
    914	reg |= AT91_ADC_TSMR_PENDET_ENA;
    915	reg |= 0x03 << 8;	/* TSFREQ, needs to be bigger than TSAV */
    916
    917	at91_adc_writel(st, AT91_ADC_TSMR, reg);
    918
    919	/* Change adc internal resistor value for better pen detection,
    920	 * default value is 100 kOhm.
    921	 * 0 = 200 kOhm, 1 = 150 kOhm, 2 = 100 kOhm, 3 = 50 kOhm
    922	 * option only available on ES2 and higher
    923	 */
    924	at91_adc_writel(st, AT91_ADC_ACR, st->caps->ts_pen_detect_sensitivity
    925			& AT91_ADC_ACR_PENDETSENS);
    926
    927	/* Sample Period Time = (TRGPER + 1) / ADCClock */
    928	st->ts_sample_period_val = round_up((TOUCH_SAMPLE_PERIOD_US *
    929			adc_clk_khz / 1000) - 1, 1);
    930
    931	return 0;
    932}
    933
    934static int at91_ts_register(struct iio_dev *idev,
    935		struct platform_device *pdev)
    936{
    937	struct at91_adc_state *st = iio_priv(idev);
    938	struct input_dev *input;
    939	int ret;
    940
    941	input = input_allocate_device();
    942	if (!input) {
    943		dev_err(&idev->dev, "Failed to allocate TS device!\n");
    944		return -ENOMEM;
    945	}
    946
    947	input->name = DRIVER_NAME;
    948	input->id.bustype = BUS_HOST;
    949	input->dev.parent = &pdev->dev;
    950	input->open = atmel_ts_open;
    951	input->close = atmel_ts_close;
    952
    953	__set_bit(EV_ABS, input->evbit);
    954	__set_bit(EV_KEY, input->evbit);
    955	__set_bit(BTN_TOUCH, input->keybit);
    956	if (st->caps->has_tsmr) {
    957		input_set_abs_params(input, ABS_X, 0, (1 << MAX_POS_BITS) - 1,
    958				     0, 0);
    959		input_set_abs_params(input, ABS_Y, 0, (1 << MAX_POS_BITS) - 1,
    960				     0, 0);
    961		input_set_abs_params(input, ABS_PRESSURE, 0, 0xffffff, 0, 0);
    962	} else {
    963		if (st->touchscreen_type != ATMEL_ADC_TOUCHSCREEN_4WIRE) {
    964			dev_err(&pdev->dev,
    965				"This touchscreen controller only support 4 wires\n");
    966			ret = -EINVAL;
    967			goto err;
    968		}
    969
    970		input_set_abs_params(input, ABS_X, 0, (1 << MAX_RLPOS_BITS) - 1,
    971				     0, 0);
    972		input_set_abs_params(input, ABS_Y, 0, (1 << MAX_RLPOS_BITS) - 1,
    973				     0, 0);
    974	}
    975
    976	st->ts_input = input;
    977	input_set_drvdata(input, st);
    978
    979	ret = input_register_device(input);
    980	if (ret)
    981		goto err;
    982
    983	return ret;
    984
    985err:
    986	input_free_device(st->ts_input);
    987	return ret;
    988}
    989
    990static void at91_ts_unregister(struct at91_adc_state *st)
    991{
    992	input_unregister_device(st->ts_input);
    993}
    994
    995static int at91_adc_probe(struct platform_device *pdev)
    996{
    997	unsigned int prsc, mstrclk, ticks, adc_clk, adc_clk_khz, shtim;
    998	struct device_node *node = pdev->dev.of_node;
    999	int ret;
   1000	struct iio_dev *idev;
   1001	struct at91_adc_state *st;
   1002	u32 reg, prop;
   1003	char *s;
   1004
   1005	idev = devm_iio_device_alloc(&pdev->dev, sizeof(struct at91_adc_state));
   1006	if (!idev)
   1007		return -ENOMEM;
   1008
   1009	st = iio_priv(idev);
   1010
   1011	st->caps = of_device_get_match_data(&pdev->dev);
   1012
   1013	st->use_external = of_property_read_bool(node, "atmel,adc-use-external-triggers");
   1014
   1015	if (of_property_read_u32(node, "atmel,adc-channels-used", &prop)) {
   1016		dev_err(&idev->dev, "Missing adc-channels-used property in the DT.\n");
   1017		return -EINVAL;
   1018	}
   1019	st->channels_mask = prop;
   1020
   1021	st->sleep_mode = of_property_read_bool(node, "atmel,adc-sleep-mode");
   1022
   1023	if (of_property_read_u32(node, "atmel,adc-startup-time", &prop)) {
   1024		dev_err(&idev->dev, "Missing adc-startup-time property in the DT.\n");
   1025		return -EINVAL;
   1026	}
   1027	st->startup_time = prop;
   1028
   1029	prop = 0;
   1030	of_property_read_u32(node, "atmel,adc-sample-hold-time", &prop);
   1031	st->sample_hold_time = prop;
   1032
   1033	if (of_property_read_u32(node, "atmel,adc-vref", &prop)) {
   1034		dev_err(&idev->dev, "Missing adc-vref property in the DT.\n");
   1035		return -EINVAL;
   1036	}
   1037	st->vref_mv = prop;
   1038
   1039	st->res = st->caps->high_res_bits;
   1040	if (st->caps->low_res_bits &&
   1041	    !of_property_read_string(node, "atmel,adc-use-res", (const char **)&s)
   1042	    && !strcmp(s, "lowres"))
   1043		st->res = st->caps->low_res_bits;
   1044
   1045	dev_info(&idev->dev, "Resolution used: %u bits\n", st->res);
   1046
   1047	st->registers = &st->caps->registers;
   1048	st->num_channels = st->caps->num_channels;
   1049
   1050	/* Check if touchscreen is supported. */
   1051	if (st->caps->has_ts) {
   1052		ret = at91_adc_probe_dt_ts(node, st, &idev->dev);
   1053		if (ret)
   1054			return ret;
   1055	}
   1056
   1057	platform_set_drvdata(pdev, idev);
   1058
   1059	idev->name = dev_name(&pdev->dev);
   1060	idev->modes = INDIO_DIRECT_MODE;
   1061	idev->info = &at91_adc_info;
   1062
   1063	st->irq = platform_get_irq(pdev, 0);
   1064	if (st->irq < 0)
   1065		return -ENODEV;
   1066
   1067	st->reg_base = devm_platform_ioremap_resource(pdev, 0);
   1068	if (IS_ERR(st->reg_base))
   1069		return PTR_ERR(st->reg_base);
   1070
   1071
   1072	/*
   1073	 * Disable all IRQs before setting up the handler
   1074	 */
   1075	at91_adc_writel(st, AT91_ADC_CR, AT91_ADC_SWRST);
   1076	at91_adc_writel(st, AT91_ADC_IDR, 0xFFFFFFFF);
   1077
   1078	if (st->caps->has_tsmr)
   1079		ret = request_irq(st->irq, at91_adc_9x5_interrupt, 0,
   1080				  pdev->dev.driver->name, idev);
   1081	else
   1082		ret = request_irq(st->irq, at91_adc_rl_interrupt, 0,
   1083				  pdev->dev.driver->name, idev);
   1084	if (ret) {
   1085		dev_err(&pdev->dev, "Failed to allocate IRQ.\n");
   1086		return ret;
   1087	}
   1088
   1089	st->clk = devm_clk_get(&pdev->dev, "adc_clk");
   1090	if (IS_ERR(st->clk)) {
   1091		dev_err(&pdev->dev, "Failed to get the clock.\n");
   1092		ret = PTR_ERR(st->clk);
   1093		goto error_free_irq;
   1094	}
   1095
   1096	ret = clk_prepare_enable(st->clk);
   1097	if (ret) {
   1098		dev_err(&pdev->dev,
   1099			"Could not prepare or enable the clock.\n");
   1100		goto error_free_irq;
   1101	}
   1102
   1103	st->adc_clk = devm_clk_get(&pdev->dev, "adc_op_clk");
   1104	if (IS_ERR(st->adc_clk)) {
   1105		dev_err(&pdev->dev, "Failed to get the ADC clock.\n");
   1106		ret = PTR_ERR(st->adc_clk);
   1107		goto error_disable_clk;
   1108	}
   1109
   1110	ret = clk_prepare_enable(st->adc_clk);
   1111	if (ret) {
   1112		dev_err(&pdev->dev,
   1113			"Could not prepare or enable the ADC clock.\n");
   1114		goto error_disable_clk;
   1115	}
   1116
   1117	/*
   1118	 * Prescaler rate computation using the formula from the Atmel's
   1119	 * datasheet : ADC Clock = MCK / ((Prescaler + 1) * 2), ADC Clock being
   1120	 * specified by the electrical characteristics of the board.
   1121	 */
   1122	mstrclk = clk_get_rate(st->clk);
   1123	adc_clk = clk_get_rate(st->adc_clk);
   1124	adc_clk_khz = adc_clk / 1000;
   1125
   1126	dev_dbg(&pdev->dev, "Master clock is set as: %d Hz, adc_clk should set as: %d Hz\n",
   1127		mstrclk, adc_clk);
   1128
   1129	prsc = (mstrclk / (2 * adc_clk)) - 1;
   1130
   1131	if (!st->startup_time) {
   1132		dev_err(&pdev->dev, "No startup time available.\n");
   1133		ret = -EINVAL;
   1134		goto error_disable_adc_clk;
   1135	}
   1136	ticks = (*st->caps->calc_startup_ticks)(st->startup_time, adc_clk_khz);
   1137
   1138	/*
   1139	 * a minimal Sample and Hold Time is necessary for the ADC to guarantee
   1140	 * the best converted final value between two channels selection
   1141	 * The formula thus is : Sample and Hold Time = (shtim + 1) / ADCClock
   1142	 */
   1143	if (st->sample_hold_time > 0)
   1144		shtim = round_up((st->sample_hold_time * adc_clk_khz / 1000)
   1145				 - 1, 1);
   1146	else
   1147		shtim = 0;
   1148
   1149	reg = AT91_ADC_PRESCAL_(prsc) & st->registers->mr_prescal_mask;
   1150	reg |= AT91_ADC_STARTUP_(ticks) & st->registers->mr_startup_mask;
   1151	if (st->res == st->caps->low_res_bits)
   1152		reg |= AT91_ADC_LOWRES;
   1153	if (st->sleep_mode)
   1154		reg |= AT91_ADC_SLEEP;
   1155	reg |= AT91_ADC_SHTIM_(shtim) & AT91_ADC_SHTIM;
   1156	at91_adc_writel(st, AT91_ADC_MR, reg);
   1157
   1158	/* Setup the ADC channels available on the board */
   1159	ret = at91_adc_channel_init(idev);
   1160	if (ret < 0) {
   1161		dev_err(&pdev->dev, "Couldn't initialize the channels.\n");
   1162		goto error_disable_adc_clk;
   1163	}
   1164
   1165	init_waitqueue_head(&st->wq_data_avail);
   1166	mutex_init(&st->lock);
   1167
   1168	/*
   1169	 * Since touch screen will set trigger register as period trigger. So
   1170	 * when touch screen is enabled, then we have to disable hardware
   1171	 * trigger for classic adc.
   1172	 */
   1173	if (!st->touchscreen_type) {
   1174		ret = at91_adc_buffer_init(idev);
   1175		if (ret < 0) {
   1176			dev_err(&pdev->dev, "Couldn't initialize the buffer.\n");
   1177			goto error_disable_adc_clk;
   1178		}
   1179
   1180		ret = at91_adc_trigger_init(idev);
   1181		if (ret < 0) {
   1182			dev_err(&pdev->dev, "Couldn't setup the triggers.\n");
   1183			at91_adc_buffer_remove(idev);
   1184			goto error_disable_adc_clk;
   1185		}
   1186	} else {
   1187		ret = at91_ts_register(idev, pdev);
   1188		if (ret)
   1189			goto error_disable_adc_clk;
   1190
   1191		at91_ts_hw_init(idev, adc_clk_khz);
   1192	}
   1193
   1194	ret = iio_device_register(idev);
   1195	if (ret < 0) {
   1196		dev_err(&pdev->dev, "Couldn't register the device.\n");
   1197		goto error_iio_device_register;
   1198	}
   1199
   1200	return 0;
   1201
   1202error_iio_device_register:
   1203	if (!st->touchscreen_type) {
   1204		at91_adc_trigger_remove(idev);
   1205		at91_adc_buffer_remove(idev);
   1206	} else {
   1207		at91_ts_unregister(st);
   1208	}
   1209error_disable_adc_clk:
   1210	clk_disable_unprepare(st->adc_clk);
   1211error_disable_clk:
   1212	clk_disable_unprepare(st->clk);
   1213error_free_irq:
   1214	free_irq(st->irq, idev);
   1215	return ret;
   1216}
   1217
   1218static int at91_adc_remove(struct platform_device *pdev)
   1219{
   1220	struct iio_dev *idev = platform_get_drvdata(pdev);
   1221	struct at91_adc_state *st = iio_priv(idev);
   1222
   1223	iio_device_unregister(idev);
   1224	if (!st->touchscreen_type) {
   1225		at91_adc_trigger_remove(idev);
   1226		at91_adc_buffer_remove(idev);
   1227	} else {
   1228		at91_ts_unregister(st);
   1229	}
   1230	clk_disable_unprepare(st->adc_clk);
   1231	clk_disable_unprepare(st->clk);
   1232	free_irq(st->irq, idev);
   1233
   1234	return 0;
   1235}
   1236
   1237static int at91_adc_suspend(struct device *dev)
   1238{
   1239	struct iio_dev *idev = dev_get_drvdata(dev);
   1240	struct at91_adc_state *st = iio_priv(idev);
   1241
   1242	pinctrl_pm_select_sleep_state(dev);
   1243	clk_disable_unprepare(st->clk);
   1244
   1245	return 0;
   1246}
   1247
   1248static int at91_adc_resume(struct device *dev)
   1249{
   1250	struct iio_dev *idev = dev_get_drvdata(dev);
   1251	struct at91_adc_state *st = iio_priv(idev);
   1252
   1253	clk_prepare_enable(st->clk);
   1254	pinctrl_pm_select_default_state(dev);
   1255
   1256	return 0;
   1257}
   1258
   1259static DEFINE_SIMPLE_DEV_PM_OPS(at91_adc_pm_ops, at91_adc_suspend,
   1260				at91_adc_resume);
   1261
   1262static const struct at91_adc_trigger at91sam9260_triggers[] = {
   1263	{ .name = "timer-counter-0", .value = 0x1 },
   1264	{ .name = "timer-counter-1", .value = 0x3 },
   1265	{ .name = "timer-counter-2", .value = 0x5 },
   1266	{ .name = "external", .value = 0xd, .is_external = true },
   1267};
   1268
   1269static struct at91_adc_caps at91sam9260_caps = {
   1270	.calc_startup_ticks = calc_startup_ticks_9260,
   1271	.num_channels = 4,
   1272	.low_res_bits = 8,
   1273	.high_res_bits = 10,
   1274	.registers = {
   1275		.channel_base = AT91_ADC_CHR(0),
   1276		.drdy_mask = AT91_ADC_DRDY,
   1277		.status_register = AT91_ADC_SR,
   1278		.trigger_register = AT91_ADC_TRGR_9260,
   1279		.mr_prescal_mask = AT91_ADC_PRESCAL_9260,
   1280		.mr_startup_mask = AT91_ADC_STARTUP_9260,
   1281	},
   1282	.triggers = at91sam9260_triggers,
   1283	.trigger_number = ARRAY_SIZE(at91sam9260_triggers),
   1284};
   1285
   1286static const struct at91_adc_trigger at91sam9x5_triggers[] = {
   1287	{ .name = "external-rising", .value = 0x1, .is_external = true },
   1288	{ .name = "external-falling", .value = 0x2, .is_external = true },
   1289	{ .name = "external-any", .value = 0x3, .is_external = true },
   1290	{ .name = "continuous", .value = 0x6 },
   1291};
   1292
   1293static struct at91_adc_caps at91sam9rl_caps = {
   1294	.has_ts = true,
   1295	.calc_startup_ticks = calc_startup_ticks_9260,	/* same as 9260 */
   1296	.num_channels = 6,
   1297	.low_res_bits = 8,
   1298	.high_res_bits = 10,
   1299	.registers = {
   1300		.channel_base = AT91_ADC_CHR(0),
   1301		.drdy_mask = AT91_ADC_DRDY,
   1302		.status_register = AT91_ADC_SR,
   1303		.trigger_register = AT91_ADC_TRGR_9G45,
   1304		.mr_prescal_mask = AT91_ADC_PRESCAL_9260,
   1305		.mr_startup_mask = AT91_ADC_STARTUP_9G45,
   1306	},
   1307	.triggers = at91sam9x5_triggers,
   1308	.trigger_number = ARRAY_SIZE(at91sam9x5_triggers),
   1309};
   1310
   1311static struct at91_adc_caps at91sam9g45_caps = {
   1312	.has_ts = true,
   1313	.calc_startup_ticks = calc_startup_ticks_9260,	/* same as 9260 */
   1314	.num_channels = 8,
   1315	.low_res_bits = 8,
   1316	.high_res_bits = 10,
   1317	.registers = {
   1318		.channel_base = AT91_ADC_CHR(0),
   1319		.drdy_mask = AT91_ADC_DRDY,
   1320		.status_register = AT91_ADC_SR,
   1321		.trigger_register = AT91_ADC_TRGR_9G45,
   1322		.mr_prescal_mask = AT91_ADC_PRESCAL_9G45,
   1323		.mr_startup_mask = AT91_ADC_STARTUP_9G45,
   1324	},
   1325	.triggers = at91sam9x5_triggers,
   1326	.trigger_number = ARRAY_SIZE(at91sam9x5_triggers),
   1327};
   1328
   1329static struct at91_adc_caps at91sam9x5_caps = {
   1330	.has_ts = true,
   1331	.has_tsmr = true,
   1332	.ts_filter_average = 3,
   1333	.ts_pen_detect_sensitivity = 2,
   1334	.calc_startup_ticks = calc_startup_ticks_9x5,
   1335	.num_channels = 12,
   1336	.low_res_bits = 8,
   1337	.high_res_bits = 10,
   1338	.registers = {
   1339		.channel_base = AT91_ADC_CDR0_9X5,
   1340		.drdy_mask = AT91_ADC_SR_DRDY_9X5,
   1341		.status_register = AT91_ADC_SR_9X5,
   1342		.trigger_register = AT91_ADC_TRGR_9X5,
   1343		/* prescal mask is same as 9G45 */
   1344		.mr_prescal_mask = AT91_ADC_PRESCAL_9G45,
   1345		.mr_startup_mask = AT91_ADC_STARTUP_9X5,
   1346	},
   1347	.triggers = at91sam9x5_triggers,
   1348	.trigger_number = ARRAY_SIZE(at91sam9x5_triggers),
   1349};
   1350
   1351static struct at91_adc_caps sama5d3_caps = {
   1352	.has_ts = true,
   1353	.has_tsmr = true,
   1354	.ts_filter_average = 3,
   1355	.ts_pen_detect_sensitivity = 2,
   1356	.calc_startup_ticks = calc_startup_ticks_9x5,
   1357	.num_channels = 12,
   1358	.low_res_bits = 0,
   1359	.high_res_bits = 12,
   1360	.registers = {
   1361		.channel_base = AT91_ADC_CDR0_9X5,
   1362		.drdy_mask = AT91_ADC_SR_DRDY_9X5,
   1363		.status_register = AT91_ADC_SR_9X5,
   1364		.trigger_register = AT91_ADC_TRGR_9X5,
   1365		.mr_prescal_mask = AT91_ADC_PRESCAL_9G45,
   1366		.mr_startup_mask = AT91_ADC_STARTUP_9X5,
   1367	},
   1368	.triggers = at91sam9x5_triggers,
   1369	.trigger_number = ARRAY_SIZE(at91sam9x5_triggers),
   1370};
   1371
   1372static const struct of_device_id at91_adc_dt_ids[] = {
   1373	{ .compatible = "atmel,at91sam9260-adc", .data = &at91sam9260_caps },
   1374	{ .compatible = "atmel,at91sam9rl-adc", .data = &at91sam9rl_caps },
   1375	{ .compatible = "atmel,at91sam9g45-adc", .data = &at91sam9g45_caps },
   1376	{ .compatible = "atmel,at91sam9x5-adc", .data = &at91sam9x5_caps },
   1377	{ .compatible = "atmel,sama5d3-adc", .data = &sama5d3_caps },
   1378	{},
   1379};
   1380MODULE_DEVICE_TABLE(of, at91_adc_dt_ids);
   1381
   1382static struct platform_driver at91_adc_driver = {
   1383	.probe = at91_adc_probe,
   1384	.remove = at91_adc_remove,
   1385	.driver = {
   1386		   .name = DRIVER_NAME,
   1387		   .of_match_table = at91_adc_dt_ids,
   1388		   .pm = pm_sleep_ptr(&at91_adc_pm_ops),
   1389	},
   1390};
   1391
   1392module_platform_driver(at91_adc_driver);
   1393
   1394MODULE_LICENSE("GPL");
   1395MODULE_DESCRIPTION("Atmel AT91 ADC Driver");
   1396MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com>");