static int sw_ahci_start(struct device *dev, void __iomem *addr) { struct clk *hclk; struct clk *mclk; u32 pio_hdle = 0; int ctrl = 0; int rc = 0; script_parser_fetch(sw_ahci_para_name, sw_ahci_used_name, &ctrl, sizeof(int)); if(!ctrl) { dev_err(dev, "AHCI is disable\n"); rc = -EINVAL; goto err2; } /*Enable mclk and hclk for AHCI*/ mclk = clk_get(dev, sw_ahci_mclk_name); if (IS_ERR(mclk)) { dev_err(dev, "Error to get module clk for AHCI\n"); rc = -EINVAL; goto err2; } hclk = clk_get(dev, sw_ahci_hclk_name); if (IS_ERR(hclk)) { dev_err(dev, "Error to get ahb clk for AHCI\n"); rc = -EINVAL; goto err1; } /*Enable SATA Clock in SATA PLL*/ ahci_writel(CCMU_PLL6_VBASE, 0, ahci_readl(CCMU_PLL6_VBASE, 0)|(0x1<<14)); clk_enable(mclk); clk_enable(hclk); sw_ahci_phy_init((unsigned int)addr); pio_hdle = gpio_request_ex(sw_ahci_para_name, NULL); if(pio_hdle) { gpio_write_one_pin_value(pio_hdle, 1, sw_ahci_gpio_name); gpio_release(pio_hdle, 2); } clk_put(hclk); err1: clk_put(mclk); err2: return rc; }
static int sw_ahci_start(struct device *dev, void __iomem *addr) { struct clk *hclk; struct clk *mclk; int rc = 0; /*Enable mclk and hclk for AHCI*/ mclk = clk_get(dev, sw_ahci_mclk_name); if (IS_ERR(mclk)) { dev_err(dev, "Error to get module clk for AHCI\n"); rc = -EINVAL; goto err2; } hclk = clk_get(dev, sw_ahci_hclk_name); if (IS_ERR(hclk)) { dev_err(dev, "Error to get ahb clk for AHCI\n"); rc = -EINVAL; goto err1; } /*Enable SATA Clock in SATA PLL*/ ahci_writel(CCMU_PLL6_VBASE, 0, ahci_readl(CCMU_PLL6_VBASE, 0)|(0x1<<14)); clk_enable(mclk); clk_enable(hclk); sw_ahci_phy_init((unsigned int)addr); clk_put(hclk); err1: clk_put(mclk); err2: return rc; }