spi-pxa2xx.c 49.6 KB
Newer Older
1 2
/*
 * Copyright (C) 2005 Stephen Street / StreetFire Sound Labs
3
 * Copyright (C) 2013, Intel Corporation
4 5 6 7 8 9 10 11 12 13 14 15
 *
 * 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.
 */

16
#include <linux/bitops.h>
17 18 19 20 21
#include <linux/init.h>
#include <linux/module.h>
#include <linux/device.h>
#include <linux/ioport.h>
#include <linux/errno.h>
22
#include <linux/err.h>
23
#include <linux/interrupt.h>
24
#include <linux/kernel.h>
25
#include <linux/pci.h>
26
#include <linux/platform_device.h>
27
#include <linux/spi/pxa2xx_spi.h>
28 29
#include <linux/spi/spi.h>
#include <linux/delay.h>
30
#include <linux/gpio.h>
31
#include <linux/gpio/consumer.h>
32
#include <linux/slab.h>
33
#include <linux/clk.h>
34
#include <linux/pm_runtime.h>
35
#include <linux/acpi.h>
36
#include <linux/of_device.h>
37

38
#include "spi-pxa2xx.h"
39 40

MODULE_AUTHOR("Stephen Street");
W
Will Newton 已提交
41
MODULE_DESCRIPTION("PXA2xx SSP SPI Controller");
42
MODULE_LICENSE("GPL");
43
MODULE_ALIAS("platform:pxa2xx-spi");
44

45 46
#define TIMOUT_DFLT		1000

47 48 49 50 51 52 53 54
/*
 * for testing SSCR1 changes that require SSP restart, basically
 * everything except the service and interrupt enables, the pxa270 developer
 * manual says only SSCR1_SCFR, SSCR1_SPH, SSCR1_SPO need to be in this
 * list, but the PXA255 dev man says all bits without really meaning the
 * service and interrupt enables
 */
#define SSCR1_CHANGE_MASK (SSCR1_TTELP | SSCR1_TTE | SSCR1_SCFR \
55
				| SSCR1_ECRA | SSCR1_ECRB | SSCR1_SCLKDIR \
56 57 58 59
				| SSCR1_SFRMDIR | SSCR1_RWOT | SSCR1_TRAIL \
				| SSCR1_IFS | SSCR1_STRF | SSCR1_EFWR \
				| SSCR1_RFT | SSCR1_TFT | SSCR1_MWDS \
				| SSCR1_SPH | SSCR1_SPO | SSCR1_LBM)
60

61 62 63 64 65 66
#define QUARK_X1000_SSCR1_CHANGE_MASK (QUARK_X1000_SSCR1_STRF	\
				| QUARK_X1000_SSCR1_EFWR	\
				| QUARK_X1000_SSCR1_RFT		\
				| QUARK_X1000_SSCR1_TFT		\
				| SSCR1_SPH | SSCR1_SPO | SSCR1_LBM)

67 68 69 70 71 72 73
#define CE4100_SSCR1_CHANGE_MASK (SSCR1_TTELP | SSCR1_TTE | SSCR1_SCFR \
				| SSCR1_ECRA | SSCR1_ECRB | SSCR1_SCLKDIR \
				| SSCR1_SFRMDIR | SSCR1_RWOT | SSCR1_TRAIL \
				| SSCR1_IFS | SSCR1_STRF | SSCR1_EFWR \
				| CE4100_SSCR1_RFT | CE4100_SSCR1_TFT | SSCR1_MWDS \
				| SSCR1_SPH | SSCR1_SPO | SSCR1_LBM)

74 75 76
#define LPSS_GENERAL_REG_RXTO_HOLDOFF_DISABLE	BIT(24)
#define LPSS_CS_CONTROL_SW_MODE			BIT(0)
#define LPSS_CS_CONTROL_CS_HIGH			BIT(1)
77 78
#define LPSS_CAPS_CS_EN_SHIFT			9
#define LPSS_CAPS_CS_EN_MASK			(0xf << LPSS_CAPS_CS_EN_SHIFT)
79

80 81 82 83 84 85 86
struct lpss_config {
	/* LPSS offset from drv_data->ioaddr */
	unsigned offset;
	/* Register offsets from drv_data->lpss_base or -1 */
	int reg_general;
	int reg_ssp;
	int reg_cs_ctrl;
87
	int reg_capabilities;
88 89 90 91
	/* FIFO thresholds */
	u32 rx_threshold;
	u32 tx_threshold_lo;
	u32 tx_threshold_hi;
92 93 94
	/* Chip select control */
	unsigned cs_sel_shift;
	unsigned cs_sel_mask;
95
	unsigned cs_num;
96 97 98 99 100 101 102 103 104
};

/* Keep these sorted with enum pxa_ssp_type */
static const struct lpss_config lpss_platforms[] = {
	{	/* LPSS_LPT_SSP */
		.offset = 0x800,
		.reg_general = 0x08,
		.reg_ssp = 0x0c,
		.reg_cs_ctrl = 0x18,
105
		.reg_capabilities = -1,
106 107 108 109 110 111 112 113 114
		.rx_threshold = 64,
		.tx_threshold_lo = 160,
		.tx_threshold_hi = 224,
	},
	{	/* LPSS_BYT_SSP */
		.offset = 0x400,
		.reg_general = 0x08,
		.reg_ssp = 0x0c,
		.reg_cs_ctrl = 0x18,
115
		.reg_capabilities = -1,
116 117 118 119
		.rx_threshold = 64,
		.tx_threshold_lo = 160,
		.tx_threshold_hi = 224,
	},
120 121 122 123 124 125 126 127 128 129 130 131 132
	{	/* LPSS_BSW_SSP */
		.offset = 0x400,
		.reg_general = 0x08,
		.reg_ssp = 0x0c,
		.reg_cs_ctrl = 0x18,
		.reg_capabilities = -1,
		.rx_threshold = 64,
		.tx_threshold_lo = 160,
		.tx_threshold_hi = 224,
		.cs_sel_shift = 2,
		.cs_sel_mask = 1 << 2,
		.cs_num = 2,
	},
133 134 135 136 137
	{	/* LPSS_SPT_SSP */
		.offset = 0x200,
		.reg_general = -1,
		.reg_ssp = 0x20,
		.reg_cs_ctrl = 0x24,
138
		.reg_capabilities = -1,
139 140 141 142
		.rx_threshold = 1,
		.tx_threshold_lo = 32,
		.tx_threshold_hi = 56,
	},
143 144 145 146 147 148 149 150 151
	{	/* LPSS_BXT_SSP */
		.offset = 0x200,
		.reg_general = -1,
		.reg_ssp = 0x20,
		.reg_cs_ctrl = 0x24,
		.reg_capabilities = 0xfc,
		.rx_threshold = 1,
		.tx_threshold_lo = 16,
		.tx_threshold_hi = 48,
152 153
		.cs_sel_shift = 8,
		.cs_sel_mask = 3 << 8,
154
	},
155 156 157 158 159 160 161 162 163 164 165 166
	{	/* LPSS_CNL_SSP */
		.offset = 0x200,
		.reg_general = -1,
		.reg_ssp = 0x20,
		.reg_cs_ctrl = 0x24,
		.reg_capabilities = 0xfc,
		.rx_threshold = 1,
		.tx_threshold_lo = 32,
		.tx_threshold_hi = 56,
		.cs_sel_shift = 8,
		.cs_sel_mask = 3 << 8,
	},
167 168 169 170 171 172 173 174
};

static inline const struct lpss_config
*lpss_get_config(const struct driver_data *drv_data)
{
	return &lpss_platforms[drv_data->ssp_type - LPSS_LPT_SSP];
}

175 176
static bool is_lpss_ssp(const struct driver_data *drv_data)
{
177 178 179
	switch (drv_data->ssp_type) {
	case LPSS_LPT_SSP:
	case LPSS_BYT_SSP:
180
	case LPSS_BSW_SSP:
181
	case LPSS_SPT_SSP:
182
	case LPSS_BXT_SSP:
183
	case LPSS_CNL_SSP:
184 185 186 187
		return true;
	default:
		return false;
	}
188 189
}

190 191 192 193 194
static bool is_quark_x1000_ssp(const struct driver_data *drv_data)
{
	return drv_data->ssp_type == QUARK_X1000_SSP;
}

195 196 197
static u32 pxa2xx_spi_get_ssrc1_change_mask(const struct driver_data *drv_data)
{
	switch (drv_data->ssp_type) {
198 199
	case QUARK_X1000_SSP:
		return QUARK_X1000_SSCR1_CHANGE_MASK;
200 201
	case CE4100_SSP:
		return CE4100_SSCR1_CHANGE_MASK;
202 203 204 205 206 207 208 209 210
	default:
		return SSCR1_CHANGE_MASK;
	}
}

static u32
pxa2xx_spi_get_rx_default_thre(const struct driver_data *drv_data)
{
	switch (drv_data->ssp_type) {
211 212
	case QUARK_X1000_SSP:
		return RX_THRESH_QUARK_X1000_DFLT;
213 214
	case CE4100_SSP:
		return RX_THRESH_CE4100_DFLT;
215 216 217 218 219 220 221 222 223 224
	default:
		return RX_THRESH_DFLT;
	}
}

static bool pxa2xx_spi_txfifo_full(const struct driver_data *drv_data)
{
	u32 mask;

	switch (drv_data->ssp_type) {
225 226 227
	case QUARK_X1000_SSP:
		mask = QUARK_X1000_SSSR_TFL_MASK;
		break;
228 229 230
	case CE4100_SSP:
		mask = CE4100_SSSR_TFL_MASK;
		break;
231 232 233 234 235
	default:
		mask = SSSR_TFL_MASK;
		break;
	}

236
	return (pxa2xx_spi_read(drv_data, SSSR) & mask) == mask;
237 238 239 240 241 242 243 244
}

static void pxa2xx_spi_clear_rx_thre(const struct driver_data *drv_data,
				     u32 *sccr1_reg)
{
	u32 mask;

	switch (drv_data->ssp_type) {
245 246 247
	case QUARK_X1000_SSP:
		mask = QUARK_X1000_SSCR1_RFT;
		break;
248 249 250
	case CE4100_SSP:
		mask = CE4100_SSCR1_RFT;
		break;
251 252 253 254 255 256 257 258 259 260 261
	default:
		mask = SSCR1_RFT;
		break;
	}
	*sccr1_reg &= ~mask;
}

