分类: LINUX
2010-04-19 22:47:49
实际上2440和2410几乎是一样的。原来在linux
2.6.23.12上我都已经全部弄好了。那时候还修补了一个SPI传输代码中的一个BUG,现在发现新内核都已经改过来了。
ADS7846的平台数据可以参考at-91目录中的一些板子定义。 在linux 2.6.26.3上,发现2410的SPI结构稍有改变。看了网上的文章说2410不支持spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));函数的调用。开始有点误导了我,因为原来确实不用这样子做,可现在发现 static struct s3c2410_spi_info s3c2440_spi_platdata = { .pin_cs = S3C2410_GPG2, .num_cs = 1, //.board_info = spi_board_info, //.board_size = ARRAY_SIZE(spi_board_info), }; 其中的成员board_info和size已经删除了,那怎么去初始化呢?看了看内核document中关于SPI的文档,还是说用spi_register_board_info。 static int ads7846_pendown_state(void) { return !s3c2410_gpio_getpin(S3C2410_GPG11); //EINT19 } static struct ads7846_platform_data ads_info = { .model = 7846, .vref_delay_usecs = 100, //.x_min = 150, //.x_max = 3830, //.y_min = 190, //.y_max = 3830, .x_plate_ohms = 580, .y_plate_ohms = 440, .pressure_max = 15000, .debounce_max = 1, .debounce_rep = 0, .debounce_tol = (~0), .get_pendown_state = &ads7846_pendown_state, }; static struct spi_board_info spi_board_info[] = { //__initdata { .modalias = "ads7846", .platform_data = &ads_info, .mode = SPI_MODE_0, .irq = IRQ_EINT19, .max_speed_hz = 120000 /* max sample rate at 3V */ * 16, .bus_num = 0, // 表示选用的是那一组SPI (2410有两组SPI0,SPI1) .chip_select = 0,// S3C2410_GPG2,//0, }, }; 其实证明是可以用了。所以基本上还是比较容易的。 |