This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

使用omap3715做SPI总线的OLED屏驱动,SPI的CLK没有输出频率



问题1:参照spidev.c,写了SPI屏的驱动,在probe函数也初始化了spi相关结构体,使用示波器没有发现clk输出时钟,linux内核还需要其他设置吗?

问题2:omap3715 默认的SPI输出的时钟频率是多少?有没有具体值,担心高于屏的最大值。

问题3:以下是我的probe函数,spi_setup(spi)后应该就算是启动了SPI控制器了吧?可以调用spi_message_init(xxxx),spi_message_add_tail(xxxx),spi_sync(xxxx)了吧?:

static int __devinit oled_probe(struct spi_device *spi)

{

   printk("going oled_probe.........\n");

   struct oled_data *oled_spidev;

   int i;

   int err;

  unsigned long minor;

   ///*申请驱动数据空间*/

   oled_spidev = kzalloc(sizeof(*oled_spidev),GFP_KERNEL);

   if (!oled_spidev)

       return -ENOMEM;

   ///*初始化驱动数据*/

   oled_spidev->spi = spi;

   spi->dev.power.power_state = PMSG_ON;

   spi->mode = SPI_MODE_0;   //设置SPI模式

 spi->bits_per_word = 8;   //设置位数

 spi->max_speed_hz = 1000000;

  // /*创建设备编号*/

   minor = find_first_zero_bit(minors, NOLED_MINORS);

   if (minor < NOLED_MINORS){

       struct device *dev;

       oled_spidev->devt = MKDEV(OLED_MAJOR,minor);

       dev = device_create(oled_class, &spi->dev,oled_spidev->devt,oled_spidev,"oled_spidev%d.%d",spi->master->bus_num,spi->chip_select);  //增加设备节点

   err = IS_ERR(dev) ? PTR_ERR(dev) : 0;

       } else {

           dev_dbg(&spi->dev, "no minor number available!\n");

           err = -ENODEV;

       }

       if (err == 0) {

           set_bit(minor,minors);

           dev_set_drvdata(&spi->dev, oled_spidev);//保存数据到oled_spidev

       }

       else {

           kfree(oled_spidev);

           return err;

       }

       err = spi_setup(spi);     //启动SPI

       if (err < 0)

       {

           printk("spi_setup err......\n");

           return err;

       }  

}