spi-imx.c 25.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
/*
 * Copyright 2004-2007 Freescale Semiconductor, Inc. All Rights Reserved.
 * Copyright (C) 2008 Juergen Beisert
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the
 * Free Software Foundation
 * 51 Franklin Street, Fifth Floor
 * Boston, MA  02110-1301, USA.
 */

#include <linux/clk.h>
#include <linux/completion.h>
#include <linux/delay.h>
#include <linux/err.h>
#include <linux/gpio.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/irq.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/platform_device.h>
33
#include <linux/slab.h>
34 35 36
#include <linux/spi/spi.h>
#include <linux/spi/spi_bitbang.h>
#include <linux/types.h>
37 38 39
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/of_gpio.h>
40

41
#include <linux/platform_data/spi-imx.h>
42 43 44 45 46 47 48 49 50 51 52 53 54

#define DRIVER_NAME "spi_imx"

#define MXC_CSPIRXDATA		0x00
#define MXC_CSPITXDATA		0x04
#define MXC_CSPICTRL		0x08
#define MXC_CSPIINT		0x0c
#define MXC_RESET		0x1c

/* generic defines to abstract from the different register layouts */
#define MXC_INT_RR	(1 << 0) /* Receive data ready interrupt */
#define MXC_INT_TE	(1 << 1) /* Transmit FIFO empty interrupt */

55
struct spi_imx_config {
56 57 58
	unsigned int speed_hz;
	unsigned int bpw;
	unsigned int mode;
59
	u8 cs;
60 61
};

62
enum spi_imx_devtype {
63 64 65 66 67 68
	IMX1_CSPI,
	IMX21_CSPI,
	IMX27_CSPI,
	IMX31_CSPI,
	IMX35_CSPI,	/* CSPI on all i.mx except above */
	IMX51_ECSPI,	/* ECSPI on i.mx51 and later */
69 70 71 72 73 74 75 76 77
};

struct spi_imx_data;

struct spi_imx_devtype_data {
	void (*intctrl)(struct spi_imx_data *, int);
	int (*config)(struct spi_imx_data *, struct spi_imx_config *);
	void (*trigger)(struct spi_imx_data *);
	int (*rx_available)(struct spi_imx_data *);
78
	void (*reset)(struct spi_imx_data *);
79
	enum spi_imx_devtype devtype;
80 81
};

82
struct spi_imx_data {
83 84 85
	struct spi_bitbang bitbang;

	struct completion xfer_done;
86
	void __iomem *base;
87
	int irq;
88 89
	struct clk *clk_per;
	struct clk *clk_ipg;
90 91 92
	unsigned long spi_clk;

	unsigned int count;
93 94
	void (*tx)(struct spi_imx_data *);
	void (*rx)(struct spi_imx_data *);
95 96 97 98
	void *rx_buf;
	const void *tx_buf;
	unsigned int txfifo; /* number of words pushed in tx FIFO */

99
	const struct spi_imx_devtype_data *devtype_data;
100
	int chipselect[0];
101 102
};

103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
static inline int is_imx27_cspi(struct spi_imx_data *d)
{
	return d->devtype_data->devtype == IMX27_CSPI;
}

static inline int is_imx35_cspi(struct spi_imx_data *d)
{
	return d->devtype_data->devtype == IMX35_CSPI;
}

static inline unsigned spi_imx_get_fifosize(struct spi_imx_data *d)
{
	return (d->devtype_data->devtype == IMX51_ECSPI) ? 64 : 8;
}

118
#define MXC_SPI_BUF_RX(type)						\
119
static void spi_imx_buf_rx_##type(struct spi_imx_data *spi_imx)		\
120
{									\
121
	unsigned int val = readl(spi_imx->base + MXC_CSPIRXDATA);	\
122
									\
123 124 125
	if (spi_imx->rx_buf) {						\
		*(type *)spi_imx->rx_buf = val;				\
		spi_imx->rx_buf += sizeof(type);			\
126 127 128 129
	}								\
}

#define MXC_SPI_BUF_TX(type)						\
130
static void spi_imx_buf_tx_##type(struct spi_imx_data *spi_imx)		\
131 132 133
{									\
	type val = 0;							\
									\
134 135 136
	if (spi_imx->tx_buf) {						\
		val = *(type *)spi_imx->tx_buf;				\
		spi_imx->tx_buf += sizeof(type);			\
137 138
	}								\
									\
139
	spi_imx->count -= sizeof(type);					\
140
									\
141
	writel(val, spi_imx->base + MXC_CSPITXDATA);			\
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
}

MXC_SPI_BUF_RX(u8)
MXC_SPI_BUF_TX(u8)
MXC_SPI_BUF_RX(u16)
MXC_SPI_BUF_TX(u16)
MXC_SPI_BUF_RX(u32)
MXC_SPI_BUF_TX(u32)

/* First entry is reserved, second entry is valid only if SDHC_SPIEN is set
 * (which is currently not the case in this driver)
 */