static void pxa2xx_spi_set_rx_thre(const struct driver_data *drv_data,
				   u32 *sccr1_reg, u32 threshold)
{
	switch (drv_data->ssp_type) {
262 263 264
	case QUARK_X1000_SSP:
		*sccr1_reg |= QUARK_X1000_SSCR1_RxTresh(threshold);
		break;
265 266 267
	case CE4100_SSP:
		*sccr1_reg |= CE4100_SSCR1_RxTresh(threshold);
		break;
268 269 270 271 272 273 274 275 276 277
	default:
		*sccr1_reg |= SSCR1_RxTresh(threshold);
		break;
	}
}

static u32 pxa2xx_configure_sscr0(const struct driver_data *drv_data,
				  u32 clk_div, u8 bits)
{
	switch (drv_data->ssp_type) {
278 279 280 281 282
	case QUARK_X1000_SSP:
		return clk_div
			| QUARK_X1000_SSCR0_Motorola
			| QUARK_X1000_SSCR0_DataSize(bits > 32 ? 8 : bits)
			| SSCR0_SSE;
283 284 285 286 287 288 289 290 291
	default:
		return clk_div
			| SSCR0_Motorola
			| SSCR0_DataSize(bits > 16 ? bits - 16 : bits)
			| SSCR0_SSE
			| (bits > 16 ? SSCR0_EDSS : 0);
	}
}

292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317
/*
 * Read and write LPSS SSP private registers. Caller must first check that
 * is_lpss_ssp() returns true before these can be called.
 */
static u32 __lpss_ssp_read_priv(struct driver_data *drv_data, unsigned offset)
{
	WARN_ON(!drv_data->lpss_base);
	return readl(drv_data->lpss_base + offset);
}

static void __lpss_ssp_write_priv(struct driver_data *drv_data,
				  unsigned offset, u32 value)
{
	WARN_ON(!drv_data->lpss_base);
	writel(value, drv_data->lpss_base + offset);
}

/*
 * lpss_ssp_setup - perform LPSS SSP specific setup
 * @drv_data: pointer to the driver private data
 *
 * Perform LPSS SSP specific setup. This function must be called first if
 * one is going to use LPSS SSP private registers.
 */
static void lpss_ssp_setup(struct driver_data *drv_data)
{
318 319
	const struct lpss_config *config;
	u32 value;
320

321 322
	config = lpss_get_config(drv_data);
	drv_data->lpss_base = drv_data->ioaddr + config->offset;
323 324

	/* Enable software chip select control */
325
	value = __lpss_ssp_read_priv(drv_data, config->reg_cs_ctrl);
326 327
	value &= ~(LPSS_CS_CONTROL_SW_MODE | LPSS_CS_CONTROL_CS_HIGH);
	value |= LPSS_CS_CONTROL_SW_MODE | LPSS_CS_CONTROL_CS_HIGH;
328
	__lpss_ssp_write_priv(drv_data, config->reg_cs_ctrl, value);
329 330

	/* Enable multiblock DMA transfers */
331
	if (drv_data->master_info->enable_dma) {
332
		__lpss_ssp_write_priv(drv_data, config->reg_ssp, 1);
333

334 335 336
		if (config->reg_general >= 0) {
			value = __lpss_ssp_read_priv(drv_data,
						     config->reg_general);
337
			value |= LPSS_GENERAL_REG_RXTO_HOLDOFF_DISABLE;
338 339 340
			__lpss_ssp_write_priv(drv_data,
					      config->reg_general, value);
		}
341
	}
342 343
}

344
static void lpss_ssp_select_cs(struct spi_device *spi,
345 346
			       const struct lpss_config *config)
{
347 348
	struct driver_data *drv_data =
		spi_controller_get_devdata(spi->controller);
349 350 351 352 353 354 355
	u32 value, cs;

	if (!config->cs_sel_mask)
		return;

	value = __lpss_ssp_read_priv(drv_data, config->reg_cs_ctrl);

356
	cs = spi->chip_select;
357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374
	cs <<= config->cs_sel_shift;
	if (cs != (value & config->cs_sel_mask)) {
		/*
		 * When switching another chip select output active the
		 * output must be selected first and wait 2 ssp_clk cycles
		 * before changing state to active. Otherwise a short
		 * glitch will occur on the previous chip select since
		 * output select is latched but state control is not.
		 */
		value &= ~config->cs_sel_mask;
		value |= cs;
		__lpss_ssp_write_priv(drv_data,
				      config->reg_cs_ctrl, value);
		ndelay(1000000000 /
		       (drv_data->master->max_speed_hz / 2));
	}
}

375
static void lpss_ssp_cs_control(struct spi_device *spi, bool enable)
376
{
377 378
	struct driver_data *drv_data =
		spi_controller_get_devdata(spi->controller);
379
	const struct lpss_config *config;
380
	u32 value;
381

382 383
	config = lpss_get_config(drv_data);

384
	if (enable)
385
		lpss_ssp_select_cs(spi, config);
386

387
	value = __lpss_ssp_read_priv(drv_data, config->reg_cs_ctrl);
388
	if (enable)
389
		value &= ~LPSS_CS_CONTROL_CS_HIGH;
390
	else
391
		value |= LPSS_CS_CONTROL_CS_HIGH;
392
	__lpss_ssp_write_priv(drv_data, config->reg_cs_ctrl, value);
393 394
}

395
static void cs_assert(struct spi_device *spi)
396
{
397 398 399
	struct chip_data *chip = spi_get_ctldata(spi);
	struct driver_data *drv_data =
		spi_controller_get_devdata(spi->controller);
400

401
	if (drv_data->ssp_type == CE4100_SSP) {
402
		pxa2xx_spi_write(drv_data, SSSR, chip->frm);
403 404 405
		return;
	}

406 407 408 409 410
	if (chip->cs_control) {
		chip->cs_control(PXA2XX_CS_ASSERT);
		return;
	}

411 412
	if (chip->gpiod_cs) {
		gpiod_set_value(chip->gpiod_cs, chip->gpio_cs_inverted);
413 414 415
		return;
	}

416
	if (is_lpss_ssp(drv_data))
417
		lpss_ssp_cs_control(spi, true);
418 419
}

420
static void cs_deassert(struct spi_device *spi)
421
{
422 423 424
	struct chip_data *chip = spi_get_ctldata(spi);
	struct driver_data *drv_data =
		spi_controller_get_devdata(spi->controller);
425
	unsigned long timeout;
426

427 428 429
	if (drv_data->ssp_type == CE4100_SSP)
		return;

430 431 432 433 434 435
	/* Wait until SSP becomes idle before deasserting the CS */
	timeout = jiffies + msecs_to_jiffies(10);
	while (pxa2xx_spi_read(drv_data, SSSR) & SSSR_BSY &&
	       !time_after(jiffies, timeout))
		cpu_relax();

436
	if (chip->cs_control) {
437
		chip->cs_control(PXA2XX_CS_DEASSERT);
438 439 440
		return;
	}

441 442
	if (chip->gpiod_cs) {
		gpiod_set_value(chip->gpiod_cs, !chip->gpio_cs_inverted);
443 444 445
		return;
	}

446
	if (is_lpss_ssp(drv_data))
447 448 449 450 451 452 453 454 455
		lpss_ssp_cs_control(spi, false);
}

static void pxa2xx_spi_set_cs(struct spi_device *spi, bool level)
{
	if (level)
		cs_deassert(spi);
	else
		cs_assert(spi);
456 457
}

458
int pxa2xx_spi_flush(struct driver_data *drv_data)
459 460 461 462
{
	unsigned long limit = loops_per_jiffy << 1;

	do {
463 464 465
		while (pxa2xx_spi_read(drv_data, SSSR) & SSSR_RNE)
			pxa2xx_spi_read(drv_data, SSDR);
	} while ((pxa2xx_spi_read(drv_data, SSSR) & SSSR_BSY) && --limit);
466
	write_SSSR_CS(drv_data, SSSR_ROR);
467 468 469 470

	return limit;
}

471
static int null_writer(struct driver_data *drv_data)
472
{
473
	u8 n_bytes = drv_data->n_bytes;
474

475
	if (pxa2xx_spi_txfifo_full(drv_data)
476 477 478
		|| (drv_data->tx == drv_data->tx_end))
		return 0;

479
	pxa2xx_spi_write(drv_data, SSDR, 0);
480 481 482
	drv_data->tx += n_bytes;

	return 1;
483 484
}

485
static int null_reader(struct driver_data *drv_data)
486
{
487
	u8 n_bytes = drv_data->n_bytes;
488

489 490 491
	while ((pxa2xx_spi_read(drv_data, SSSR) & SSSR_RNE)
	       && (drv_data->rx < drv_data->rx_end)) {
		pxa2xx_spi_read(drv_data, SSDR);
492 493
		drv_data->rx += n_bytes;
	}
494 495

	return drv_data->rx == drv_data->rx_end;
496 497
}

498
static int u8_writer(struct driver_data *drv_data)
499
{
500
	if (pxa2xx_spi_txfifo_full(drv_data)
501 502 503
		|| (drv_data->tx == drv_data->tx_end))
		return 0;

504
	pxa2xx_spi_write(drv_data, SSDR, *(u8 *)(drv_data->tx));
505 506 507
	++drv_data->tx;

	return 1;
508 509
}

510
static int u8_reader(struct driver_data *drv_data)
511
{
512 513 514
	while ((pxa2xx_spi_read(drv_data, SSSR) & SSSR_RNE)
	       && (drv_data->rx < drv_data->rx_end)) {
		*(u8 *)(drv_data->rx) = pxa2xx_spi_read(drv_data, SSDR);
515 516
		++drv_data->rx;
	}
517 518

	return drv_data->rx == drv_data->rx_end;
519 520
}

