Advertisement
danielhilst

0001-Nordic-nRF24L01P-board-support-code.patch

Aug 27th, 2014
370
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 6.92 KB | None | 0 0
  1. From 2348f5c073711adb9376c97873867955b8153226 Mon Sep 17 00:00:00 2001
  2. From: Daniel Hilst SellI <danielhilst@gmail.com>
  3. Date: Wed, 27 Aug 2014 14:09:52 -0300
  4. Subject: [PATCH] Nordic nRF24L01P board support code
  5.  
  6. ---
  7. arch/arm/mach-mx6/board-mx6q_var_som.c | 35 ++++++++++++++++++++++++++++++++++
  8.  arch/arm/mach-mx6/board-mx6q_var_som.h | 13 +++++++++++--
  9.  include/linux/spi/Kbuild               |  1 +
  10.  include/linux/spi/nrf24.h              | 35 ++++++++++++++++++++++++++++++++++
  11.  4 files changed, 82 insertions(+), 2 deletions(-)
  12.  create mode 100644 include/linux/spi/nrf24.h
  13.  
  14. diff --git a/arch/arm/mach-mx6/board-mx6q_var_som.c b/arch/arm/mach-mx6/board-mx6q_var_som.c
  15. index c869038..915c063 100644
  16. --- a/arch/arm/mach-mx6/board-mx6q_var_som.c
  17. +++ b/arch/arm/mach-mx6/board-mx6q_var_som.c
  18. @@ -31,6 +31,7 @@
  19.  #include <linux/fsl_devices.h>
  20.  #include <linux/spi/spi.h>
  21.  #include <linux/spi/ads7846.h>
  22. +#include <linux/spi/nrf24.h>
  23.  #include <linux/i2c.h>
  24.  #include <linux/i2c/pca953x.h>
  25.  #include <linux/ata.h>
  26. @@ -85,6 +86,7 @@
  27.   */
  28.  //#define ANDROID_NAND_RECOVERY
  29.  
  30. +#define VAR_SOM_ECSPI1_CS0      IMX_GPIO_NR(4, 9)
  31.  #define VAR_SOM_ECSPI3_CS0      IMX_GPIO_NR(4, 24)
  32.  #define VAR_SOM_ADS7846_INT     IMX_GPIO_NR(4, 25)
  33.  #define VAR_SOM_ADS7846_PD      IMX_GPIO_NR(4, 25)
  34. @@ -111,6 +113,10 @@
  35.  
  36.  #define VAR_SOM_TSC_CTW6120_IRQ_GPIO IMX_GPIO_NR(3, 7)
  37.  
  38. +/* Needed by nRF2424L01P module */
  39. +#define VAR_SOM_NRF24L01P_IRQ_GPIO IMX_GPIO_NR(5, 26)
  40. +#define VAR_SOM_NRF24L01P_CE_GPIO IMX_GPIO_NR(5, 27)
  41. +
  42.  static struct clk *sata_clk;
  43.  static struct clk *clko;
  44.  static int enable_lcd_ldb;
  45. @@ -368,10 +374,19 @@ static struct fec_platform_data fec_data __initdata = {
  46.     .phy = PHY_INTERFACE_MODE_RGMII,
  47.  };
  48.  
  49. +static int mx6q_var_som_ecspi1_cs[] = {
  50. +   VAR_SOM_ECSPI1_CS0,
  51. +};
  52. +
  53.  static int mx6q_var_som_spi_cs[] = {
  54.     VAR_SOM_ECSPI3_CS0,
  55.  };
  56.  
  57. +static const struct spi_imx_master mx6q_var_som_ecspi1_data __initconst = {
  58. +   .chipselect     = mx6q_var_som_ecspi1_cs,
  59. +   .num_chipselect = ARRAY_SIZE(mx6q_var_som_ecspi1_cs),
  60. +};
  61. +
  62.  static const struct spi_imx_master mx6q_var_som_spi_data __initconst = {
  63.     .chipselect     = mx6q_var_som_spi_cs,
  64.     .num_chipselect = ARRAY_SIZE(mx6q_var_som_spi_cs),
  65. @@ -404,12 +419,31 @@ static struct spi_board_info mx6_var_som_spi_ts_device[] __initdata = {
  66.     },
  67.  };
  68.  
  69. +static struct nrf24_platform_data nrf24_config = {
  70. +        .gpio_ce  = VAR_SOM_NRF24L01P_CE_GPIO,
  71. +        .gpio_irq = VAR_SOM_NRF24L01P_IRQ_GPIO,
  72. +};
  73. +
  74. +static struct spi_board_info mx6_var_som_spi_nrf24[] __initdata = {
  75. +        {
  76. +                .modalias = "nrf24", /* nRF24L01+ */
  77. +                .max_speed_hz = 8000000,
  78. +                .bus_num = 0,
  79. +                .chip_select = 0,
  80. +                .platform_data = &nrf24_config,
  81. +                .mode = SPI_MODE_0,
  82. +        },
  83. +};
  84. +
  85.  static void spi_device_init(void)
  86.  {
  87.     if (var_lcd_index != VAR_LCD_CTW6120) {
  88.         spi_register_board_info(mx6_var_som_spi_ts_device,
  89.                 ARRAY_SIZE(mx6_var_som_spi_ts_device));
  90.     }
  91. +
  92. +        spi_register_board_info(mx6_var_som_spi_nrf24,
  93. +                               ARRAY_SIZE(mx6_var_som_spi_nrf24));
  94.  }
  95.  
  96.  /* Audio
  97. @@ -1150,6 +1184,7 @@ static void __init mx6_var_som_board_init(void)
  98.     gpio_direction_output(VAR_SOM_BACKLIGHT_EN, 1);
  99.  
  100.     /* SPI */
  101. +   imx6q_add_ecspi(0, &mx6q_var_som_ecspi1_data);
  102.     imx6q_add_ecspi(2, &mx6q_var_som_spi_data);
  103.     spi_device_init();
  104.  
  105. diff --git a/arch/arm/mach-mx6/board-mx6q_var_som.h b/arch/arm/mach-mx6/board-mx6q_var_som.h
  106. index dc78c15..9eb7d07 100644
  107. --- a/arch/arm/mach-mx6/board-mx6q_var_som.h
  108. +++ b/arch/arm/mach-mx6/board-mx6q_var_som.h
  109. @@ -58,6 +58,15 @@ static iomux_v3_cfg_t mx6q_var_som_pads[] = {
  110.     MX6Q_PAD_CSI0_DAT6__AUDMUX_AUD3_TXFS,
  111.     MX6Q_PAD_CSI0_DAT7__AUDMUX_AUD3_RXD,
  112.  
  113. +        /* SPI1 (nRF24L01P) */
  114. +        MX6Q_PAD_KEY_COL1__ECSPI1_MISO,
  115. +        MX6Q_PAD_KEY_ROW0__ECSPI1_MOSI,
  116. +        MX6Q_PAD_KEY_COL0__ECSPI1_SCLK,        
  117. +
  118. +        MX6Q_PAD_KEY_ROW1__GPIO_4_9, /* nRF24L01P SS0 */
  119. +        MX6Q_PAD_CSI0_DAT9__GPIO_5_27, /* nRF24L01P CE  */
  120. +        MX6Q_PAD_CSI0_DAT8__GPIO_5_26, /* nRF24L01P IRQ */
  121. +
  122.     /* SPI3 (ads7846) */
  123.     MX6Q_PAD_DISP0_DAT2__ECSPI3_MISO,
  124.     MX6Q_PAD_DISP0_DAT1__ECSPI3_MOSI,
  125. @@ -125,8 +134,8 @@ static iomux_v3_cfg_t mx6q_var_som_pads[] = {
  126.     MX6Q_PAD_GPIO_17__GPIO_7_12,
  127.  
  128.     /* I2C1 */
  129. -   MX6Q_PAD_CSI0_DAT8__I2C1_SDA,
  130. -   MX6Q_PAD_CSI0_DAT9__I2C1_SCL,
  131. +   /* MX6Q_PAD_CSI0_DAT8__I2C1_SDA, */
  132. +   /* MX6Q_PAD_CSI0_DAT9__I2C1_SCL, */
  133.  
  134.     /* I2C2 */
  135.     MX6Q_PAD_KEY_COL3__I2C2_SCL,
  136. diff --git a/include/linux/spi/Kbuild b/include/linux/spi/Kbuild
  137. index d375a08..b244544 100644
  138. --- a/include/linux/spi/Kbuild
  139. +++ b/include/linux/spi/Kbuild
  140. @@ -1 +1,2 @@
  141.  header-y += spidev.h
  142. +header-y += nrf24.h
  143. diff --git a/include/linux/spi/nrf24.h b/include/linux/spi/nrf24.h
  144. new file mode 100644
  145. index 0000000..71c2664
  146. --- /dev/null
  147. +++ b/include/linux/spi/nrf24.h
  148. @@ -0,0 +1,35 @@
  149. +#ifndef __LINUX_SPI_NRF24L01P_H
  150. +#define __LINUX_SPI_NRF24L01P_H
  151. +
  152. +/* linux/spi/nRF24L01P */
  153. +
  154. +struct nrf24_platform_data {
  155. +        unsigned int gpio_irq;
  156. +        unsigned int gpio_ce;            /* Chip Enable */
  157. +};
  158. +
  159. +
  160. +#include <linux/ioctl.h>
  161. +
  162. +#define NRF24_MAGIC 'r'
  163. +#define NRF24_IOCBASE  0x20
  164. +#define NRF24_IOCSAA     _IOW(NRF24_MAGIC, NRF24_IOCBASE +  0, unsigned char)   /* Autoack, 7 bits, 0 = off, 1 = on */
  165. +#define NRF24_IOCGAA     _IOR(NRF24_MAGIC, NRF24_IOCBASE +  1, unsigned char *)
  166. +#define NRF24_IOCSCRC    _IOW(NRF24_MAGIC, NRF24_IOCBASE +  2, unsigned char)   /* CRC, 2 bits, bits 2 and 3 of CONFIG register */
  167. +#define NRF24_IOCGCRC    _IOR(NRF24_MAGIC, NRF24_IOCBASE +  3, unsigned char *)
  168. +#define NRF24_IOCSCH     _IOW(NRF24_MAGIC, NRF24_IOCBASE +  4, unsigned char) /* Channel, 7 bits, from 0 to 127 */
  169. +#define NRF24_IOCGCH     _IOR(NRF24_MAGIC, NRF24_IOCBASE +  5, unsigned char *)
  170. +#define NRF24_IOCSPW     _IOW(NRF24_MAGIC, NRF24_IOCBASE +  6, unsigned char) /* (RX) Payload width, 5 bits, from 0 to 32 */
  171. +#define NRF24_IOCGPW     _IOR(NRF24_MAGIC, NRF24_IOCBASE +  7, unsigned char *)
  172. +#define NRF24_IOCSTXADDR _IOW(NRF24_MAGIC, NRF24_IOCBASE +  8, unsigned char *) /* TX ADDR, from 3 to 5 bytes, depending on address width, see below */
  173. +#define NRF24_IOCGTXADDR _IOR(NRF24_MAGIC, NRF24_IOCBASE +  9, unsigned char *)
  174. +#define NRF24_IOCSRXADDR _IOW(NRF24_MAGIC, NRF24_IOCBASE + 10, unsigned char *) /* RX ADDR, same as TX ADDR */
  175. +#define NRF24_IOCGRXADDR _IOR(NRF24_MAGIC, NRF24_IOCBASE + 11, unsigned char *)
  176. +#define NRF24_IOCSAW     _IOW(NRF24_MAGIC, NRF24_IOCBASE + 12, unsigned char) /* Address Width, 2 bits, bits 0 and 1 of SETUP_AW register */
  177. +#define NRF24_IOCGAW     _IOR(NRF24_MAGIC, NRF24_IOCBASE + 13, unsigned char *)
  178. +#define NRF24_IOCSRETR   _IOW(NRF24_MAGIC, NRF24_IOCBASE + 14, unsigned char) /* Auto Retransmit, 7 bits from SETUP_RETR register */
  179. +#define NRF24_IOCGRETR   _IOR(NRF24_MAGIC, NRF24_IOCBASE + 15, unsigned char *)
  180. +#define NRF24_IOCSRF     _IOW(NRF24_MAGIC, NRF24_IOCBASE + 16, unsigned char) /* RF_SETUP, 7 bits from RF_SETUP register */
  181. +#define NRF24_IOCGRF     _IOR(NRF24_MAGIC, NRF24_IOCBASE + 17, unsigned char *)
  182. +
  183. +#endif
  184. --
  185. 2.0.3
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement