aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Brownell <dbrownell@users.sourceforge.net>2009-06-17 19:26:04 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-06-18 16:03:42 -0400
commite7db06b5d5afcef15c4c3e61c3a7441ed7ad1407 (patch)
treec0d1e01d49fdb3f288da28ffc3b349810c4e1b61
parent7d0771970c51e736758525dd71fb82dd036b823a (diff)
spi: move more spi_setup() functionality into core
Move some common spi_setup() error checks into the SPI framework from the spi_master controller drivers: - Add a new "mode_bits" field to spi_master - Use that in spi_setup to validate the spi->mode value being requested. Setting this new field is now mandatory for any controller supporting more than vanilla SPI_MODE_0. - Update all spi_master drivers to: * Initialize that field * Remove current spi_setup() checks using that value. This is a net minor code shrink. Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--drivers/spi/atmel_spi.c12
-rw-r--r--drivers/spi/au1550_spi.c12
-rw-r--r--drivers/spi/mpc52xx_psc_spi.c12
-rw-r--r--drivers/spi/omap2_mcspi.c12
-rw-r--r--drivers/spi/omap_uwire.c12
-rw-r--r--drivers/spi/orion_spi.c9
-rw-r--r--drivers/spi/pxa2xx_spi.c12
-rw-r--r--drivers/spi/spi.c11
-rw-r--r--drivers/spi/spi_bfin5xx.c9
-rw-r--r--drivers/spi/spi_bitbang.c9
-rw-r--r--drivers/spi/spi_imx.c12
-rw-r--r--drivers/spi/spi_mpc83xx.c14
-rw-r--r--drivers/spi/spi_s3c24xx.c12
-rw-r--r--drivers/spi/spi_txx9.c9
-rw-r--r--drivers/spi/xilinx_spi.c12
-rw-r--r--include/linux/spi/spi.h3
16 files changed, 57 insertions, 115 deletions
diff --git a/drivers/spi/atmel_spi.c b/drivers/spi/atmel_spi.c
index 9f9ff3af72d7..f5b3fdbb1e27 100644
--- a/drivers/spi/atmel_spi.c
+++ b/drivers/spi/atmel_spi.c
@@ -530,9 +530,6 @@ atmel_spi_interrupt(int irq, void *dev_id)
530 return ret; 530 return ret;
531} 531}
532 532
533/* the spi->mode bits understood by this driver: */
534#define MODEBITS (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH)
535
536static int atmel_spi_setup(struct spi_device *spi) 533static int atmel_spi_setup(struct spi_device *spi)
537{ 534{
538 struct atmel_spi *as; 535 struct atmel_spi *as;
@@ -562,12 +559,6 @@ static int atmel_spi_setup(struct spi_device *spi)
562 return -EINVAL; 559 return -EINVAL;
563 } 560 }
564 561
565 if (spi->mode & ~MODEBITS) {
566 dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
567 spi->mode & ~MODEBITS);
568 return -EINVAL;
569 }
570
571 /* see notes above re chipselect */ 562 /* see notes above re chipselect */
572 if (!atmel_spi_is_v2() 563 if (!atmel_spi_is_v2()
573 && spi->chip_select == 0 564 && spi->chip_select == 0
@@ -773,6 +764,9 @@ static int __init atmel_spi_probe(struct platform_device *pdev)
773 if (!master) 764 if (!master)
774 goto out_free; 765 goto out_free;
775 766
767 /* the spi->mode bits understood by this driver: */
768 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
769
776 master->bus_num = pdev->id; 770 master->bus_num = pdev->id;
777 master->num_chipselect = 4; 771 master->num_chipselect = 4;
778 master->setup = atmel_spi_setup; 772 master->setup = atmel_spi_setup;
diff --git a/drivers/spi/au1550_spi.c b/drivers/spi/au1550_spi.c
index 6a407e60f05b..76cbc1a66598 100644
--- a/drivers/spi/au1550_spi.c
+++ b/drivers/spi/au1550_spi.c
@@ -284,9 +284,6 @@ static int au1550_spi_setupxfer(struct spi_device *spi, struct spi_transfer *t)
284 return 0; 284 return 0;
285} 285}
286 286
287/* the spi->mode bits understood by this driver: */
288#define MODEBITS (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LSB_FIRST)
289
290static int au1550_spi_setup(struct spi_device *spi) 287static int au1550_spi_setup(struct spi_device *spi)
291{ 288{
292 struct au1550_spi *hw = spi_master_get_devdata(spi->master); 289 struct au1550_spi *hw = spi_master_get_devdata(spi->master);
@@ -297,12 +294,6 @@ static int au1550_spi_setup(struct spi_device *spi)
297 return -EINVAL; 294 return -EINVAL;
298 } 295 }
299 296
300 if (spi->mode & ~MODEBITS) {
301 dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
302 spi->mode & ~MODEBITS);
303 return -EINVAL;
304 }
305
306 if (spi->max_speed_hz == 0) 297 if (spi->max_speed_hz == 0)
307 spi->max_speed_hz = hw->freq_max; 298 spi->max_speed_hz = hw->freq_max;
308 if (spi->max_speed_hz > hw->freq_max 299 if (spi->max_speed_hz > hw->freq_max
@@ -779,6 +770,9 @@ static int __init au1550_spi_probe(struct platform_device *pdev)
779 goto err_nomem; 770 goto err_nomem;
780 } 771 }
781 772
773 /* the spi->mode bits understood by this driver: */
774 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LSB_FIRST;
775
782 hw = spi_master_get_devdata(master); 776 hw = spi_master_get_devdata(master);
783 777
784 hw->master = spi_master_get(master); 778 hw->master = spi_master_get(master);
diff --git a/drivers/spi/mpc52xx_psc_spi.c b/drivers/spi/mpc52xx_psc_spi.c
index 68c77a911595..bdae9f908978 100644
--- a/drivers/spi/mpc52xx_psc_spi.c
+++ b/drivers/spi/mpc52xx_psc_spi.c
@@ -261,9 +261,6 @@ static void mpc52xx_psc_spi_work(struct work_struct *work)
261 spin_unlock_irq(&mps->lock); 261 spin_unlock_irq(&mps->lock);
262} 262}
263 263
264/* the spi->mode bits understood by this driver: */
265#define MODEBITS (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LSB_FIRST)
266
267static int mpc52xx_psc_spi_setup(struct spi_device *spi) 264static int mpc52xx_psc_spi_setup(struct spi_device *spi)
268{ 265{
269 struct mpc52xx_psc_spi *mps = spi_master_get_devdata(spi->master); 266 struct mpc52xx_psc_spi *mps = spi_master_get_devdata(spi->master);
@@ -273,12 +270,6 @@ static int mpc52xx_psc_spi_setup(struct spi_device *spi)
273 if (spi->bits_per_word%8) 270 if (spi->bits_per_word%8)
274 return -EINVAL; 271 return -EINVAL;
275 272
276 if (spi->mode & ~MODEBITS) {
277 dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
278 spi->mode & ~MODEBITS);
279 return -EINVAL;
280 }
281
282 if (!cs) { 273 if (!cs) {
283 cs = kzalloc(sizeof *cs, GFP_KERNEL); 274 cs = kzalloc(sizeof *cs, GFP_KERNEL);
284 if (!cs) 275 if (!cs)
@@ -385,6 +376,9 @@ static int __init mpc52xx_psc_spi_do_probe(struct device *dev, u32 regaddr,
385 dev_set_drvdata(dev, master); 376 dev_set_drvdata(dev, master);
386 mps = spi_master_get_devdata(master); 377 mps = spi_master_get_devdata(master);
387 378
379 /* the spi->mode bits understood by this driver: */
380 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LSB_FIRST;
381
388 mps->irq = irq; 382 mps->irq = irq;
389 if (pdata == NULL) { 383 if (pdata == NULL) {
390 dev_warn(dev, "probe called without platform data, no " 384 dev_warn(dev, "probe called without platform data, no "
diff --git a/drivers/spi/omap2_mcspi.c b/drivers/spi/omap2_mcspi.c
index b4f3b753d0f4..eee4b6e0af2c 100644
--- a/drivers/spi/omap2_mcspi.c
+++ b/drivers/spi/omap2_mcspi.c
@@ -603,9 +603,6 @@ static int omap2_mcspi_request_dma(struct spi_device *spi)
603 return 0; 603 return 0;
604} 604}
605 605
606/* the spi->mode bits understood by this driver: */
607#define MODEBITS (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH)
608
609static int omap2_mcspi_setup(struct spi_device *spi) 606static int omap2_mcspi_setup(struct spi_device *spi)
610{ 607{
611 int ret; 608 int ret;
@@ -613,12 +610,6 @@ static int omap2_mcspi_setup(struct spi_device *spi)
613 struct omap2_mcspi_dma *mcspi_dma; 610 struct omap2_mcspi_dma *mcspi_dma;
614 struct omap2_mcspi_cs *cs = spi->controller_state; 611 struct omap2_mcspi_cs *cs = spi->controller_state;
615 612
616 if (spi->mode & ~MODEBITS) {
617 dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
618 spi->mode & ~MODEBITS);
619 return -EINVAL;
620 }
621
622 if (spi->bits_per_word < 4 || spi->bits_per_word > 32) { 613 if (spi->bits_per_word < 4 || spi->bits_per_word > 32) {
623 dev_dbg(&spi->dev, "setup: unsupported %d bit words\n", 614 dev_dbg(&spi->dev, "setup: unsupported %d bit words\n",
624 spi->bits_per_word); 615 spi->bits_per_word);
@@ -982,6 +973,9 @@ static int __init omap2_mcspi_probe(struct platform_device *pdev)
982 return -ENOMEM; 973 return -ENOMEM;
983 } 974 }
984 975
976 /* the spi->mode bits understood by this driver: */
977 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
978
985 if (pdev->id != -1) 979 if (pdev->id != -1)
986 master->bus_num = pdev->id; 980 master->bus_num = pdev->id;
987 981
diff --git a/drivers/spi/omap_uwire.c b/drivers/spi/omap_uwire.c
index 747d29be45d5..aa90ddb37066 100644
--- a/drivers/spi/omap_uwire.c
+++ b/drivers/spi/omap_uwire.c
@@ -447,19 +447,10 @@ done:
447 return status; 447 return status;
448} 448}
449 449
450/* the spi->mode bits understood by this driver: */
451#define MODEBITS (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH)
452
453static int uwire_setup(struct spi_device *spi) 450static int uwire_setup(struct spi_device *spi)
454{ 451{
455 struct uwire_state *ust = spi->controller_state; 452 struct uwire_state *ust = spi->controller_state;
456 453
457 if (spi->mode & ~MODEBITS) {
458 dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
459 spi->mode & ~MODEBITS);
460 return -EINVAL;
461 }
462
463 if (ust == NULL) { 454 if (ust == NULL) {
464 ust = kzalloc(sizeof(*ust), GFP_KERNEL); 455 ust = kzalloc(sizeof(*ust), GFP_KERNEL);
465 if (ust == NULL) 456 if (ust == NULL)
@@ -520,6 +511,9 @@ static int __init uwire_probe(struct platform_device *pdev)
520 511
521 uwire_write_reg(UWIRE_SR3, 1); 512 uwire_write_reg(UWIRE_SR3, 1);
522 513
514 /* the spi->mode bits understood by this driver: */
515 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
516
523 master->bus_num = 2; /* "official" */ 517 master->bus_num = 2; /* "official" */
524 master->num_chipselect = 4; 518 master->num_chipselect = 4;
525 master->setup = uwire_setup; 519 master->setup = uwire_setup;
diff --git a/drivers/spi/orion_spi.c b/drivers/spi/orion_spi.c
index 6d5e33bb4b4a..3aea50da7b29 100644
--- a/drivers/spi/orion_spi.c
+++ b/drivers/spi/orion_spi.c
@@ -358,12 +358,6 @@ static int orion_spi_setup(struct spi_device *spi)
358 358
359 orion_spi = spi_master_get_devdata(spi->master); 359 orion_spi = spi_master_get_devdata(spi->master);
360 360
361 if (spi->mode) {
362 dev_err(&spi->dev, "setup: unsupported mode bits %x\n",
363 spi->mode);
364 return -EINVAL;
365 }
366
367 /* Fix ac timing if required. */ 361 /* Fix ac timing if required. */
368 if (orion_spi->spi_info->enable_clock_fix) 362 if (orion_spi->spi_info->enable_clock_fix)
369 orion_spi_setbits(orion_spi, ORION_SPI_IF_CONFIG_REG, 363 orion_spi_setbits(orion_spi, ORION_SPI_IF_CONFIG_REG,
@@ -473,6 +467,9 @@ static int __init orion_spi_probe(struct platform_device *pdev)
473 if (pdev->id != -1) 467 if (pdev->id != -1)
474 master->bus_num = pdev->id; 468 master->bus_num = pdev->id;
475 469
470 /* we support only mode 0, and no options */
471 master->mode_bits = 0;
472
476 master->setup = orion_spi_setup; 473 master->setup = orion_spi_setup;
477 master->transfer = orion_spi_transfer; 474 master->transfer = orion_spi_transfer;
478 master->num_chipselect = ORION_NUM_CHIPSELECTS; 475 master->num_chipselect = ORION_NUM_CHIPSELECTS;
diff --git a/drivers/spi/pxa2xx_spi.c b/drivers/spi/pxa2xx_spi.c
index c7365e0b22dd..9c311dc4771d 100644
--- a/drivers/spi/pxa2xx_spi.c
+++ b/drivers/spi/pxa2xx_spi.c
@@ -1185,9 +1185,6 @@ static int transfer(struct spi_device *spi, struct spi_message *msg)
1185 return 0; 1185 return 0;
1186} 1186}
1187 1187
1188/* the spi->mode bits understood by this driver: */
1189#define MODEBITS (SPI_CPOL | SPI_CPHA)
1190
1191static int setup_cs(struct spi_device *spi, struct chip_data *chip, 1188static int setup_cs(struct spi_device *spi, struct chip_data *chip,
1192 struct pxa2xx_spi_chip *chip_info) 1189 struct pxa2xx_spi_chip *chip_info)
1193{ 1190{
@@ -1252,12 +1249,6 @@ static int setup(struct spi_device *spi)
1252 return -EINVAL; 1249 return -EINVAL;
1253 } 1250 }
1254 1251
1255 if (spi->mode & ~MODEBITS) {
1256 dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
1257 spi->mode & ~MODEBITS);
1258 return -EINVAL;
1259 }
1260
1261 /* Only alloc on first setup */ 1252 /* Only alloc on first setup */
1262 chip = spi_get_ctldata(spi); 1253 chip = spi_get_ctldata(spi);
1263 if (!chip) { 1254 if (!chip) {
@@ -1493,6 +1484,9 @@ static int __init pxa2xx_spi_probe(struct platform_device *pdev)
1493 drv_data->pdev = pdev; 1484 drv_data->pdev = pdev;
1494 drv_data->ssp = ssp; 1485 drv_data->ssp = ssp;
1495 1486
1487 /* the spi->mode bits understood by this driver: */
1488 master->mode_bits = SPI_CPOL | SPI_CPHA;
1489
1496 master->bus_num = pdev->id; 1490 master->bus_num = pdev->id;
1497 master->num_chipselect = platform_info->num_chipselect; 1491 master->num_chipselect = platform_info->num_chipselect;
1498 master->dma_alignment = DMA_ALIGNMENT; 1492 master->dma_alignment = DMA_ALIGNMENT;
diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index 0276bc37e255..a525a3a848c1 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -607,8 +607,19 @@ EXPORT_SYMBOL_GPL(spi_busnum_to_master);
607 */ 607 */
608int spi_setup(struct spi_device *spi) 608int spi_setup(struct spi_device *spi)
609{ 609{
610 unsigned bad_bits;
610 int status; 611 int status;
611 612
613 /* help drivers fail *cleanly* when they need options
614 * that aren't supported with their current master
615 */
616 bad_bits = spi->mode & ~spi->master->mode_bits;
617 if (bad_bits) {
618 dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
619 bad_bits);
620 return -EINVAL;
621 }
622
612 if (!spi->bits_per_word) 623 if (!spi->bits_per_word)
613 spi->bits_per_word = 8; 624 spi->bits_per_word = 8;
614 625
diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c
index d54058a903be..73e24ef5a2f9 100644
--- a/drivers/spi/spi_bfin5xx.c
+++ b/drivers/spi/spi_bfin5xx.c
@@ -1010,12 +1010,6 @@ static int bfin_spi_setup(struct spi_device *spi)
1010 struct driver_data *drv_data = spi_master_get_devdata(spi->master); 1010 struct driver_data *drv_data = spi_master_get_devdata(spi->master);
1011 int ret; 1011 int ret;
1012 1012
1013 /* Abort device setup if requested features are not supported */
1014 if (spi->mode & ~(SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST)) {
1015 dev_err(&spi->dev, "requested mode not fully supported\n");
1016 return -EINVAL;
1017 }
1018
1019 if (spi->bits_per_word != 8 && spi->bits_per_word != 16) 1013 if (spi->bits_per_word != 8 && spi->bits_per_word != 16)
1020 return -EINVAL; 1014 return -EINVAL;
1021 1015
@@ -1283,6 +1277,9 @@ static int __init bfin_spi_probe(struct platform_device *pdev)
1283 drv_data->pdev = pdev; 1277 drv_data->pdev = pdev;
1284 drv_data->pin_req = platform_info->pin_req; 1278 drv_data->pin_req = platform_info->pin_req;
1285 1279
1280 /* the spi->mode bits supported by this driver: */
1281 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST;
1282
1286 master->bus_num = pdev->id; 1283 master->bus_num = pdev->id;
1287 master->num_chipselect = platform_info->num_chipselect; 1284 master->num_chipselect = platform_info->num_chipselect;
1288 master->cleanup = bfin_spi_cleanup; 1285 master->cleanup = bfin_spi_cleanup;
diff --git a/drivers/spi/spi_bitbang.c b/drivers/spi/spi_bitbang.c
index 855b0b06e625..2a5abc08e857 100644
--- a/drivers/spi/spi_bitbang.c
+++ b/drivers/spi/spi_bitbang.c
@@ -188,12 +188,6 @@ int spi_bitbang_setup(struct spi_device *spi)
188 188
189 bitbang = spi_master_get_devdata(spi->master); 189 bitbang = spi_master_get_devdata(spi->master);
190 190
191 /* Bitbangers can support SPI_CS_HIGH, SPI_3WIRE, and so on;
192 * add those to master->flags, and provide the other support.
193 */
194 if ((spi->mode & ~(SPI_CPOL|SPI_CPHA|bitbang->flags)) != 0)
195 return -EINVAL;
196
197 if (!cs) { 191 if (!cs) {
198 cs = kzalloc(sizeof *cs, GFP_KERNEL); 192 cs = kzalloc(sizeof *cs, GFP_KERNEL);
199 if (!cs) 193 if (!cs)
@@ -452,6 +446,9 @@ int spi_bitbang_start(struct spi_bitbang *bitbang)
452 spin_lock_init(&bitbang->lock); 446 spin_lock_init(&bitbang->lock);
453 INIT_LIST_HEAD(&bitbang->queue); 447 INIT_LIST_HEAD(&bitbang->queue);
454 448
449 if (!bitbang->master->mode_bits)
450 bitbang->master->mode_bits = SPI_CPOL | SPI_CPHA | bitbang->flags;
451
455 if (!bitbang->master->transfer) 452 if (!bitbang->master->transfer)
456 bitbang->master->transfer = spi_bitbang_transfer; 453 bitbang->master->transfer = spi_bitbang_transfer;
457 if (!bitbang->txrx_bufs) { 454 if (!bitbang->txrx_bufs) {
diff --git a/drivers/spi/spi_imx.c b/drivers/spi/spi_imx.c
index 26d5ef06dbd9..c195e45f7f35 100644
--- a/drivers/spi/spi_imx.c
+++ b/drivers/spi/spi_imx.c
@@ -1171,9 +1171,6 @@ msg_rejected:
1171 return -EINVAL; 1171 return -EINVAL;
1172} 1172}
1173 1173
1174/* the spi->mode bits understood by this driver: */
1175#define MODEBITS (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH)
1176
1177/* On first setup bad values must free chip_data memory since will cause 1174/* On first setup bad values must free chip_data memory since will cause
1178 spi_new_device to fail. Bad value setup from protocol driver are simply not 1175 spi_new_device to fail. Bad value setup from protocol driver are simply not
1179 applied and notified to the calling driver. */ 1176 applied and notified to the calling driver. */
@@ -1186,12 +1183,6 @@ static int setup(struct spi_device *spi)
1186 u32 tmp; 1183 u32 tmp;
1187 int status = 0; 1184 int status = 0;
1188 1185
1189 if (spi->mode & ~MODEBITS) {
1190 dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
1191 spi->mode & ~MODEBITS);
1192 return -EINVAL;
1193 }
1194
1195 /* Get controller data */ 1186 /* Get controller data */
1196 chip_info = spi->controller_data; 1187 chip_info = spi->controller_data;
1197 1188
@@ -1478,6 +1469,9 @@ static int __init spi_imx_probe(struct platform_device *pdev)
1478 drv_data->master_info = platform_info; 1469 drv_data->master_info = platform_info;
1479 drv_data->pdev = pdev; 1470 drv_data->pdev = pdev;
1480 1471
1472 /* the spi->mode bits understood by this driver: */
1473 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
1474
1481 master->bus_num = pdev->id; 1475 master->bus_num = pdev->id;
1482 master->num_chipselect = platform_info->num_chipselect; 1476 master->num_chipselect = platform_info->num_chipselect;
1483 master->dma_alignment = DMA_ALIGNMENT; 1477 master->dma_alignment = DMA_ALIGNMENT;
diff --git a/drivers/spi/spi_mpc83xx.c b/drivers/spi/spi_mpc83xx.c
index 0926a3e293e0..ce61be98e06d 100644
--- a/drivers/spi/spi_mpc83xx.c
+++ b/drivers/spi/spi_mpc83xx.c
@@ -419,10 +419,6 @@ static void mpc83xx_spi_work(struct work_struct *work)
419 spin_unlock_irq(&mpc83xx_spi->lock); 419 spin_unlock_irq(&mpc83xx_spi->lock);
420} 420}
421 421
422/* the spi->mode bits understood by this driver: */
423#define MODEBITS (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH \
424 | SPI_LSB_FIRST | SPI_LOOP)
425
426static int mpc83xx_spi_setup(struct spi_device *spi) 422static int mpc83xx_spi_setup(struct spi_device *spi)
427{ 423{
428 struct mpc83xx_spi *mpc83xx_spi; 424 struct mpc83xx_spi *mpc83xx_spi;
@@ -430,12 +426,6 @@ static int mpc83xx_spi_setup(struct spi_device *spi)
430 u32 hw_mode; 426 u32 hw_mode;
431 struct spi_mpc83xx_cs *cs = spi->controller_state; 427 struct spi_mpc83xx_cs *cs = spi->controller_state;
432 428
433 if (spi->mode & ~MODEBITS) {
434 dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
435 spi->mode & ~MODEBITS);
436 return -EINVAL;
437 }
438
439 if (!spi->max_speed_hz) 429 if (!spi->max_speed_hz)
440 return -EINVAL; 430 return -EINVAL;
441 431
@@ -562,6 +552,10 @@ mpc83xx_spi_probe(struct device *dev, struct resource *mem, unsigned int irq)
562 552
563 dev_set_drvdata(dev, master); 553 dev_set_drvdata(dev, master);
564 554
555 /* the spi->mode bits understood by this driver: */
556 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH
557 | SPI_LSB_FIRST | SPI_LOOP;
558
565 master->setup = mpc83xx_spi_setup; 559 master->setup = mpc83xx_spi_setup;
566 master->transfer = mpc83xx_spi_transfer; 560 master->transfer = mpc83xx_spi_transfer;
567 master->cleanup = mpc83xx_spi_cleanup; 561 master->cleanup = mpc83xx_spi_cleanup;
diff --git a/drivers/spi/spi_s3c24xx.c b/drivers/spi/spi_s3c24xx.c
index 18a4c7f54380..e0d44af4745a 100644
--- a/drivers/spi/spi_s3c24xx.c
+++ b/drivers/spi/spi_s3c24xx.c
@@ -146,19 +146,10 @@ static int s3c24xx_spi_setupxfer(struct spi_device *spi,
146 return 0; 146 return 0;
147} 147}
148 148
149/* the spi->mode bits understood by this driver: */
150#define MODEBITS (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH)
151
152static int s3c24xx_spi_setup(struct spi_device *spi) 149static int s3c24xx_spi_setup(struct spi_device *spi)
153{ 150{
154 int ret; 151 int ret;
155 152
156 if (spi->mode & ~MODEBITS) {
157 dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
158 spi->mode & ~MODEBITS);
159 return -EINVAL;
160 }
161
162 ret = s3c24xx_spi_setupxfer(spi, NULL); 153 ret = s3c24xx_spi_setupxfer(spi, NULL);
163 if (ret < 0) { 154 if (ret < 0) {
164 dev_err(&spi->dev, "setupxfer returned %d\n", ret); 155 dev_err(&spi->dev, "setupxfer returned %d\n", ret);
@@ -283,6 +274,9 @@ static int __init s3c24xx_spi_probe(struct platform_device *pdev)
283 274
284 /* setup the master state. */ 275 /* setup the master state. */
285 276
277 /* the spi->mode bits understood by this driver: */
278 master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
279
286 master->num_chipselect = hw->pdata->num_cs; 280 master->num_chipselect = hw->pdata->num_cs;
287 master->bus_num = pdata->bus_num; 281 master->bus_num = pdata->bus_num;
288 282
diff --git a/drivers/spi/spi_txx9.c b/drivers/spi/spi_txx9.c
index 8e36b2153d9a..96057de133ad 100644
--- a/drivers/spi/spi_txx9.c
+++ b/drivers/spi/spi_txx9.c
@@ -110,17 +110,11 @@ static void txx9spi_cs_func(struct spi_device *spi, struct txx9spi *c,
110 ndelay(cs_delay); /* CS Setup Time / CS Recovery Time */ 110 ndelay(cs_delay); /* CS Setup Time / CS Recovery Time */
111} 111}
112 112
113/* the spi->mode bits understood by this driver: */
114#define MODEBITS (SPI_CS_HIGH|SPI_CPOL|SPI_CPHA)
115
116static int txx9spi_setup(struct spi_device *spi) 113static int txx9spi_setup(struct spi_device *spi)
117{ 114{
118 struct txx9spi *c = spi_master_get_devdata(spi->master); 115 struct txx9spi *c = spi_master_get_devdata(spi->master);
119 u8 bits_per_word; 116 u8 bits_per_word;
120 117
121 if (spi->mode & ~MODEBITS)
122 return -EINVAL;
123
124 if (!spi->max_speed_hz 118 if (!spi->max_speed_hz
125 || spi->max_speed_hz > c->max_speed_hz 119 || spi->max_speed_hz > c->max_speed_hz
126 || spi->max_speed_hz < c->min_speed_hz) 120 || spi->max_speed_hz < c->min_speed_hz)
@@ -414,6 +408,9 @@ static int __init txx9spi_probe(struct platform_device *dev)
414 (unsigned long long)res->start, irq, 408 (unsigned long long)res->start, irq,
415 (c->baseclk + 500000) / 1000000); 409 (c->baseclk + 500000) / 1000000);
416 410
411 /* the spi->mode bits understood by this driver: */
412 master->mode_bits = SPI_CS_HIGH | SPI_CPOL | SPI_CPHA;
413
417 master->bus_num = dev->id; 414 master->bus_num = dev->id;
418 master->setup = txx9spi_setup; 415 master->setup = txx9spi_setup;
419 master->transfer = txx9spi_transfer; 416 master->transfer = txx9spi_transfer;
diff --git a/drivers/spi/xilinx_spi.c b/drivers/spi/xilinx_spi.c
index 2d7e6b81fb4a..46b8c5c2f45e 100644
--- a/drivers/spi/xilinx_spi.c
+++ b/drivers/spi/xilinx_spi.c
@@ -158,9 +158,6 @@ static int xilinx_spi_setup_transfer(struct spi_device *spi,
158 return 0; 158 return 0;
159} 159}
160 160
161/* the spi->mode bits understood by this driver: */
162#define MODEBITS (SPI_CPOL | SPI_CPHA)
163
164static int xilinx_spi_setup(struct spi_device *spi) 161static int xilinx_spi_setup(struct spi_device *spi)
165{ 162{
166 struct spi_bitbang *bitbang; 163 struct spi_bitbang *bitbang;
@@ -170,12 +167,6 @@ static int xilinx_spi_setup(struct spi_device *spi)
170 xspi = spi_master_get_devdata(spi->master); 167 xspi = spi_master_get_devdata(spi->master);
171 bitbang = &xspi->bitbang; 168 bitbang = &xspi->bitbang;
172 169
173 if (spi->mode & ~MODEBITS) {
174 dev_err(&spi->dev, "%s, unsupported mode bits %x\n",
175 __func__, spi->mode & ~MODEBITS);
176 return -EINVAL;
177 }
178
179 retval = xilinx_spi_setup_transfer(spi, NULL); 170 retval = xilinx_spi_setup_transfer(spi, NULL);
180 if (retval < 0) 171 if (retval < 0)
181 return retval; 172 return retval;
@@ -327,6 +318,9 @@ static int __init xilinx_spi_of_probe(struct of_device *ofdev,
327 goto put_master; 318 goto put_master;
328 } 319 }
329 320
321 /* the spi->mode bits understood by this driver: */
322 master->mode_bits = SPI_CPOL | SPI_CPHA;
323
330 xspi = spi_master_get_devdata(master); 324 xspi = spi_master_get_devdata(master);
331 xspi->bitbang.master = spi_master_get(master); 325 xspi->bitbang.master = spi_master_get(master);
332 xspi->bitbang.chipselect = xilinx_spi_chipselect; 326 xspi->bitbang.chipselect = xilinx_spi_chipselect;
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index 0db5d64fc5e8..9c4cd27f4685 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -245,6 +245,9 @@ struct spi_master {
245 */ 245 */
246 u16 dma_alignment; 246 u16 dma_alignment;
247 247
248 /* spi_device.mode flags understood by this controller driver */
249 u16 mode_bits;
250
248 /* Setup mode and clock, etc (spi driver may call many times). 251 /* Setup mode and clock, etc (spi driver may call many times).
249 * 252 *
250 * IMPORTANT: this may be called when transfers to another 253 * IMPORTANT: this may be called when transfers to another