spi-pxa2xx.c 48.9 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
	if (spi_controller_is_slave(master)) {
		while (drv_data->write(drv_data))
			;
	}

1086 1087 1088 1089
	/*
	 * Release the data by enabling service requests and interrupts,
	 * without changing any mode bits
	 */
1090
	pxa2xx_spi_write(drv_data, SSCR1, cr1);
1091 1092

	return 1;
1093 1094
}

1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115
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;
}

1116 1117
static void pxa2xx_spi_handle_err(struct spi_controller *master,
				 struct spi_message *msg)
1118
{
1119
	struct driver_data *drv_data = spi_controller_get_devdata(master);
1120

1121 1122 1123 1124 1125 1126 1127 1128 1129 1130
	/* 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);
1131

1132 1133 1134 1135 1136 1137 1138 1139 1140
	/*
	 * 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);
1141 1142
}

1143
static int pxa2xx_spi_unprepare_transfer(struct spi_controller *master)
1144
{
1145
	struct driver_data *drv_data = spi_controller_get_devdata(master);
1146 1147

	/* Disable the SSP now */
1148 1149
	pxa2xx_spi_write(drv_data, SSCR0,
			 pxa2xx_spi_read(drv_data, SSCR0) & ~SSCR0_SSE);
1150 1151 1152 1153

	return 0;
}

1154 1155 1156
static int setup_cs(struct spi_device *spi, struct chip_data *chip,
		    struct pxa2xx_spi_chip *chip_info)
{
1157 1158
	struct driver_data *drv_data =
		spi_controller_get_devdata(spi->controller);
1159
	struct gpio_desc *gpiod;
1160 1161
	int err = 0;

1162 1163 1164
	if (chip == NULL)
		return 0;

1165 1166 1167
	if (drv_data->cs_gpiods) {
		gpiod = drv_data->cs_gpiods[spi->chip_select];
		if (gpiod) {
1168
			chip->gpiod_cs = gpiod;
1169 1170
			chip->gpio_cs_inverted = spi->mode & SPI_CS_HIGH;
			gpiod_set_value(gpiod, chip->gpio_cs_inverted);
1171 1172 1173 1174 1175 1176
		}

		return 0;
	}

	if (chip_info == NULL)
1177 1178 1179 1180 1181
		return 0;

	/* NOTE: setup() can be called multiple times, possibly with
	 * different chip_info, release previously requested GPIO
	 */
1182
	if (chip->gpiod_cs) {
1183
		gpiod_put(chip->gpiod_cs);
1184 1185
		chip->gpiod_cs = NULL;
	}
1186 1187 1188 1189 1190 1191 1192 1193 1194 1195