static int mxc_clkdivs[] = {0, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192,
	256, 384, 512, 768, 1024};

/* MX21, MX27 */
158
static unsigned int spi_imx_clkdiv_1(unsigned int fin,
159
		unsigned int fspi, unsigned int max)
160
{
161
	int i;
162 163 164 165 166 167 168 169

	for (i = 2; i < max; i++)
		if (fspi * mxc_clkdivs[i] >= fin)
			return i;

	return max;
}

170
/* MX1, MX31, MX35, MX51 CSPI */
171
static unsigned int spi_imx_clkdiv_2(unsigned int fin,
172 173 174 175 176 177 178 179 180 181 182 183 184
		unsigned int fspi)
{
	int i, div = 4;

	for (i = 0; i < 7; i++) {
		if (fspi * div >= fin)
			return i;
		div <<= 1;
	}

	return 7;
}

185 186 187 188 189 190 191 192 193 194 195 196 197 198
#define MX51_ECSPI_CTRL		0x08
#define MX51_ECSPI_CTRL_ENABLE		(1 <<  0)
#define MX51_ECSPI_CTRL_XCH		(1 <<  2)
#define MX51_ECSPI_CTRL_MODE_MASK	(0xf << 4)
#define MX51_ECSPI_CTRL_POSTDIV_OFFSET	8
#define MX51_ECSPI_CTRL_PREDIV_OFFSET	12
#define MX51_ECSPI_CTRL_CS(cs)		((cs) << 18)
#define MX51_ECSPI_CTRL_BL_OFFSET	20

#define MX51_ECSPI_CONFIG	0x0c
#define MX51_ECSPI_CONFIG_SCLKPHA(cs)	(1 << ((cs) +  0))
#define MX51_ECSPI_CONFIG_SCLKPOL(cs)	(1 << ((cs) +  4))
#define MX51_ECSPI_CONFIG_SBBCTRL(cs)	(1 << ((cs) +  8))
#define MX51_ECSPI_CONFIG_SSBPOL(cs)	(1 << ((cs) + 12))
199
#define MX51_ECSPI_CONFIG_SCLKCTL(cs)	(1 << ((cs) + 20))
200 201 202 203 204 205 206

#define MX51_ECSPI_INT		0x10
#define MX51_ECSPI_INT_TEEN		(1 <<  0)
#define MX51_ECSPI_INT_RREN		(1 <<  3)

#define MX51_ECSPI_STAT		0x18
#define MX51_ECSPI_STAT_RR		(1 <<  3)
207 208

/* MX51 eCSPI */
209 210
static unsigned int mx51_ecspi_clkdiv(unsigned int fin, unsigned int fspi,
				      unsigned int *fres)
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237
{
	/*
	 * there are two 4-bit dividers, the pre-divider divides by
	 * $pre, the post-divider by 2^$post
	 */
	unsigned int pre, post;

	if (unlikely(fspi > fin))
		return 0;

	post = fls(fin) - fls(fspi);
	if (fin > fspi << post)
		post++;

	/* now we have: (fin <= fspi << post) with post being minimal */

	post = max(4U, post) - 4;
	if (unlikely(post > 0xf)) {
		pr_err("%s: cannot set clock freq: %u (base freq: %u)\n",
				__func__, fspi, fin);
		return 0xff;
	}

	pre = DIV_ROUND_UP(fin, fspi << post) - 1;

	pr_debug("%s: fin: %u, fspi: %u, post: %u, pre: %u\n",
			__func__, fin, fspi, post, pre);
238 239 240 241

	/* Resulting frequency for the SCLK line. */
	*fres = (fin / (pre + 1)) >> post;

242 243
	return (pre << MX51_ECSPI_CTRL_PREDIV_OFFSET) |
		(post << MX51_ECSPI_CTRL_POSTDIV_OFFSET);
244 245
}

246
static void __maybe_unused mx51_ecspi_intctrl(struct spi_imx_data *spi_imx, int enable)
247 248 249 250
{
	unsigned val = 0;

	if (enable & MXC_INT_TE)
251
		val |= MX51_ECSPI_INT_TEEN;
252 253

	if (enable & MXC_INT_RR)
254
		val |= MX51_ECSPI_INT_RREN;
255

256
	writel(val, spi_imx->base + MX51_ECSPI_INT);
257 258
}

259
static void __maybe_unused mx51_ecspi_trigger(struct spi_imx_data *spi_imx)
260 261 262
{
	u32 reg;

263 264 265
	reg = readl(spi_imx->base + MX51_ECSPI_CTRL);
	reg |= MX51_ECSPI_CTRL_XCH;
	writel(reg, spi_imx->base + MX51_ECSPI_CTRL);
266 267
}