521
static int u16_writer(struct driver_data *drv_data)
522
{
523
	if (pxa2xx_spi_txfifo_full(drv_data)
524 525 526
		|| (drv_data->tx == drv_data->tx_end))
		return 0;

527
	pxa2xx_spi_write(drv_data, SSDR, *(u16 *)(drv_data->tx));
528 529 530
	drv_data->tx += 2;

	return 1;
531 532
}

533
static int u16_reader(struct driver_data *drv_data)
534
{
535 536 537
	while ((pxa2xx_spi_read(drv_data, SSSR) & SSSR_RNE)
	       && (drv_data->rx < drv_data->rx_end)) {
		*(u16 *)(drv_data->rx) = pxa2xx_spi_read(drv_data, SSDR);
538 539
		drv_data->rx += 2;
	}
540 541

	return drv_data->rx == drv_data->rx_end;
542
}
543 544

static int u32_writer(struct driver_data *drv_data)
545
{
546
	if (pxa2xx_spi_txfifo_full(drv_data)
547 548 549
		|| (drv_data->tx == drv_data->tx_end))
		return 0;

550
	pxa2xx_spi_write(drv_data, SSDR, *(u32 *)(drv_data->tx));
551 552 553
	drv_data->tx += 4;

	return 1;
554 555
}

556
static int u32_reader(struct driver_data *drv_data)
557
{
558 559 560
	while ((pxa2xx_spi_read(drv_data, SSSR) & SSSR_RNE)
	       && (drv_data->rx < drv_data->rx_end)) {
		*(u32 *)(drv_data->rx) = pxa2xx_spi_read(drv_data, SSDR);
561 562
		drv_data->rx += 4;
	}
563 564

	return drv_data->rx == drv_data->rx_end;
565 566
}

567 568
static void reset_sccr1(struct driver_data *drv_data)
{
569 570
	struct chip_data *chip =
		spi_get_ctldata(drv_data->master->cur_msg->spi);
571 572
	u32 sccr1_reg;

573
	sccr1_reg = pxa2xx_spi_read(drv_data, SSCR1) & ~drv_data->int_cr1;
574 575 576 577
	switch (drv_data->ssp_type) {
	case QUARK_X1000_SSP:
		sccr1_reg &= ~QUARK_X1000_SSCR1_RFT;
		break;
578 579 580
	case CE4100_SSP:
		sccr1_reg &= ~CE4100_SSCR1_RFT;
		break;
581 582 583 584
	default:
		sccr1_reg &= ~SSCR1_RFT;
		break;
	}
585
	sccr1_reg |= chip->threshold;
586
	pxa2xx_spi_write(drv_data, SSCR1, sccr1_reg);
587 588
}

589
static void int_error_stop(struct driver_data *drv_data, const char* msg)
590
{
591
	/* Stop and reset SSP */
592
	write_SSSR_CS(drv_data, drv_data->clear_sr);
593
	reset_sccr1(drv_data);
594
	if (!pxa25x_ssp_comp(drv_data))
595
		pxa2xx_spi_write(drv_data, SSTO, 0);
596
	pxa2xx_spi_flush(drv_data);
597 598
	pxa2xx_spi_write(drv_data, SSCR0,
			 pxa2xx_spi_read(drv_data, SSCR0) & ~SSCR0_SSE);
599

600
	dev_err(&drv_data->pdev->dev, "%s\n", msg);
601

602 603
	drv_data->master->cur_msg->status = -EIO;
	spi_finalize_current_transfer(drv_data->master);
604
}
S
Stephen Street 已提交
605

606 607
static void int_transfer_complete(struct driver_data *drv_data)
{
608
	/* Clear and disable interrupts */
609
	write_SSSR_CS(drv_data, drv_data->clear_sr);
610
	reset_sccr1(drv_data);
611
	if (!pxa25x_ssp_comp(drv_data))
612
		pxa2xx_spi_write(drv_data, SSTO, 0);
613

614
	spi_finalize_current_transfer(drv_data->master);
615
}
616

617 618
static irqreturn_t interrupt_transfer(struct driver_data *drv_data)
{
619 620
	u32 irq_mask = (pxa2xx_spi_read(drv_data, SSCR1) & SSCR1_TIE) ?
		       drv_data->mask_sr : drv_data->mask_sr & ~SSSR_TFS;
621

622
	u32 irq_status = pxa2xx_spi_read(drv_data, SSSR) & irq_mask;
623

624 625 626 627
	if (irq_status & SSSR_ROR) {
		int_error_stop(drv_data, "interrupt_transfer: fifo overrun");
		return IRQ_HANDLED;
	}
628

629 630 631 632 633
	if (irq_status & SSSR_TUR) {
		int_error_stop(drv_data, "interrupt_transfer: fifo underrun");
		return IRQ_HANDLED;
	}

634
	if (irq_status & SSSR_TINT) {
635
		pxa2xx_spi_write(drv_data, SSSR, SSSR_TINT);
636 637 638 639 640
		if (drv_data->read(drv_data)) {
			int_transfer_complete(drv_data);
			return IRQ_HANDLED;
		}
	}
641

642 643 644 645 646 647 648
	/* Drain rx fifo, Fill tx fifo and prevent overruns */
	do {
		if (drv_data->read(drv_data)) {
			int_transfer_complete(drv_data);
			return IRQ_HANDLED;
		}
	} while (drv_data->write(drv_data));
649

650 651 652 653
	if (drv_data->read(drv_data)) {
		int_transfer_complete(drv_data);
		return IRQ_HANDLED;
	}
654

655
	if (drv_data->tx == drv_data->tx_end) {
656 657 658
		u32 bytes_left;
		u32 sccr1_reg;

659
		sccr1_reg = pxa2xx_spi_read(drv_data, SSCR1);
660 661 662 663
		sccr1_reg &= ~SSCR1_TIE;

		/*
		 * PXA25x_SSP has no timeout, set up rx threshould for the
L
Lucas De Marchi 已提交
664
		 * remaining RX bytes.
665
		 */
666
		if (pxa25x_ssp_comp(drv_data)) {
667
			u32 rx_thre;
668

669
			pxa2xx_spi_clear_rx_thre(drv_data, &sccr1_reg);
670 671 672 673

			bytes_left = drv_data->rx_end - drv_data->rx;
			switch (drv_data->n_bytes) {
			case 4:
674 675
				bytes_left >>= 2;
				break;
676 677
			case 2:
				bytes_left >>= 1;
678
				break;
679
			}
680

681 682 683
			rx_thre = pxa2xx_spi_get_rx_default_thre(drv_data);
			if (rx_thre > bytes_left)
				rx_thre = bytes_left;
684

685
			pxa2xx_spi_set_rx_thre(drv_data, &sccr1_reg, rx_thre);
686
		}
687
		pxa2xx_spi_write(drv_data, SSCR1, sccr1_reg);
688 689
	}

S
Stephen Street 已提交
690 691
	/* We did something */
	return IRQ_HANDLED;
692 693
}

694 695 696 697 698 699 700 701 702 703 704 705 706 707
static void handle_bad_msg(struct driver_data *drv_data)
{
	pxa2xx_spi_write(drv_data, SSCR0,
			 pxa2xx_spi_read(drv_data, SSCR0) & ~SSCR0_SSE);
	pxa2xx_spi_write(drv_data, SSCR1,
			 pxa2xx_spi_read(drv_data, SSCR1) & ~drv_data->int_cr1);
	if (!pxa25x_ssp_comp(drv_data))
		pxa2xx_spi_write(drv_data, SSTO, 0);
	write_SSSR_CS(drv_data, drv_data->clear_sr);

	dev_err(&drv_data->pdev->dev,
		"bad message state in interrupt handler\n");
}

708
static irqreturn_t ssp_int(int irq, void *dev_id)
709
{
710
	struct driver_data *drv_data = dev_id;
711
	u32 sccr1_reg;
712 713 714
	u32 mask = drv_data->mask_sr;
	u32 status;

715 716 717 718 719 720 721 722 723
	/*
	 * The IRQ might be shared with other peripherals so we must first
	 * check that are we RPM suspended or not. If we are we assume that
	 * the IRQ was not for us (we shouldn't be RPM suspended when the
	 * interrupt is enabled).
	 */
	if (pm_runtime_suspended(&drv_data->pdev->dev))
		return IRQ_NONE;

724 725 726 727 728 729
	/*
	 * If the device is not yet in RPM suspended state and we get an
	 * interrupt that is meant for another device, check if status bits
	 * are all set to one. That means that the device is already
	 * powered off.
	 */
730
	status = pxa2xx_spi_read(drv_data, SSSR);
731 732 733
	if (status == ~0)
		return IRQ_NONE;

734
	sccr1_reg = pxa2xx_spi_read(drv_data, SSCR1);
735 736 737 738 739

	/* Ignore possible writes if we don't need to write */
	if (!(sccr1_reg & SSCR1_TIE))
		mask &= ~SSSR_TFS;

740 741 742 743
	/* Ignore RX timeout interrupt if it is disabled */
	if (!(sccr1_reg & SSCR1_TINTE))
		mask &= ~SSSR_TINT;

744 745
	if (!(status & mask))
		return IRQ_NONE;
746

747 748
	pxa2xx_spi_write(drv_data, SSCR1, sccr1_reg & ~drv_data->int_cr1);
	pxa2xx_spi_write(drv_data, SSCR1, sccr1_reg);
S
Stephen Street 已提交
749

750
	if (!drv_data->master->cur_msg) {
751
		handle_bad_msg(drv_data);
752 753 754 755 756 757 758
		/* Never fail */
		return IRQ_HANDLED;
	}

	return drv_data->transfer_handler(drv_data);
}

759
/*
760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789
 * The Quark SPI has an additional 24 bit register (DDS_CLK_RATE) to multiply
 * input frequency by fractions of 2^24. It also has a divider by 5.
 *
 * There are formulas to get baud rate value for given input frequency and
 * divider parameters, such as DDS_CLK_RATE and SCR:
 *
 * Fsys = 200MHz
 *
 * Fssp = Fsys * DDS_CLK_RATE / 2^24			(1)
 * Baud rate = Fsclk = Fssp / (2 * (SCR + 1))		(2)
 *
 * DDS_CLK_RATE either 2^n or 2^n / 5.
 * SCR is in range 0 .. 255
 *
 * Divisor = 5^i * 2^j * 2 * k
 *       i = [0, 1]      i = 1 iff j = 0 or j > 3
 *       j = [0, 23]     j = 0 iff i = 1
 *       k = [1, 256]
 * Special case: j = 0, i = 1: Divisor = 2 / 5
 *
 * Accordingly to the specification the recommended values for DDS_CLK_RATE
 * are:
 *	Case 1:		2^n, n = [0, 23]
 *	Case 2:		2^24 * 2 / 5 (0x666666)
 *	Case 3:		less than or equal to 2^24 / 5 / 16 (0x33333)
 *
 * In all cases the lowest possible value is better.
 *
 * The function calculates parameters for all cases and chooses the one closest
 * to the asked baud rate.
790
 */
