int sprd_iommu_mm_init(struct sprd_iommu_dev *dev, struct sprd_iommu_init_data *data) { int err=-1; #ifdef CONFIG_OF && CONFIG_COMMON_CLK struct device_node *np; np = dev->misc_dev.this_device->of_node; if(!np) { return -1; } dev->mmu_clock=of_clk_get(np, 0) ; dev->mmu_mclock=of_clk_get(np,1); #else dev->mmu_mclock= clk_get(NULL,"clk_mm_i"); dev->mmu_clock=clk_get(NULL,"clk_mmu"); if (!dev->mmu_mclock) { printk ("%s, cant get dev->mmu_mclock\n", __FUNCTION__); return -1; } #endif if (!dev->mmu_clock) { printk ("%s, cant get dev->mmu_clock\n", __FUNCTION__); return -1; } sprd_iommu_mm_enable(dev); err=sprd_iommu_init(dev,data); sprd_iommu_mm_disable(dev); return err; }
int sprd_iommu_mm_init(struct sprd_iommu_dev *dev, struct sprd_iommu_init_data *data) { int err=-1; dev->mmu_mclock= clk_get(NULL,"clk_mm_i"); dev->mmu_clock=clk_get(NULL,"clk_mmu"); if((NULL==dev->mmu_mclock)||(NULL==dev->mmu_clock)) return -1; sprd_iommu_mm_enable(dev); err=sprd_iommu_init(dev,data); sprd_iommu_mm_disable(dev); return err; }
int sprd_iommu_gsp0_init(struct sprd_iommu_dev *dev, struct sprd_iommu_init_data *data) { int err = -1; #ifndef CONFIG_SC_FPGA struct device_node *np; np = dev->misc_dev.this_device->of_node; if (!np) return -1; dev->mmu_mclock = of_clk_get(np, 0); dev->mmu_clock = of_clk_get(np, 2); if (IS_ERR(dev->mmu_clock) || IS_ERR(dev->mmu_mclock)) { pr_info("%s, can't get clock:%p, %p\n", __func__, dev->mmu_clock, dev->mmu_mclock); goto errorout; } #endif #ifdef CONFIG_HAS_EARLYSUSPEND dev->early_suspend.suspend = sprd_iommu_gsp0_early_suspend; dev->early_suspend.resume = sprd_iommu_gsp0_late_resume; dev->early_suspend.level = EARLY_SUSPEND_LEVEL_STOP_DRAWING; register_early_suspend(&dev->early_suspend); #endif sprd_iommu_gsp0_clk_enable(dev); err = sprd_iommu_init(dev, data); sprd_iommu_gsp0_clk_disable(dev); return err; #ifndef CONFIG_SC_FPGA errorout: if (dev->mmu_clock) clk_put(dev->mmu_clock); if (dev->mmu_mclock) clk_put(dev->mmu_mclock); return -1; #endif }
int sprd_iommu_dcam_init(struct sprd_iommu_dev *dev, struct sprd_iommu_init_data *data) { int err = -1; #ifndef CONFIG_SC_FPGA struct device_node *np; np = dev->misc_dev.this_device->of_node; if (!np) return -1; dev->mmu_clock = of_clk_get(np, 0); dev->mmu_mclock = of_clk_get(np, 1); if (IS_ERR(dev->mmu_clock) || IS_ERR(dev->mmu_mclock)) { pr_info("%s, can't get clock:%p, %p\n", __func__, dev->mmu_clock, dev->mmu_mclock); goto errorout; } #endif sprd_iommu_dcam_clk_enable(dev); err = sprd_iommu_init(dev, data); sprd_iommu_dcam_clk_disable(dev); return err; #ifndef CONFIG_SC_FPGA errorout: if (dev->mmu_clock) clk_put(dev->mmu_clock); if (dev->mmu_mclock) clk_put(dev->mmu_mclock); return -1; #endif }