268
static int __maybe_unused mx51_ecspi_config(struct spi_imx_data *spi_imx,
269 270
		struct spi_imx_config *config)
{
271
	u32 ctrl = MX51_ECSPI_CTRL_ENABLE, cfg = 0;
272
	u32 clk = config->speed_hz, delay;
273

274 275 276 277 278 279 280
	/*
	 * The hardware seems to have a race condition when changing modes. The
	 * current assumption is that the selection of the channel arrives
	 * earlier in the hardware than the mode bits when they are written at
	 * the same time.
	 * So set master mode for all channels as we do not support slave mode.
	 */
281
	ctrl |= MX51_ECSPI_CTRL_MODE_MASK;
282 283

	/* set clock speed */
284
	ctrl |= mx51_ecspi_clkdiv(spi_imx->spi_clk, config->speed_hz, &clk);
285 286

	/* set chip select to use */
287
	ctrl |= MX51_ECSPI_CTRL_CS(config->cs);
288

289
	ctrl |= (config->bpw - 1) << MX51_ECSPI_CTRL_BL_OFFSET;
290

291
	cfg |= MX51_ECSPI_CONFIG_SBBCTRL(config->cs);
292 293

	if (config->mode & SPI_CPHA)
294
		cfg |= MX51_ECSPI_CONFIG_SCLKPHA(config->cs);
295

296
	if (config->mode & SPI_CPOL) {
297
		cfg |= MX51_ECSPI_CONFIG_SCLKPOL(config->cs);
298 299
		cfg |= MX51_ECSPI_CONFIG_SCLKCTL(config->cs);
	}
300
	if (config->mode & SPI_CS_HIGH)
301
		cfg |= MX51_ECSPI_CONFIG_SSBPOL(config->cs);
302

303 304
	writel(ctrl, spi_imx->base + MX51_ECSPI_CTRL);
	writel(cfg, spi_imx->base + MX51_ECSPI_CONFIG);
305

306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322
	/*
	 * Wait until the changes in the configuration register CONFIGREG
	 * propagate into the hardware. It takes exactly one tick of the
	 * SCLK clock, but we will wait two SCLK clock just to be sure. The
	 * effect of the delay it takes for the hardware to apply changes
	 * is noticable if the SCLK clock run very slow. In such a case, if
	 * the polarity of SCLK should be inverted, the GPIO ChipSelect might
	 * be asserted before the SCLK polarity changes, which would disrupt
	 * the SPI communication as the device on the other end would consider
	 * the change of SCLK polarity as a clock tick already.
	 */
	delay = (2 * 1000000) / clk;
	if (likely(delay < 10))	/* SCLK is faster than 100 kHz */
		udelay(delay);
	else			/* SCLK is _very_ slow */
		usleep_range(delay, delay + 10);

323 324 325
	return 0;
}

326
static int __maybe_unused mx51_ecspi_rx_available(struct spi_imx_data *spi_imx)
327
{
328
	return readl(spi_imx->base + MX51_ECSPI_STAT) & MX51_ECSPI_STAT_RR;
329 330
}

331
static void __maybe_unused mx51_ecspi_reset(struct spi_imx_data *spi_imx)
332 333
{
	/* drain receive buffer */
334
	while (mx51_ecspi_rx_available(spi_imx))
335 336 337
		readl(spi_imx->base + MXC_CSPIRXDATA);
}

338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360
#define MX31_INTREG_TEEN	(1 << 0)
#define MX31_INTREG_RREN	(1 << 3)

#define MX31_CSPICTRL_ENABLE	(1 << 0)
#define MX31_CSPICTRL_MASTER	(1 << 1)
#define MX31_CSPICTRL_XCH	(1 << 2)
#define MX31_CSPICTRL_POL	(1 << 4)
#define MX31_CSPICTRL_PHA	(1 << 5)
#define MX31_CSPICTRL_SSCTL	(1 << 6)
#define MX31_CSPICTRL_SSPOL	(1 << 7)
#define MX31_CSPICTRL_BC_SHIFT	8
#define MX35_CSPICTRL_BL_SHIFT	20
#define MX31_CSPICTRL_CS_SHIFT	24
#define MX35_CSPICTRL_CS_SHIFT	12
#define MX31_CSPICTRL_DR_SHIFT	16

#define MX31_CSPISTATUS		0x14
#define MX31_STATUS_RR		(1 << 3)

/* These functions also work for the i.MX35, but be aware that
 * the i.MX35 has a slightly different register layout for bits
 * we do not use here.
 */
361
static void __maybe_unused mx31_intctrl(struct spi_imx_data *spi_imx, int enable)
362 363 364 365 366 367 368 369
{
	unsigned int val = 0;

	if (enable & MXC_INT_TE)
		val |= MX31_INTREG_TEEN;
	if (enable & MXC_INT_RR)
		val |= MX31_INTREG_RREN;

370
	writel(val, spi_imx->base + MXC_CSPIINT);
371 372
}

373
static void __maybe_unused mx31_trigger(struct spi_imx_data *spi_imx)
374 375 376
{
	unsigned int reg;

377
	reg = readl(spi_imx->base + MXC_CSPICTRL);
378
	reg |= MX31_CSPICTRL_XCH;
379
	writel(reg, spi_imx->base + MXC_CSPICTRL);
380 381
}