791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809
static unsigned int quark_x1000_get_clk_div(int rate, u32 *dds)
{
	unsigned long xtal = 200000000;
	unsigned long fref = xtal / 2;		/* mandatory division by 2,
						   see (2) */
						/* case 3 */
	unsigned long fref1 = fref / 2;		/* case 1 */
	unsigned long fref2 = fref * 2 / 5;	/* case 2 */
	unsigned long scale;
	unsigned long q, q1, q2;
	long r, r1, r2;
	u32 mul;

	/* Case 1 */

	/* Set initial value for DDS_CLK_RATE */
	mul = (1 << 24) >> 1;

	/* Calculate initial quot */
810
	q1 = DIV_ROUND_UP(fref1, rate);
811 812 813 814 815 816 817 818

	/* Scale q1 if it's too big */
	if (q1 > 256) {
		/* Scale q1 to range [1, 512] */
		scale = fls_long(q1 - 1);
		if (scale > 9) {
			q1 >>= scale - 9;
			mul >>= scale - 9;
819
		}
820 821 822 823 824 825 826 827 828 829 830 831 832 833 834

		/* Round the result if we have a remainder */
		q1 += q1 & 1;
	}

	/* Decrease DDS_CLK_RATE as much as we can without loss in precision */
	scale = __ffs(q1);
	q1 >>= scale;
	mul >>= scale;

	/* Get the remainder */
	r1 = abs(fref1 / (1 << (24 - fls_long(mul))) / q1 - rate);

	/* Case 2 */

835
	q2 = DIV_ROUND_UP(fref2, rate);
836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851
	r2 = abs(fref2 / q2 - rate);

	/*
	 * Choose the best between two: less remainder we have the better. We
	 * can't go case 2 if q2 is greater than 256 since SCR register can
	 * hold only values 0 .. 255.
	 */
	if (r2 >= r1 || q2 > 256) {
		/* case 1 is better */
		r = r1;
		q = q1;
	} else {
		/* case 2 is better */
		r = r2;
		q = q2;
		mul = (1 << 24) * 2 / 5;
852 853
	}

854
	/* Check case 3 only if the divisor is big enough */
855 856 857 858 859
	if (fref / rate >= 80) {
		u64 fssp;
		u32 m;

		/* Calculate initial quot */
860
		q1 = DIV_ROUND_UP(fref, rate);
861 862 863 864 865 866 867 868 869 870 871 872 873 874
		m = (1 << 24) / q1;

		/* Get the remainder */
		fssp = (u64)fref * m;
		do_div(fssp, 1 << 24);
		r1 = abs(fssp - rate);

		/* Choose this one if it suits better */
		if (r1 < r) {
			/* case 3 is better */
			q = 1;
			mul = m;
		}
	}
875

876 877
	*dds = mul;
	return q - 1;
878 879
}

880
static unsigned int ssp_get_clk_div(struct driver_data *drv_data, int rate)
881
{
882
	unsigned long ssp_clk = drv_data->master->max_speed_hz;
883 884 885
	const struct ssp_device *ssp = drv_data->ssp;

	rate = min_t(int, ssp_clk, rate);
886

887
	if (ssp->type == PXA25x_SSP || ssp->type == CE4100_SSP)
888
		return (ssp_clk / (2 * rate) - 1) & 0xff;
889
	else
890
		return (ssp_clk / rate - 1) & 0xfff;
891 892
}

893
static unsigned int pxa2xx_ssp_get_clk_div(struct driver_data *drv_data,
894
					   int rate)
895
{
896 897
	struct chip_data *chip =
		spi_get_ctldata(drv_data->master->cur_msg->spi);
898
	unsigned int clk_div;
899 900 901

	switch (drv_data->ssp_type) {
	case QUARK_X1000_SSP:
902
		clk_div = quark_x1000_get_clk_div(rate, &chip->dds_rate);
903
		break;
904
	default:
905
		clk_div = ssp_get_clk_div(drv_data, rate);
906
		break;
907
	}
908
	return clk_div << 8;
909 910
}

911
static bool pxa2xx_spi_can_dma(struct spi_controller *master,
912 913 914 915 916 917 918 919 920 921
			       struct spi_device *spi,
			       struct spi_transfer *xfer)
{
	struct chip_data *chip = spi_get_ctldata(spi);

	return chip->enable_dma &&
	       xfer->len <= MAX_DMA_LEN &&
	       xfer->len >= chip->dma_burst_size;
}

922 923 924
static int pxa2xx_spi_transfer_one(struct spi_controller *master,
				   struct spi_device *spi,
				   struct spi_transfer *transfer)
925
{
926
	struct driver_data *drv_data = spi_controller_get_devdata(master);
927
	struct spi_message *message = master->cur_msg;
928 929 930 931
	struct chip_data *chip = spi_get_ctldata(message->spi);
	u32 dma_thresh = chip->dma_threshold;
	u32 dma_burst = chip->dma_burst_size;
	u32 change_mask = pxa2xx_spi_get_ssrc1_change_mask(drv_data);
932 933 934
	u32 clk_div;
	u8 bits;
	u32 speed;
935
	u32 cr0;
936
	u32 cr1;
937
	int err;
938
	int dma_mapped;
939

940
	/* Check if we can DMA this transfer */
941
	if (transfer->len > MAX_DMA_LEN && chip->enable_dma) {
N
Ned Forrester 已提交
942 943 944 945 946

		/* reject already-mapped transfers; PIO won't always work */
		if (message->is_dma_mapped
				|| transfer->rx_dma || transfer->tx_dma) {
			dev_err(&drv_data->pdev->dev,
947
				"Mapped transfer length of %u is greater than %d\n",
N
Ned Forrester 已提交
948
				transfer->len, MAX_DMA_LEN);
949
			return -EINVAL;
N
Ned Forrester 已提交
950 951 952
		}

		/* warn ... we force this to PIO mode */
953
		dev_warn_ratelimited(&message->spi->dev,
954
				     "DMA disabled for transfer length %ld greater than %d\n",
955
				     (long)transfer->len, MAX_DMA_LEN);
956 957
	}

958
	/* Setup the transfer state based on the type of transfer */
959
	if (pxa2xx_spi_flush(drv_data) == 0) {
960
		dev_err(&drv_data->pdev->dev, "Flush failed\n");
961
		return -EIO;
962
	}
963
	drv_data->n_bytes = chip->n_bytes;
964 965 966 967 968 969
	drv_data->tx = (void *)transfer->tx_buf;
	drv_data->tx_end = drv_data->tx + transfer->len;
	drv_data->rx = transfer->rx_buf;
	drv_data->rx_end = drv_data->rx + transfer->len;
	drv_data->write = drv_data->tx ? chip->write : null_writer;
	drv_data->read = drv_data->rx ? chip->read : null_reader;
970 971

	/* Change speed and bit per word on a per transfer */
972 973 974
	bits = transfer->bits_per_word;
	speed = transfer->speed_hz;

975
	clk_div = pxa2xx_ssp_get_clk_div(drv_data, speed);
976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994

	if (bits <= 8) {
		drv_data->n_bytes = 1;
		drv_data->read = drv_data->read != null_reader ?
					u8_reader : null_reader;
		drv_data->write = drv_data->write != null_writer ?
					u8_writer : null_writer;
	} else if (bits <= 16) {
		drv_data->n_bytes = 2;
		drv_data->read = drv_data->read != null_reader ?
					u16_reader : null_reader;
		drv_data->write = drv_data->write != null_writer ?
					u16_writer : null_writer;
	} else if (bits <= 32) {
		drv_data->n_bytes = 4;
		drv_data->read = drv_data->read != null_reader ?
					u32_reader : null_reader;
		drv_data->write = drv_data->write != null_writer ?
					u32_writer : null_writer;
995
	}
996 997 998 999 1000 1001 1002 1003 1004 1005
	/*
	 * if bits/word is changed in dma mode, then must check the
	 * thresholds and burst also
	 */
	if (chip->enable_dma) {
		if (pxa2xx_spi_set_dma_burst_and_threshold(chip,
						message->spi,
						bits, &dma_burst,
						&dma_thresh))
			dev_warn_ratelimited(&message->spi->dev,
1006
					     "DMA burst size reduced to match bits_per_word\n");
1007 1008
	}

1009 1010 1011 1012
	dma_mapped = master->can_dma &&
		     master->can_dma(master, message->spi, transfer) &&
		     master->cur_msg_mapped;
	if (dma_mapped) {
1013 1014

		/* Ensure we have the correct interrupt handler */
1015 1016
		drv_data->transfer_handler = pxa2xx_spi_dma_transfer;

1017 1018 1019
		err = pxa2xx_spi_dma_prepare(drv_data, transfer);
		if (err)
			return err;
1020

1021 1022
		/* Clear status and start DMA engine */
		cr1 = chip->cr1 | dma_thresh | drv_data->dma_cr1;
1023
		pxa2xx_spi_write(drv_data, SSSR, drv_data->clear_sr);
1024 1025

		pxa2xx_spi_dma_start(drv_data);
1026 1027 1028 1029
	} else {
		/* Ensure we have the correct interrupt handler	*/
		drv_data->transfer_handler = interrupt_transfer;

1030 1031
		/* Clear status  */
		cr1 = chip->cr1 | chip->threshold | drv_data->int_cr1;
1032
		write_SSSR_CS(drv_data, drv_data->clear_sr);
1033 1034
	}

1035 1036 1037 1038
	/* NOTE:  PXA25x_SSP _could_ use external clocking ... */
	cr0 = pxa2xx_configure_sscr0(drv_data, clk_div, bits);
	if (!pxa25x_ssp_comp(drv_data))
		dev_dbg(&message->spi->dev, "%u Hz actual, %s\n",
1039
			master->max_speed_hz
1040
				/ (1 + ((cr0 & SSCR0_SCR(0xfff)) >> 8)),
1041
			dma_mapped ? "DMA" : "PIO");
1042 1043
	else
		dev_dbg(&message->spi->dev, "%u Hz actual, %s\n",
1044
			master->max_speed_hz / 2
1045
				/ (1 + ((cr0 & SSCR0_SCR(0x0ff)) >> 8)),
1046
			dma_mapped ? "DMA" : "PIO");
1047

1048
	if (is_lpss_ssp(drv_data)) {
1049 1050 1051 1052 1053 1054 1055 1056
		if ((pxa2xx_spi_read(drv_data, SSIRF) & 0xff)
		    != chip->lpss_rx_threshold)
			pxa2xx_spi_write(drv_data, SSIRF,
					 chip->lpss_rx_threshold);
		if ((pxa2xx_spi_read(drv_data, SSITF) & 0xffff)
		    != chip->lpss_tx_threshold)
			pxa2xx_spi_write(drv_data, SSITF,
					 chip->lpss_tx_threshold);
1057 1058
	}

1059
	if (is_quark_x1000_ssp(drv_data) &&
1060 1061
	    (pxa2xx_spi_read(drv_data, DDS_RATE) != chip->dds_rate))
		pxa2xx_spi_write(drv_data, DDS_RATE, chip->dds_rate);
1062

1063
	/* see if we need to reload the config registers */
1064 1065 1066
	if ((pxa2xx_spi_read(drv_data, SSCR0) != cr0)
	    || (pxa2xx_spi_read(drv_data, SSCR1) & change_mask)
	    != (cr1 & change_mask)) {
1067
		/* stop the SSP, and update the other bits */
1068
		pxa2xx_spi_write(drv_data, SSCR0, cr0 & ~SSCR0_SSE);
1069
		if (!pxa25x_ssp_comp(drv_data))
1070
			pxa2xx_spi_write(drv_data, SSTO, chip->timeout);
1071
		/* first set CR1 without interrupt and service enables */
1072
		pxa2xx_spi_write(drv_data, SSCR1, cr1 & change_mask);
1073
		/* restart the SSP */
1074
		pxa2xx_spi_write(drv_data, SSCR0, cr0);
1075

1076
	} else {
1077
		if (!pxa25x_ssp_comp(drv_data))
1078
			pxa2xx_spi_write(drv_data, SSTO, chip->timeout);
1079
	}
1080

1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094
	if (drv_data->ssp_type == MMP2_SSP) {
		u8 tx_level = (pxa2xx_spi_read(drv_data, SSSR)
					& SSSR_TFL_MASK) >> 8;

		if (tx_level) {
			/* On MMP2, flipping SSE doesn't to empty TXFIFO. */
			dev_warn(&spi->dev, "%d bytes of garbage in TXFIFO!\n",
								tx_level);
			if (tx_level > transfer->len)
				tx_level = transfer->len;
			drv_data->tx += tx_level;
		}
	}

1095 1096 1097
	if (spi_controller_is_slave(master)) {
		while (drv_data->write(drv_data))
			;
L
Lubomir Rintel 已提交
1098 1099 1100 1101 1102
		if (drv_data->gpiod_ready) {
			gpiod_set_value(drv_data->gpiod_ready, 1);
			udelay(1);
			gpiod_set_value(drv_data->gpiod_ready, 0);
		}
1103 1104
	}

1105 1106 1107 1108
	/*
	 * Release the data by enabling service requests and interrupts,
	 * without changing any mode bits
	 */
1109
	pxa2xx_spi_write(drv_data, SSCR1, cr1);
1110 1111

	return 1;
1112 1113
}

