LINUX SPI驅動筆記
阿新 • • 發佈:2019-02-06
static struct spi_board_info s3c_spi_devs[] __initdata = {
{
.modalias = "m25p10",
.mode = SPI_MODE_0, //CPOL=0, CPHA=0 此處選擇具體資料傳輸模式
.max_speed_hz = 10000000, //最大的spi時鐘頻率
/* Connected to SPI-0 as 1st Slave */
.bus_num = 0, //裝置連線在spi控制器0上
.chip_select = 0, //片選線號,在S5PC100的控制器驅動中沒有使用它作為片選的依據,而是選擇了下文controller_data裡的方法。
.controller_data = &smdk_spi0_csi[0],
},
};
static struct s3c64xx_spi_csinfo smdk_spi0_csi[] = {
[0] = {
.set_level = smdk_m25p10_cs_set_level,
.fb_delay = 0x3,
},
};
static void smdk_m25p10_cs_set_level(int high) //spi控制器會用這個方法設定cs
{
u32 val;
val = readl(S5PC1XX_GPBDAT);
if (high)
val |= (1<<3);
else
val &= ~(1<<3);
writel(val, S5PC1XX_GPBDAT);
}
{
.modalias = "m25p10",
.mode = SPI_MODE_0, //CPOL=0, CPHA=0 此處選擇具體資料傳輸模式
.max_speed_hz = 10000000, //最大的spi時鐘頻率
/* Connected to SPI-0 as 1st Slave */
.bus_num = 0, //裝置連線在spi控制器0上
.chip_select = 0, //片選線號,在S5PC100的控制器驅動中沒有使用它作為片選的依據,而是選擇了下文controller_data裡的方法。
.controller_data = &smdk_spi0_csi[0],
},
};
static struct s3c64xx_spi_csinfo smdk_spi0_csi[] = {
[0] = {
.set_level = smdk_m25p10_cs_set_level,
.fb_delay = 0x3,
},
};
static void smdk_m25p10_cs_set_level(int high) //spi控制器會用這個方法設定cs
{
u32 val;
val = readl(S5PC1XX_GPBDAT);
if (high)
val |= (1<<3);
else
val &= ~(1<<3);
writel(val, S5PC1XX_GPBDAT);
}