Exemple #1
0
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;
}