1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134
static int pxa2xx_spi_slave_abort(struct spi_master *master)
{
	struct driver_data *drv_data = spi_controller_get_devdata(master);

	/* Stop and reset SSP */
	write_SSSR_CS(drv_data, drv_data->clear_sr);
	reset_sccr1(drv_data);
	if (!pxa25x_ssp_comp(drv_data))
		pxa2xx_spi_write(drv_data, SSTO, 0);
	pxa2xx_spi_flush(drv_data);
	pxa2xx_spi_write(drv_data, SSCR0,
			 pxa2xx_spi_read(drv_data, SSCR0) & ~SSCR0_SSE);

	dev_dbg(&drv_data->pdev->dev, "transfer aborted\n");

	drv_data->master->cur_msg->status = -EINTR;
	spi_finalize_current_transfer(drv_data->master);

	return 0;
}

1135 1136
static void pxa2xx_spi_handle_err(struct spi_controller *master,
				 struct spi_message *msg)
1137
{
1138
	struct driver_data *drv_data = spi_controller_get_devdata(master);
1139

1140 1141 1142 1143 1144 1145 1146 1147 1148 1149
	/* Disable the SSP */
	pxa2xx_spi_write(drv_data, SSCR0,
			 pxa2xx_spi_read(drv_data, SSCR0) & ~SSCR0_SSE);
	/* Clear and disable interrupts and service requests */
	write_SSSR_CS(drv_data, drv_data->clear_sr);
	pxa2xx_spi_write(drv_data, SSCR1,
			 pxa2xx_spi_read(drv_data, SSCR1)
			 & ~(drv_data->int_cr1 | drv_data->dma_cr1));
	if (!pxa25x_ssp_comp(drv_data))
		pxa2xx_spi_write(drv_data, SSTO, 0);
1150

1151 1152 1153 1154 1155 1156 1157 1158 1159
	/*
	 * Stop the DMA if running. Note DMA callback handler may have unset
	 * the dma_running already, which is fine as stopping is not needed
	 * then but we shouldn't rely this flag for anything else than
	 * stopping. For instance to differentiate between PIO and DMA
	 * transfers.
	 */
	if (atomic_read(&drv_data->dma_running))
		pxa2xx_spi_dma_stop(drv_data);
1160 1161
}

1162
static int pxa2xx_spi_unprepare_transfer(struct spi_controller *master)
1163
{
1164
	struct driver_data *drv_data = spi_controller_get_devdata(master);
1165 1166

	/* Disable the SSP now */
1167 1168
	pxa2xx_spi_write(drv_data, SSCR0,
			 pxa2xx_spi_read(drv_data, SSCR0) & ~SSCR0_SSE);
1169 1170 1171 1172

	return 0;
}

1173 1174 1175
static int setup_cs(struct spi_device *spi, struct chip_data *chip,
		    struct pxa2xx_spi_chip *chip_info)
{
1176 1177
	struct driver_data *drv_data =
		spi_controller_get_devdata(spi->controller);
1178
	struct gpio_desc *gpiod;
1179 1180
	int err = 0;

1181 1182 1183
	if (chip == NULL)
		return 0;

1184 1185 1186
	if (drv_data->cs_gpiods) {
		gpiod = drv_data->cs_gpiods[spi->chip_select];
		if (gpiod) {
1187
			chip->gpiod_cs = gpiod;
1188 1189
			chip->gpio_cs_inverted = spi->mode & SPI_CS_HIGH;
			gpiod_set_value(gpiod, chip->gpio_cs_inverted);
1190 1191 1192 1193 1194 1195
		}

		return 0;
	}

	if (chip_info == NULL)
1196 1197 1198 1199 1200
		return 0;

	/* NOTE: setup() can be called multiple times, possibly with
	 * different chip_info, release previously requested GPIO
	 */
1201
	if (chip->gpiod_cs) {
1202
		gpiod_put(chip->gpiod_cs);
1203 1204
		chip->gpiod_cs = NULL;
	}
1205 1206 1207 1208 1209 1210 1211 1212 1213 1214

	/* If (*cs_control) is provided, ignore GPIO chip select */
	if (chip_info->cs_control) {
		chip->cs_control = chip_info->cs_control;
		return 0;
	}

	if (gpio_is_valid(chip_info->gpio_cs)) {
		err = gpio_request(chip_info->gpio_cs, "SPI_CS");
		if (err) {
1215 1216
			dev_err(&spi->dev, "failed to request chip select GPIO%d\n",
				chip_info->gpio_cs);
1217 1218 1219
			return err;
		}

1220 1221
		gpiod = gpio_to_desc(chip_info->gpio_cs);
		chip->gpiod_cs = gpiod;
1222 1223
		chip->gpio_cs_inverted = spi->mode & SPI_CS_HIGH;

1224
		err = gpiod_direction_output(gpiod, !chip->gpio_cs_inverted);
1225 1226 1227 1228 1229
	}

	return err;
}

