devices-common.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. /*
  2. * Copyright (C) ST-Ericsson SA 2010
  3. *
  4. * Author: Rabin Vincent <rabin.vincent@stericsson.com> for ST-Ericsson
  5. * License terms: GNU General Public License (GPL), version 2.
  6. */
  7. #ifndef __DEVICES_COMMON_H
  8. #define __DEVICES_COMMON_H
  9. #include <linux/platform_device.h>
  10. #include <linux/dma-mapping.h>
  11. #include <linux/sys_soc.h>
  12. #include <linux/amba/bus.h>
  13. #include <linux/platform_data/i2c-nomadik.h>
  14. #include <mach/crypto-ux500.h>
  15. struct spi_master_cntlr;
  16. static inline struct amba_device *
  17. dbx500_add_msp_spi(struct device *parent, const char *name,
  18. resource_size_t base, int irq,
  19. struct spi_master_cntlr *pdata)
  20. {
  21. return amba_ahb_device_add(parent, name, base, SZ_4K, irq, 0,
  22. pdata, 0);
  23. }
  24. static inline struct amba_device *
  25. dbx500_add_spi(struct device *parent, const char *name, resource_size_t base,
  26. int irq, struct spi_master_cntlr *pdata,
  27. u32 periphid)
  28. {
  29. return amba_ahb_device_add(parent, name, base, SZ_4K, irq, 0,
  30. pdata, periphid);
  31. }
  32. struct mmci_platform_data;
  33. static inline struct amba_device *
  34. dbx500_add_sdi(struct device *parent, const char *name, resource_size_t base,
  35. int irq, struct mmci_platform_data *pdata, u32 periphid)
  36. {
  37. return amba_ahb_device_add(parent, name, base, SZ_4K, irq, 0,
  38. pdata, periphid);
  39. }
  40. struct amba_pl011_data;
  41. static inline struct amba_device *
  42. dbx500_add_uart(struct device *parent, const char *name, resource_size_t base,
  43. int irq, struct amba_pl011_data *pdata)
  44. {
  45. return amba_ahb_device_add(parent, name, base, SZ_4K, irq, 0, pdata, 0);
  46. }
  47. struct nmk_i2c_controller;
  48. static inline struct amba_device *
  49. dbx500_add_i2c(struct device *parent, int id, resource_size_t base, int irq,
  50. struct nmk_i2c_controller *data)
  51. {
  52. /* Conjure a name similar to what the platform device used to have */
  53. char name[16];
  54. snprintf(name, sizeof(name), "nmk-i2c.%d", id);
  55. return amba_apb_device_add(parent, name, base, SZ_4K, irq, 0, data, 0);
  56. }
  57. static inline struct amba_device *
  58. dbx500_add_rtc(struct device *parent, resource_size_t base, int irq)
  59. {
  60. return amba_apb_device_add(parent, "rtc-pl031", base, SZ_4K, irq,
  61. 0, NULL, 0);
  62. }
  63. struct cryp_platform_data;
  64. static inline struct platform_device *
  65. dbx500_add_cryp1(struct device *parent, int id, resource_size_t base, int irq,
  66. struct cryp_platform_data *pdata)
  67. {
  68. struct resource res[] = {
  69. DEFINE_RES_MEM(base, SZ_4K),
  70. DEFINE_RES_IRQ(irq),
  71. };
  72. struct platform_device_info pdevinfo = {
  73. .parent = parent,
  74. .name = "cryp1",
  75. .id = id,
  76. .res = res,
  77. .num_res = ARRAY_SIZE(res),
  78. .data = pdata,
  79. .size_data = sizeof(*pdata),
  80. .dma_mask = DMA_BIT_MASK(32),
  81. };
  82. return platform_device_register_full(&pdevinfo);
  83. }
  84. struct hash_platform_data;
  85. static inline struct platform_device *
  86. dbx500_add_hash1(struct device *parent, int id, resource_size_t base,
  87. struct hash_platform_data *pdata)
  88. {
  89. struct resource res[] = {
  90. DEFINE_RES_MEM(base, SZ_4K),
  91. };
  92. struct platform_device_info pdevinfo = {
  93. .parent = parent,
  94. .name = "hash1",
  95. .id = id,
  96. .res = res,
  97. .num_res = ARRAY_SIZE(res),
  98. .data = pdata,
  99. .size_data = sizeof(*pdata),
  100. .dma_mask = DMA_BIT_MASK(32),
  101. };
  102. return platform_device_register_full(&pdevinfo);
  103. }
  104. struct nmk_gpio_platform_data;
  105. void dbx500_add_gpios(struct device *parent, resource_size_t *base, int num,
  106. int irq, struct nmk_gpio_platform_data *pdata);
  107. static inline void
  108. dbx500_add_pinctrl(struct device *parent, const char *name)
  109. {
  110. struct platform_device_info pdevinfo = {
  111. .parent = parent,
  112. .name = name,
  113. .id = -1,
  114. };
  115. platform_device_register_full(&pdevinfo);
  116. }
  117. #endif