	/* 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) {
1196 1197
			dev_err(&spi->dev, "failed to request chip select GPIO%d\n",
				chip_info->gpio_cs);
1198 1199 1200
			return err;
		}

1201 1202
		gpiod = gpio_to_desc(chip_info->gpio_cs);
		chip->gpiod_cs = gpiod;
1203 1204
		chip->gpio_cs_inverted = spi->mode & SPI_CS_HIGH;

1205
		err = gpiod_direction_output(gpiod, !chip->gpio_cs_inverted);
1206 1207 1208 1209 1210
	}

	return err;
}

1211 1212
static int setup(struct spi_device *spi)
{
1213
	struct pxa2xx_spi_chip *chip_info;
1214
	struct chip_data *chip;
1215
	const struct lpss_config *config;
1216 1217
	struct driver_data *drv_data =
		spi_controller_get_devdata(spi->controller);
1218 1219
	uint tx_thres, tx_hi_thres, rx_thres;

1220 1221 1222 1223 1224 1225
	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;
1226 1227 1228 1229 1230
	case CE4100_SSP:
		tx_thres = TX_THRESH_CE4100_DFLT;
		tx_hi_thres = 0;
		rx_thres = RX_THRESH_CE4100_DFLT;
		break;
1231 1232
	case LPSS_LPT_SSP:
	case LPSS_BYT_SSP:
1233
	case LPSS_BSW_SSP:
1234
	case LPSS_SPT_SSP:
1235
	case LPSS_BXT_SSP:
1236
	case LPSS_CNL_SSP:
1237 1238 1239 1240
		config = lpss_get_config(drv_data);
		tx_thres = config->tx_threshold_lo;
		tx_hi_thres = config->tx_threshold_hi;
		rx_thres = config->rx_threshold;
1241 1242
		break;
	default:
1243
		tx_hi_thres = 0;
1244 1245 1246 1247 1248 1249 1250
		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;
		}
1251
		break;
1252
	}
1253

1254
	/* Only alloc on first setup */
1255
	chip = spi_get_ctldata(spi);
1256
	if (!chip) {
1257
		chip = kzalloc(sizeof(struct chip_data), GFP_KERNEL);
1258
		if (!chip)
1259 1260
			return -ENOMEM;

1261 1262
		if (drv_data->ssp_type == CE4100_SSP) {
			if (spi->chip_select > 4) {
1263 1264
				dev_err(&spi->dev,
					"failed setup: cs number must not be > 4.\n");
1265 1266 1267 1268 1269
				kfree(chip);
				return -EINVAL;
			}

			chip->frm = spi->chip_select;
1270
		}
1271
		chip->enable_dma = drv_data->master_info->enable_dma;
1272
		chip->timeout = TIMOUT_DFLT;
1273 1274
	}

1275 1276 1277 1278
	/* protocol drivers may change the chip settings, so...
	 * if chip_info exists, use it */
	chip_info = spi->controller_data;

1279
	/* chip_info isn't always needed */
1280
	chip->cr1 = 0;
1281
	if (chip_info) {
1282 1283 1284 1285
		if (chip_info->timeout)
			chip->timeout = chip_info->timeout;
		if (chip_info->tx_threshold)
			tx_thres = chip_info->tx_threshold;
1286 1287
		if (chip_info->tx_hi_threshold)
			tx_hi_thres = chip_info->tx_hi_threshold;
1288 1289
		if (chip_info->rx_threshold)
			rx_thres = chip_info->rx_threshold;
1290 1291 1292 1293
		chip->dma_threshold = 0;
		if (chip_info->enable_loopback)
			chip->cr1 = SSCR1_LBM;
	}
1294 1295 1296 1297 1298 1299
	if (spi_controller_is_slave(drv_data->master)) {
		chip->cr1 |= SSCR1_SCFR;
		chip->cr1 |= SSCR1_SCLKDIR;
		chip->cr1 |= SSCR1_SFRMDIR;
		chip->cr1 |= SSCR1_SPH;
	}
1300

1301 1302 1303 1304
	chip->lpss_rx_threshold = SSIRF_RxThresh(rx_thres);
	chip->lpss_tx_threshold = SSITF_TxLoThresh(tx_thres)
				| SSITF_TxHiThresh(tx_hi_thres);

1305 1306 1307 1308 1309
	/* 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 */
1310 1311
		if (pxa2xx_spi_set_dma_burst_and_threshold(chip, spi,
						spi->bits_per_word,
1312 1313
						&chip->dma_burst_size,
						&chip->dma_threshold)) {
1314 1315
			dev_warn(&spi->dev,
				 "in setup: DMA burst size reduced to match bits_per_word\n");
1316 1317 1318
		}
	}

1319 1320 1321 1322 1323 1324 1325
	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;
1326 1327 1328 1329
	case CE4100_SSP:
		chip->threshold = (CE4100_SSCR1_RxTresh(rx_thres) & CE4100_SSCR1_RFT) |
			(CE4100_SSCR1_TxTresh(tx_thres) & CE4100_SSCR1_TFT);
		break;
1330 1331 1332 1333 1334 1335
	default:
		chip->threshold = (SSCR1_RxTresh(rx_thres) & SSCR1_RFT) |
			(SSCR1_TxTresh(tx_thres) & SSCR1_TFT);
		break;
	}

