gpd linux内核,linux内核驱动ZLG7290芯片

开发板就重启了,我的I2C用的引脚和开发板上的时钟PCF8763的是一样的?是不是就不初始化I2C的引脚,只需要申请总线直接就可以用了,求大家指点!!!!!!!!!

#include

#include

#include

#include

#include

#include

#include

#include

#include

//#include

#include

#include

#include

//#include "gps.h"

#include

#include

#include

//中断头文件

#include

#include

#define DPRINTK(x...) printk("7290key_irq debug:" x)

#define DRIVER_NAME "7290key_irq"

#define BUZZER_GPIO                        exynos4_GPD0(0)

#define ZLG7290                0x71

#define zlg7290key_read()  i2c_smbus_read_byte(0x70)

static struct i2c_client*g_client;

static irqreturn_t eint22_interrupt(int irq,void *dev_id)

{        static int Flay;

unsigned char res ;

printk("receive a interrupt 22!\n");

printk("%s, %d\n", __FUNCTION__, __LINE__);

ndelay(20);

IF(gpio_get_value(EXYNOS4_GPX2(6)))

{

return IRQ_HANDLED;

}

//        res = zlg7290key_read();

int ret =0;

int count=0;

char data_buff[20];

ret=i2c_master_send(g_client,ZLG7290,1);

ret=i2c_master_recv(g_client,data_buff,count);

//copy_to_user(buf,data_buff,count);

printk("ZLG7290 KEY value :%d!\n",data_buff[0]);

return IRQ_HANDLED;

}

static int keyirq_probe(struct platform_device *pdev)

{

int ret;

char *banner = "7290key_irq Initialize\n";

printk(banner);

ret = gpio_request(EXYNOS4_GPX2(6), "EINT22");

if (ret) {

printk("%s: request GPIO %d for EINT22 failed, ret = %d\n", DRIVER_NAME,

EXYNOS4_GPX2(6), ret);

return ret;

}

s3c_gpio_cfgpin(EXYNOS4_GPX2(6), S3C_GPIO_SFN(0xF));

s3c_gpio_setpull(EXYNOS4_GPX2(6), S3C_GPIO_PULL_UP);

gpio_free(EXYNOS4_GPX2(6));

//注册中断

ret=request_irq(IRQ_EINT(22),eint22_interrupt,IRQ_TYPE_EDGE_FALLING,"my_eint22",pdev);

if(ret<0)

{

printk("Request IRQ %d failed, %d\n",IRQ_EINT(22),ret);

goto exit;

}

return 0;

exit:

return ret;

}

static int keyirq_remove (struct platform_device *pdev)

{

free_irq(IRQ_EINT(22),pdev);

return 0;

}

static int keyirq_suspend (struct platform_device *pdev, pm_message_t state)

{

DPRINTK("keyirq suspend:power off!\n");

return 0;

}

static int keyirq_resume (struct platform_device *pdev)

{

DPRINTK("keyirq resume:power on!\n");

return 0;

}

static struct platform_driver keyirq_driver = {

.probe = keyirq_probe,

.remove = keyirq_remove,

.suspend = keyirq_suspend,

.resume = keyirq_resume,

.driver = {

.name = DRIVER_NAME,

.owner = THIS_MODULE,

},

};

static __devinit int zlg7290_i2c_probe(struct i2c_client *client,

const struct i2c_device_id *id)

{

printk("ZLG7290 device is detected\n");

g_client=client;

return 0;

}

static __devexit int zlg7290_i2c_remove(struct i2c_client *client)

{//        snd_soc_unregister_Codec(&client->dev);

kfree(i2c_get_clientdata(client));

return 0;

}

static const struct i2c_device_id zlg7290_id[] = {

{"zlg7290-i2c", 0},

{},

};

MODULE_DEVICE_TABLE(i2c, zlg7290_id);

static struct i2c_driver zlg7290_i2c_driver = {

.driver = {

.name = "zlg7290-i2c",

.owner = THIS_MODULE,

},

.probe = zlg7290_i2c_probe,

.remove =  __devexit_p(zlg7290_i2c_remove),

.id_table = zlg7290_id,

};

static void __exit keyirq_exit(void)

{

platform_driver_unregister(&keyirq_driver);

i2c_del_driver(&zlg7290_i2c_driver);

printk("7290key driver remove \n");

}

static int __init keyirq_init(void)

{

int ret = 0;

//        #if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)

i2c_add_driver(&zlg7290_i2c_driver);

if (ret != 0) {

printk(KERN_ERR "Failed to register zlg7290 I2C driver: %d\n",

ret);

}

//        #endif

return platform_driver_register(&keyirq_driver);

}

module_init(keyirq_init);

module_exit(keyirq_exit);

MODULE_LICENSE("Dual BSD/GPL");

MODULE_AUTHOR("zL/.");

699ba7046c51816a17b33a7caa85f179.png

0

97b4b3417991aabde46fdac613e34292.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值