382
static int __maybe_unused mx31_config(struct spi_imx_data *spi_imx,
383 384 385
		struct spi_imx_config *config)
{
	unsigned int reg = MX31_CSPICTRL_ENABLE | MX31_CSPICTRL_MASTER;
386
	int cs = spi_imx->chipselect[config->cs];
387 388 389 390

	reg |= spi_imx_clkdiv_2(spi_imx->spi_clk, config->speed_hz) <<
		MX31_CSPICTRL_DR_SHIFT;

391
	if (is_imx35_cspi(spi_imx)) {
392 393 394 395 396
		reg |= (config->bpw - 1) << MX35_CSPICTRL_BL_SHIFT;
		reg |= MX31_CSPICTRL_SSCTL;
	} else {
		reg |= (config->bpw - 1) << MX31_CSPICTRL_BC_SHIFT;
	}
397 398 399 400 401 402 403

	if (config->mode & SPI_CPHA)
		reg |= MX31_CSPICTRL_PHA;
	if (config->mode & SPI_CPOL)
		reg |= MX31_CSPICTRL_POL;
	if (config->mode & SPI_CS_HIGH)
		reg |= MX31_CSPICTRL_SSPOL;
404
	if (cs < 0)
405
		reg |= (cs + 32) <<
406 407
			(is_imx35_cspi(spi_imx) ? MX35_CSPICTRL_CS_SHIFT :
						  MX31_CSPICTRL_CS_SHIFT);
408 409 410 411 412 413

	writel(reg, spi_imx->base + MXC_CSPICTRL);

	return 0;
}

414
static int __maybe_unused mx31_rx_available(struct spi_imx_data *spi_imx)
415
{
416
	return readl(spi_imx->base + MX31_CSPISTATUS) & MX31_STATUS_RR;
417 418
}

419
static void __maybe_unused mx31_reset(struct spi_imx_data *spi_imx)
420 421
{
	/* drain receive buffer */
422
	while (readl(spi_imx->base + MX31_CSPISTATUS) & MX31_STATUS_RR)
423 424 425
		readl(spi_imx->base + MXC_CSPIRXDATA);
}

426 427 428 429 430 431 432 433 434 435 436 437 438 439
#define MX21_INTREG_RR		(1 << 4)
#define MX21_INTREG_TEEN	(1 << 9)
#define MX21_INTREG_RREN	(1 << 13)

#define MX21_CSPICTRL_POL	(1 << 5)
#define MX21_CSPICTRL_PHA	(1 << 6)
#define MX21_CSPICTRL_SSPOL	(1 << 8)
#define MX21_CSPICTRL_XCH	(1 << 9)
#define MX21_CSPICTRL_ENABLE	(1 << 10)
#define MX21_CSPICTRL_MASTER	(1 << 11)
#define MX21_CSPICTRL_DR_SHIFT	14
#define MX21_CSPICTRL_CS_SHIFT	19

static void __maybe_unused mx21_intctrl(struct spi_imx_data *spi_imx, int enable)
440 441 442 443
{
	unsigned int val = 0;

	if (enable & MXC_INT_TE)
444
		val |= MX21_INTREG_TEEN;
445
	if (enable & MXC_INT_RR)
446
		val |= MX21_INTREG_RREN;
447

448
	writel(val, spi_imx->base + MXC_CSPIINT);
449 450
}

451
static void __maybe_unused mx21_trigger(struct spi_imx_data *spi_imx)
452 453 454
{
	unsigned int reg;

455
	reg = readl(spi_imx->base + MXC_CSPICTRL);
456
	reg |= MX21_CSPICTRL_XCH;
457
	writel(reg, spi_imx->base + MXC_CSPICTRL);
458 459
}

460
static int __maybe_unused mx21_config(struct spi_imx_data *spi_imx,
461
		struct spi_imx_config *config)
462
{
463
	unsigned int reg = MX21_CSPICTRL_ENABLE | MX21_CSPICTRL_MASTER;
464
	int cs = spi_imx->chipselect[config->cs];
465
	unsigned int max = is_imx27_cspi(spi_imx) ? 16 : 18;
466

467
	reg |= spi_imx_clkdiv_1(spi_imx->spi_clk, config->speed_hz, max) <<
468
		MX21_CSPICTRL_DR_SHIFT;
469 470 471
	reg |= config->bpw - 1;

	if (config->mode & SPI_CPHA)
472
		reg |= MX21_CSPICTRL_PHA;
473
	if (config->mode & SPI_CPOL)
474
		reg |= MX21_CSPICTRL_POL;
475
	if (config->mode & SPI_CS_HIGH)
476
		reg |= MX21_CSPICTRL_SSPOL;
477
	if (cs < 0)
478
		reg |= (cs + 32) << MX21_CSPICTRL_CS_SHIFT;
479

480
	writel(reg, spi_imx->base + MXC_CSPICTRL);
481 482 483 484

	return 0;
}