1336 1337 1338
	chip->cr1 &= ~(SSCR1_SPO | SSCR1_SPH);
	chip->cr1 |= (((spi->mode & SPI_CPHA) != 0) ? SSCR1_SPH : 0)
			| (((spi->mode & SPI_CPOL) != 0) ? SSCR1_SPO : 0);
1339

1340 1341 1342
	if (spi->mode & SPI_LOOP)
		chip->cr1 |= SSCR1_LBM;

1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358
	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);

1359 1360 1361
	if (drv_data->ssp_type == CE4100_SSP)
		return 0;

1362
	return setup_cs(spi, chip, chip_info);
1363 1364
}

1365
static void cleanup(struct spi_device *spi)
1366
{
1367
	struct chip_data *chip = spi_get_ctldata(spi);
1368 1369
	struct driver_data *drv_data =
		spi_controller_get_devdata(spi->controller);
1370

1371 1372 1373
	if (!chip)
		return;

1374
	if (drv_data->ssp_type != CE4100_SSP && !drv_data->cs_gpiods &&
1375
	    chip->gpiod_cs)
1376
		gpiod_put(chip->gpiod_cs);
1377

1378 1379 1380
	kfree(chip);
}

1381
static const struct acpi_device_id pxa2xx_spi_acpi_match[] = {
1382 1383 1384 1385 1386
	{ "INT33C0", LPSS_LPT_SSP },
	{ "INT33C1", LPSS_LPT_SSP },
	{ "INT3430", LPSS_LPT_SSP },
	{ "INT3431", LPSS_LPT_SSP },
	{ "80860F0E", LPSS_BYT_SSP },
1387
	{ "8086228E", LPSS_BSW_SSP },
1388 1389 1390 1391
	{ },
};
MODULE_DEVICE_TABLE(acpi, pxa2xx_spi_acpi_match);

1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403
/*
 * 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 },
1404 1405 1406
	/* KBL-H */
	{ PCI_VDEVICE(INTEL, 0xa2a9), LPSS_SPT_SSP },
	{ PCI_VDEVICE(INTEL, 0xa2aa), LPSS_SPT_SSP },
1407
	/* BXT A-Step */
1408 1409 1410
	{ PCI_VDEVICE(INTEL, 0x0ac2), LPSS_BXT_SSP },
	{ PCI_VDEVICE(INTEL, 0x0ac4), LPSS_BXT_SSP },
	{ PCI_VDEVICE(INTEL, 0x0ac6), LPSS_BXT_SSP },
1411 1412 1413 1414
	/* BXT B-Step */
	{ PCI_VDEVICE(INTEL, 0x1ac2), LPSS_BXT_SSP },
	{ PCI_VDEVICE(INTEL, 0x1ac4), LPSS_BXT_SSP },
	{ PCI_VDEVICE(INTEL, 0x1ac6), LPSS_BXT_SSP },
1415 1416 1417 1418
	/* GLK */
	{ PCI_VDEVICE(INTEL, 0x31c2), LPSS_BXT_SSP },
	{ PCI_VDEVICE(INTEL, 0x31c4), LPSS_BXT_SSP },
	{ PCI_VDEVICE(INTEL, 0x31c6), LPSS_BXT_SSP },
1419 1420 1421 1422
	/* ICL-LP */
	{ PCI_VDEVICE(INTEL, 0x34aa), LPSS_CNL_SSP },
	{ PCI_VDEVICE(INTEL, 0x34ab), LPSS_CNL_SSP },
	{ PCI_VDEVICE(INTEL, 0x34fb), LPSS_CNL_SSP },
1423 1424 1425 1426
	/* APL */
	{ PCI_VDEVICE(INTEL, 0x5ac2), LPSS_BXT_SSP },
	{ PCI_VDEVICE(INTEL, 0x5ac4), LPSS_BXT_SSP },
	{ PCI_VDEVICE(INTEL, 0x5ac6), LPSS_BXT_SSP },
