实际上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,
},
};
其实证明是可以用了。所以基本上还是比较容易的。
阅读(3590) | 评论(0) | 转发(0) |