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
/*
 * 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/interrupt.h>
#include <linux/io.h>
#include <linux/irq.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/platform_device.h>
32
#include <linux/slab.h>
33 34 35
#include <linux/spi/spi.h>
#include <linux/spi/spi_bitbang.h>
#include <linux/types.h>
36 37 38
#include <linux/of.h>
#include <linux/of_device.h>
#include <linux/of_gpio.h>
39

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

#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 */

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

61
enum spi_imx_devtype {
62 63 64 65 66 67
	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 */
68 69 70 71 72 73 74 75 76
};

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 *);
77
	void (*reset)(struct spi_imx_data *);
78
	enum spi_imx_devtype devtype;
79 80
};

81
struct spi_imx_data {
82 83 84
	struct spi_bitbang bitbang;

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

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

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

102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
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;
}

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

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

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 */
157
static unsigned int spi_imx_clkdiv_1(unsigned int fin,
158
		unsigned int fspi, unsigned int max)
159
{
160
	int i;
161 162 163 164 165 166 167 168

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

	return max;
}

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

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

	return 7;
}

184 185 186 187 188 189 190 191 192 193 194 195 196 197
#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))
198
#define MX51_ECSPI_CONFIG_SCLKCTL(cs)	(1 << ((cs) + 20))
199 200 201 202 203 204 205

#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)
206 207

/* MX51 eCSPI */
208 209
static unsigned int mx51_ecspi_clkdiv(unsigned int fin, unsigned int fspi,
				      unsigned int *fres)
210 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
{
	/*
	 * 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);
237 238 239 240

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

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

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

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

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

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

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

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

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

273 274 275 276 277 278 279
	/*
	 * 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.
	 */
280
	ctrl |= MX51_ECSPI_CTRL_MODE_MASK;
281 282

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

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

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

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

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

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

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

305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321
	/*
	 * 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);

322 323 324
	return 0;
}

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

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

337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359
#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.
 */
360
static void __maybe_unused mx31_intctrl(struct spi_imx_data *spi_imx, int enable)
361 362 363 364 365 366 367 368
{
	unsigned int val = 0;

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

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

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

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

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

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

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

	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;
403
	if (cs < 0)
404
		reg |= (cs + 32) <<
405 406
			(is_imx35_cspi(spi_imx) ? MX35_CSPICTRL_CS_SHIFT :
						  MX31_CSPICTRL_CS_SHIFT);
407 408 409 410 411 412

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

	return 0;
}

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

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

425 426 427 428 429 430 431 432 433 434 435 436 437 438
#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)
439 440 441 442
{
	unsigned int val = 0;

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

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

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

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

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

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

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

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

	return 0;
}

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

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

494 495 496 497 498 499 500 501 502 503 504
#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

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

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

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

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

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

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

531
	reg |= spi_imx_clkdiv_2(spi_imx->spi_clk, config->speed_hz) <<
532 533 534 535 536 537 538 539
		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;

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

	return 0;
}

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

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

555 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
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 */
	}
633 634
};

635 636 637 638 639 640 641 642 643
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 */ }
};
644
MODULE_DEVICE_TABLE(of, spi_imx_dt_ids);
645

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

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

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

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

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

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

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

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

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

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

	return IRQ_HANDLED;
}

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

	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;
709
	config.cs = spi->chip_select;
710

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

716 717 718 719 720 721 722
	/* 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;
723
	} else {
724 725
		spi_imx->rx = spi_imx_buf_rx_u32;
		spi_imx->tx = spi_imx_buf_tx_u32;
726
	}
727

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

	return 0;
}

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

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

743
	reinit_completion(&spi_imx->xfer_done);
744

745
	spi_imx_push(spi_imx);
746

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

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

	return transfer->len;
}

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

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

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

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

	return 0;
}

770
static void spi_imx_cleanup(struct spi_device *spi)
771 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
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;
}

803
static int spi_imx_probe(struct platform_device *pdev)
804
{
805 806 807 808 809
	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);
810
	struct spi_master *master;
811
	struct spi_imx_data *spi_imx;
812
	struct resource *res;
813
	int i, ret, num_cs;
814

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

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

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

	platform_set_drvdata(pdev, master);

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

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

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

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

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

859 860 861 862 863
	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;
864 865
	spi_imx->bitbang.master->prepare_message = spi_imx_prepare_message;
	spi_imx->bitbang.master->unprepare_message = spi_imx_unprepare_message;
866
	spi_imx->bitbang.master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
867

868
	init_completion(&spi_imx->xfer_done);
869

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

873
	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
F
Fabio Estevam 已提交
874 875 876 877
	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;
878 879
	}

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

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

893 894 895
	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 已提交
896
		goto out_master_put;
897 898
	}

899 900 901
	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 已提交
902
		goto out_master_put;
903 904
	}

905 906 907 908 909 910 911
	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;
912 913

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

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

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

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

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

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

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

939 940 941
	return ret;
}

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

947
	spi_bitbang_stop(&spi_imx->bitbang);
948

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

	return 0;
}

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

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