1427 1428 1429 1430 1431 1432 1433 1434
	/* 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 },
1435
	{ },
1436 1437
};

1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468
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

1469 1470 1471 1472 1473 1474 1475 1476 1477 1478
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;
}

1479 1480
#endif /* CONFIG_PCI */

1481
static struct pxa2xx_spi_master *
1482
pxa2xx_spi_init_pdata(struct platform_device *pdev)
1483 1484 1485 1486 1487
{
	struct pxa2xx_spi_master *pdata;
	struct acpi_device *adev;
	struct ssp_device *ssp;
	struct resource *res;
1488 1489
	const struct acpi_device_id *adev_id = NULL;
	const struct pci_device_id *pcidev_id = NULL;
1490
	const struct of_device_id *of_id = NULL;
L
Lubomir Rintel 已提交
1491
	enum pxa_ssp_type type;
1492

1493
	adev = ACPI_COMPANION(&pdev->dev);
1494

1495 1496 1497 1498
	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))
1499 1500
		pcidev_id = pci_match_id(pxa2xx_spi_pci_compound_match,
					 to_pci_dev(pdev->dev.parent));
1501
	else if (adev)
1502 1503
		adev_id = acpi_match_device(pdev->dev.driver->acpi_match_table,
					    &pdev->dev);
1504 1505
	else
		return NULL;
1506 1507

	if (adev_id)
L
Lubomir Rintel 已提交
1508
		type = (enum pxa_ssp_type)adev_id->driver_data;
1509
	else if (pcidev_id)
L
Lubomir Rintel 已提交
1510
		type = (enum pxa_ssp_type)pcidev_id->driver_data;
1511 1512
	else if (of_id)
		type = (enum pxa_ssp_type)of_id->data;
1513 1514 1515
	else
		return NULL;

1516
	pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
1517
	if (!pdata)
1518 1519 1520 1521 1522 1523 1524 1525 1526
		return NULL;

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

	ssp = &pdata->ssp;

	ssp->phys_base = res->start;
1527 1528
	ssp->mmio_base = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(ssp->mmio_base))
1529
		return NULL;
1530

1531
#ifdef CONFIG_PCI
1532 1533 1534 1535 1536
	if (pcidev_id) {
		pdata->tx_param = pdev->dev.parent;
		pdata->rx_param = pdev->dev.parent;
		pdata->dma_filter = pxa2xx_spi_idma_filter;
	}
1537
#endif
1538

1539 1540 1541 1542 1543 1544 1545
#if CONFIG_OF
	if (of_id) {
		pdata->is_slave = of_property_read_bool(pdev->dev.of_node,
								"spi-slave");
	}
#endif

1546 1547
	ssp->clk = devm_clk_get(&pdev->dev, NULL);
	ssp->irq = platform_get_irq(pdev, 0);
1548
	ssp->type = type;
1549
	ssp->pdev = pdev;
1550
	ssp->port_id = pxa2xx_spi_get_port_id(adev);
1551 1552

	pdata->num_chipselect = 1;
1553
	pdata->enable_dma = true;
1554 1555 1556 1557

	return pdata;
}

1558 1559
static int pxa2xx_spi_fw_translate_cs(struct spi_controller *master,
				      unsigned int cs)
1560
{
1561
	struct driver_data *drv_data = spi_controller_get_devdata(master);
1562 1563 1564 1565 1566 1567 1568 1569 1570

	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:
1571
		case LPSS_BSW_SSP:
1572 1573 1574 1575 1576 1577 1578 1579 1580 1581
			return cs - 1;

		default:
			break;
		}
	}

	return cs;
}

