xref: /openbmc/linux/drivers/spi/spi-ep93xx.c (revision ca632f55)
1 /*
2  * Driver for Cirrus Logic EP93xx SPI controller.
3  *
4  * Copyright (c) 2010 Mika Westerberg
5  *
6  * Explicit FIFO handling code was inspired by amba-pl022 driver.
7  *
8  * Chip select support using other than built-in GPIOs by H. Hartley Sweeten.
9  *
10  * For more information about the SPI controller see documentation on Cirrus
11  * Logic web site:
12  *     http://www.cirrus.com/en/pubs/manual/EP93xx_Users_Guide_UM1.pdf
13  *
14  * This program is free software; you can redistribute it and/or modify
15  * it under the terms of the GNU General Public License version 2 as
16  * published by the Free Software Foundation.
17  */
18 
19 #include <linux/io.h>
20 #include <linux/clk.h>
21 #include <linux/err.h>
22 #include <linux/delay.h>
23 #include <linux/device.h>
24 #include <linux/bitops.h>
25 #include <linux/interrupt.h>
26 #include <linux/platform_device.h>
27 #include <linux/workqueue.h>
28 #include <linux/sched.h>
29 #include <linux/spi/spi.h>
30 
31 #include <mach/ep93xx_spi.h>
32 
33 #define SSPCR0			0x0000
34 #define SSPCR0_MODE_SHIFT	6
35 #define SSPCR0_SCR_SHIFT	8
36 
37 #define SSPCR1			0x0004
38 #define SSPCR1_RIE		BIT(0)
39 #define SSPCR1_TIE		BIT(1)
40 #define SSPCR1_RORIE		BIT(2)
41 #define SSPCR1_LBM		BIT(3)
42 #define SSPCR1_SSE		BIT(4)
43 #define SSPCR1_MS		BIT(5)
44 #define SSPCR1_SOD		BIT(6)
45 
46 #define SSPDR			0x0008
47 
48 #define SSPSR			0x000c
49 #define SSPSR_TFE		BIT(0)
50 #define SSPSR_TNF		BIT(1)
51 #define SSPSR_RNE		BIT(2)
52 #define SSPSR_RFF		BIT(3)
53 #define SSPSR_BSY		BIT(4)
54 #define SSPCPSR			0x0010
55 
56 #define SSPIIR			0x0014
57 #define SSPIIR_RIS		BIT(0)
58 #define SSPIIR_TIS		BIT(1)
59 #define SSPIIR_RORIS		BIT(2)
60 #define SSPICR			SSPIIR
61 
62 /* timeout in milliseconds */
63 #define SPI_TIMEOUT		5
64 /* maximum depth of RX/TX FIFO */
65 #define SPI_FIFO_SIZE		8
66 
67 /**
68  * struct ep93xx_spi - EP93xx SPI controller structure
69  * @lock: spinlock that protects concurrent accesses to fields @running,
70  *        @current_msg and @msg_queue
71  * @pdev: pointer to platform device
72  * @clk: clock for the controller
73  * @regs_base: pointer to ioremap()'d registers
74  * @irq: IRQ number used by the driver
75  * @min_rate: minimum clock rate (in Hz) supported by the controller
76  * @max_rate: maximum clock rate (in Hz) supported by the controller
77  * @running: is the queue running
78  * @wq: workqueue used by the driver
79  * @msg_work: work that is queued for the driver
80  * @wait: wait here until given transfer is completed
81  * @msg_queue: queue for the messages
82  * @current_msg: message that is currently processed (or %NULL if none)
83  * @tx: current byte in transfer to transmit
84  * @rx: current byte in transfer to receive
85  * @fifo_level: how full is FIFO (%0..%SPI_FIFO_SIZE - %1). Receiving one
86  *              frame decreases this level and sending one frame increases it.
87  *
88  * This structure holds EP93xx SPI controller specific information. When
89  * @running is %true, driver accepts transfer requests from protocol drivers.
90  * @current_msg is used to hold pointer to the message that is currently
91  * processed. If @current_msg is %NULL, it means that no processing is going
92  * on.
93  *
94  * Most of the fields are only written once and they can be accessed without
95  * taking the @lock. Fields that are accessed concurrently are: @current_msg,
96  * @running, and @msg_queue.
97  */
98 struct ep93xx_spi {
99 	spinlock_t			lock;
100 	const struct platform_device	*pdev;
101 	struct clk			*clk;
102 	void __iomem			*regs_base;
103 	int				irq;
104 	unsigned long			min_rate;
105 	unsigned long			max_rate;
106 	bool				running;
107 	struct workqueue_struct		*wq;
108 	struct work_struct		msg_work;
109 	struct completion		wait;
110 	struct list_head		msg_queue;
111 	struct spi_message		*current_msg;
112 	size_t				tx;
113 	size_t				rx;
114 	size_t				fifo_level;
115 };
116 
117 /**
118  * struct ep93xx_spi_chip - SPI device hardware settings
119  * @spi: back pointer to the SPI device
120  * @rate: max rate in hz this chip supports
121  * @div_cpsr: cpsr (pre-scaler) divider
122  * @div_scr: scr divider
123  * @dss: bits per word (4 - 16 bits)
124  * @ops: private chip operations
125  *
126  * This structure is used to store hardware register specific settings for each
127  * SPI device. Settings are written to hardware by function
128  * ep93xx_spi_chip_setup().
129  */
130 struct ep93xx_spi_chip {
131 	const struct spi_device		*spi;
132 	unsigned long			rate;
133 	u8				div_cpsr;
134 	u8				div_scr;
135 	u8				dss;
136 	struct ep93xx_spi_chip_ops	*ops;
137 };
138 
139 /* converts bits per word to CR0.DSS value */
140 #define bits_per_word_to_dss(bpw)	((bpw) - 1)
141 
142 static inline void
143 ep93xx_spi_write_u8(const struct ep93xx_spi *espi, u16 reg, u8 value)
144 {
145 	__raw_writeb(value, espi->regs_base + reg);
146 }
147 
148 static inline u8
149 ep93xx_spi_read_u8(const struct ep93xx_spi *spi, u16 reg)
150 {
151 	return __raw_readb(spi->regs_base + reg);
152 }
153 
154 static inline void
155 ep93xx_spi_write_u16(const struct ep93xx_spi *espi, u16 reg, u16 value)
156 {
157 	__raw_writew(value, espi->regs_base + reg);
158 }
159 
160 static inline u16
161 ep93xx_spi_read_u16(const struct ep93xx_spi *spi, u16 reg)
162 {
163 	return __raw_readw(spi->regs_base + reg);
164 }
165 
166 static int ep93xx_spi_enable(const struct ep93xx_spi *espi)
167 {
168 	u8 regval;
169 	int err;
170 
171 	err = clk_enable(espi->clk);
172 	if (err)
173 		return err;
174 
175 	regval = ep93xx_spi_read_u8(espi, SSPCR1);
176 	regval |= SSPCR1_SSE;
177 	ep93xx_spi_write_u8(espi, SSPCR1, regval);
178 
179 	return 0;
180 }
181 
182 static void ep93xx_spi_disable(const struct ep93xx_spi *espi)
183 {
184 	u8 regval;
185 
186 	regval = ep93xx_spi_read_u8(espi, SSPCR1);
187 	regval &= ~SSPCR1_SSE;
188 	ep93xx_spi_write_u8(espi, SSPCR1, regval);
189 
190 	clk_disable(espi->clk);
191 }
192 
193 static void ep93xx_spi_enable_interrupts(const struct ep93xx_spi *espi)
194 {
195 	u8 regval;
196 
197 	regval = ep93xx_spi_read_u8(espi, SSPCR1);
198 	regval |= (SSPCR1_RORIE | SSPCR1_TIE | SSPCR1_RIE);
199 	ep93xx_spi_write_u8(espi, SSPCR1, regval);
200 }
201 
202 static void ep93xx_spi_disable_interrupts(const struct ep93xx_spi *espi)
203 {
204 	u8 regval;
205 
206 	regval = ep93xx_spi_read_u8(espi, SSPCR1);
207 	regval &= ~(SSPCR1_RORIE | SSPCR1_TIE | SSPCR1_RIE);
208 	ep93xx_spi_write_u8(espi, SSPCR1, regval);
209 }
210 
211 /**
212  * ep93xx_spi_calc_divisors() - calculates SPI clock divisors
213  * @espi: ep93xx SPI controller struct
214  * @chip: divisors are calculated for this chip
215  * @rate: desired SPI output clock rate
216  *
217  * Function calculates cpsr (clock pre-scaler) and scr divisors based on
218  * given @rate and places them to @chip->div_cpsr and @chip->div_scr. If,
219  * for some reason, divisors cannot be calculated nothing is stored and
220  * %-EINVAL is returned.
221  */
222 static int ep93xx_spi_calc_divisors(const struct ep93xx_spi *espi,
223 				    struct ep93xx_spi_chip *chip,
224 				    unsigned long rate)
225 {
226 	unsigned long spi_clk_rate = clk_get_rate(espi->clk);
227 	int cpsr, scr;
228 
229 	/*
230 	 * Make sure that max value is between values supported by the
231 	 * controller. Note that minimum value is already checked in
232 	 * ep93xx_spi_transfer().
233 	 */
234 	rate = clamp(rate, espi->min_rate, espi->max_rate);
235 
236 	/*
237 	 * Calculate divisors so that we can get speed according the
238 	 * following formula:
239 	 *	rate = spi_clock_rate / (cpsr * (1 + scr))
240 	 *
241 	 * cpsr must be even number and starts from 2, scr can be any number
242 	 * between 0 and 255.
243 	 */
244 	for (cpsr = 2; cpsr <= 254; cpsr += 2) {
245 		for (scr = 0; scr <= 255; scr++) {
246 			if ((spi_clk_rate / (cpsr * (scr + 1))) <= rate) {
247 				chip->div_scr = (u8)scr;
248 				chip->div_cpsr = (u8)cpsr;
249 				return 0;
250 			}
251 		}
252 	}
253 
254 	return -EINVAL;
255 }
256 
257 static void ep93xx_spi_cs_control(struct spi_device *spi, bool control)
258 {
259 	struct ep93xx_spi_chip *chip = spi_get_ctldata(spi);
260 	int value = (spi->mode & SPI_CS_HIGH) ? control : !control;
261 
262 	if (chip->ops && chip->ops->cs_control)
263 		chip->ops->cs_control(spi, value);
264 }
265 
266 /**
267  * ep93xx_spi_setup() - setup an SPI device
268  * @spi: SPI device to setup
269  *
270  * This function sets up SPI device mode, speed etc. Can be called multiple
271  * times for a single device. Returns %0 in case of success, negative error in
272  * case of failure. When this function returns success, the device is
273  * deselected.
274  */
275 static int ep93xx_spi_setup(struct spi_device *spi)
276 {
277 	struct ep93xx_spi *espi = spi_master_get_devdata(spi->master);
278 	struct ep93xx_spi_chip *chip;
279 
280 	if (spi->bits_per_word < 4 || spi->bits_per_word > 16) {
281 		dev_err(&espi->pdev->dev, "invalid bits per word %d\n",
282 			spi->bits_per_word);
283 		return -EINVAL;
284 	}
285 
286 	chip = spi_get_ctldata(spi);
287 	if (!chip) {
288 		dev_dbg(&espi->pdev->dev, "initial setup for %s\n",
289 			spi->modalias);
290 
291 		chip = kzalloc(sizeof(*chip), GFP_KERNEL);
292 		if (!chip)
293 			return -ENOMEM;
294 
295 		chip->spi = spi;
296 		chip->ops = spi->controller_data;
297 
298 		if (chip->ops && chip->ops->setup) {
299 			int ret = chip->ops->setup(spi);
300 			if (ret) {
301 				kfree(chip);
302 				return ret;
303 			}
304 		}
305 
306 		spi_set_ctldata(spi, chip);
307 	}
308 
309 	if (spi->max_speed_hz != chip->rate) {
310 		int err;
311 
312 		err = ep93xx_spi_calc_divisors(espi, chip, spi->max_speed_hz);
313 		if (err != 0) {
314 			spi_set_ctldata(spi, NULL);
315 			kfree(chip);
316 			return err;
317 		}
318 		chip->rate = spi->max_speed_hz;
319 	}
320 
321 	chip->dss = bits_per_word_to_dss(spi->bits_per_word);
322 
323 	ep93xx_spi_cs_control(spi, false);
324 	return 0;
325 }
326 
327 /**
328  * ep93xx_spi_transfer() - queue message to be transferred
329  * @spi: target SPI device
330  * @msg: message to be transferred
331  *
332  * This function is called by SPI device drivers when they are going to transfer
333  * a new message. It simply puts the message in the queue and schedules
334  * workqueue to perform the actual transfer later on.
335  *
336  * Returns %0 on success and negative error in case of failure.
337  */
338 static int ep93xx_spi_transfer(struct spi_device *spi, struct spi_message *msg)
339 {
340 	struct ep93xx_spi *espi = spi_master_get_devdata(spi->master);
341 	struct spi_transfer *t;
342 	unsigned long flags;
343 
344 	if (!msg || !msg->complete)
345 		return -EINVAL;
346 
347 	/* first validate each transfer */
348 	list_for_each_entry(t, &msg->transfers, transfer_list) {
349 		if (t->bits_per_word) {
350 			if (t->bits_per_word < 4 || t->bits_per_word > 16)
351 				return -EINVAL;
352 		}
353 		if (t->speed_hz && t->speed_hz < espi->min_rate)
354 				return -EINVAL;
355 	}
356 
357 	/*
358 	 * Now that we own the message, let's initialize it so that it is
359 	 * suitable for us. We use @msg->status to signal whether there was
360 	 * error in transfer and @msg->state is used to hold pointer to the
361 	 * current transfer (or %NULL if no active current transfer).
362 	 */
363 	msg->state = NULL;
364 	msg->status = 0;
365 	msg->actual_length = 0;
366 
367 	spin_lock_irqsave(&espi->lock, flags);
368 	if (!espi->running) {
369 		spin_unlock_irqrestore(&espi->lock, flags);
370 		return -ESHUTDOWN;
371 	}
372 	list_add_tail(&msg->queue, &espi->msg_queue);
373 	queue_work(espi->wq, &espi->msg_work);
374 	spin_unlock_irqrestore(&espi->lock, flags);
375 
376 	return 0;
377 }
378 
379 /**
380  * ep93xx_spi_cleanup() - cleans up master controller specific state
381  * @spi: SPI device to cleanup
382  *
383  * This function releases master controller specific state for given @spi
384  * device.
385  */
386 static void ep93xx_spi_cleanup(struct spi_device *spi)
387 {
388 	struct ep93xx_spi_chip *chip;
389 
390 	chip = spi_get_ctldata(spi);
391 	if (chip) {
392 		if (chip->ops && chip->ops->cleanup)
393 			chip->ops->cleanup(spi);
394 		spi_set_ctldata(spi, NULL);
395 		kfree(chip);
396 	}
397 }
398 
399 /**
400  * ep93xx_spi_chip_setup() - configures hardware according to given @chip
401  * @espi: ep93xx SPI controller struct
402  * @chip: chip specific settings
403  *
404  * This function sets up the actual hardware registers with settings given in
405  * @chip. Note that no validation is done so make sure that callers validate
406  * settings before calling this.
407  */
408 static void ep93xx_spi_chip_setup(const struct ep93xx_spi *espi,
409 				  const struct ep93xx_spi_chip *chip)
410 {
411 	u16 cr0;
412 
413 	cr0 = chip->div_scr << SSPCR0_SCR_SHIFT;
414 	cr0 |= (chip->spi->mode & (SPI_CPHA|SPI_CPOL)) << SSPCR0_MODE_SHIFT;
415 	cr0 |= chip->dss;
416 
417 	dev_dbg(&espi->pdev->dev, "setup: mode %d, cpsr %d, scr %d, dss %d\n",
418 		chip->spi->mode, chip->div_cpsr, chip->div_scr, chip->dss);
419 	dev_dbg(&espi->pdev->dev, "setup: cr0 %#x", cr0);
420 
421 	ep93xx_spi_write_u8(espi, SSPCPSR, chip->div_cpsr);
422 	ep93xx_spi_write_u16(espi, SSPCR0, cr0);
423 }
424 
425 static inline int bits_per_word(const struct ep93xx_spi *espi)
426 {
427 	struct spi_message *msg = espi->current_msg;
428 	struct spi_transfer *t = msg->state;
429 
430 	return t->bits_per_word ? t->bits_per_word : msg->spi->bits_per_word;
431 }
432 
433 static void ep93xx_do_write(struct ep93xx_spi *espi, struct spi_transfer *t)
434 {
435 	if (bits_per_word(espi) > 8) {
436 		u16 tx_val = 0;
437 
438 		if (t->tx_buf)
439 			tx_val = ((u16 *)t->tx_buf)[espi->tx];
440 		ep93xx_spi_write_u16(espi, SSPDR, tx_val);
441 		espi->tx += sizeof(tx_val);
442 	} else {
443 		u8 tx_val = 0;
444 
445 		if (t->tx_buf)
446 			tx_val = ((u8 *)t->tx_buf)[espi->tx];
447 		ep93xx_spi_write_u8(espi, SSPDR, tx_val);
448 		espi->tx += sizeof(tx_val);
449 	}
450 }
451 
452 static void ep93xx_do_read(struct ep93xx_spi *espi, struct spi_transfer *t)
453 {
454 	if (bits_per_word(espi) > 8) {
455 		u16 rx_val;
456 
457 		rx_val = ep93xx_spi_read_u16(espi, SSPDR);
458 		if (t->rx_buf)
459 			((u16 *)t->rx_buf)[espi->rx] = rx_val;
460 		espi->rx += sizeof(rx_val);
461 	} else {
462 		u8 rx_val;
463 
464 		rx_val = ep93xx_spi_read_u8(espi, SSPDR);
465 		if (t->rx_buf)
466 			((u8 *)t->rx_buf)[espi->rx] = rx_val;
467 		espi->rx += sizeof(rx_val);
468 	}
469 }
470 
471 /**
472  * ep93xx_spi_read_write() - perform next RX/TX transfer
473  * @espi: ep93xx SPI controller struct
474  *
475  * This function transfers next bytes (or half-words) to/from RX/TX FIFOs. If
476  * called several times, the whole transfer will be completed. Returns
477  * %-EINPROGRESS when current transfer was not yet completed otherwise %0.
478  *
479  * When this function is finished, RX FIFO should be empty and TX FIFO should be
480  * full.
481  */
482 static int ep93xx_spi_read_write(struct ep93xx_spi *espi)
483 {
484 	struct spi_message *msg = espi->current_msg;
485 	struct spi_transfer *t = msg->state;
486 
487 	/* read as long as RX FIFO has frames in it */
488 	while ((ep93xx_spi_read_u8(espi, SSPSR) & SSPSR_RNE)) {
489 		ep93xx_do_read(espi, t);
490 		espi->fifo_level--;
491 	}
492 
493 	/* write as long as TX FIFO has room */
494 	while (espi->fifo_level < SPI_FIFO_SIZE && espi->tx < t->len) {
495 		ep93xx_do_write(espi, t);
496 		espi->fifo_level++;
497 	}
498 
499 	if (espi->rx == t->len) {
500 		msg->actual_length += t->len;
501 		return 0;
502 	}
503 
504 	return -EINPROGRESS;
505 }
506 
507 /**
508  * ep93xx_spi_process_transfer() - processes one SPI transfer
509  * @espi: ep93xx SPI controller struct
510  * @msg: current message
511  * @t: transfer to process
512  *
513  * This function processes one SPI transfer given in @t. Function waits until
514  * transfer is complete (may sleep) and updates @msg->status based on whether
515  * transfer was successfully processed or not.
516  */
517 static void ep93xx_spi_process_transfer(struct ep93xx_spi *espi,
518 					struct spi_message *msg,
519 					struct spi_transfer *t)
520 {
521 	struct ep93xx_spi_chip *chip = spi_get_ctldata(msg->spi);
522 
523 	msg->state = t;
524 
525 	/*
526 	 * Handle any transfer specific settings if needed. We use
527 	 * temporary chip settings here and restore original later when
528 	 * the transfer is finished.
529 	 */
530 	if (t->speed_hz || t->bits_per_word) {
531 		struct ep93xx_spi_chip tmp_chip = *chip;
532 
533 		if (t->speed_hz) {
534 			int err;
535 
536 			err = ep93xx_spi_calc_divisors(espi, &tmp_chip,
537 						       t->speed_hz);
538 			if (err) {
539 				dev_err(&espi->pdev->dev,
540 					"failed to adjust speed\n");
541 				msg->status = err;
542 				return;
543 			}
544 		}
545 
546 		if (t->bits_per_word)
547 			tmp_chip.dss = bits_per_word_to_dss(t->bits_per_word);
548 
549 		/*
550 		 * Set up temporary new hw settings for this transfer.
551 		 */
552 		ep93xx_spi_chip_setup(espi, &tmp_chip);
553 	}
554 
555 	espi->rx = 0;
556 	espi->tx = 0;
557 
558 	/*
559 	 * Now everything is set up for the current transfer. We prime the TX
560 	 * FIFO, enable interrupts, and wait for the transfer to complete.
561 	 */
562 	if (ep93xx_spi_read_write(espi)) {
563 		ep93xx_spi_enable_interrupts(espi);
564 		wait_for_completion(&espi->wait);
565 	}
566 
567 	/*
568 	 * In case of error during transmit, we bail out from processing
569 	 * the message.
570 	 */
571 	if (msg->status)
572 		return;
573 
574 	/*
575 	 * After this transfer is finished, perform any possible
576 	 * post-transfer actions requested by the protocol driver.
577 	 */
578 	if (t->delay_usecs) {
579 		set_current_state(TASK_UNINTERRUPTIBLE);
580 		schedule_timeout(usecs_to_jiffies(t->delay_usecs));
581 	}
582 	if (t->cs_change) {
583 		if (!list_is_last(&t->transfer_list, &msg->transfers)) {
584 			/*
585 			 * In case protocol driver is asking us to drop the
586 			 * chipselect briefly, we let the scheduler to handle
587 			 * any "delay" here.
588 			 */
589 			ep93xx_spi_cs_control(msg->spi, false);
590 			cond_resched();
591 			ep93xx_spi_cs_control(msg->spi, true);
592 		}
593 	}
594 
595 	if (t->speed_hz || t->bits_per_word)
596 		ep93xx_spi_chip_setup(espi, chip);
597 }
598 
599 /*
600  * ep93xx_spi_process_message() - process one SPI message
601  * @espi: ep93xx SPI controller struct
602  * @msg: message to process
603  *
604  * This function processes a single SPI message. We go through all transfers in
605  * the message and pass them to ep93xx_spi_process_transfer(). Chipselect is
606  * asserted during the whole message (unless per transfer cs_change is set).
607  *
608  * @msg->status contains %0 in case of success or negative error code in case of
609  * failure.
610  */
611 static void ep93xx_spi_process_message(struct ep93xx_spi *espi,
612 				       struct spi_message *msg)
613 {
614 	unsigned long timeout;
615 	struct spi_transfer *t;
616 	int err;
617 
618 	/*
619 	 * Enable the SPI controller and its clock.
620 	 */
621 	err = ep93xx_spi_enable(espi);
622 	if (err) {
623 		dev_err(&espi->pdev->dev, "failed to enable SPI controller\n");
624 		msg->status = err;
625 		return;
626 	}
627 
628 	/*
629 	 * Just to be sure: flush any data from RX FIFO.
630 	 */
631 	timeout = jiffies + msecs_to_jiffies(SPI_TIMEOUT);
632 	while (ep93xx_spi_read_u16(espi, SSPSR) & SSPSR_RNE) {
633 		if (time_after(jiffies, timeout)) {
634 			dev_warn(&espi->pdev->dev,
635 				 "timeout while flushing RX FIFO\n");
636 			msg->status = -ETIMEDOUT;
637 			return;
638 		}
639 		ep93xx_spi_read_u16(espi, SSPDR);
640 	}
641 
642 	/*
643 	 * We explicitly handle FIFO level. This way we don't have to check TX
644 	 * FIFO status using %SSPSR_TNF bit which may cause RX FIFO overruns.
645 	 */
646 	espi->fifo_level = 0;
647 
648 	/*
649 	 * Update SPI controller registers according to spi device and assert
650 	 * the chipselect.
651 	 */
652 	ep93xx_spi_chip_setup(espi, spi_get_ctldata(msg->spi));
653 	ep93xx_spi_cs_control(msg->spi, true);
654 
655 	list_for_each_entry(t, &msg->transfers, transfer_list) {
656 		ep93xx_spi_process_transfer(espi, msg, t);
657 		if (msg->status)
658 			break;
659 	}
660 
661 	/*
662 	 * Now the whole message is transferred (or failed for some reason). We
663 	 * deselect the device and disable the SPI controller.
664 	 */
665 	ep93xx_spi_cs_control(msg->spi, false);
666 	ep93xx_spi_disable(espi);
667 }
668 
669 #define work_to_espi(work) (container_of((work), struct ep93xx_spi, msg_work))
670 
671 /**
672  * ep93xx_spi_work() - EP93xx SPI workqueue worker function
673  * @work: work struct
674  *
675  * Workqueue worker function. This function is called when there are new
676  * SPI messages to be processed. Message is taken out from the queue and then
677  * passed to ep93xx_spi_process_message().
678  *
679  * After message is transferred, protocol driver is notified by calling
680  * @msg->complete(). In case of error, @msg->status is set to negative error
681  * number, otherwise it contains zero (and @msg->actual_length is updated).
682  */
683 static void ep93xx_spi_work(struct work_struct *work)
684 {
685 	struct ep93xx_spi *espi = work_to_espi(work);
686 	struct spi_message *msg;
687 
688 	spin_lock_irq(&espi->lock);
689 	if (!espi->running || espi->current_msg ||
690 		list_empty(&espi->msg_queue)) {
691 		spin_unlock_irq(&espi->lock);
692 		return;
693 	}
694 	msg = list_first_entry(&espi->msg_queue, struct spi_message, queue);
695 	list_del_init(&msg->queue);
696 	espi->current_msg = msg;
697 	spin_unlock_irq(&espi->lock);
698 
699 	ep93xx_spi_process_message(espi, msg);
700 
701 	/*
702 	 * Update the current message and re-schedule ourselves if there are
703 	 * more messages in the queue.
704 	 */
705 	spin_lock_irq(&espi->lock);
706 	espi->current_msg = NULL;
707 	if (espi->running && !list_empty(&espi->msg_queue))
708 		queue_work(espi->wq, &espi->msg_work);
709 	spin_unlock_irq(&espi->lock);
710 
711 	/* notify the protocol driver that we are done with this message */
712 	msg->complete(msg->context);
713 }
714 
715 static irqreturn_t ep93xx_spi_interrupt(int irq, void *dev_id)
716 {
717 	struct ep93xx_spi *espi = dev_id;
718 	u8 irq_status = ep93xx_spi_read_u8(espi, SSPIIR);
719 
720 	/*
721 	 * If we got ROR (receive overrun) interrupt we know that something is
722 	 * wrong. Just abort the message.
723 	 */
724 	if (unlikely(irq_status & SSPIIR_RORIS)) {
725 		/* clear the overrun interrupt */
726 		ep93xx_spi_write_u8(espi, SSPICR, 0);
727 		dev_warn(&espi->pdev->dev,
728 			 "receive overrun, aborting the message\n");
729 		espi->current_msg->status = -EIO;
730 	} else {
731 		/*
732 		 * Interrupt is either RX (RIS) or TX (TIS). For both cases we
733 		 * simply execute next data transfer.
734 		 */
735 		if (ep93xx_spi_read_write(espi)) {
736 			/*
737 			 * In normal case, there still is some processing left
738 			 * for current transfer. Let's wait for the next
739 			 * interrupt then.
740 			 */
741 			return IRQ_HANDLED;
742 		}
743 	}
744 
745 	/*
746 	 * Current transfer is finished, either with error or with success. In
747 	 * any case we disable interrupts and notify the worker to handle
748 	 * any post-processing of the message.
749 	 */
750 	ep93xx_spi_disable_interrupts(espi);
751 	complete(&espi->wait);
752 	return IRQ_HANDLED;
753 }
754 
755 static int __init ep93xx_spi_probe(struct platform_device *pdev)
756 {
757 	struct spi_master *master;
758 	struct ep93xx_spi_info *info;
759 	struct ep93xx_spi *espi;
760 	struct resource *res;
761 	int error;
762 
763 	info = pdev->dev.platform_data;
764 
765 	master = spi_alloc_master(&pdev->dev, sizeof(*espi));
766 	if (!master) {
767 		dev_err(&pdev->dev, "failed to allocate spi master\n");
768 		return -ENOMEM;
769 	}
770 
771 	master->setup = ep93xx_spi_setup;
772 	master->transfer = ep93xx_spi_transfer;
773 	master->cleanup = ep93xx_spi_cleanup;
774 	master->bus_num = pdev->id;
775 	master->num_chipselect = info->num_chipselect;
776 	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
777 
778 	platform_set_drvdata(pdev, master);
779 
780 	espi = spi_master_get_devdata(master);
781 
782 	espi->clk = clk_get(&pdev->dev, NULL);
783 	if (IS_ERR(espi->clk)) {
784 		dev_err(&pdev->dev, "unable to get spi clock\n");
785 		error = PTR_ERR(espi->clk);
786 		goto fail_release_master;
787 	}
788 
789 	spin_lock_init(&espi->lock);
790 	init_completion(&espi->wait);
791 
792 	/*
793 	 * Calculate maximum and minimum supported clock rates
794 	 * for the controller.
795 	 */
796 	espi->max_rate = clk_get_rate(espi->clk) / 2;
797 	espi->min_rate = clk_get_rate(espi->clk) / (254 * 256);
798 	espi->pdev = pdev;
799 
800 	espi->irq = platform_get_irq(pdev, 0);
801 	if (espi->irq < 0) {
802 		error = -EBUSY;
803 		dev_err(&pdev->dev, "failed to get irq resources\n");
804 		goto fail_put_clock;
805 	}
806 
807 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
808 	if (!res) {
809 		dev_err(&pdev->dev, "unable to get iomem resource\n");
810 		error = -ENODEV;
811 		goto fail_put_clock;
812 	}
813 
814 	res = request_mem_region(res->start, resource_size(res), pdev->name);
815 	if (!res) {
816 		dev_err(&pdev->dev, "unable to request iomem resources\n");
817 		error = -EBUSY;
818 		goto fail_put_clock;
819 	}
820 
821 	espi->regs_base = ioremap(res->start, resource_size(res));
822 	if (!espi->regs_base) {
823 		dev_err(&pdev->dev, "failed to map resources\n");
824 		error = -ENODEV;
825 		goto fail_free_mem;
826 	}
827 
828 	error = request_irq(espi->irq, ep93xx_spi_interrupt, 0,
829 			    "ep93xx-spi", espi);
830 	if (error) {
831 		dev_err(&pdev->dev, "failed to request irq\n");
832 		goto fail_unmap_regs;
833 	}
834 
835 	espi->wq = create_singlethread_workqueue("ep93xx_spid");
836 	if (!espi->wq) {
837 		dev_err(&pdev->dev, "unable to create workqueue\n");
838 		goto fail_free_irq;
839 	}
840 	INIT_WORK(&espi->msg_work, ep93xx_spi_work);
841 	INIT_LIST_HEAD(&espi->msg_queue);
842 	espi->running = true;
843 
844 	/* make sure that the hardware is disabled */
845 	ep93xx_spi_write_u8(espi, SSPCR1, 0);
846 
847 	error = spi_register_master(master);
848 	if (error) {
849 		dev_err(&pdev->dev, "failed to register SPI master\n");
850 		goto fail_free_queue;
851 	}
852 
853 	dev_info(&pdev->dev, "EP93xx SPI Controller at 0x%08lx irq %d\n",
854 		 (unsigned long)res->start, espi->irq);
855 
856 	return 0;
857 
858 fail_free_queue:
859 	destroy_workqueue(espi->wq);
860 fail_free_irq:
861 	free_irq(espi->irq, espi);
862 fail_unmap_regs:
863 	iounmap(espi->regs_base);
864 fail_free_mem:
865 	release_mem_region(res->start, resource_size(res));
866 fail_put_clock:
867 	clk_put(espi->clk);
868 fail_release_master:
869 	spi_master_put(master);
870 	platform_set_drvdata(pdev, NULL);
871 
872 	return error;
873 }
874 
875 static int __exit ep93xx_spi_remove(struct platform_device *pdev)
876 {
877 	struct spi_master *master = platform_get_drvdata(pdev);
878 	struct ep93xx_spi *espi = spi_master_get_devdata(master);
879 	struct resource *res;
880 
881 	spin_lock_irq(&espi->lock);
882 	espi->running = false;
883 	spin_unlock_irq(&espi->lock);
884 
885 	destroy_workqueue(espi->wq);
886 
887 	/*
888 	 * Complete remaining messages with %-ESHUTDOWN status.
889 	 */
890 	spin_lock_irq(&espi->lock);
891 	while (!list_empty(&espi->msg_queue)) {
892 		struct spi_message *msg;
893 
894 		msg = list_first_entry(&espi->msg_queue,
895 				       struct spi_message, queue);
896 		list_del_init(&msg->queue);
897 		msg->status = -ESHUTDOWN;
898 		spin_unlock_irq(&espi->lock);
899 		msg->complete(msg->context);
900 		spin_lock_irq(&espi->lock);
901 	}
902 	spin_unlock_irq(&espi->lock);
903 
904 	free_irq(espi->irq, espi);
905 	iounmap(espi->regs_base);
906 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
907 	release_mem_region(res->start, resource_size(res));
908 	clk_put(espi->clk);
909 	platform_set_drvdata(pdev, NULL);
910 
911 	spi_unregister_master(master);
912 	return 0;
913 }
914 
915 static struct platform_driver ep93xx_spi_driver = {
916 	.driver		= {
917 		.name	= "ep93xx-spi",
918 		.owner	= THIS_MODULE,
919 	},
920 	.remove		= __exit_p(ep93xx_spi_remove),
921 };
922 
923 static int __init ep93xx_spi_init(void)
924 {
925 	return platform_driver_probe(&ep93xx_spi_driver, ep93xx_spi_probe);
926 }
927 module_init(ep93xx_spi_init);
928 
929 static void __exit ep93xx_spi_exit(void)
930 {
931 	platform_driver_unregister(&ep93xx_spi_driver);
932 }
933 module_exit(ep93xx_spi_exit);
934 
935 MODULE_DESCRIPTION("EP93xx SPI Controller driver");
936 MODULE_AUTHOR("Mika Westerberg <mika.westerberg@iki.fi>");
937 MODULE_LICENSE("GPL");
938 MODULE_ALIAS("platform:ep93xx-spi");
939