platform模型驱动中断和内存资源使用步骤
2014-02-27 10:55
399 查看
IO 内存资源使用步骤
/* io memory */
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) {
dev_err(&pdev->dev, "failed to get io memory region\n");
ret = -EINVAL;
goto err_clk_disable;
}
/* request mem region */
res = request_mem_region(res->start,res->end - res->start + 1, pdev->name);
if (!res) {
dev_err(&pdev->dev, "failed to request io memory region\n");
ret = -EINVAL;
goto err_clk_disable;
}
/* ioremap for register block */
dsim.reg_base = (unsigned int) ioremap(res->start,res->end - res->start + 1);
if (!dsim.reg_base) {
dev_err(&pdev->dev, "failed to remap io region\n");
ret = -EINVAL;
goto err_clk_disable;
中断资源使用步骤
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
if (!res) {
dev_err(&pdev->dev, "failed to request dsim irq resource\n");
ret = -EINVAL;
goto err_clk_disable;
}
/* dsim.irq = res->start; */
/* clear interrupt */
/* int_stat = readl(dsim.reg_base + S5P_DSIM_INTSRC); */
int_stat = 0xffffffff;
writel(int_stat, dsim.reg_base + S5P_DSIM_INTSRC);
/* enable interrupts */
int_stat = readl(dsim.reg_base + S5P_DSIM_INTMSK);
int_stat &= ~((0x01<<S5P_DSIM_INT_BTA) | (0x01<<S5P_DSIM_INT_RX_TIMEOUT) |
(0x01<<S5P_DSIM_INT_BTA_TIMEOUT) | (0x01 << S5P_DSIM_INT_RX_DONE) |
(0x01<<S5P_DSIM_INT_RX_TE) | (0x01<<S5P_DSIM_INT_RX_ACK) |
(0x01<<S5P_DSIM_INT_RX_ECC_ERR) | (0x01<<S5P_DSIM_IMT_RX_CRC_ERR) |
(0x01<<S5P_DSIM_INT_SFR_FIFO_EMPTY));
writel(int_stat, dsim.reg_base + S5P_DSIM_INTMSK);
ret = request_irq(res->start, (void *)s5p_dsim_isr, IRQF_DISABLED, pdev->name, &dsim);
if (ret != 0) {
dev_err(&pdev->dev, "failed to request dsim irq\n");
ret = -EINVAL;
goto err_clk_disable;
}
/* io memory */
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!res) {
dev_err(&pdev->dev, "failed to get io memory region\n");
ret = -EINVAL;
goto err_clk_disable;
}
/* request mem region */
res = request_mem_region(res->start,res->end - res->start + 1, pdev->name);
if (!res) {
dev_err(&pdev->dev, "failed to request io memory region\n");
ret = -EINVAL;
goto err_clk_disable;
}
/* ioremap for register block */
dsim.reg_base = (unsigned int) ioremap(res->start,res->end - res->start + 1);
if (!dsim.reg_base) {
dev_err(&pdev->dev, "failed to remap io region\n");
ret = -EINVAL;
goto err_clk_disable;
中断资源使用步骤
res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
if (!res) {
dev_err(&pdev->dev, "failed to request dsim irq resource\n");
ret = -EINVAL;
goto err_clk_disable;
}
/* dsim.irq = res->start; */
/* clear interrupt */
/* int_stat = readl(dsim.reg_base + S5P_DSIM_INTSRC); */
int_stat = 0xffffffff;
writel(int_stat, dsim.reg_base + S5P_DSIM_INTSRC);
/* enable interrupts */
int_stat = readl(dsim.reg_base + S5P_DSIM_INTMSK);
int_stat &= ~((0x01<<S5P_DSIM_INT_BTA) | (0x01<<S5P_DSIM_INT_RX_TIMEOUT) |
(0x01<<S5P_DSIM_INT_BTA_TIMEOUT) | (0x01 << S5P_DSIM_INT_RX_DONE) |
(0x01<<S5P_DSIM_INT_RX_TE) | (0x01<<S5P_DSIM_INT_RX_ACK) |
(0x01<<S5P_DSIM_INT_RX_ECC_ERR) | (0x01<<S5P_DSIM_IMT_RX_CRC_ERR) |
(0x01<<S5P_DSIM_INT_SFR_FIFO_EMPTY));
writel(int_stat, dsim.reg_base + S5P_DSIM_INTMSK);
ret = request_irq(res->start, (void *)s5p_dsim_isr, IRQF_DISABLED, pdev->name, &dsim);
if (ret != 0) {
dev_err(&pdev->dev, "failed to request dsim irq\n");
ret = -EINVAL;
goto err_clk_disable;
}
相关文章推荐
- 【转载】WINCE驱动开发之中断的使用
- 虚拟字符驱动,申请n页内存,使用mmap映射到应用程序空间,用户就可以直接访问不需要任何同步机制
- Linux内核启动过程中注册platform驱动模型
- 详解Linux2.6内核中基于platform机制的驱动模型
- 基于platform总线的中断(按键)字符设备驱动设计
- 在IE下监控页面内存资源和dom节点(sIEve软件使用简介)
- 从platform驱动看驱动模型
- 有关TI DSP的一些东西(整理一些网络资源及手册资料)--外设寄存器和CPU控制寄存器、数据类型、中断的使用
- GSC3280的ADC子系统驱动模型(三)----class的使用
- 关于使用platform和file_operations开发驱动的不同
- (原)使用1080Ti显卡时安装ubuntu16.04.1及驱动的步骤
- 关于Java的内存模型,使用的是尚学堂的图
- 102-资源打包,内存分配,内存泄漏,私有API,硬件信息的获取,使用imageName加载图片和使用imageWithContentsOfFile加载图片的场合优缺点及内存分析
- linux设备总线驱动模型 之 platform总线驱动
- Linux驱动Platform总线模型
- 详解Linux2.6内核中基于platform机制的驱动模型
- 详解Linux2.6内核中基于platform机制的驱动模型
- vs 2013 cl 查看内存模型使用方法
- 使用shell 脚本对 Linux 系统进程的CPU使用率与内存资源进行监控
- Linux驱动之设备模型(9)-platform