1582
static int pxa2xx_spi_probe(struct platform_device *pdev)
1583 1584 1585
{
	struct device *dev = &pdev->dev;
	struct pxa2xx_spi_master *platform_info;
1586
	struct spi_controller *master;
G
Guennadi Liakhovetski 已提交
1587
	struct driver_data *drv_data;
1588
	struct ssp_device *ssp;
1589
	const struct lpss_config *config;
1590
	int status, count;
1591
	u32 tmp;
1592

1593 1594
	platform_info = dev_get_platdata(dev);
	if (!platform_info) {
1595
		platform_info = pxa2xx_spi_init_pdata(pdev);
1596 1597 1598 1599
		if (!platform_info) {
			dev_err(&pdev->dev, "missing platform data\n");
			return -ENODEV;
		}
1600
	}
1601

H
Haojian Zhuang 已提交
1602
	ssp = pxa_ssp_request(pdev->id, pdev->name);
1603 1604 1605 1606 1607
	if (!ssp)
		ssp = &platform_info->ssp;

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

1611 1612 1613 1614 1615
	if (platform_info->is_slave)
		master = spi_alloc_slave(dev, sizeof(struct driver_data));
	else
		master = spi_alloc_master(dev, sizeof(struct driver_data));

1616
	if (!master) {
G
Guennadi Liakhovetski 已提交
1617
		dev_err(&pdev->dev, "cannot alloc spi_master\n");
H
Haojian Zhuang 已提交
1618
		pxa_ssp_free(ssp);
1619 1620
		return -ENOMEM;
	}
1621
	drv_data = spi_controller_get_devdata(master);
1622 1623 1624
	drv_data->master = master;
	drv_data->master_info = platform_info;
	drv_data->pdev = pdev;
1625
	drv_data->ssp = ssp;
1626

1627
	master->dev.of_node = pdev->dev.of_node;
1628
	/* the spi->mode bits understood by this driver: */
1629
	master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LOOP;
1630

1631
	master->bus_num = ssp->port_id;
1632
	master->dma_alignment = DMA_ALIGNMENT;
1633 1634
	master->cleanup = cleanup;
	master->setup = setup;
1635 1636
	master->set_cs = pxa2xx_spi_set_cs;
	master->transfer_one = pxa2xx_spi_transfer_one;
1637
	master->slave_abort = pxa2xx_spi_slave_abort;
1638
	master->handle_err = pxa2xx_spi_handle_err;
1639
	master->unprepare_transfer_hardware = pxa2xx_spi_unprepare_transfer;
1640
	master->fw_translate_cs = pxa2xx_spi_fw_translate_cs;
1641
	master->auto_runtime_pm = true;
1642
	master->flags = SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX;
1643

1644
	drv_data->ssp_type = ssp->type;
1645

1646 1647
	drv_data->ioaddr = ssp->mmio_base;
	drv_data->ssdr_physical = ssp->phys_base + SSDR;
1648
	if (pxa25x_ssp_comp(drv_data)) {
1649 1650 1651 1652 1653 1654 1655 1656 1657
		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;
		}

1658 1659 1660 1661 1662
		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 {
1663
		master->bits_per_word_mask = SPI_BPW_RANGE_MASK(4, 32);
1664
		drv_data->int_cr1 = SSCR1_TIE | SSCR1_RIE | SSCR1_TINTE;
1665
		drv_data->dma_cr1 = DEFAULT_DMA_CR1;
1666
		drv_data->clear_sr = SSSR_ROR | SSSR_TINT;
1667 1668
		drv_data->mask_sr = SSSR_TINT | SSSR_RFS | SSSR_TFS
						| SSSR_ROR | SSSR_TUR;
1669 1670
	}

1671 1672
	status = request_irq(ssp->irq, ssp_int, IRQF_SHARED, dev_name(dev),
			drv_data);
1673
	if (status < 0) {
G
Guennadi Liakhovetski 已提交
1674
		dev_err(&pdev->dev, "cannot get IRQ %d\n", ssp->irq);
1675 1676 1677 1678 1679
		goto out_error_master_alloc;
	}

	/* Setup DMA if requested */
	if (platform_info->enable_dma) {
1680 1681
		status = pxa2xx_spi_dma_setup(drv_data);
		if (status) {
1682
			dev_dbg(dev, "no DMA channels available, using PIO\n");
1683
			platform_info->enable_dma = false;
1684 1685
		} else {
			master->can_dma = pxa2xx_spi_can_dma;
1686 1687 1688 1689
		}
	}

	/* Enable SOC clock */
1690 1691 1692
	status = clk_prepare_enable(ssp->clk);
	if (status)
		goto out_error_dma_irq_alloc;
1693

1694
	master->max_speed_hz = clk_get_rate(ssp->clk);
1695 1696

	/* Load default SSP configuration */
1697
	pxa2xx_spi_write(drv_data, SSCR0, 0);
1698 1699
	switch (drv_data->ssp_type) {
	case QUARK_X1000_SSP:
1700 1701
		tmp = QUARK_X1000_SSCR1_RxTresh(RX_THRESH_QUARK_X1000_DFLT) |
		      QUARK_X1000_SSCR1_TxTresh(TX_THRESH_QUARK_X1000_DFLT);
1702
		pxa2xx_spi_write(drv_data, SSCR1, tmp);
1703 1704

		/* using the Motorola SPI protocol and use 8 bit frame */
1705 1706
		tmp = QUARK_X1000_SSCR0_Motorola | QUARK_X1000_SSCR0_DataSize(8);
		pxa2xx_spi_write(drv_data, SSCR0, tmp);
1707
		break;
1708 1709 1710 1711 1712 1713
	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 已提交
1714
		break;
1715
	default:
1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727

		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);
		}