1230 1231
static int setup(struct spi_device *spi)
{
1232
	struct pxa2xx_spi_chip *chip_info;
1233
	struct chip_data *chip;
1234
	const struct lpss_config *config;
1235 1236
	struct driver_data *drv_data =
		spi_controller_get_devdata(spi->controller);
1237 1238
	uint tx_thres, tx_hi_thres, rx_thres;

1239 1240 1241 1242 1243 1244
	switch (drv_data->ssp_type) {
	case QUARK_X1000_SSP:
		tx_thres = TX_THRESH_QUARK_X1000_DFLT;
		tx_hi_thres = 0;
		rx_thres = RX_THRESH_QUARK_X1000_DFLT;
		break;
1245 1246 1247 1248 1249
	case CE4100_SSP:
		tx_thres = TX_THRESH_CE4100_DFLT;
		tx_hi_thres = 0;
		rx_thres = RX_THRESH_CE4100_DFLT;
		break;
1250 1251
	case LPSS_LPT_SSP:
	case LPSS_BYT_SSP:
1252
	case LPSS_BSW_SSP:
1253
	case LPSS_SPT_SSP:
1254
	case LPSS_BXT_SSP:
1255
	case LPSS_CNL_SSP:
1256 1257 1258 1259
		config = lpss_get_config(drv_data);
		tx_thres = config->tx_threshold_lo;
		tx_hi_thres = config->tx_threshold_hi;
		rx_thres = config->rx_threshold;
1260 1261
		break;
	default:
1262
		tx_hi_thres = 0;
1263 1264 1265 1266 1267 1268 1269
		if (spi_controller_is_slave(drv_data->master)) {
			tx_thres = 1;
			rx_thres = 2;
		} else {
			tx_thres = TX_THRESH_DFLT;
			rx_thres = RX_THRESH_DFLT;
		}
1270
		break;
1271
	}
1272

1273
	/* Only alloc on first setup */
1274
	chip = spi_get_ctldata(spi);
1275
	if (!chip) {
1276
		chip = kzalloc(sizeof(struct chip_data), GFP_KERNEL);
1277
		if (!chip)
1278 1279
			return -ENOMEM;

1280 1281
		if (drv_data->ssp_type == CE4100_SSP) {
			if (spi->chip_select > 4) {
1282 1283
				dev_err(&spi->dev,
					"failed setup: cs number must not be > 4.\n");
1284 1285 1286 1287 1288
				kfree(chip);
				return -EINVAL;
			}

			chip->frm = spi->chip_select;
1289
		}
1290
		chip->enable_dma = drv_data->master_info->enable_dma;
1291
		chip->timeout = TIMOUT_DFLT;
1292 1293
	}

1294 1295 1296 1297
	/* protocol drivers may change the chip settings, so...
	 * if chip_info exists, use it */
	chip_info = spi->controller_data;

1298
	/* chip_info isn't always needed */
1299
	chip->cr1 = 0;
1300
	if (chip_info) {
1301 1302 1303 1304
		if (chip_info->timeout)
			chip->timeout = chip_info->timeout;
		if (chip_info->tx_threshold)
			tx_thres = chip_info->tx_threshold;
1305 1306
		if (chip_info->tx_hi_threshold)
			tx_hi_thres = chip_info->tx_hi_threshold;
1307 1308
		if (chip_info->rx_threshold)
			rx_thres = chip_info->rx_threshold;
1309 1310 1311 1312
		chip->dma_threshold = 0;
		if (chip_info->enable_loopback)
			chip->cr1 = SSCR1_LBM;
	}
1313 1314 1315 1316 1317 1318
	if (spi_controller_is_slave(drv_data->master)) {
		chip->cr1 |= SSCR1_SCFR;
		chip->cr1 |= SSCR1_SCLKDIR;
		chip->cr1 |= SSCR1_SFRMDIR;
		chip->cr1 |= SSCR1_SPH;
	}
1319

1320 1321 1322 1323
	chip->lpss_rx_threshold = SSIRF_RxThresh(rx_thres);
	chip->lpss_tx_threshold = SSITF_TxLoThresh(tx_thres)
				| SSITF_TxHiThresh(tx_hi_thres);

1324 1325 1326 1327 1328
	/* set dma burst and threshold outside of chip_info path so that if
	 * chip_info goes away after setting chip->enable_dma, the
	 * burst and threshold can still respond to changes in bits_per_word */
	if (chip->enable_dma) {
		/* set up legal burst and threshold for dma */
1329 1330
		if (pxa2xx_spi_set_dma_burst_and_threshold(chip, spi,
						spi->bits_per_word,
1331 1332
						&chip->dma_burst_size,
						&chip->dma_threshold)) {
1333 1334
			dev_warn(&spi->dev,
				 "in setup: DMA burst size reduced to match bits_per_word\n");
1335 1336 1337
		}
	}

1338 1339 1340 1341 1342 1343 1344
	switch (drv_data->ssp_type) {
	case QUARK_X1000_SSP:
		chip->threshold = (QUARK_X1000_SSCR1_RxTresh(rx_thres)
				   & QUARK_X1000_SSCR1_RFT)
				   | (QUARK_X1000_SSCR1_TxTresh(tx_thres)
				   & QUARK_X1000_SSCR1_TFT);
		break;
1345 1346 1347 1348
	case CE4100_SSP:
		chip->threshold = (CE4100_SSCR1_RxTresh(rx_thres) & CE4100_SSCR1_RFT) |
			(CE4100_SSCR1_TxTresh(tx_thres) & CE4100_SSCR1_TFT);
		break;
1349 1350 1351 1352 1353 1354
	default:
		chip->threshold = (SSCR1_RxTresh(rx_thres) & SSCR1_RFT) |
			(SSCR1_TxTresh(tx_thres) & SSCR1_TFT);
		break;
	}

1355 1356 1357
	chip->cr1 &= ~(SSCR1_SPO | SSCR1_SPH);
	chip->cr1 |= (((spi->mode & SPI_CPHA) != 0) ? SSCR1_SPH : 0)
			| (((spi->mode & SPI_CPOL) != 0) ? SSCR1_SPO : 0);
1358

1359 1360 1361
	if (spi->mode & SPI_LOOP)
		chip->cr1 |= SSCR1_LBM;

1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377
	if (spi->bits_per_word <= 8) {
		chip->n_bytes = 1;
		chip->read = u8_reader;
		chip->write = u8_writer;
	} else if (spi->bits_per_word <= 16) {
		chip->n_bytes = 2;
		chip->read = u16_reader;
		chip->write = u16_writer;
	} else if (spi->bits_per_word <= 32) {
		chip->n_bytes = 4;
		chip->read = u32_reader;
		chip->write = u32_writer;
	}

	spi_set_ctldata(spi, chip);

1378 1379 1380
	if (drv_data->ssp_type == CE4100_SSP)
		return 0;

1381
	return setup_cs(spi, chip, chip_info);
1382 1383
}

1384
static void cleanup(struct spi_device *spi)
1385
{
1386
	struct chip_data *chip = spi_get_ctldata(spi);
1387 1388
	struct driver_data *drv_data =
		spi_controller_get_devdata(spi->controller);
1389

1390 1391 1392
	if (!chip)
		return;

1393
	if (drv_data->ssp_type != CE4100_SSP && !drv_data->cs_gpiods &&
1394
	    chip->gpiod_cs)
1395
		gpiod_put(chip->gpiod_cs);
1396

1397 1398 1399
	kfree(chip);
}

1400
static const struct acpi_device_id pxa2xx_spi_acpi_match[] = {
1401 1402 1403 1404 1405
	{ "INT33C0", LPSS_LPT_SSP },
	{ "INT33C1", LPSS_LPT_SSP },
	{ "INT3430", LPSS_LPT_SSP },
	{ "INT3431", LPSS_LPT_SSP },
	{ "80860F0E", LPSS_BYT_SSP },
1406
	{ "8086228E", LPSS_BSW_SSP },
1407 1408 1409 1410
	{ },
};
MODULE_DEVICE_TABLE(acpi, pxa2xx_spi_acpi_match);

1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422
/*
 * PCI IDs of compound devices that integrate both host controller and private
 * integrated DMA engine. Please note these are not used in module
 * autoloading and probing in this module but matching the LPSS SSP type.
 */
static const struct pci_device_id pxa2xx_spi_pci_compound_match[] = {
	/* SPT-LP */
	{ PCI_VDEVICE(INTEL, 0x9d29), LPSS_SPT_SSP },
	{ PCI_VDEVICE(INTEL, 0x9d2a), LPSS_SPT_SSP },
	/* SPT-H */
	{ PCI_VDEVICE(INTEL, 0xa129), LPSS_SPT_SSP },
	{ PCI_VDEVICE(INTEL, 0xa12a), LPSS_SPT_SSP },
1423 1424 1425
	/* KBL-H */
	{ PCI_VDEVICE(INTEL, 0xa2a9), LPSS_SPT_SSP },
	{ PCI_VDEVICE(INTEL, 0xa2aa), LPSS_SPT_SSP },
1426
	/* BXT A-Step */
1427 1428 1429
	{ PCI_VDEVICE(INTEL, 0x0ac2), LPSS_BXT_SSP },
	{ PCI_VDEVICE(INTEL, 0x0ac4), LPSS_BXT_SSP },
	{ PCI_VDEVICE(INTEL, 0x0ac6), LPSS_BXT_SSP },
1430 1431 1432 1433
	/* BXT B-Step */
	{ PCI_VDEVICE(INTEL, 0x1ac2), LPSS_BXT_SSP },
	{ PCI_VDEVICE(INTEL, 0x1ac4), LPSS_BXT_SSP },
	{ PCI_VDEVICE(INTEL, 0x1ac6), LPSS_BXT_SSP },
1434 1435 1436 1437
	/* GLK */
	{ PCI_VDEVICE(INTEL, 0x31c2), LPSS_BXT_SSP },
	{ PCI_VDEVICE(INTEL, 0x31c4), LPSS_BXT_SSP },
	{ PCI_VDEVICE(INTEL, 0x31c6), LPSS_BXT_SSP },
1438 1439 1440 1441
	/* ICL-LP */
	{ PCI_VDEVICE(INTEL, 0x34aa), LPSS_CNL_SSP },
	{ PCI_VDEVICE(INTEL, 0x34ab), LPSS_CNL_SSP },
	{ PCI_VDEVICE(INTEL, 0x34fb), LPSS_CNL_SSP },
1442 1443 1444 1445
	/* APL */
	{ PCI_VDEVICE(INTEL, 0x5ac2), LPSS_BXT_SSP },
	{ PCI_VDEVICE(INTEL, 0x5ac4), LPSS_BXT_SSP },
	{ PCI_VDEVICE(INTEL, 0x5ac6), LPSS_BXT_SSP },
1446 1447 1448 1449 1450 1451 1452 1453
	/* CNL-LP */
	{ PCI_VDEVICE(INTEL, 0x9daa), LPSS_CNL_SSP },
	{ PCI_VDEVICE(INTEL, 0x9dab), LPSS_CNL_SSP },
	{ PCI_VDEVICE(INTEL, 0x9dfb), LPSS_CNL_SSP },
	/* CNL-H */
	{ PCI_VDEVICE(INTEL, 0xa32a), LPSS_CNL_SSP },
	{ PCI_VDEVICE(INTEL, 0xa32b), LPSS_CNL_SSP },
	{ PCI_VDEVICE(INTEL, 0xa37b), LPSS_CNL_SSP },
1454
	{ },
1455 1456
};