485
static int __maybe_unused mx21_rx_available(struct spi_imx_data *spi_imx)
486
{
487
	return readl(spi_imx->base + MXC_CSPIINT) & MX21_INTREG_RR;
488 489
}

490
static void __maybe_unused mx21_reset(struct spi_imx_data *spi_imx)
491 492 493 494
{
	writel(1, spi_imx->base + MXC_RESET);
}

495 496 497 498 499 500 501 502 503 504 505
#define MX1_INTREG_RR		(1 << 3)
#define MX1_INTREG_TEEN		(1 << 8)
#define MX1_INTREG_RREN		(1 << 11)

#define MX1_CSPICTRL_POL	(1 << 4)
#define MX1_CSPICTRL_PHA	(1 << 5)
#define MX1_CSPICTRL_XCH	(1 << 8)
#define MX1_CSPICTRL_ENABLE	(1 << 9)
#define MX1_CSPICTRL_MASTER	(1 << 10)
#define MX1_CSPICTRL_DR_SHIFT	13

506
static void __maybe_unused mx1_intctrl(struct spi_imx_data *spi_imx, int enable)
507 508 509 510 511 512 513 514
{
	unsigned int val = 0;

	if (enable & MXC_INT_TE)
		val |= MX1_INTREG_TEEN;
	if (enable & MXC_INT_RR)
		val |= MX1_INTREG_RREN;

515
	writel(val, spi_imx->base + MXC_CSPIINT);
516 517
}

518
static void __maybe_unused mx1_trigger(struct spi_imx_data *spi_imx)
519 520 521
{
	unsigned int reg;

522
	reg = readl(spi_imx->base + MXC_CSPICTRL);
523
	reg |= MX1_CSPICTRL_XCH;
524
	writel(reg, spi_imx->base + MXC_CSPICTRL);
525 526
}

527
static int __maybe_unused mx1_config(struct spi_imx_data *spi_imx,
528
		struct spi_imx_config *config)
529 530 531
{
	unsigned int reg = MX1_CSPICTRL_ENABLE | MX1_CSPICTRL_MASTER;

532
	reg |= spi_imx_clkdiv_2(spi_imx->spi_clk, config->speed_hz) <<
533 534 535 536 537 538 539 540
		MX1_CSPICTRL_DR_SHIFT;
	reg |= config->bpw - 1;

	if (config->mode & SPI_CPHA)
		reg |= MX1_CSPICTRL_PHA;
	if (config->mode & SPI_CPOL)
		reg |= MX1_CSPICTRL_POL;

541
	writel(reg, spi_imx->base + MXC_CSPICTRL);
542 543 544 545

	return 0;
}

546
static int __maybe_unused mx1_rx_available(struct spi_imx_data *spi_imx)
547
{
548
	return readl(spi_imx->base + MXC_CSPIINT) & MX1_INTREG_RR;
549 550
}

551 552 553 554 555
static void __maybe_unused mx1_reset(struct spi_imx_data *spi_imx)
{
	writel(1, spi_imx->base + MXC_RESET);
}

556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633
static struct spi_imx_devtype_data imx1_cspi_devtype_data = {
	.intctrl = mx1_intctrl,
	.config = mx1_config,
	.trigger = mx1_trigger,
	.rx_available = mx1_rx_available,
	.reset = mx1_reset,
	.devtype = IMX1_CSPI,
};

static struct spi_imx_devtype_data imx21_cspi_devtype_data = {
	.intctrl = mx21_intctrl,
	.config = mx21_config,
	.trigger = mx21_trigger,
	.rx_available = mx21_rx_available,
	.reset = mx21_reset,
	.devtype = IMX21_CSPI,
};

static struct spi_imx_devtype_data imx27_cspi_devtype_data = {
	/* i.mx27 cspi shares the functions with i.mx21 one */
	.intctrl = mx21_intctrl,
	.config = mx21_config,
	.trigger = mx21_trigger,
	.rx_available = mx21_rx_available,
	.reset = mx21_reset,
	.devtype = IMX27_CSPI,
};

static struct spi_imx_devtype_data imx31_cspi_devtype_data = {
	.intctrl = mx31_intctrl,
	.config = mx31_config,
	.trigger = mx31_trigger,
	.rx_available = mx31_rx_available,
	.reset = mx31_reset,
	.devtype = IMX31_CSPI,
};

static struct spi_imx_devtype_data imx35_cspi_devtype_data = {
	/* i.mx35 and later cspi shares the functions with i.mx31 one */
	.intctrl = mx31_intctrl,
	.config = mx31_config,
	.trigger = mx31_trigger,
	.rx_available = mx31_rx_available,
	.reset = mx31_reset,
	.devtype = IMX35_CSPI,
};