1728
		pxa2xx_spi_write(drv_data, SSCR1, tmp);
1729 1730 1731
		tmp = SSCR0_Motorola | SSCR0_DataSize(8);
		if (!spi_controller_is_slave(master))
			tmp |= SSCR0_SCR(2);
1732
		pxa2xx_spi_write(drv_data, SSCR0, tmp);
1733 1734 1735
		break;
	}

1736
	if (!pxa25x_ssp_comp(drv_data))
1737
		pxa2xx_spi_write(drv_data, SSTO, 0);
1738 1739

	if (!is_quark_x1000_ssp(drv_data))
1740
		pxa2xx_spi_write(drv_data, SSPSP, 0);
1741

1742 1743 1744 1745 1746 1747 1748 1749 1750
	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);
1751 1752
		} else if (config->cs_num) {
			platform_info->num_chipselect = config->cs_num;
1753 1754 1755 1756
		}
	}
	master->num_chipselect = platform_info->num_chipselect;

1757
	count = gpiod_count(&pdev->dev, "cs");
1758 1759 1760
	if (count > 0) {
		int i;

1761 1762 1763
		master->num_chipselect = max_t(int, count,
			master->num_chipselect);

1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774
		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;

1775
			gpiod = devm_gpiod_get_index(dev, "cs", i, GPIOD_ASIS);
1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788
			if (IS_ERR(gpiod)) {
				/* Means use native chip select */
				if (PTR_ERR(gpiod) == -ENOENT)
					continue;

				status = (int)PTR_ERR(gpiod);
				goto out_error_clock_enabled;
			} else {
				drv_data->cs_gpiods[i] = gpiod;
			}
		}
	}

1789 1790 1791 1792 1793
	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);

1794 1795
	/* Register with the SPI framework */
	platform_set_drvdata(pdev, drv_data);
1796
	status = devm_spi_register_controller(&pdev->dev, master);
1797 1798
	if (status != 0) {
		dev_err(&pdev->dev, "problem registering spi master\n");
1799
		goto out_error_clock_enabled;
1800 1801 1802 1803 1804
	}

	return status;

out_error_clock_enabled:
1805 1806
	pm_runtime_put_noidle(&pdev->dev);
	pm_runtime_disable(&pdev->dev);
1807
	clk_disable_unprepare(ssp->clk);
1808 1809

out_error_dma_irq_alloc:
1810
	pxa2xx_spi_dma_release(drv_data);
1811
	free_irq(ssp->irq, drv_data);
1812 1813

out_error_master_alloc:
1814
	spi_controller_put(master);
