1:配置管脚为SPI功能
在board-mx6q_sabresd.h的最后添加,复制被重定义
(以添加SPI2为例)
- /* ECSPI2*/
- MX6Q_PAD_EIM_CS0__ECSPI2_SCLK,
- MX6Q_PAD_EIM_CS1__ECSPI2_MOSI,
- MX6Q_PAD_EIM_OE__ECSPI2_MISO,
- MX6Q_PAD_CSI0_DAT11__GPIO_5_29,
之后再板级文件board-mx6q_sabresd.c中将有相关函数对管脚进行统一初始化。完成寄存器配置的工作。
- static int mx6q_sabresd_spi2_cs[] = {
SABRESD_ECSPI2_CS0,
};
static const struct spi_imx_master mx6q_sabresd_spi2_data __initconst = {
.chipselect = mx6q_sabresd_spi2_cs,
.num_chipselect = ARRAY_SIZE(mx6q_sabresd_spi2_cs),
};
static struct spi_board_info imx6_sabresd_spi2_device[] __initdata = {
#if defined(CONFIG_SDSD2828)
{
.modalias = "ssd2828",
.max_speed_hz = 500000, /* max spi clock (SCK) speed in HZ */
.bus_num = 1,
.chip_select = 0,
.mode = 0,
.platform_data = &honmax_ssd2828_data,
},
#endif
};
static void spi2_device_init(void)
{
spi_register_board_info(imx6_sabresd_spi2_device,
ARRAY_SIZE(imx6_sabresd_spi2_device));
}
imx6q_add_ecspi(1, &mx6q_sabresd_spi2_data);
spi2_device_init();
2:在板级文件board-mx6q_sabresd.c中添加以下代码
将匹配到driver/spi/spidev.c文件中的驱动源码
2.1完成SPI master的注册
SPI2片选管脚宏定义:
- #define SABRESD_ECSPI2_CS0 IMX_GPIO_NR(5, 29)
添加相关结构体
- static int mx6q_marsboard_spi1_cs[] = {
- SABRESD_ECSPI2_CS0,
- };
- static const struct spi_imx_master mx6q_sabresd_spi2_data __initconst = {
- .chipselect = mx6q_marsboard_spi2_cs,
- .num_chipselect = ARRAY_SIZE(mx6q_marsboard_spi1_cs),
- };
2.2在spi 总线上匹配spi2的驱动文件
mx6q平台有2路spi资源,0/1,其中的bus_num则为挂载驱动的总线选择。
<