#include "hpi.h"
int fdrv_open(struct inode *inode, struct file *filp);
int fdrv_release(struct inode *inode, struct file *filp) ;
ssize_t fdrv_write(struct file *filp, const int *buf, size_t count, loff_t *offp) ;
ssize_t fdrv_read(struct file *filp, int *buf, size_t count, loff_t *offp) ;
int fdrv_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long addr);
loff_t fdrv_seek(struct file *filp,loff_t off, int whence);
struct file_operations fdrv_fops=
{
owner: THIS_MODULE,
read: fdrv_read,
write: fdrv_write,
open: fdrv_open,
release: fdrv_release,
llseek: fdrv_seek,
ioctl: fdrv_ioctl,
};
loff_t fdrv_seek(struct file *filp,loff_t off, int whence) {
hpi_RegAddr_temp = hpi_RegAddr + off/4;
return hpi_RegAddr_temp;
}
int fdrv_open(struct inode *inode, struct file *filp)
{
MOD_INC_USE_COUNT;
return 0;
}
int fdrv_release(struct inode *inode, struct file *filp)
{
MOD_DEC_USE_COUNT;
return 0;
}
ssize_t fdrv_write(struct file *filp, const int *buf, size_t count, loff_t *offp)
{
int i,temp;
temp = hpi_RegAddr_temp;
for(i=0;i<count;i++){
*(hpi_RegAddr_temp++)= *(buf++);
}
hpi_RegAddr_temp=temp;
return count;
}
ssize_t fdrv_read(struct file *filp, int *buf, size_t count, loff_t *offp)
{
int i,temp;
temp = hpi_RegAddr_temp;
for(i=0;i<count;i++){
*(buf++)= *(hpi_RegAddr_temp++);
}
hpi_RegAddr_temp=temp;
return count;
}
int fdrv_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long addr)
{
return -EINVAL;
}
static int __init init_hpi(void)
{
AT91_SYS->EBI_SMC2_CSR[7] = 0x22003488;
//-----------------------------------------------------------------------------------------------------------------
if (!request_mem_region(HPI_PHYSICAL_REG_ADDR,HPI_PHYSICAL_REG_SIZE, "HPI_DRIVER"))
printk("Error request mem \n");
hpi_RegAddr = (unsigned int*) ioremap_nocache(HPI_PHYSICAL_REG_ADDR,HPI_PHYSICAL_REG_SIZE);
printk("HPI:Phys Reg address:%X \n", hpi_RegAddr);
if (!hpi_RegAddr)
printk("HPI_init: ioremap() returned NULL\n");
//-----------------------------------------------------------------------------------------------------------------
register_chrdev(MAJOR_NUM, "HPI", &fdrv_fops);
printk("hpi device installed.\n");
return 0;
}
//void cleanup_module( void )
static void __exit exit_hpi(void)
{
printk("HPI device uninstalled.\n");
}
module_init(init_hpi);
module_exit(exit_hpi);
没有合适的资源?快使用搜索试试~ 我知道了~
linux hpi 驱动
共10个文件
c~:3个
h:2个
c:2个
5星 · 超过95%的资源 需积分: 34 42 下载量 77 浏览量
2010-03-16
12:15:59
上传
评论
收藏 17KB RAR 举报
温馨提示
arm Linux下对dsp控制的HPI接口的驱动
资源推荐
资源详情
资源评论
收起资源包目录
LinuxHPI.rar (10个子文件)
Linux HPI
chardev.h 457B
Makefile 10KB
hpi.h 493B
Hpi_test
test.c 635B
test.c~ 368B
test_org.c~ 1KB
test_org_0.c~ 634B
test 14KB
hpi.c 2KB
Config.in 18KB
共 10 条
- 1
资源评论
- w19643322012-11-12挺不错的,刚写hpi驱动
- tmy69312014-07-08很好 正好用到
- kulin072012-11-30最近要学习HPI的驱动,下载来学习下。还有好多搞不懂。。
- dzwyq2014-07-03太好了,正要写hpi驱动
- breathfish2013-06-24抱歉过太久了,但是又下来看了下,内容写的还是很有帮助的,适合初学者参照。
gurongjiang
- 粉丝: 1
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功