Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1753483
  • 博文数量: 199
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 6186
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-30 11:01
个人简介

Linuxer.

文章存档

2015年(4)

2014年(28)

2013年(167)

分类: LINUX

2013-06-19 17:47:58

由于内核中已有ads7846的触摸屏驱动,而ads7846也兼容tsc2046,所以直接使用内核在中ads7846的驱动。


点击(此处)折叠或打开

  1. 因为ads7846是通过spi总线进行读取数据的,所以首先要移植好spi总线驱动:
  2. 1.首先要进行管脚初始化,配置复用管脚寄存器。
  3. //在ds850.c文件中:
  4. static const struct mux_config da850_pins[] = {
  5.     。。。。。。
  6.     /*添加spi0的配置*/
  7.     MUX_CFG(DA850, SPI0_CLK,    3,    0,    15,    1,    false)
  8.     MUX_CFG(DA850, SPI0_ENA,    3,    4,    15,    1,    false)
  9.     MUX_CFG(DA850, SPI0_SOMI,    3,    8,    15,    1,    false)
  10.     MUX_CFG(DA850, SPI0_SIMO,    3,    12,    15,    1,    false)
  11.     
  12.     /*原来的配置注销掉
  13.     MUX_CFG(DA850, MII_RXCLK,    3,    0,    15,    8,    false)
  14.     MUX_CFG(DA850, MII_RXDV,    3,    4,    15,    8,    false)
  15.     MUX_CFG(DA850, MII_RXER,    3,    8,    15,    8,    false)
  16.     MUX_CFG(DA850, MII_CRS,        3,    12,    15,    8,    false)
  17.     */
  18.     。。。。。。
  19. }

  20. //在mux.h文件中添加
  21. enum davinci_da850_index {
  22.     。。。。。。
  23.     /* spi0 function */
  24.     DA850_SPI0_CLK,
  25.     DA850_SPI0_ENA,
  26.     DA850_SPI0_SOMI,
  27.     DA850_SPI0_SIMO,
  28.     。。。。。。
  29. }

  30. //在ds850.c文件中添加数组
  31. const short da850_spi0_pins[] __initdata = {
  32.     DA850_SPI0_CLK,DA850_SPI0_ENA,DA850_SPI0_SOMI,DA850_SPI0_SIMO,
  33.     -1
  34. };

  35. //在da8xx.h中声明该数组
  36. extern const short da850_spi0_pins[];

  37. 2.在board-da850-evm.c文件中添加
  38. static int ads7846_get_pendown_state(void)
  39. {
  40.     return !gpio_get_value(DA850_PENIR_TS_GPIO);
  41. }

  42. static struct davinci_spi_platform_data da850evm_spi0_pdata = {
  43.     .version    = SPI_VERSION_2,
  44.     .num_chipselect = 1,
  45.     .intr_line = 1,
  46. };

  47. struct ads7846_platform_data ads7846_config = {
  48.      .model            = 7846,
  49.     .x_min            = 150,
  50.      .x_max            = 3830,
  51.     .y_min            = 190,
  52.      .y_max            = 3830,
  53.     .vref_delay_usecs    = 100,
  54.      .x_plate_ohms        = 900,
  55.      .y_plate_ohms        = 900,
  56.      .pressure_max        = 255,
  57.     .debounce_max        = 10,
  58.      .debounce_rep        = 1,
  59.      .debounce_tol        = 50,
  60.     .get_pendown_state    = ads7846_get_pendown_state,
  61.     .keep_vref_on = 1,
  62.     .wakeup         = true,
  63.     .gpio_pendown         = DA850_PENIR_TS_GPIO,
  64. };

  65. static struct spi_board_info da850evm_spi_info[] = {
  66.     {
  67.         .modalias        = "m25p80",
  68.         .platform_data    = &da850evm_spiflash_data,
  69.         .controller_data    = &da850evm_spiflash_cfg,
  70.         .mode            = SPI_MODE_0,
  71.         .max_speed_hz        = 30000000,
  72.         .bus_num        = 1,
  73.         .chip_select        = 0,
  74.     },
  75.     
  76.     {
  77.         .modalias = "ads7846",//设备节点名,与xxx_driver中定义的名字相同
  78.         .bus_num = 0,
  79.         .chip_select = 0,
  80.         .max_speed_hz = 1500000,
  81.         .mode             = SPI_MODE_0,
  82.         .irq = 128,//GPIO1[11]
  83.         .platform_data = &ads7846_config,
  84.   },
  85. };

  86. //在函数添加:
  87. static __init void da850_evm_init(void)
  88. {
  89.     。。。。。
  90.     da850evm_init_spi1(da850evm_spi_info, ARRAY_SIZE(da850evm_spi_info));//注册板级信息

  91.     ret = davinci_cfg_reg_list(da850_spi0_pins);//管脚配置
  92.     if (ret)
  93.         pr_warning("da850_evm_init: spi0 mux setup failed: %d\n",    ret);
  94.     da8xx_register_spi(0,&da850evm_spi0_pdata);//spi设备注册
  95.     。。。。。。
  96. }

  97. 3.make menuconfig时要添加spi驱动和触摸屏的驱动,编译即可。


阅读(6021) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~