H
Haojian Zhuang 已提交
1815
	pxa_ssp_free(ssp);
1816 1817 1818 1819 1820 1821
	return status;
}

static int pxa2xx_spi_remove(struct platform_device *pdev)
{
	struct driver_data *drv_data = platform_get_drvdata(pdev);
1822
	struct ssp_device *ssp;
1823 1824 1825

	if (!drv_data)
		return 0;
1826
	ssp = drv_data->ssp;
1827

1828 1829
	pm_runtime_get_sync(&pdev->dev);

1830
	/* Disable the SSP at the peripheral and SOC level */
1831
	pxa2xx_spi_write(drv_data, SSCR0, 0);
1832
	clk_disable_unprepare(ssp->clk);
1833 1834

	/* Release DMA */
1835 1836
	if (drv_data->master_info->enable_dma)
		pxa2xx_spi_dma_release(drv_data);
1837

1838 1839 1840
	pm_runtime_put_noidle(&pdev->dev);
	pm_runtime_disable(&pdev->dev);

1841
	/* Release IRQ */
1842 1843 1844
	free_irq(ssp->irq, drv_data);

	/* Release SSP */
H
Haojian Zhuang 已提交
1845
	pxa_ssp_free(ssp);
1846 1847 1848 1849

	return 0;
}

1850
#ifdef CONFIG_PM_SLEEP
1851
static int pxa2xx_spi_suspend(struct device *dev)
1852
{
1853
	struct driver_data *drv_data = dev_get_drvdata(dev);
1854
	struct ssp_device *ssp = drv_data->ssp;
1855
	int status;
1856

1857
	status = spi_controller_suspend(drv_data->master);
1858 1859
	if (status != 0)
		return status;
1860
	pxa2xx_spi_write(drv_data, SSCR0, 0);
1861 1862 1863

	if (!pm_runtime_suspended(dev))
		clk_disable_unprepare(ssp->clk);
1864 1865 1866 1867

	return 0;
}

1868
static int pxa2xx_spi_resume(struct device *dev)
1869
{
1870
	struct driver_data *drv_data = dev_get_drvdata(dev);
1871
	struct ssp_device *ssp = drv_data->ssp;
1872
	int status;
1873 1874

	/* Enable the SSP clock */
1875 1876 1877 1878 1879
	if (!pm_runtime_suspended(dev)) {
		status = clk_prepare_enable(ssp->clk);
		if (status)
			return status;
	}
1880 1881

	/* Start the queue running */
1882
	return spi_controller_resume(drv_data->master);
1883
}
1884 1885
#endif

1886
#ifdef CONFIG_PM
1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897
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);
1898
	int status;
1899

1900 1901
	status = clk_prepare_enable(drv_data->ssp->clk);
	return status;
1902 1903
}
#endif
1904

1905
static const struct dev_pm_ops pxa2xx_spi_pm_ops = {
1906 1907 1908
	SET_SYSTEM_SLEEP_PM_OPS(pxa2xx_spi_suspend, pxa2xx_spi_resume)
	SET_RUNTIME_PM_OPS(pxa2xx_spi_runtime_suspend,
			   pxa2xx_spi_runtime_resume, NULL)
1909
};
1910 1911 1912

static struct platform_driver driver = {
	.driver = {
1913 1914
		.name	= "pxa2xx-spi",
		.pm	= &pxa2xx_spi_pm_ops,
1915
		.acpi_match_table = ACPI_PTR(pxa2xx_spi_acpi_match),
1916
		.of_match_table = of_match_ptr(pxa2xx_spi_of_match),
1917
	},
1918
	.probe = pxa2xx_spi_probe,
1919
	.remove = pxa2xx_spi_remove,
1920 1921 1922 1923
};

static int __init pxa2xx_spi_init(void)
{
1924
	return platform_driver_register(&driver);
1925
}
A
Antonio Ospite 已提交
1926
subsys_initcall(pxa2xx_spi_init);
1927 1928 1929 1930 1931 1932

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