iTop4412驱动开发之十:SPI驱动

    技术2026-02-18  14

    驱动部分: 一、mach-itop4412.c 中注册SPI设备

    static struct s3c64xx_spi_csinfo spi2_csi[] = { [0] = { .line = EXYNOS4_GPC1(2), .set_level = gpio_set_value, .fb_delay = 0x2, }, }; static struct spi_board_info spi2_board_info[] __initdata = { {.modalias = "spi_test", .platform_data = NULL, .max_speed_hz = 10*1000*1000, .bus_num = 2, .chip_select = 0, .mode = SPI_MODE_0, .controller_data = &spi2_csi[0], } }; spi_register_board_info(spi2_board_info, ARRAY_SIZE(spi2_board_info));

    二、编写驱动代码

    #include <linux/kernel.h> #include <linux/module.h> #include <linux/spi/spi.h> #include <linux/spi/spidev.h> #include <linux/input.h> #include <linux/delay.h> #include <linux/slab.h> #include <linux/interrupt.h> #include <linux/irq.h> #include <linux/gpio.h> #include <linux/platform_device.h> #include <linux/miscdevice.h> #include <linux/regulator/consumer.h> #include <mach/gpio.h> #include <plat/gpio-cfg.h> int spi_open(struct inode *inode,struct file *filp) { printk("Device Opened Success!\n"); return nonseekable_open(inode,filp); } int spi_release(struct inode *inode,struct file *filp) { printk("Device Closed Success!\n"); return 0; } long spi_ioctl(struct file *filp,unsigned int cmd,unsigned long arg) { printk("debug: spi_ioctl cmd is %d\n" , cmd); return 0; } static struct file_operations spi_test_ops = { .owner = THIS_MODULE, .open = spi_open, .release= spi_release, .unlocked_ioctl = spi_ioctl, }; static struct miscdevice spi_test_dev = { .minor = 255, .fops = &spi_test_ops, .name = "spi_test", }; static int spi_test_probe(struct spi_device *client) { printk("@@@ %s\n", __FUNCTION__); printk("spi_dev_name: %s\n", client->modalias); int ret = misc_register(&spi_test_dev); if(ret<0) { printk("spi:register device failed!\n"); } return 0; } static int __devexit spi_test_remove(struct spi_device *client) { printk("@@@ %s\n", __FUNCTION__); return 0; } static struct spi_driver spi_test_driver = { .probe = spi_test_probe, .remove = __devexit_p(spi_test_remove), .driver = { .name = "spi_test", .owner = THIS_MODULE, } }; static int __init spi_test_init(void) { printk("@@@ %s\n", __FUNCTION__); return spi_register_driver(&spi_test_driver); } static void __exit spi_test_exit(void) { printk("@@@ %s\n", __FUNCTION__); spi_unregister_driver(&spi_test_driver); } module_init(spi_test_init); module_exit(spi_test_exit); MODULE_AUTHOR("<wenfs@Focaltech-systems.com>"); MODULE_DESCRIPTION("SPI TEST driver"); MODULE_LICENSE("GPL");
    Processed: 0.009, SQL: 9