static struct spi_imx_devtype_data imx51_ecspi_devtype_data = {
	.intctrl = mx51_ecspi_intctrl,
	.config = mx51_ecspi_config,
	.trigger = mx51_ecspi_trigger,
	.rx_available = mx51_ecspi_rx_available,
	.reset = mx51_ecspi_reset,
	.devtype = IMX51_ECSPI,
};

static struct platform_device_id spi_imx_devtype[] = {
	{
		.name = "imx1-cspi",
		.driver_data = (kernel_ulong_t) &imx1_cspi_devtype_data,
	}, {
		.name = "imx21-cspi",
		.driver_data = (kernel_ulong_t) &imx21_cspi_devtype_data,
	}, {
		.name = "imx27-cspi",
		.driver_data = (kernel_ulong_t) &imx27_cspi_devtype_data,
	}, {
		.name = "imx31-cspi",
		.driver_data = (kernel_ulong_t) &imx31_cspi_devtype_data,
	}, {
		.name = "imx35-cspi",
		.driver_data = (kernel_ulong_t) &imx35_cspi_devtype_data,
	}, {
		.name = "imx51-ecspi",
		.driver_data = (kernel_ulong_t) &imx51_ecspi_devtype_data,
	}, {
		/* sentinel */
	}
634 635
};

636 637 638 639 640 641 642 643 644
static const struct of_device_id spi_imx_dt_ids[] = {
	{ .compatible = "fsl,imx1-cspi", .data = &imx1_cspi_devtype_data, },
	{ .compatible = "fsl,imx21-cspi", .data = &imx21_cspi_devtype_data, },
	{ .compatible = "fsl,imx27-cspi", .data = &imx27_cspi_devtype_data, },
	{ .compatible = "fsl,imx31-cspi", .data = &imx31_cspi_devtype_data, },
	{ .compatible = "fsl,imx35-cspi", .data = &imx35_cspi_devtype_data, },
	{ .compatible = "fsl,imx51-ecspi", .data = &imx51_ecspi_devtype_data, },
	{ /* sentinel */ }
};
645
MODULE_DEVICE_TABLE(of, spi_imx_dt_ids);
646

647
static void spi_imx_chipselect(struct spi_device *spi, int is_active)
648
{
649 650
	struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);
	int gpio = spi_imx->chipselect[spi->chip_select];
651 652
	int active = is_active != BITBANG_CS_INACTIVE;
	int dev_is_lowactive = !(spi->mode & SPI_CS_HIGH);
653

654
	if (!gpio_is_valid(gpio))
655 656
		return;

657
	gpio_set_value(gpio, dev_is_lowactive ^ active);
658 659
}

660
static void spi_imx_push(struct spi_imx_data *spi_imx)
661
{
662
	while (spi_imx->txfifo < spi_imx_get_fifosize(spi_imx)) {
663
		if (!spi_imx->count)
664
			break;
665 666
		spi_imx->tx(spi_imx);
		spi_imx->txfifo++;
667 668
	}

669
	spi_imx->devtype_data->trigger(spi_imx);
670 671
}

672
static irqreturn_t spi_imx_isr(int irq, void *dev_id)
673
{
674
	struct spi_imx_data *spi_imx = dev_id;
675

676
	while (spi_imx->devtype_data->rx_available(spi_imx)) {
677 678
		spi_imx->rx(spi_imx);
		spi_imx->txfifo--;
679 680
	}

681 682
	if (spi_imx->count) {
		spi_imx_push(spi_imx);
683 684 685
		return IRQ_HANDLED;
	}

686
	if (spi_imx->txfifo) {
687 688 689
		/* No data left to push, but still waiting for rx data,
		 * enable receive data available interrupt.
		 */
690
		spi_imx->devtype_data->intctrl(
691
				spi_imx, MXC_INT_RR);
692 693 694
		return IRQ_HANDLED;
	}

695
	spi_imx->devtype_data->intctrl(spi_imx, 0);
696
	complete(&spi_imx->xfer_done);
697 698 699 700

	return IRQ_HANDLED;
}

701
static int spi_imx_setupxfer(struct spi_device *spi,
702 703
				 struct spi_transfer *t)
{
704 705
	struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);
	struct spi_imx_config config;
706 707 708 709

	config.bpw = t ? t->bits_per_word : spi->bits_per_word;
	config.speed_hz  = t ? t->speed_hz : spi->max_speed_hz;
	config.mode = spi->mode;
710
	config.cs = spi->chip_select;
711

S
Sascha Hauer 已提交
712 713 714 715 716
	if (!config.speed_hz)
		config.speed_hz = spi->max_speed_hz;
	if (!config.bpw)
		config.bpw = spi->bits_per_word;

717 718 719 720 721 722 723
	/* Initialize the functions for transfer */
	if (config.bpw <= 8) {
		spi_imx->rx = spi_imx_buf_rx_u8;
		spi_imx->tx = spi_imx_buf_tx_u8;
	} else if (config.bpw <= 16) {
		spi_imx->rx = spi_imx_buf_rx_u16;
		spi_imx->tx = spi_imx_buf_tx_u16;
724
	} else {
725 726
		spi_imx->rx = spi_imx_buf_rx_u32;
		spi_imx->tx = spi_imx_buf_tx_u32;
727
	}
