MTK6572 平台G_SEENSOR兼容

http://blog.csdn.net/macxen_gunter/article/details/10588859

1. 修改mediatek/config/project_name/projectconfig.mk

 CUSTOM_KERNEL_ACCELEROMETER=mma865x_auto afa830_auto
 MTK_AUTO_DETECT_ACCELEROMETER=yes
2. 将已经调试OK 的mma865x和afa830文件夹名字重命名为 mma865x_auto afa830_auto
   mediatek/custom/common/kernel/accelerometer/mma865x_auto  
   mediatek/custom/common/kernel/accelerometer/afa830_auto
   mediatek/custom/project_name/kernel/accelerometer/mma865x_auto 
   mediatek/custom/project_name/kernel/accelerometer/afa830_auto
3. 修改driver文件mma865x.c  afa830.c  
   mediatek/custom/common/kernel/accelerometer/mma865x_auto/mma865x.c  
   mediatek/custom/common/kernel/accelerometer/afa830_auto/afa830.c
 以mma865x为例 :

(1)打开
    static unsigned short mma865x_force[] = {0x00, MMA865X_I2C_SLAVE_ADDR, I2C_CLIENT_END, I2C_CLIENT_END};
    static const unsigned short *const mma865x_forces[] = { mma865x_force, NULL };
  (2)在代码文件靠前部分声明函数
 static int mma865x_local_init(void);
 static int mma865x_remove(void);
 static int mma865x_init_flag = -1;
  (3)打开已定义或者定义
 static struct sensor_init_info mma865x_init_info = {
   .name = "mma865x",
   .init = mma865x_local_init,
   .uninit = mma865x_remove,
 
 };
  (4)修改I2C_driver 数据结构
    将

 static struct i2c_driver mma865x_i2c_driver = {
           .driver = {
 //        .owner          = THIS_MODULE,
         .name           = MMA865X_DEV_NAME,
     },
  .probe        = mma865x_i2c_probe,
  .remove       = mma865x_i2c_remove,
  .detect    = mma865x_i2c_detect,
 #if !defined(CONFIG_HAS_EARLYSUSPEND)    
     .suspend            = mma865x_suspend,
     .resume             = mma865x_resume,
 #endif
  .id_table = mma865x_i2c_id,
 // .address_data = &mma865x_addr_data,
 };
    修改为

 static struct i2c_driver mma865x_i2c_driver = {
     .driver = {
      //   .owner          = THIS_MODULE,
         .name           = MMA865X_DEV_NAME,
     },
  .probe        = mma865x_i2c_probe,
  .remove       = mma865x_i2c_remove,
  .detect    = mma865x_i2c_detect,
 #if !defined(CONFIG_HAS_EARLYSUSPEND)    
     .suspend            = mma865x_suspend,
     .resume             = mma865x_resume,
 #endif
  .id_table = mma865x_i2c_id,
  .address_list = (const unsigned short*)mma865x_forces,
 };

   (5) 重命名函数
 int gsensor_operate(void* self, uint32_t command, void* buff_in, int size_in,
  void* buff_out, int size_out, int* actualout)
    修改为
 int mma865x_operate(void* self, uint32_t command, void* buff_in, int size_in,
  void* buff_out, int size_out, int* actualout)

 static long mma865x_unlocked_ioctl(struct file *file, unsigned int cmd,
       unsigned long arg)
    修改为
 static int mma865x_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
   (6) 修改相应的结构体
 static struct file_operations mma865x_fops = {
  .owner = THIS_MODULE,
  .open = mma865x_open,
  .release = mma865x_release,
  .unlocked_ioctl = mma865x_unlocked_ioctl,
  };
    修改为

 static struct file_operations mma865x_fops = {
  .owner = THIS_MODULE,
  .open = mma865x_open,
  .release = mma865x_release,
  .compat_ioctl = mma865x_ioctl,
  };

   (7)将文件中所有的
 get_cust_acc_hw();
      替换为

 mma865x_get_cust_acc_hw();

   (8)将文件中所有的 
 if(err = mma865x_create_attr(&mma865x_gsensor_driver.driver))
     替换为 
 if(err = mma865x_create_attr(&mma865x_init_info.platform_diver_addr->driver))

   (9)static int mma865x_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)
 函数中
          sobj.sensor_operate = gsensor_operate;
 修改为:
   sobj.sensor_operate = mma865x_operate;  

   (10)打开已定义或者定义

 static int mma865x_local_init(void)
 {
 struct acc_hw *hw = mma865x_get_cust_acc_hw();
 GSE_FUN();
 MMA865X_power(hw, 1);
 mma865x_force[0] = hw->i2c_num;
 if(i2c_add_driver(&mma865x_i2c_driver))
 {
  GSE_ERR("add driver error\n");
  return -1;
 }
 if(-1 == mma865x_init_flag)
 {
    return -1;
 }
 }
    static int mma865x_remove(void)
 {
     struct acc_hw *hw = mma865x_get_cust_acc_hw();

     GSE_FUN();    
     MMA865X_power(hw, 0);    
     i2c_del_driver(&mma865x_i2c_driver);
     return 0;
 }
   (11) 在static int __init mma865x_init(void) 中
 使用
 hwmsen_gsensor_add(&mma865x_init_info);
 替换
 if(platform_driver_register(&mma865x_gsensor_driver))
 {
  GSE_ERR("failed to register driver");
  return -ENODEV;
 }

