1.MTK中添加一个驱动。
代码位置:mediatek/platform/mt6573/kernel/driver/要添加的目录/
2.进入目录添加:slide.c 和 Makefile
其中Makefile的内容如下:obj-$(CONFIG_MTK_SLIDE) := slide.o
3.再进入目录:mediatek/config/viroyal73_wg/autoconfig/Kconfig/
在project里添加一行:
CONFIG_MTK_SLIDE=y
4.进入目录mediatek/platform/mt6573/kernel/config/
在Drivers里面添加:
config MTK_SLIDE
bool "mediatek slide driver"
default y
即已经完整的将驱动添加到工程。
其中slide.c的详细代码如下:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/input.h>
#include <linux/workqueue.h>
#include <linux/timer.h>
#include <linux/interrupt.h>
#include <linux/fs.h>
#include <linux/miscdevice.h>
#include <linux/platform_device.h>
#include <linux/earlysuspend.h>
#include <asm/atomic.h>
#include <asm/uaccess.h>
#include <asm/tcm.h>
#include <mach/mt6573_reg_base.h>
#include <mt6573_kpd.h>
#include <mach/irqs.h>
#include <mach/mt6573_eint.h>
#include <linux/delay.h>
#include <mach/mt6573_gpio.h>
#include <linux/list.h>
#include <linux/string.h>
#include <linux/leds-mt65xx.h>
#define SLID_NAME "slid_switch"
#define PIN_PUPD0 (0xF7000000+0x26094)
static struct input_dev *slide_input_dev;
static u8 slide_state = !KPD_SLIDE_POLARITY;
static void slide_eint_handler(unsigned long data);
static DECLARE_TASKLET(slide_tasklet, slide_eint_handler, 0);
void slide_eint_handler(unsigned long data)
{
bool slid;
u8 old_state = slide_state;
u32 temp;
mt65xx_eint_mask(KPD_SLIDE_EINT);
slide_state = !slide_state;
slid = (slide_state == !KPD_SLIDE_POLARITY);
input_report_switch(slide_input_dev, SW_LID, !slid);
printk("[slide] slide = %s \n", slid ? "opened" : "closed");
#if defined(CUSTOM_KERNEL_DUALSCREEN)
if(slid)
{
printk("========= open slid ==========\n");
mt_set_gpio_mode(GPIO106, GPIO_MODE_00);
mt_set_gpio_dir(GPIO106, GPIO_DIR_OUT);
mt_set_gpio_out(GPIO106, GPIO_OUT_ONE);
mt65xx_leds_brightness_set(6, 160);
}
else
{
printk("========= close slid ==========\n");
mt_set_gpio_mode(GPIO106, GPIO_MODE_00);
mt_set_gpio_dir(GPIO106, GPIO_DIR_OUT);
mt_set_gpio_out(GPIO106, GPIO_OUT_ZERO);
mt65xx_leds_brightness_set(6, 160);
}
#endif
if(old_state==0)
{
temp = *(volatile u32 *)PIN_PUPD0;
temp |= (0x1<<20);
temp &=~(0x1<<28);
*(volatile u32 *)PIN_PUPD0 = (u32)temp;
}
else
{
temp = *(volatile u32 *)PIN_PUPD0;
temp &=~(0x1<<20);
temp |=(0x1<<28);
*(volatile u32 *)PIN_PUPD0 = (u32)temp;
}
/* for detecting the return to old_state */
mt65xx_eint_set_polarity(KPD_SLIDE_EINT, old_state);
mdelay(10); //modify by zhangmin 2012.8.7 mdelay(60);
mt65xx_eint_unmask(KPD_SLIDE_EINT);
}
static void switch_slide_eint_handler(void)
{
tasklet_schedule(&slide_tasklet);
}
static int slid_pdrv_probe(struct platform_device *pdev)
{
slide_input_dev = input_allocate_device();
if (!slide_input_dev)
return -ENOMEM;
int tmp;
tmp = *(volatile u32 *)PIN_PUPD0;
tmp &= ~(0x1 << 20);
tmp |= (0x1 << 28);
*(volatile u32 *)PIN_PUPD0;
mt65xx_eint_set_sens(KPD_SLIDE_EINT, KPD_SLIDE_SENSITIVE);
mt65xx_eint_set_hw_debounce(KPD_SLIDE_EINT, 5);
mt65xx_eint_registration(KPD_SLIDE_EINT, true, KPD_SLIDE_POLARITY,
switch_slide_eint_handler, false);
__set_bit(EV_SW, slide_input_dev->evbit);
__set_bit(SW_LID, slide_input_dev->swbit);
__set_bit(SW_LID, slide_input_dev->sw);
return 0;
}
static int slid_pdrv_remove(struct platform_device *pdev)
{
return 0;
}
static struct platform_device slid_pdev = {
.name = SLID_NAME,
.id = -1,
};
static struct platform_driver slid_pdrv = {
.probe = slid_pdrv_probe,
.remove = slid_pdrv_remove,
.driver = {
.name = SLID_NAME,
.owner= THIS_MODULE,
},
};
static int __init slid_mod_init(void)
{
platform_device_register(&slid_pdev);
platform_driver_register(&slid_pdrv);
return 0;
}
static void __exit slid_mod_exit(void)
{
platform_device_unregister(&slid_pdev);
platform_driver_unregister(&slid_pdrv);
}
module_init(slid_mod_init);
module_exit(slid_mod_exit);
MODULE_LICENSE("GPL");
分享到:
相关推荐
最新MTK android USB 驱动
此文档讲述了MTK android平台的LCD驱动部分,详细分析了驱动LCD的整个流程代码。
适用Mediatek平台,Usb驱动,win10亲测好用
描述 MTKAndroid添加驱动模块,有利对 MTK认识和工作需要
MTK手机和电脑相连时需要驱动以保证手机和电脑的链接。
包含1、通用adb驱动,开启usb调试后安装,usb调试和shell命令使用。2、MTK的MTP(Android Phone),手机正常开机安装,文件传送使用。3、MTK线刷(preloader)驱动,手机关机或者进入线刷模式安装,线刷rom使用。
MTK Android 平台资料
mtk android rc,适用于于nec,rc5,rc6协议!
该资源中包含mtk6582平台GT9157触摸驱动移植文档,以及在未知模组厂提供固件代码的情况下GT9XXX系列的触摸屏如果移植触摸驱动方法,内部包含GT9XX驱动移植说明书_for_Android_2014011401.PDF,GT9157编程指南文件_...
MTK外设android驱动添加编译配置官方手册,里面详细的描述了LCM/按键/GPIO/MODEM等驱动的添加编译配置过程
MTK6577 Android源代码目录
android sensor相关,平台为MTK,参考价值不错。
\MTK驱动架构分析\MTK驱动架构分析 \MTK驱动架构分析\MTK驱动架构分析 \MTK驱动架构分析\MTK驱动架构分析
MTK驱动MTK驱动 MTK驱动MTK驱动MTK驱动 MTK驱动MTK驱动 MTK驱动MTK驱动
这里面介绍了一些MTK平台下android驱动的移植方案,不是很细致,但是可以作为一个简单的方向参考,比较适合一些没有接触过平台的人, 同时了这里面介绍了一些常见的问题和思路,还有一些工具的使用方法,整个文本...
MTK在WINDOWS下刷机必备的驱动,网上虽然有,但大多都没法用,这个保证能用。
【ADB联机驱动】这个是豌豆荚和91助手同步手机时候的驱动,开启USB调试后,接上电脑,...【刷机驱动自动安装版】这个是MTK智能机刷机必须要的驱动,没有这个是刷机不了的,进度条不会走动的!很简单,打,欢迎下载体验
MTK通用线刷驱动,使用线刷驱动\mtk刷机驱动-自动安装执行InstallDriver.exe即可。xp,w7,w8,w10,w11都可用