为明远智睿 imx6q Demo v2.5 添加spi5的支持

第一步:在board-mx6q_sabresd.h 中添加spi5 的引脚定义

具体在 mx6q_sabresd_pads[]  数组中添加,如下示:(以下定义是根据硬件工程师要采用

哪个引脚画板决定的,以下的宏都是在bsp 中支持的)

/* ECSPI5 added by Rex 2015.4.21 */
MX6Q_PAD_SD2_CLK__ECSPI5_SCLK,
MX6Q_PAD_SD2_DAT0__ECSPI5_MISO,
MX6Q_PAD_SD2_CMD__ECSPI5_MOSI,
MX6Q_PAD_GPIO_7__ECSPI5_RDY,
MX6Q_PAD_SD2_DAT1__ECSPI5_SS0,

 

第二步:将与SD2 相关的引脚定义及函数注释(不然 spi5的管脚与sd2的管脚是冲突的)

1)board-mx6q_sabresd.h 的 mx6q_sabresd_pads[] 中

/* USDHC2 */
/* // sd2 canceled by Rex @ 2015.4.21
MX6Q_PAD_SD2_CLK__USDHC2_CLK,
MX6Q_PAD_SD2_CMD__USDHC2_CMD,
MX6Q_PAD_SD2_DAT0__USDHC2_DAT0,
MX6Q_PAD_SD2_DAT1__USDHC2_DAT1,
MX6Q_PAD_SD2_DAT2__USDHC2_DAT2,
MX6Q_PAD_SD2_DAT3__USDHC2_DAT3,
*/

2)board-mx6q_sabresd.c 中的 mx6_sabresd_board_init() 中

// canceled by Rex @ 2015.4.21 in case conflict between spi5 and sd2
//imx6q_add_sdhci_usdhc_imx(1, &mx6q_sabresd_sd2_data);

第三步:定义片选管脚对应的gpio

在board-mx6q_sabresd.c 中,文件头开始处添加

// spi5 support added by Rex @ 2015.4.20
#define SABRESD_ECSPI5_CS0  IMX_GPIO_NR(1, 14)

这个(1, 14)是根据MY-I.MX6-DEMO-V2.2_V2.5 硬件介绍.pdf 得来的。

我们想要定义 cs0 的gpio 查找 E20 有如下信息:

看到第5行关于gpio的信息即为(1, 14)得来的源由。

第四步:定义spi5的片选数组

// add spi5 cs support by Rex
static int mx6q_sabresd_spi5_cs[] = {
    SABRESD_ECSPI5_CS0,
};

 

第五步:定义spi5 的spi_imx_master 结构体变量

// add spi5 spi_imx_master member
static const struct spi_imx_master mx6q_sabresd_spi5_data __initconst = {
    .chipselect     = mx6q_sabresd_spi5_cs,
    .num_chipselect = ARRAY_SIZE(mx6q_sabresd_spi5_cs),
};

第六步:定义 spi5 的spi_board_info 结构体变量

// add spi_board_info member for spi5 by Rex
static struct spi_board_info imx6_sabresd_spi5_device[] __initdata = {
    {
        .modalias = "spidev",
        .max_speed_hz = 20000000, /* max spi clock (SCK) speed */
        .bus_num = 4,
        .chip_select = 0,
        .mode = SPI_MODE_0,
    },
};

第七步:定义spi5 设备初始化函数

// define spi5 init func by Rex @ 2015.4.21
static void spi5_device_init(void)
{
    spi_register_board_info(imx6_sabresd_spi5_device,
                ARRAY_SIZE(imx6_sabresd_spi5_device));
}

 

第八步:在 mx6_sabresd_board_init() 添加 spi5 的初始化代码

// rex add spi5 init 
imx6q_add_ecspi(4, &mx6q_sabresd_spi5_data);
spi5_device_init();

 

最后,重新编译内核,进行测试即可。

posted @ 2015-04-21 10:29  阿青1987  阅读(414)  评论(0编辑  收藏