1. 程式人生 > >LINUX SPI驅動筆記

LINUX SPI驅動筆記

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);
        }