1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487
static const struct of_device_id pxa2xx_spi_of_match[] = {
	{ .compatible = "marvell,mmp2-ssp", .data = (void *)MMP2_SSP },
	{},
};
MODULE_DEVICE_TABLE(of, pxa2xx_spi_of_match);

#ifdef CONFIG_ACPI

static int pxa2xx_spi_get_port_id(struct acpi_device *adev)
{
	unsigned int devid;
	int port_id = -1;

	if (adev && adev->pnp.unique_id &&
	    !kstrtouint(adev->pnp.unique_id, 0, &devid))
		port_id = devid;
	return port_id;
}

#else /* !CONFIG_ACPI */

static int pxa2xx_spi_get_port_id(struct acpi_device *adev)
{
	return -1;
}

#endif /* CONFIG_ACPI */


#ifdef CONFIG_PCI

1488 1489 1490 1491 1492 1493 1494 1495 1496 1497
static bool pxa2xx_spi_idma_filter(struct dma_chan *chan, void *param)
{
	struct device *dev = param;

	if (dev != chan->device->dev->parent)
		return false;

	return true;
}

1498 1499
#endif /* CONFIG_PCI */

1500
static struct pxa2xx_spi_master *
1501
pxa2xx_spi_init_pdata(struct platform_device *pdev)
1502 1503 1504 1505 1506
{
	struct pxa2xx_spi_master *pdata;
	struct acpi_device *adev;
	struct ssp_device *ssp;
	struct resource *res;
1507 1508
	const struct acpi_device_id *adev_id = NULL;
	const struct pci_device_id *pcidev_id = NULL;
1509
	const struct of_device_id *of_id = NULL;
L
Lubomir Rintel 已提交
1510
	enum pxa_ssp_type type;
1511

1512
	adev = ACPI_COMPANION(&pdev->dev);
1513

1514 1515 1516 1517
	if (pdev->dev.of_node)
		of_id = of_match_device(pdev->dev.driver->of_match_table,
					&pdev->dev);
	else if (dev_is_pci(pdev->dev.parent))
1518 1519
		pcidev_id = pci_match_id(pxa2xx_spi_pci_compound_match,
					 to_pci_dev(pdev->dev.parent));
1520
	else if (adev)
1521 1522
		adev_id = acpi_match_device(pdev->dev.driver->acpi_match_table,
					    &pdev->dev);
1523 1524
	else
		return NULL;
1525 1526

	if (adev_id)
L
Lubomir Rintel 已提交
1527
		type = (enum pxa_ssp_type)adev_id->driver_data;
1528
	else if (pcidev_id)
L
Lubomir Rintel 已提交
1529
		type = (enum pxa_ssp_type)pcidev_id->driver_data;
1530 1531
	else if (of_id)
		type = (enum pxa_ssp_type)of_id->data;
1532 1533 1534
	else
		return NULL;

1535
	pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
1536
	if (!pdata)
1537 1538 1539 1540 1541 1542 1543 1544 1545
		return NULL;

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	if (!res)
		return NULL;

	ssp = &pdata->ssp;

	ssp->phys_base = res->start;
1546 1547
	ssp->mmio_base = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(ssp->mmio_base))
1548
		return NULL;
1549

1550
#ifdef CONFIG_PCI
1551 1552 1553 1554 1555
	if (pcidev_id) {
		pdata->tx_param = pdev->dev.parent;
		pdata->rx_param = pdev->dev.parent;
		pdata->dma_filter = pxa2xx_spi_idma_filter;
	}
1556
#endif
1557

1558 1559
	ssp->clk = devm_clk_get(&pdev->dev, NULL);
	ssp->irq = platform_get_irq(pdev, 0);
1560
	ssp->type = type;
1561
	ssp->pdev = pdev;
1562
	ssp->port_id = pxa2xx_spi_get_port_id(adev);
1563

1564
	pdata->is_slave = of_property_read_bool(pdev->dev.of_node, "spi-slave");
1565
	pdata->num_chipselect = 1;
1566
	pdata->enable_dma = true;
1567 1568 1569 1570

	return pdata;
}

1571 1572
static int pxa2xx_spi_fw_translate_cs(struct spi_controller *master,
				      unsigned int cs)
1573
{
1574
	struct driver_data *drv_data = spi_controller_get_devdata(master);
1575 1576 1577 1578 1579 1580 1581 1582 1583

	if (has_acpi_companion(&drv_data->pdev->dev)) {
		switch (drv_data->ssp_type) {
		/*
		 * For Atoms the ACPI DeviceSelection used by the Windows
		 * driver starts from 1 instead of 0 so translate it here
		 * to match what Linux expects.
		 */
		case LPSS_BYT_SSP:
1584
		case LPSS_BSW_SSP:
1585 1586 1587 1588 1589 1590 1591 1592 1593 1594
			return cs - 1;

		default:
			break;
		}
	}

	return cs;
}

1595
static int pxa2xx_spi_probe(struct platform_device *pdev)
1596 1597 1598
{
	struct device *dev = &pdev->dev;
	struct pxa2xx_spi_master *platform_info;
1599
	struct spi_controller *master;
G
Guennadi Liakhovetski 已提交
1600
	struct driver_data *drv_data;
1601
	struct ssp_device *ssp;
1602
	const struct lpss_config *config;
1603
	int status, count;
1604
	u32 tmp;
1605

1606 1607
	platform_info = dev_get_platdata(dev);
	if (!platform_info) {
1608
		platform_info = pxa2xx_spi_init_pdata(pdev);
1609 1610 1611 1612
		if (!platform_info) {
			dev_err(&pdev->dev, "missing platform data\n");
			return -ENODEV;
		}
1613
	}
1614

H
Haojian Zhuang 已提交
1615
	ssp = pxa_ssp_request(pdev->id, pdev->name);
1616 1617 1618 1619 1620
	if (!ssp)
		ssp = &platform_info->ssp;

	if (!ssp->mmio_base) {
		dev_err(&pdev->dev, "failed to get ssp\n");
1621 1622 1623
		return -ENODEV;
	}

1624 1625 1626 1627 1628
	if (platform_info->is_slave)
		master = spi_alloc_slave(dev, sizeof(struct driver_data));
	else
		master = spi_alloc_master(dev, sizeof(struct driver_data));

1629
	if (!master) {
G
Guennadi Liakhovetski 已提交
1630
		dev_err(&pdev->dev, "cannot alloc spi_master\n");
H
Haojian Zhuang 已提交
1631
		pxa_ssp_free(ssp);
1632 1633
		return -ENOMEM;
	}
1634
	drv_data = spi_controller_get_devdata(master);
1635 1636 1637
	drv_data->master = master;
	drv_data->master_info = platform_info;
	drv_data->pdev = pdev;
1638
	drv_data->ssp = ssp;
1639

1640
	master->dev.of_node = pdev->dev.of_node;
1641
	/* the spi->mode bits understood by this driver: */
1642
	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP;
1643

1644
	master->bus_num = ssp->port_id;
1645
	master->dma_alignment = DMA_ALIGNMENT;
1646 1647
	master->cleanup = cleanup;
	master->setup = setup;
1648 1649
	master->set_cs = pxa2xx_spi_set_cs;
	master->transfer_one = pxa2xx_spi_transfer_one;
1650
	master->slave_abort = pxa2xx_spi_slave_abort;
1651
	master->handle_err = pxa2xx_spi_handle_err;
1652
	master->unprepare_transfer_hardware = pxa2xx_spi_unprepare_transfer;
1653
	master->fw_translate_cs = pxa2xx_spi_fw_translate_cs;
1654
	master->auto_runtime_pm = true;
1655
	master->flags = SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX;
1656

1657
	drv_data->ssp_type = ssp->type;
1658

1659 1660
	drv_data->ioaddr = ssp->mmio_base;
	drv_data->ssdr_physical = ssp->phys_base + SSDR;
1661
	if (pxa25x_ssp_comp(drv_data)) {
1662 1663 1664 1665 1666 1667 1668 1669 1670
		switch (drv_data->ssp_type) {
		case QUARK_X1000_SSP:
			master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32);
			break;
		default:
			master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 16);
			break;
		}

1671 1672 1673 1674 1675
		drv_data->int_cr1 = SSCR1_TIE | SSCR1_RIE;
		drv_data->dma_cr1 = 0;
		drv_data->clear_sr = SSSR_ROR;
		drv_data->mask_sr = SSSR_RFS | SSSR_TFS | SSSR_ROR;
	} else {
1676
		master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32);
1677
		drv_data->int_cr1 = SSCR1_TIE | SSCR1_RIE | SSCR1_TINTE;
1678
		drv_data->dma_cr1 = DEFAULT_DMA_CR1;
1679
		drv_data->clear_sr = SSSR_ROR | SSSR_TINT;
1680 1681
		drv_data->mask_sr = SSSR_TINT | SSSR_RFS | SSSR_TFS
						| SSSR_ROR | SSSR_TUR;
1682 1683
	}

1684 1685
	status = request_irq(ssp->irq, ssp_int, IRQF_SHARED, dev_name(dev),
			drv_data);
1686
	if (status < 0) {
G
Guennadi Liakhovetski 已提交
1687
		dev_err(&pdev->dev, "cannot get IRQ %d\n", ssp->irq);
1688 1689 1690 1691 1692
		goto out_error_master_alloc;
	}

	/* Setup DMA if requested */
	if (platform_info->enable_dma) {
1693 1694
		status = pxa2xx_spi_dma_setup(drv_data);
		if (status) {
1695
			dev_dbg(dev, "no DMA channels available, using PIO\n");
1696
			platform_info->enable_dma = false;
1697 1698
		} else {
			master->can_dma = pxa2xx_spi_can_dma;
1699 1700 1701 1702
		}
	}

	/* Enable SOC clock */
1703 1704 1705
	status = clk_prepare_enable(ssp->clk);
	if (status)
		goto out_error_dma_irq_alloc;
1706

1707
	master->max_speed_hz = clk_get_rate(ssp->clk);
1708 1709

	/* Load default SSP configuration */
1710
	pxa2xx_spi_write(drv_data, SSCR0, 0);
