问题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;
}
}