aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/crypto/picoxcell_crypto.c27
1 files changed, 17 insertions, 10 deletions
diff --git a/drivers/crypto/picoxcell_crypto.c b/drivers/crypto/picoxcell_crypto.c
index 5a6dc53b2b9d..4ef52c9d72fc 100644
--- a/drivers/crypto/picoxcell_crypto.c
+++ b/drivers/crypto/picoxcell_crypto.c
@@ -1618,7 +1618,7 @@ MODULE_DEVICE_TABLE(of, spacc_of_id_table);
1618 1618
1619static int spacc_probe(struct platform_device *pdev) 1619static int spacc_probe(struct platform_device *pdev)
1620{ 1620{
1621 int i, err, ret = -EINVAL; 1621 int i, err, ret;
1622 struct resource *mem, *irq; 1622 struct resource *mem, *irq;
1623 struct device_node *np = pdev->dev.of_node; 1623 struct device_node *np = pdev->dev.of_node;
1624 struct spacc_engine *engine = devm_kzalloc(&pdev->dev, sizeof(*engine), 1624 struct spacc_engine *engine = devm_kzalloc(&pdev->dev, sizeof(*engine),
@@ -1679,22 +1679,18 @@ static int spacc_probe(struct platform_device *pdev)
1679 engine->clk = clk_get(&pdev->dev, "ref"); 1679 engine->clk = clk_get(&pdev->dev, "ref");
1680 if (IS_ERR(engine->clk)) { 1680 if (IS_ERR(engine->clk)) {
1681 dev_info(&pdev->dev, "clk unavailable\n"); 1681 dev_info(&pdev->dev, "clk unavailable\n");
1682 device_remove_file(&pdev->dev, &dev_attr_stat_irq_thresh);
1683 return PTR_ERR(engine->clk); 1682 return PTR_ERR(engine->clk);
1684 } 1683 }
1685 1684
1686 if (clk_prepare_enable(engine->clk)) { 1685 if (clk_prepare_enable(engine->clk)) {
1687 dev_info(&pdev->dev, "unable to prepare/enable clk\n"); 1686 dev_info(&pdev->dev, "unable to prepare/enable clk\n");
1688 clk_put(engine->clk); 1687 ret = -EIO;
1689 return -EIO; 1688 goto err_clk_put;
1690 } 1689 }
1691 1690
1692 err = device_create_file(&pdev->dev, &dev_attr_stat_irq_thresh); 1691 ret = device_create_file(&pdev->dev, &dev_attr_stat_irq_thresh);
1693 if (err) { 1692 if (ret)
1694 clk_disable_unprepare(engine->clk); 1693 goto err_clk_disable;
1695 clk_put(engine->clk);
1696 return err;
1697 }
1698 1694
1699 1695
1700 /* 1696 /*
@@ -1725,6 +1721,7 @@ static int spacc_probe(struct platform_device *pdev)
1725 1721
1726 platform_set_drvdata(pdev, engine); 1722 platform_set_drvdata(pdev, engine);
1727 1723
1724 ret = -EINVAL;
1728 INIT_LIST_HEAD(&engine->registered_algs); 1725 INIT_LIST_HEAD(&engine->registered_algs);
1729 for (i = 0; i < engine->num_algs; ++i) { 1726 for (i = 0; i < engine->num_algs; ++i) {
1730 engine->algs[i].engine = engine; 1727 engine->algs[i].engine = engine;
@@ -1759,6 +1756,16 @@ static int spacc_probe(struct platform_device *pdev)
1759 engine->aeads[i].alg.base.cra_name); 1756 engine->aeads[i].alg.base.cra_name);
1760 } 1757 }
1761 1758
1759 if (!ret)
1760 return 0;
1761
1762 del_timer_sync(&engine->packet_timeout);
1763 device_remove_file(&pdev->dev, &dev_attr_stat_irq_thresh);
1764err_clk_disable:
1765 clk_disable_unprepare(engine->clk);
1766err_clk_put:
1767 clk_put(engine->clk);
1768
1762 return ret; 1769 return ret;
1763} 1770}
1764 1771