4. 如下修改   mediatek/custom/project_name/kernel/accelerometer/mma865x_auto/cust_acc.c
 #include <linux/types.h>
 #include <cust_acc.h>
 #include <mach/mt_pm_ldo.h>

 /*---------------------------------------------------------------------------*/
 int cust_acc_power(struct acc_hw *hw, unsigned int on, char* devname)
 {
     if (hw->power_id == MT65XX_POWER_NONE)
         return 0;
     if (on)
         return hwPowerOn(hw->power_id, hw->power_vol, devname);
     else
         return hwPowerDown(hw->power_id, devname); 
 }

 static struct acc_hw mma865x_cust_acc_hw = {
     .i2c_num = 1,
     .direction =1,// 6,
     .power_id = MT65XX_POWER_NONE,  /*!< LDO is not used */
     .power_vol= VOL_DEFAULT,        /*!< LDO is not used */
     .firlen = 16,                   /*!< don't enable low pass fileter */
     .power = cust_acc_power,        
 };
 /*---------------------------------------------------------------------------*/
 struct acc_hw* mma865x_get_cust_acc_hw(void) 
 {
     return &mma865x_cust_acc_hw;
 }

static struct acc_hw AFA830_cust_acc_hw = {
     .i2c_num = 1,
     .direction = 6,
     .power_id = MT65XX_POWER_NONE,  /*!< LDO is not used */
     .power_vol= VOL_DEFAULT,        /*!< LDO is not used */
     .firlen = 16,                   /*!< don't enable low pass fileter */
     .power = cust_acc_power,        
 };
 /*---------------------------------------------------------------------------*/
 struct acc_hw* AFA830_get_cust_acc_hw(void) 
 {
     return &AFA830_cust_acc_hw;
 }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: mtk_apsoc_sdk是联发科技(MediaTek)推出的开发工具包,可用于开发基于其芯片的智能手机、平板电脑和其他移动设备。该SDK包括了一系列的工具、库以及文档,可以让开发者轻松地创建全新的应用程序,以及扩展已有的应用程序。同时,它还提供了一些不同的开发接口(API)和调试工具,以方便开发者调试和测试各种应用程序。mtk_apsoc_sdk具有以下特点: 1. 兼容性:mtk_apsoc_sdk可以适用于不同版本的联发科芯片,可以满足多种不同型号的设备需求。 2. 丰富的功能:mtk_apsoc_sdk提供了大量的库文件和功能模块,包括WiFi、蓝牙、相机、传感器等等。 3. 简单易用:mtk_apsoc_sdk的开发工具简单易用,对于初学者来说非常友好。 4. 支持开发平台:mtk_apsoc_sdk支持多种操作系统,包括Android、iOS和Windows等。 总之,作为一款优秀的开发工具,mtk_apsoc_sdk可以协助开发者快速创建出高质量的应用程序,使得使用者可以充分利用联发科技芯片的特性,打破传统限制,开发出更加创新、完善的应用程序。 ### 回答2: mtk_apsoc_sdk是由联发科技(MediaTek)提供的一款软件开发工具包(SDK),旨在帮助开发者快速开发基于联发科技处理器的应用。该SDK包含了丰富的应用程序接口(API)和示例代码,开发者可以利用这些工具和资源来更轻松地构建、测试和发布应用程序。 mtk_apsoc_sdk支持多种操作系统,包括Android和Linux等,在多种硬件架构上都能运行。它提供了各种功能模块和工具,例如图形用户界面(GUI)、多媒体库、网络通信协议、数据存储API等等。除此之外,mtk_apsoc_sdk还具有自动化工具和配置文件,使开发者可以更有效地进行应用程序开发和调试。 在使用mtk_apsoc_sdk的过程中,开发者可以快速访问各种关键功能,从而更快地开发出高质量的应用程序。这一SDK使用简单,可扩展性强,而且可以在多种设备上轻松实现兼容性。所以,对于那些计划基于联发科技处理器开发应用程序的开发者而言,mtk_apsoc_sdk是一个非常有价值的工具。 ### 回答3: MTK_APSoC_SDK是联发科技(MediaTek)公司的一个软件开发工具包,它为开发人员提供了一整套的软件开发工具、API接口和示例代码,以及与联发科技的芯片和系统级组件相匹配的硬件参考设计。通过MTK_APSoC_SDK,开发人员可以方便地开发各种应用和系统,并且能够快速地应对市场需求的变化。 该SDK是为了支持联发科技芯片上的应用处理器而开发的,这些芯片可以实现低功耗、低成本和高集成度的嵌入式平台设计。MTK_APSoC_SDK包含开发应用程序所需要的所有工具和开发文档。开发者使用该SDK可以创建最新的面向智能手机、平板电脑、智能家居等各种应用的应用程序。 MTK_APSoC_SDK具有多种功能,包括支持Android和Linux平台、支持多种编程语言如Java和C++、提供多种调试工具和API接口、支持硬件加速以及提供多种安全认证机制等。除此之外,MTK_APSoC_SDK还支持多种上下游的软件组件与集成架构。 总之,MTK_APSoC_SDK是一个极其实用、易用的软件开发工具包,可以帮助开发人员快速地开发出各种高性能、低功耗、多功能的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值