spi.c 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /*
  2. * arch/arm/mach-u300/spi.c
  3. *
  4. * Copyright (C) 2009 ST-Ericsson AB
  5. * License terms: GNU General Public License (GPL) version 2
  6. *
  7. * Author: Linus Walleij <linus.walleij@stericsson.com>
  8. */
  9. #include <linux/device.h>
  10. #include <linux/amba/bus.h>
  11. #include <linux/spi/spi.h>
  12. #include <linux/amba/pl022.h>
  13. #include <linux/err.h>
  14. #include "padmux.h"
  15. /*
  16. * The following is for the actual devices on the SSP/SPI bus
  17. */
  18. #ifdef CONFIG_MACH_U300_SPIDUMMY
  19. static void select_dummy_chip(u32 chipselect)
  20. {
  21. pr_debug("CORE: %s called with CS=0x%x (%s)\n",
  22. __func__,
  23. chipselect,
  24. chipselect ? "unselect chip" : "select chip");
  25. /*
  26. * Here you would write the chip select value to the GPIO pins if
  27. * this was a real chip (but this is a loopback dummy).
  28. */
  29. }
  30. struct pl022_config_chip dummy_chip_info = {
  31. /*
  32. * available POLLING_TRANSFER and INTERRUPT_TRANSFER,
  33. * DMA_TRANSFER does not work
  34. */
  35. .com_mode = INTERRUPT_TRANSFER,
  36. .iface = SSP_INTERFACE_MOTOROLA_SPI,
  37. /* We can only act as master but SSP_SLAVE is possible in theory */
  38. .hierarchy = SSP_MASTER,
  39. /* 0 = drive TX even as slave, 1 = do not drive TX as slave */
  40. .slave_tx_disable = 0,
  41. .rx_lev_trig = SSP_RX_1_OR_MORE_ELEM,
  42. .tx_lev_trig = SSP_TX_1_OR_MORE_EMPTY_LOC,
  43. .ctrl_len = SSP_BITS_12,
  44. .wait_state = SSP_MWIRE_WAIT_ZERO,
  45. .duplex = SSP_MICROWIRE_CHANNEL_FULL_DUPLEX,
  46. /*
  47. * This is where you insert a call to a function to enable CS
  48. * (usually GPIO) for a certain chip.
  49. */
  50. .cs_control = select_dummy_chip,
  51. };
  52. #endif
  53. static struct spi_board_info u300_spi_devices[] = {
  54. #ifdef CONFIG_MACH_U300_SPIDUMMY
  55. {
  56. /* A dummy chip used for loopback tests */
  57. .modalias = "spi-dummy",
  58. /* Really dummy, pass in additional chip config here */
  59. .platform_data = NULL,
  60. /* This defines how the controller shall handle the device */
  61. .controller_data = &dummy_chip_info,
  62. /* .irq - no external IRQ routed from this device */
  63. .max_speed_hz = 1000000,
  64. .bus_num = 0, /* Only one bus on this chip */
  65. .chip_select = 0,
  66. /* Means SPI_CS_HIGH, change if e.g low CS */
  67. .mode = SPI_MODE_1 | SPI_LOOP,
  68. },
  69. #endif
  70. };
  71. static struct pl022_ssp_controller ssp_platform_data = {
  72. /* If you have several SPI buses this varies, we have only bus 0 */
  73. .bus_id = 0,
  74. /* Set this to 1 when we think we got DMA working */
  75. .enable_dma = 0,
  76. /*
  77. * On the APP CPU GPIO 4, 5 and 6 are connected as generic
  78. * chip selects for SPI. (Same on U330, U335 and U365.)
  79. * TODO: make sure the GPIO driver can select these properly
  80. * and do padmuxing accordingly too.
  81. */
  82. .num_chipselect = 3,
  83. };
  84. void __init u300_spi_init(struct amba_device *adev)
  85. {
  86. struct pmx *pmx;
  87. adev->dev.platform_data = &ssp_platform_data;
  88. /*
  89. * Setup padmuxing for SPI. Since this must always be
  90. * compiled into the kernel, pmx is never released.
  91. */
  92. pmx = pmx_get(&adev->dev, U300_APP_PMX_SPI_SETTING);
  93. if (IS_ERR(pmx))
  94. dev_warn(&adev->dev, "Could not get padmux handle\n");
  95. else {
  96. int ret;
  97. ret = pmx_activate(&adev->dev, pmx);
  98. if (IS_ERR_VALUE(ret))
  99. dev_warn(&adev->dev, "Could not activate padmuxing\n");
  100. }
  101. }
  102. void __init u300_spi_register_board_devices(void)
  103. {
  104. /* Register any SPI devices */
  105. spi_register_board_info(u300_spi_devices, ARRAY_SIZE(u300_spi_devices));
  106. }