728

729
	spi_imx->devtype_data->config(spi_imx, &config);
730 731 732 733

	return 0;
}

734
static int spi_imx_transfer(struct spi_device *spi,
735 736
				struct spi_transfer *transfer)
{
737
	struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);
738

739 740 741 742
	spi_imx->tx_buf = transfer->tx_buf;
	spi_imx->rx_buf = transfer->rx_buf;
	spi_imx->count = transfer->len;
	spi_imx->txfifo = 0;
743

744
	init_completion(&spi_imx->xfer_done);
745

746
	spi_imx_push(spi_imx);
747

748
	spi_imx->devtype_data->intctrl(spi_imx, MXC_INT_TE);
749

750
	wait_for_completion(&spi_imx->xfer_done);
751 752 753 754

	return transfer->len;
}

755
static int spi_imx_setup(struct spi_device *spi)
756
{
757 758 759
	struct spi_imx_data *spi_imx = spi_master_get_devdata(spi->master);
	int gpio = spi_imx->chipselect[spi->chip_select];

760
	dev_dbg(&spi->dev, "%s: mode %d, %u bpw, %d hz\n", __func__,
761 762
		 spi->mode, spi->bits_per_word, spi->max_speed_hz);

763
	if (gpio_is_valid(gpio))
764 765
		gpio_direction_output(gpio, spi->mode & SPI_CS_HIGH ? 0 : 1);

766
	spi_imx_chipselect(spi, BITBANG_CS_INACTIVE);
767 768 769 770

	return 0;
}

771
static void spi_imx_cleanup(struct spi_device *spi)
772 773 774
{
}

775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803
static int
spi_imx_prepare_message(struct spi_master *master, struct spi_message *msg)
{
	struct spi_imx_data *spi_imx = spi_master_get_devdata(master);
	int ret;

	ret = clk_enable(spi_imx->clk_per);
	if (ret)
		return ret;

	ret = clk_enable(spi_imx->clk_ipg);
	if (ret) {
		clk_disable(spi_imx->clk_per);
		return ret;
	}

	return 0;
}

static int
spi_imx_unprepare_message(struct spi_master *master, struct spi_message *msg)
{
	struct spi_imx_data *spi_imx = spi_master_get_devdata(master);

	clk_disable(spi_imx->clk_ipg);
	clk_disable(spi_imx->clk_per);
	return 0;
}

804
static int spi_imx_probe(struct platform_device *pdev)
805
{
806 807 808 809 810
	struct device_node *np = pdev->dev.of_node;
	const struct of_device_id *of_id =
			of_match_device(spi_imx_dt_ids, &pdev->dev);
	struct spi_imx_master *mxc_platform_info =
			dev_get_platdata(&pdev->dev);
811
	struct spi_master *master;
812
	struct spi_imx_data *spi_imx;
813
	struct resource *res;
814
	int i, ret, num_cs;
815

816
	if (!np && !mxc_platform_info) {
817 818 819 820
		dev_err(&pdev->dev, "can't get the platform data\n");
		return -EINVAL;
	}

821
	ret = of_property_read_u32(np, "fsl,spi-num-chipselects", &num_cs);
822 823 824 825 826 827
	if (ret < 0) {
		if (mxc_platform_info)
			num_cs = mxc_platform_info->num_chipselect;
		else
			return ret;
	}
828

829 830
	master = spi_alloc_master(&pdev->dev,
			sizeof(struct spi_imx_data) + sizeof(int) * num_cs);
831 832 833 834 835
	if (!master)
		return -ENOMEM;

	platform_set_drvdata(pdev, master);

836
	master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 32);
837
	master->bus_num = pdev->id;
838
	master->num_chipselect = num_cs;
839

840
	spi_imx = spi_master_get_devdata(master);
841
	spi_imx->bitbang.master = master;
842 843

	for (i = 0; i < master->num_chipselect; i++) {
844
		int cs_gpio = of_get_named_gpio(np, "cs-gpios", i);
845
		if (!gpio_is_valid(cs_gpio) && mxc_platform_info)
846
			cs_gpio = mxc_platform_info->chipselect[i];
847 848

		spi_imx->chipselect[i] = cs_gpio;
849
		if (!gpio_is_valid(cs_gpio))
850
			continue;
851

F
Fabio Estevam 已提交
852 853
		ret = devm_gpio_request(&pdev->dev, spi_imx->chipselect[i],
					DRIVER_NAME);
854
		if (ret) {
855
			dev_err(&pdev->dev, "can't get cs gpios\n");
F
Fabio Estevam 已提交
856
			goto out_master_put;
857 858 859
		}
	}