1711 1712
	switch (drv_data->ssp_type) {
	case QUARK_X1000_SSP:
1713 1714
		tmp = QUARK_X1000_SSCR1_RxTresh(RX_THRESH_QUARK_X1000_DFLT) |
		      QUARK_X1000_SSCR1_TxTresh(TX_THRESH_QUARK_X1000_DFLT);
1715
		pxa2xx_spi_write(drv_data, SSCR1, tmp);
1716 1717

		/* using the Motorola SPI protocol and use 8 bit frame */
1718 1719
		tmp = QUARK_X1000_SSCR0_Motorola | QUARK_X1000_SSCR0_DataSize(8);
		pxa2xx_spi_write(drv_data, SSCR0, tmp);
1720
		break;
1721 1722 1723 1724 1725 1726
	case CE4100_SSP:
		tmp = CE4100_SSCR1_RxTresh(RX_THRESH_CE4100_DFLT) |
		      CE4100_SSCR1_TxTresh(TX_THRESH_CE4100_DFLT);
		pxa2xx_spi_write(drv_data, SSCR1, tmp);
		tmp = SSCR0_SCR(2) | SSCR0_Motorola | SSCR0_DataSize(8);
		pxa2xx_spi_write(drv_data, SSCR0, tmp);
A
Andy Shevchenko 已提交
1727
		break;
1728
	default:
1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740

		if (spi_controller_is_slave(master)) {
			tmp = SSCR1_SCFR |
			      SSCR1_SCLKDIR |
			      SSCR1_SFRMDIR |
			      SSCR1_RxTresh(2) |
			      SSCR1_TxTresh(1) |
			      SSCR1_SPH;
		} else {
			tmp = SSCR1_RxTresh(RX_THRESH_DFLT) |
			      SSCR1_TxTresh(TX_THRESH_DFLT);
		}
1741
		pxa2xx_spi_write(drv_data, SSCR1, tmp);
1742 1743 1744
		tmp = SSCR0_Motorola | SSCR0_DataSize(8);
		if (!spi_controller_is_slave(master))
			tmp |= SSCR0_SCR(2);
1745
		pxa2xx_spi_write(drv_data, SSCR0, tmp);
1746 1747 1748
		break;
	}

1749
	if (!pxa25x_ssp_comp(drv_data))
1750
		pxa2xx_spi_write(drv_data, SSTO, 0);
1751 1752

	if (!is_quark_x1000_ssp(drv_data))
1753
		pxa2xx_spi_write(drv_data, SSPSP, 0);
1754

1755 1756 1757 1758 1759 1760 1761 1762 1763
	if (is_lpss_ssp(drv_data)) {
		lpss_ssp_setup(drv_data);
		config = lpss_get_config(drv_data);
		if (config->reg_capabilities >= 0) {
			tmp = __lpss_ssp_read_priv(drv_data,
						   config->reg_capabilities);
			tmp &= LPSS_CAPS_CS_EN_MASK;
			tmp >>= LPSS_CAPS_CS_EN_SHIFT;
			platform_info->num_chipselect = ffz(tmp);
1764 1765
		} else if (config->cs_num) {
			platform_info->num_chipselect = config->cs_num;
1766 1767 1768 1769
		}
	}
	master->num_chipselect = platform_info->num_chipselect;

1770
	count = gpiod_count(&pdev->dev, "cs");
1771 1772 1773
	if (count > 0) {
		int i;

1774 1775 1776
		master->num_chipselect = max_t(int, count,
			master->num_chipselect);

1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787
		drv_data->cs_gpiods = devm_kcalloc(&pdev->dev,
			master->num_chipselect, sizeof(struct gpio_desc *),
			GFP_KERNEL);
		if (!drv_data->cs_gpiods) {
			status = -ENOMEM;
			goto out_error_clock_enabled;
		}

		for (i = 0; i < master->num_chipselect; i++) {
			struct gpio_desc *gpiod;

1788
			gpiod = devm_gpiod_get_index(dev, "cs", i, GPIOD_ASIS);
1789 1790 1791 1792 1793
			if (IS_ERR(gpiod)) {
				/* Means use native chip select */
				if (PTR_ERR(gpiod) == -ENOENT)
					continue;

L
Lubomir Rintel 已提交
1794
				status = PTR_ERR(gpiod);
1795 1796 1797 1798 1799 1800 1801
				goto out_error_clock_enabled;
			} else {
				drv_data->cs_gpiods[i] = gpiod;
			}
		}
	}

L
Lubomir Rintel 已提交
1802 1803 1804 1805 1806 1807 1808 1809 1810
	if (platform_info->is_slave) {
		drv_data->gpiod_ready = devm_gpiod_get_optional(dev,
						"ready", GPIOD_OUT_LOW);
		if (IS_ERR(drv_data->gpiod_ready)) {
			status = PTR_ERR(drv_data->gpiod_ready);
			goto out_error_clock_enabled;
		}
	}

1811 1812 1813 1814 1815
	pm_runtime_set_autosuspend_delay(&pdev->dev, 50);
	pm_runtime_use_autosuspend(&pdev->dev);
	pm_runtime_set_active(&pdev->dev);
	pm_runtime_enable(&pdev->dev);

1816 1817
	/* Register with the SPI framework */
	platform_set_drvdata(pdev, drv_data);
1818
	status = devm_spi_register_controller(&pdev->dev, master);
1819 1820
	if (status != 0) {
		dev_err(&pdev->dev, "problem registering spi master\n");
1821
		goto out_error_clock_enabled;
1822 1823 1824 1825 1826
	}

	return status;

out_error_clock_enabled:
1827 1828
	pm_runtime_put_noidle(&pdev->dev);
	pm_runtime_disable(&pdev->dev);
1829
	clk_disable_unprepare(ssp->clk);
1830 1831

out_error_dma_irq_alloc:
1832
	pxa2xx_spi_dma_release(drv_data);
1833
	free_irq(ssp->irq, drv_data);
1834 1835

out_error_master_alloc:
1836
	spi_controller_put(master);
H
Haojian Zhuang 已提交
1837
	pxa_ssp_free(ssp);
1838 1839 1840 1841 1842 1843
	return status;
}

static int pxa2xx_spi_remove(struct platform_device *pdev)
{
	struct driver_data *drv_data = platform_get_drvdata(pdev);
1844
	struct ssp_device *ssp;
1845 1846 1847

	if (!drv_data)
		return 0;
1848
	ssp = drv_data->ssp;
1849

1850 1851
	pm_runtime_get_sync(&pdev->dev);

1852
	/* Disable the SSP at the peripheral and SOC level */
1853
	pxa2xx_spi_write(drv_data, SSCR0, 0);
1854
	clk_disable_unprepare(ssp->clk);
1855 1856

	/* Release DMA */
1857 1858
	if (drv_data->master_info->enable_dma)
		pxa2xx_spi_dma_release(drv_data);
1859

1860 1861 1862
	pm_runtime_put_noidle(&pdev->dev);
	pm_runtime_disable(&pdev->dev);

1863
	/* Release IRQ */
1864 1865 1866
	free_irq(ssp->irq, drv_data);

	/* Release SSP */
H
Haojian Zhuang 已提交
1867
	pxa_ssp_free(ssp);
1868 1869 1870 1871

	return 0;
}

1872
#ifdef CONFIG_PM_SLEEP
1873
static int pxa2xx_spi_suspend(struct device *dev)
1874
{
1875
	struct driver_data *drv_data = dev_get_drvdata(dev);
1876
	struct ssp_device *ssp = drv_data->ssp;
1877
	int status;
1878

1879
	status = spi_controller_suspend(drv_data->master);
1880 1881
	if (status != 0)
		return status;
1882
	pxa2xx_spi_write(drv_data, SSCR0, 0);
1883 1884 1885

	if (!pm_runtime_suspended(dev))
		clk_disable_unprepare(ssp->clk);
1886 1887 1888 1889

	return 0;
}

1890
static int pxa2xx_spi_resume(struct device *dev)
1891
{
1892
	struct driver_data *drv_data = dev_get_drvdata(dev);
1893
	struct ssp_device *ssp = drv_data->ssp;
1894
	int status;
1895 1896

	/* Enable the SSP clock */
1897 1898 1899 1900 1901
	if (!pm_runtime_suspended(dev)) {
		status = clk_prepare_enable(ssp->clk);
		if (status)
			return status;
	}
1902 1903

	/* Start the queue running */
1904
	return spi_controller_resume(drv_data->master);
1905
}
1906 1907
#endif

1908
#ifdef CONFIG_PM
1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919
static int pxa2xx_spi_runtime_suspend(struct device *dev)
{
	struct driver_data *drv_data = dev_get_drvdata(dev);

	clk_disable_unprepare(drv_data->ssp->clk);
	return 0;
}

static int pxa2xx_spi_runtime_resume(struct device *dev)
{
	struct driver_data *drv_data = dev_get_drvdata(dev);
1920
	int status;
1921

1922 1923
	status = clk_prepare_enable(drv_data->ssp->clk);
	return status;
1924 1925
}
#endif
1926

1927
static const struct dev_pm_ops pxa2xx_spi_pm_ops = {
1928 1929 1930
	SET_SYSTEM_SLEEP_PM_OPS(pxa2xx_spi_suspend, pxa2xx_spi_resume)
	SET_RUNTIME_PM_OPS(pxa2xx_spi_runtime_suspend,
			   pxa2xx_spi_runtime_resume, NULL)
1931
};
1932 1933 1934

static struct platform_driver driver = {
	.driver = {
1935 1936
		.name	= "pxa2xx-spi",
		.pm	= &pxa2xx_spi_pm_ops,
1937
		.acpi_match_table = ACPI_PTR(pxa2xx_spi_acpi_match),
1938
		.of_match_table = of_match_ptr(pxa2xx_spi_of_match),
1939
	},
1940
	.probe = pxa2xx_spi_probe,
1941
	.remove = pxa2xx_spi_remove,
1942 1943 1944 1945
};

static int __init pxa2xx_spi_init(void)
{
1946
	return platform_driver_register(&driver);
1947
}
A
Antonio Ospite 已提交
1948
subsys_initcall(pxa2xx_spi_init);
1949 1950 1951 1952 1953 1954

static void __exit pxa2xx_spi_exit(void)
{
	platform_driver_unregister(&driver);
}
module_exit(pxa2xx_spi_exit);