860 861 862 863 864
	spi_imx->bitbang.chipselect = spi_imx_chipselect;
	spi_imx->bitbang.setup_transfer = spi_imx_setupxfer;
	spi_imx->bitbang.txrx_bufs = spi_imx_transfer;
	spi_imx->bitbang.master->setup = spi_imx_setup;
	spi_imx->bitbang.master->cleanup = spi_imx_cleanup;
865 866
	spi_imx->bitbang.master->prepare_message = spi_imx_prepare_message;
	spi_imx->bitbang.master->unprepare_message = spi_imx_unprepare_message;
867
	spi_imx->bitbang.master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
868

869
	init_completion(&spi_imx->xfer_done);
870

871
	spi_imx->devtype_data = of_id ? of_id->data :
872
		(struct spi_imx_devtype_data *) pdev->id_entry->driver_data;
873

874
	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
F
Fabio Estevam 已提交
875 876 877 878
	spi_imx->base = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(spi_imx->base)) {
		ret = PTR_ERR(spi_imx->base);
		goto out_master_put;
879 880
	}

881
	spi_imx->irq = platform_get_irq(pdev, 0);
882
	if (spi_imx->irq < 0) {
883
		ret = spi_imx->irq;
F
Fabio Estevam 已提交
884
		goto out_master_put;
885 886
	}

F
Fabio Estevam 已提交
887 888
	ret = devm_request_irq(&pdev->dev, spi_imx->irq, spi_imx_isr, 0,
			       DRIVER_NAME, spi_imx);
889
	if (ret) {
890
		dev_err(&pdev->dev, "can't get irq%d: %d\n", spi_imx->irq, ret);
F
Fabio Estevam 已提交
891
		goto out_master_put;
892 893
	}

894 895 896
	spi_imx->clk_ipg = devm_clk_get(&pdev->dev, "ipg");
	if (IS_ERR(spi_imx->clk_ipg)) {
		ret = PTR_ERR(spi_imx->clk_ipg);
F
Fabio Estevam 已提交
897
		goto out_master_put;
898 899
	}

900 901 902
	spi_imx->clk_per = devm_clk_get(&pdev->dev, "per");
	if (IS_ERR(spi_imx->clk_per)) {
		ret = PTR_ERR(spi_imx->clk_per);
F
Fabio Estevam 已提交
903
		goto out_master_put;
904 905
	}

906 907 908 909 910 911 912
	ret = clk_prepare_enable(spi_imx->clk_per);
	if (ret)
		goto out_master_put;

	ret = clk_prepare_enable(spi_imx->clk_ipg);
	if (ret)
		goto out_put_per;
913 914

	spi_imx->spi_clk = clk_get_rate(spi_imx->clk_per);
915

916
	spi_imx->devtype_data->reset(spi_imx);
917

918
	spi_imx->devtype_data->intctrl(spi_imx, 0);
919

920
	master->dev.of_node = pdev->dev.of_node;
921
	ret = spi_bitbang_start(&spi_imx->bitbang);
922 923 924 925 926 927 928
	if (ret) {
		dev_err(&pdev->dev, "bitbang start failed with %d\n", ret);
		goto out_clk_put;
	}

	dev_info(&pdev->dev, "probed\n");

929 930
	clk_disable(spi_imx->clk_ipg);
	clk_disable(spi_imx->clk_per);
931 932 933
	return ret;

out_clk_put:
934
	clk_disable_unprepare(spi_imx->clk_ipg);
935 936
out_put_per:
	clk_disable_unprepare(spi_imx->clk_per);
F
Fabio Estevam 已提交
937
out_master_put:
938
	spi_master_put(master);
F
Fabio Estevam 已提交
939

940 941 942
	return ret;
}

943
static int spi_imx_remove(struct platform_device *pdev)
944 945
{
	struct spi_master *master = platform_get_drvdata(pdev);
946
	struct spi_imx_data *spi_imx = spi_master_get_devdata(master);
947

948
	spi_bitbang_stop(&spi_imx->bitbang);
949

950
	writel(0, spi_imx->base + MXC_CSPICTRL);
951
	clk_disable_unprepare(spi_imx->clk_ipg);
952
	clk_disable_unprepare(spi_imx->clk_per);
953 954 955 956 957
	spi_master_put(master);

	return 0;
}

958
static struct platform_driver spi_imx_driver = {
959 960 961
	.driver = {
		   .name = DRIVER_NAME,
		   .owner = THIS_MODULE,
962
		   .of_match_table = spi_imx_dt_ids,
963
		   },
964
	.id_table = spi_imx_devtype,
965
	.probe = spi_imx_probe,
966
	.remove = spi_imx_remove,
967
};
968
module_platform_driver(spi_imx_driver);
969 970 971 972

MODULE_DESCRIPTION("SPI Master Controller driver");
MODULE_AUTHOR("Sascha Hauer, Pengutronix");
MODULE_LICENSE("GPL");
F
Fabio Estevam 已提交
973
MODULE_ALIAS("platform:" DRIVER_NAME);